Ignore:
Timestamp:
2010-01-27T22:01:48+01:00 (7 years ago)
Author:
juhosg
Message:

rtl8366s: reset the chip early, this allows ethernet to work as soon as possible

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c

    r19329 r19355  
    2727 
    2828#define RTL8366S_DRIVER_DESC    "Realtek RTL8366S ethernet switch driver" 
    29 #define RTL8366S_DRIVER_VER     "0.2.0" 
     29#define RTL8366S_DRIVER_VER     "0.2.1" 
    3030 
    3131#define RTL8366S_PHY_NO_MAX                 4 
     
    231231} 
    232232 
     233static int rtl8366s_reset_chip(struct rtl8366s *rtl) 
     234{ 
     235        struct rtl8366_smi *smi = &rtl->smi; 
     236        int timeout = 10; 
     237        u32 data; 
     238 
     239        rtl8366_smi_write_reg(smi, RTL8366_RESET_CTRL_REG, 
     240                              RTL8366_CHIP_CTRL_RESET_HW); 
     241        do { 
     242                msleep(1); 
     243                if (rtl8366_smi_read_reg(smi, RTL8366_RESET_CTRL_REG, &data)) 
     244                        return -EIO; 
     245 
     246                if (!(data & RTL8366_CHIP_CTRL_RESET_HW)) 
     247                        break; 
     248        } while (--timeout); 
     249 
     250        if (!timeout) { 
     251                printk("Timeout waiting for the switch to reset\n"); 
     252                return -EIO; 
     253        } 
     254 
     255        return 0; 
     256} 
     257 
    233258static int rtl8366s_read_phy_reg(struct rtl8366s *rtl, 
    234259                                 u32 phy_no, u32 page, u32 addr, u32 *data) 
     
    13021327{ 
    13031328        struct rtl8366s *rtl = sw_to_rtl8366s(dev); 
    1304         struct rtl8366_smi *smi = &rtl->smi; 
    1305         int timeout = 10; 
    1306         u32 data; 
    1307  
    1308         rtl8366_smi_write_reg(smi, RTL8366_RESET_CTRL_REG, 
    1309                               RTL8366_CHIP_CTRL_RESET_HW); 
    1310         do { 
    1311                 msleep(1); 
    1312                 if (rtl8366_smi_read_reg(smi, RTL8366_RESET_CTRL_REG, &data)) 
    1313                         return -EIO; 
    1314  
    1315                 if (!(data & RTL8366_CHIP_CTRL_RESET_HW)) 
    1316                         break; 
    1317         } while (--timeout); 
    1318  
    1319         if (!timeout) { 
    1320                 printk("Timeout waiting for the switch to reset\n"); 
    1321                 return -EIO; 
    1322         } 
     1329        int err; 
     1330 
     1331        err = rtl8366s_reset_chip(rtl); 
     1332        if (err) 
     1333                return err; 
    13231334 
    13241335        return rtl8366s_reset_vlan(rtl); 
     
    15541565                 chip_id, chip_ver & RTL8366S_CHIP_VERSION_MASK); 
    15551566 
     1567        ret = rtl8366s_reset_chip(rtl); 
     1568        if (ret) 
     1569                return ret; 
     1570 
    15561571        rtl8366s_debugfs_init(rtl); 
    1557  
    15581572        return 0; 
    15591573} 
Note: See TracChangeset for help on using the changeset viewer.