Ignore:
Timestamp:
2010-06-26T21:16:38+02:00 (6 years ago)
Author:
juhosg
Message:

generic: rtl8366: add hw_init to initialize registers after reset

File:
1 edited

Legend:

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

    r21919 r21920  
    3535#define RTL8366_CHIP_CTRL_VLAN              (1 << 13) 
    3636#define RTL8366_CHIP_CTRL_VLAN_4KTB         (1 << 14) 
     37 
     38/* Switch Global Configuration register */ 
     39#define RTL8366_SGCR                    0x0000 
     40#define RTL8366_SGCR_EN_BC_STORM_CTRL   BIT(0) 
     41#define RTL8366_SGCR_MAX_LENGTH(_x)     (_x << 4) 
     42#define RTL8366_SGCR_MAX_LENGTH_MASK    RTL8366_SGCR_MAX_LENGTH(0x3) 
     43#define RTL8366_SGCR_MAX_LENGTH_1522    RTL8366_SGCR_MAX_LENGTH(0x0) 
     44#define RTL8366_SGCR_MAX_LENGTH_1536    RTL8366_SGCR_MAX_LENGTH(0x1) 
     45#define RTL8366_SGCR_MAX_LENGTH_1552    RTL8366_SGCR_MAX_LENGTH(0x2) 
     46#define RTL8366_SGCR_MAX_LENGTH_9216    RTL8366_SGCR_MAX_LENGTH(0x3) 
     47 
     48/* Port Enable Control register */ 
     49#define RTL8366_PECR                    0x0001 
     50 
     51/* Switch Security Control registers */ 
     52#define RTL8366_SSCR0                   0x0002 
     53#define RTL8366_SSCR1                   0x0003 
     54#define RTL8366_SSCR2                   0x0004 
     55#define RTL8366_SSCR2_DROP_UNKNOWN_DA   BIT(0) 
    3756 
    3857#define RTL8366_RESET_CTRL_REG              0x0100 
     
    222241}; 
    223242 
     243#define REG_WR(_smi, _reg, _val)                                        \ 
     244        do {                                                            \ 
     245                err = rtl8366_smi_write_reg(_smi, _reg, _val);          \ 
     246                if (err)                                                \ 
     247                        return err;                                     \ 
     248        } while (0) 
     249 
     250#define REG_RMW(_smi, _reg, _mask, _val)                                \ 
     251        do {                                                            \ 
     252                err = rtl8366_smi_rmwr(_smi, _reg, _mask, _val);        \ 
     253                if (err)                                                \ 
     254                        return err;                                     \ 
     255        } while (0) 
     256 
    224257static inline struct rtl8366rb *smi_to_rtl8366rb(struct rtl8366_smi *smi) 
    225258{ 
     
    258291                return -EIO; 
    259292        } 
     293 
     294        return 0; 
     295} 
     296 
     297static int rtl8366rb_hw_init(struct rtl8366_smi *smi) 
     298{ 
     299        int err; 
     300 
     301        /* set maximum packet length to 1536 bytes */ 
     302        REG_RMW(smi, RTL8366_SGCR, RTL8366_SGCR_MAX_LENGTH_MASK, 
     303                RTL8366_SGCR_MAX_LENGTH_1536); 
     304 
     305        /* enable all ports */ 
     306        REG_WR(smi, RTL8366_PECR, 0); 
     307 
     308        /* disable learning for all ports */ 
     309        REG_WR(smi, RTL8366_SSCR0, RTL8366_PORT_ALL); 
     310 
     311        /* disable auto ageing for all ports */ 
     312        REG_WR(smi, RTL8366_SSCR1, RTL8366_PORT_ALL); 
     313 
     314        /* don't drop packets whose DA has not been learned */ 
     315        REG_RMW(smi, RTL8366_SSCR2, RTL8366_SSCR2_DROP_UNKNOWN_DA, 0); 
    260316 
    261317        return 0; 
     
    13371393 
    13381394        err = rtl8366rb_reset_chip(smi); 
     1395        if (err) 
     1396                return err; 
     1397 
     1398        err = rtl8366rb_hw_init(smi); 
    13391399        if (err) 
    13401400                return err; 
     
    15051565        int ret; 
    15061566 
     1567        rtl8366rb_debugfs_init(rtl); 
     1568 
    15071569        ret = rtl8366rb_reset_chip(smi); 
    15081570        if (ret) 
    15091571                return ret; 
    15101572 
    1511         rtl8366rb_debugfs_init(rtl); 
    1512         return 0; 
     1573        ret = rtl8366rb_hw_init(smi); 
     1574        return ret; 
    15131575} 
    15141576 
Note: See TracChangeset for help on using the changeset viewer.