Changeset 26672 for branches/backfire


Ignore:
Timestamp:
2011-04-15T02:05:44+02:00 (5 years ago)
Author:
nbd
Message:

ar71xx: sync ethernet driver changes with trunk to fix MDIO issues on ar7240

Location:
branches/backfire/target/linux/ar71xx/files
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/ar71xx/files/arch/mips/ar71xx/mach-dir-600-a1.c

    r23440 r26672  
    137137        ar71xx_eth0_data.speed = SPEED_100; 
    138138        ar71xx_eth0_data.duplex = DUPLEX_FULL; 
     139        ar71xx_eth0_data.phy_mask = BIT(4); 
    139140 
    140141        /* LAN ports */ 
  • branches/backfire/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb750.c

    r23440 r26672  
    122122        ar71xx_eth0_data.speed = SPEED_100; 
    123123        ar71xx_eth0_data.duplex = DUPLEX_FULL; 
     124        ar71xx_eth0_data.phy_mask = BIT(4); 
    124125 
    125126        /* LAN ports */ 
  • branches/backfire/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr741nd.c

    r24965 r26672  
    115115        ar71xx_eth0_data.speed = SPEED_100; 
    116116        ar71xx_eth0_data.duplex = DUPLEX_FULL; 
     117        ar71xx_eth0_data.phy_mask = BIT(4); 
    117118 
    118119        /* LAN ports */ 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h

    r22678 r26672  
    9090struct ag71xx_buf { 
    9191        struct sk_buff          *skb; 
    92         struct ag71xx_desc      *desc; 
     92        struct ag71xx_desc      *desc; 
    9393        dma_addr_t              dma_addr; 
    9494        u32                     pad; 
     
    163163        unsigned int            link; 
    164164        unsigned int            speed; 
    165         int                     duplex; 
     165        int                     duplex; 
    166166 
    167167        struct work_struct      restart_work; 
     
    191191static inline int ag71xx_desc_empty(struct ag71xx_desc *desc) 
    192192{ 
    193         return ((desc->ctrl & DESC_EMPTY) != 0); 
     193        return (desc->ctrl & DESC_EMPTY) != 0; 
    194194} 
    195195 
    196196static inline int ag71xx_desc_pktlen(struct ag71xx_desc *desc) 
    197197{ 
    198         return (desc->ctrl & DESC_PKTLEN_M); 
     198        return desc->ctrl & DESC_PKTLEN_M; 
    199199} 
    200200 
     
    433433} 
    434434 
    435 static void inline ag71xx_mii_ctrl_set_if(struct ag71xx *ag, 
     435static inline void ag71xx_mii_ctrl_set_if(struct ag71xx *ag, 
    436436                                          unsigned int mii_if) 
    437437{ 
     
    444444} 
    445445 
    446 static void inline ag71xx_mii_ctrl_set_speed(struct ag71xx *ag, 
     446static inline void ag71xx_mii_ctrl_set_speed(struct ag71xx *ag, 
    447447                                             unsigned int speed) 
    448448{ 
     
    504504void ag71xx_ar7240_cleanup(struct ag71xx *ag); 
    505505 
     506int ag71xx_mdio_mii_read(struct ag71xx_mdio *am, int addr, int reg); 
     507void ag71xx_mdio_mii_write(struct ag71xx_mdio *am, int addr, int reg, u16 val); 
     508 
     509u16 ar7240sw_phy_read(struct mii_bus *mii, unsigned phy_addr, 
     510                      unsigned reg_addr); 
     511int ar7240sw_phy_write(struct mii_bus *mii, unsigned phy_addr, 
     512                       unsigned reg_addr, u16 reg_val); 
     513 
    506514#endif /* _AG71XX_H */ 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c

    r22678 r26672  
    196196struct ar7240sw { 
    197197        struct mii_bus  *mii_bus; 
    198         struct mutex    reg_mutex; 
    199198        struct switch_dev swdev; 
    200199        bool vlan; 
     
    211210}; 
    212211 
     212static DEFINE_MUTEX(reg_mutex); 
    213213 
    214214static inline void ar7240sw_init(struct ar7240sw *as, struct mii_bus *mii) 
    215215{ 
    216216        as->mii_bus = mii; 
    217         mutex_init(&as->reg_mutex); 
    218217} 
    219218 
    220219static inline u16 mk_phy_addr(u32 reg) 
    221220{ 
    222         return (0x17 & ((reg >> 4) | 0x10)); 
     221        return 0x17 & ((reg >> 4) | 0x10); 
    223222} 
    224223 
    225224static inline u16 mk_phy_reg(u32 reg) 
    226225{ 
    227         return ((reg << 1) & 0x1e); 
     226        return (reg << 1) & 0x1e; 
    228227} 
    229228 
    230229static inline u16 mk_high_addr(u32 reg) 
    231230{ 
    232         return ((reg >> 7) & 0x1ff); 
    233 } 
    234  
    235 static u32 __ar7240sw_reg_read(struct ar7240sw *as, u32 reg) 
    236 { 
    237         struct mii_bus *mii = as->mii_bus; 
     231        return (reg >> 7) & 0x1ff; 
     232} 
     233 
     234static u32 __ar7240sw_reg_read(struct mii_bus *mii, u32 reg) 
     235{ 
    238236        u16 phy_addr; 
    239237        u16 phy_reg; 
     
    242240        reg = (reg & 0xfffffffc) >> 2; 
    243241 
    244         mdiobus_write(mii, 0x1f, 0x10, mk_high_addr(reg)); 
     242        ag71xx_mdio_mii_write(mii->priv, 0x1f, 0x10, mk_high_addr(reg)); 
    245243 
    246244        phy_addr = mk_phy_addr(reg); 
    247245        phy_reg = mk_phy_reg(reg); 
    248246 
    249         lo = (u32) mdiobus_read(mii, phy_addr, phy_reg); 
    250         hi = (u32) mdiobus_read(mii, phy_addr, phy_reg + 1); 
    251  
    252         return ((hi << 16) | lo); 
    253 } 
    254  
    255 static void __ar7240sw_reg_write(struct ar7240sw *as, u32 reg, u32 val) 
    256 { 
    257         struct mii_bus *mii = as->mii_bus; 
     247        lo = (u32) ag71xx_mdio_mii_read(mii->priv, phy_addr, phy_reg); 
     248        hi = (u32) ag71xx_mdio_mii_read(mii->priv, phy_addr, phy_reg + 1); 
     249 
     250        return (hi << 16) | lo; 
     251} 
     252 
     253static void __ar7240sw_reg_write(struct mii_bus *mii, u32 reg, u32 val) 
     254{ 
    258255        u16 phy_addr; 
    259256        u16 phy_reg; 
     
    261258        reg = (reg & 0xfffffffc) >> 2; 
    262259 
    263         mdiobus_write(mii, 0x1f, 0x10, mk_high_addr(reg)); 
     260        ag71xx_mdio_mii_write(mii->priv, 0x1f, 0x10, mk_high_addr(reg)); 
    264261 
    265262        phy_addr = mk_phy_addr(reg); 
    266263        phy_reg = mk_phy_reg(reg); 
    267264 
    268         mdiobus_write(mii, phy_addr, phy_reg + 1, (val >> 16)); 
    269         mdiobus_write(mii, phy_addr, phy_reg, (val & 0xffff)); 
    270 } 
    271  
    272 static u32 ar7240sw_reg_read(struct ar7240sw *as, u32 reg_addr) 
     265        ag71xx_mdio_mii_write(mii->priv, phy_addr, phy_reg + 1, (val >> 16)); 
     266        ag71xx_mdio_mii_write(mii->priv, phy_addr, phy_reg, (val & 0xffff)); 
     267} 
     268 
     269static u32 ar7240sw_reg_read(struct mii_bus *mii, u32 reg_addr) 
    273270{ 
    274271        u32 ret; 
    275272 
    276         mutex_lock(&as->reg_mutex); 
    277         ret = __ar7240sw_reg_read(as, reg_addr); 
    278         mutex_unlock(&as->reg_mutex); 
     273        mutex_lock(&reg_mutex); 
     274        ret = __ar7240sw_reg_read(mii, reg_addr); 
     275        mutex_unlock(&reg_mutex); 
    279276 
    280277        return ret; 
    281278} 
    282279 
    283 static void ar7240sw_reg_write(struct ar7240sw *as, u32 reg_addr, u32 reg_val) 
    284 { 
    285         mutex_lock(&as->reg_mutex); 
    286         __ar7240sw_reg_write(as, reg_addr, reg_val); 
    287         mutex_unlock(&as->reg_mutex); 
    288 } 
    289  
    290 static u32 ar7240sw_reg_rmw(struct ar7240sw *as, u32 reg, u32 mask, u32 val) 
     280static void ar7240sw_reg_write(struct mii_bus *mii, u32 reg_addr, u32 reg_val) 
     281{ 
     282        mutex_lock(&reg_mutex); 
     283        __ar7240sw_reg_write(mii, reg_addr, reg_val); 
     284        mutex_unlock(&reg_mutex); 
     285} 
     286 
     287static u32 ar7240sw_reg_rmw(struct mii_bus *mii, u32 reg, u32 mask, u32 val) 
    291288{ 
    292289        u32 t; 
    293290 
    294         mutex_lock(&as->reg_mutex); 
    295         t = __ar7240sw_reg_read(as, reg); 
     291        mutex_lock(&reg_mutex); 
     292        t = __ar7240sw_reg_read(mii, reg); 
    296293        t &= ~mask; 
    297294        t |= val; 
    298         __ar7240sw_reg_write(as, reg, t); 
    299         mutex_unlock(&as->reg_mutex); 
     295        __ar7240sw_reg_write(mii, reg, t); 
     296        mutex_unlock(&reg_mutex); 
    300297 
    301298        return t; 
    302299} 
    303300 
    304 static void ar7240sw_reg_set(struct ar7240sw *as, u32 reg, u32 val) 
     301static void ar7240sw_reg_set(struct mii_bus *mii, u32 reg, u32 val) 
    305302{ 
    306303        u32 t; 
    307304 
    308         mutex_lock(&as->reg_mutex); 
    309         t = __ar7240sw_reg_read(as, reg); 
     305        mutex_lock(&reg_mutex); 
     306        t = __ar7240sw_reg_read(mii, reg); 
    310307        t |= val; 
    311         __ar7240sw_reg_write(as, reg, t); 
    312         mutex_unlock(&as->reg_mutex); 
    313 } 
    314  
    315 static int ar7240sw_reg_wait(struct ar7240sw *as, u32 reg, u32 mask, u32 val, 
    316                              unsigned timeout) 
     308        __ar7240sw_reg_write(mii, reg, t); 
     309        mutex_unlock(&reg_mutex); 
     310} 
     311 
     312static int __ar7240sw_reg_wait(struct mii_bus *mii, u32 reg, u32 mask, u32 val, 
     313                               unsigned timeout) 
    317314{ 
    318315        int i; 
     
    321318                u32 t; 
    322319 
    323                 t = ar7240sw_reg_read(as, reg); 
     320                t = __ar7240sw_reg_read(mii, reg); 
    324321                if ((t & mask) == val) 
    325322                        return 0; 
     
    331328} 
    332329 
    333 static u16 ar7240sw_phy_read(struct ar7240sw *as, unsigned phy_addr, 
    334                              unsigned reg_addr) 
    335 { 
    336         u32 t; 
     330static int ar7240sw_reg_wait(struct mii_bus *mii, u32 reg, u32 mask, u32 val, 
     331                             unsigned timeout) 
     332{ 
     333        int ret; 
     334 
     335        mutex_lock(&reg_mutex); 
     336        ret = __ar7240sw_reg_wait(mii, reg, mask, val, timeout); 
     337        mutex_unlock(&reg_mutex); 
     338        return ret; 
     339} 
     340 
     341u16 ar7240sw_phy_read(struct mii_bus *mii, unsigned phy_addr, 
     342                      unsigned reg_addr) 
     343{ 
     344        u32 t, val = 0xffff; 
    337345        int err; 
    338346 
     
    340348                return 0xffff; 
    341349 
     350        mutex_lock(&reg_mutex); 
    342351        t = (reg_addr << AR7240_MDIO_CTRL_REG_ADDR_S) | 
    343352            (phy_addr << AR7240_MDIO_CTRL_PHY_ADDR_S) | 
     
    346355            AR7240_MDIO_CTRL_CMD_READ; 
    347356 
    348         ar7240sw_reg_write(as, AR7240_REG_MDIO_CTRL, t); 
    349         err = ar7240sw_reg_wait(as, AR7240_REG_MDIO_CTRL, 
    350                                 AR7240_MDIO_CTRL_BUSY, 0, 5); 
    351         if (err) 
    352                 return 0xffff; 
    353  
    354         t = ar7240sw_reg_read(as, AR7240_REG_MDIO_CTRL); 
    355         return (t & AR7240_MDIO_CTRL_DATA_M); 
    356 } 
    357  
    358 static int ar7240sw_phy_write(struct ar7240sw *as, unsigned phy_addr, 
    359                               unsigned reg_addr, u16 reg_val) 
     357        __ar7240sw_reg_write(mii, AR7240_REG_MDIO_CTRL, t); 
     358        err = __ar7240sw_reg_wait(mii, AR7240_REG_MDIO_CTRL, 
     359                                  AR7240_MDIO_CTRL_BUSY, 0, 5); 
     360        if (!err) 
     361                val = __ar7240sw_reg_read(mii, AR7240_REG_MDIO_CTRL); 
     362        mutex_unlock(&reg_mutex); 
     363 
     364        return val & AR7240_MDIO_CTRL_DATA_M; 
     365} 
     366 
     367int ar7240sw_phy_write(struct mii_bus *mii, unsigned phy_addr, 
     368                       unsigned reg_addr, u16 reg_val) 
    360369{ 
    361370        u32 t; 
     
    365374                return -EINVAL; 
    366375 
     376        mutex_lock(&reg_mutex); 
    367377        t = (phy_addr << AR7240_MDIO_CTRL_PHY_ADDR_S) | 
    368378            (reg_addr << AR7240_MDIO_CTRL_REG_ADDR_S) | 
     
    372382            reg_val; 
    373383 
    374         ar7240sw_reg_write(as, AR7240_REG_MDIO_CTRL, t); 
    375         ret = ar7240sw_reg_wait(as, AR7240_REG_MDIO_CTRL, 
    376                                 AR7240_MDIO_CTRL_BUSY, 0, 5); 
     384        __ar7240sw_reg_write(mii, AR7240_REG_MDIO_CTRL, t); 
     385        ret = __ar7240sw_reg_wait(mii, AR7240_REG_MDIO_CTRL, 
     386                                  AR7240_MDIO_CTRL_BUSY, 0, 5); 
     387        mutex_unlock(&reg_mutex); 
     388 
    377389        return ret; 
    378390} 
     
    380392static int ar7240sw_capture_stats(struct ar7240sw *as) 
    381393{ 
     394        struct mii_bus *mii = as->mii_bus; 
    382395        int ret; 
    383396 
    384397        /* Capture the hardware statistics for all ports */ 
    385         ar7240sw_reg_write(as, AR7240_REG_MIB_FUNCTION0, 
     398        ar7240sw_reg_write(mii, AR7240_REG_MIB_FUNCTION0, 
    386399                           (AR7240_MIB_FUNC_CAPTURE << AR7240_MIB_FUNC_S)); 
    387400 
    388401        /* Wait for the capturing to complete. */ 
    389         ret = ar7240sw_reg_wait(as, AR7240_REG_MIB_FUNCTION0, 
     402        ret = ar7240sw_reg_wait(mii, AR7240_REG_MIB_FUNCTION0, 
    390403                                AR7240_MIB_BUSY, 0, 10); 
    391404        return ret; 
     
    394407static void ar7240sw_disable_port(struct ar7240sw *as, unsigned port) 
    395408{ 
    396         ar7240sw_reg_write(as, AR7240_REG_PORT_CTRL(port), 
     409        ar7240sw_reg_write(as->mii_bus, AR7240_REG_PORT_CTRL(port), 
    397410                           AR7240_PORT_CTRL_STATE_DISABLED); 
    398411} 
     
    400413static int ar7240sw_reset(struct ar7240sw *as) 
    401414{ 
     415        struct mii_bus *mii = as->mii_bus; 
    402416        int ret; 
    403417        int i; 
     
    411425 
    412426        /* Reset the switch. */ 
    413         ar7240sw_reg_write(as, AR7240_REG_MASK_CTRL, 
     427        ar7240sw_reg_write(mii, AR7240_REG_MASK_CTRL, 
    414428                           AR7240_MASK_CTRL_SOFT_RESET); 
    415429 
    416         ret = ar7240sw_reg_wait(as, AR7240_REG_MASK_CTRL, 
    417                                 AR7240_MASK_CTRL_SOFT_RESET, 0, 1000); 
     430        ret = ar7240sw_reg_wait(mii, AR7240_REG_MASK_CTRL, 
     431                                AR7240_MASK_CTRL_SOFT_RESET, 0, 1000); 
    418432        return ret; 
    419433} 
     
    421435static void ar7240sw_setup(struct ar7240sw *as) 
    422436{ 
     437        struct mii_bus *mii = as->mii_bus; 
     438 
    423439        /* Enable CPU port, and disable mirror port */ 
    424         ar7240sw_reg_write(as, AR7240_REG_CPU_PORT, 
     440        ar7240sw_reg_write(mii, AR7240_REG_CPU_PORT, 
    425441                           AR7240_CPU_PORT_EN | 
    426442                           (15 << AR7240_MIRROR_PORT_S)); 
    427443 
    428444        /* Setup TAG priority mapping */ 
    429         ar7240sw_reg_write(as, AR7240_REG_TAG_PRIORITY, 0xfa50); 
     445        ar7240sw_reg_write(mii, AR7240_REG_TAG_PRIORITY, 0xfa50); 
    430446 
    431447        /* Enable ARP frame acknowledge */ 
    432         ar7240sw_reg_set(as, AR7240_REG_AT_CTRL, AR7240_AT_CTRL_ARP_EN); 
     448        ar7240sw_reg_set(mii, AR7240_REG_AT_CTRL, AR7240_AT_CTRL_ARP_EN); 
    433449 
    434450        /* Enable Broadcast frames transmitted to the CPU */ 
    435         ar7240sw_reg_set(as, AR7240_REG_FLOOD_MASK, 
     451        ar7240sw_reg_set(mii, AR7240_REG_FLOOD_MASK, 
    436452                         AR7240_FLOOD_MASK_BROAD_TO_CPU); 
    437453 
    438454        /* setup MTU */ 
    439         ar7240sw_reg_rmw(as, AR7240_REG_GLOBAL_CTRL, AR7240_GLOBAL_CTRL_MTU_M, 
     455        ar7240sw_reg_rmw(mii, AR7240_REG_GLOBAL_CTRL, AR7240_GLOBAL_CTRL_MTU_M, 
    440456                         1536); 
    441457 
    442458        /* setup Service TAG */ 
    443         ar7240sw_reg_rmw(as, AR7240_REG_SERVICE_TAG, AR7240_SERVICE_TAG_M, 0); 
     459        ar7240sw_reg_rmw(mii, AR7240_REG_SERVICE_TAG, AR7240_SERVICE_TAG_M, 0); 
    444460} 
    445461 
    446462static void ar7240sw_setup_port(struct ar7240sw *as, unsigned port, u8 portmask) 
    447463{ 
     464        struct mii_bus *mii = as->mii_bus; 
    448465        u32 ctrl; 
    449466        u32 dest_ports; 
     
    454471 
    455472        if (port == AR7240_PORT_CPU) { 
    456                 ar7240sw_reg_write(as, AR7240_REG_PORT_STATUS(port), 
     473                ar7240sw_reg_write(mii, AR7240_REG_PORT_STATUS(port), 
    457474                                   AR7240_PORT_STATUS_SPEED_1000 | 
    458475                                   AR7240_PORT_STATUS_TXFLOW | 
     
    462479                                   AR7240_PORT_STATUS_DUPLEX); 
    463480        } else { 
    464                 ar7240sw_reg_write(as, AR7240_REG_PORT_STATUS(port), 
     481                ar7240sw_reg_write(mii, AR7240_REG_PORT_STATUS(port), 
    465482                                   AR7240_PORT_STATUS_LINK_AUTO); 
    466483        } 
     
    500517        vlan |= (portmask << AR7240_PORT_VLAN_DEST_PORTS_S); 
    501518 
    502         ar7240sw_reg_write(as, AR7240_REG_PORT_CTRL(port), ctrl); 
    503         ar7240sw_reg_write(as, AR7240_REG_PORT_VLAN(port), vlan); 
     519        ar7240sw_reg_write(mii, AR7240_REG_PORT_CTRL(port), ctrl); 
     520        ar7240sw_reg_write(mii, AR7240_REG_PORT_VLAN(port), vlan); 
    504521} 
    505522 
    506523static int ar7240_set_addr(struct ar7240sw *as, u8 *addr) 
    507524{ 
     525        struct mii_bus *mii = as->mii_bus; 
    508526        u32 t; 
    509527 
    510528        t = (addr[4] << 8) | addr[5]; 
    511         ar7240sw_reg_write(as, AR7240_REG_MAC_ADDR0, t); 
     529        ar7240sw_reg_write(mii, AR7240_REG_MAC_ADDR0, t); 
    512530 
    513531        t = (addr[0] << 24) | (addr[1] << 16) | (addr[2] << 8) | addr[3]; 
    514         ar7240sw_reg_write(as, AR7240_REG_MAC_ADDR1, t); 
     532        ar7240sw_reg_write(mii, AR7240_REG_MAC_ADDR1, t); 
    515533 
    516534        return 0; 
     
    519537static int 
    520538ar7240_set_vid(struct switch_dev *dev, const struct switch_attr *attr, 
    521                 struct switch_val *val) 
     539                struct switch_val *val) 
    522540{ 
    523541        struct ar7240sw *as = sw_to_ar7240(dev); 
     
    528546static int 
    529547ar7240_get_vid(struct switch_dev *dev, const struct switch_attr *attr, 
    530                 struct switch_val *val) 
     548                struct switch_val *val) 
    531549{ 
    532550        struct ar7240sw *as = sw_to_ar7240(dev); 
     
    614632static int 
    615633ar7240_set_vlan(struct switch_dev *dev, const struct switch_attr *attr, 
    616                 struct switch_val *val) 
     634                struct switch_val *val) 
    617635{ 
    618636        struct ar7240sw *as = sw_to_ar7240(dev); 
     
    623641static int 
    624642ar7240_get_vlan(struct switch_dev *dev, const struct switch_attr *attr, 
    625                 struct switch_val *val) 
     643                struct switch_val *val) 
    626644{ 
    627645        struct ar7240sw *as = sw_to_ar7240(dev); 
     
    634652ar7240_vtu_op(struct ar7240sw *as, u32 op, u32 val) 
    635653{ 
    636         if (ar7240sw_reg_wait(as, AR7240_REG_VTU, AR7240_VTU_ACTIVE, 0, 5)) 
     654        struct mii_bus *mii = as->mii_bus; 
     655 
     656        if (ar7240sw_reg_wait(mii, AR7240_REG_VTU, AR7240_VTU_ACTIVE, 0, 5)) 
    637657                return; 
    638658 
     
    640660                val &= AR7240_VTUDATA_MEMBER; 
    641661                val |= AR7240_VTUDATA_VALID; 
    642                 ar7240sw_reg_write(as, AR7240_REG_VTU_DATA, val); 
     662                ar7240sw_reg_write(mii, AR7240_REG_VTU_DATA, val); 
    643663        } 
    644664        op |= AR7240_VTU_ACTIVE; 
    645         ar7240sw_reg_write(as, AR7240_REG_VTU, op); 
     665        ar7240sw_reg_write(mii, AR7240_REG_VTU, op); 
    646666} 
    647667 
     
    767787        ar7240sw_init(as, mii); 
    768788 
    769         ctrl = ar7240sw_reg_read(as, AR7240_REG_MASK_CTRL); 
     789        ctrl = ar7240sw_reg_read(mii, AR7240_REG_MASK_CTRL); 
    770790 
    771791        ver = (ctrl >> AR7240_MASK_CTRL_VERSION_S) & AR7240_MASK_CTRL_VERSION_M; 
    772792        if (ver != 1) { 
    773                 pr_err("%s: unsupported chip, ctrl=%08x\n", ag->dev->name, ctrl); 
     793                pr_err("%s: unsupported chip, ctrl=%08x\n", 
     794                        ag->dev->name, ctrl); 
    774795                return NULL; 
    775796        } 
    776797 
    777         phy_id1 = ar7240sw_phy_read(as, 0, MII_PHYSID1); 
    778         phy_id2 = ar7240sw_phy_read(as, 0, MII_PHYSID2); 
     798        phy_id1 = ar7240sw_phy_read(mii, 0, MII_PHYSID1); 
     799        phy_id2 = ar7240sw_phy_read(mii, 0, MII_PHYSID2); 
    779800        if (phy_id1 != AR7240_PHY_ID1 || phy_id2 != AR7240_PHY_ID2) { 
    780801                pr_err("%s: unknown phy id '%04x:%04x'\n", 
     
    791812 
    792813        if (register_switch(&as->swdev, ag->dev) < 0) { 
    793             kfree(as); 
    794             return NULL; 
    795         } 
    796  
    797         printk("%s: Found an AR7240 built-in switch\n", ag->dev->name); 
     814                kfree(as); 
     815                return NULL; 
     816        } 
     817 
     818        pr_info("%s: Found an AR7240 built-in switch\n", ag->dev->name); 
    798819 
    799820        /* initialize defaults */ 
     
    825846} 
    826847 
    827 int __init ag71xx_ar7240_init(struct ag71xx *ag) 
     848int __devinit ag71xx_ar7240_init(struct ag71xx *ag) 
    828849{ 
    829850        struct ar7240sw *as; 
     
    839860} 
    840861 
    841 void __exit ag71xx_ar7240_cleanup(struct ag71xx *ag) 
     862void __devexit ag71xx_ar7240_cleanup(struct ag71xx *ag) 
    842863{ 
    843864        struct ar7240sw *as = ag->phy_priv; 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_debugfs.c

    r19079 r26672  
    4545                                   size_t count, loff_t *ppos) 
    4646{ 
    47 #define PR_INT_STAT(_label, _field)                                     \ 
    48         len += snprintf(buf + len, sizeof(buf) - len,                   \ 
     47#define PR_INT_STAT(_label, _field)                                     \ 
     48        len += snprintf(buf + len, sizeof(buf) - len,                   \ 
    4949                "%20s: %10lu\n", _label, ag->debug.int_stats._field); 
    5050 
     
    174174        return 0; 
    175175 
    176  err: 
     176err: 
    177177        ag71xx_debugfs_exit(ag); 
    178178        return -ENOMEM; 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c

    r22676 r26672  
    1515 
    1616#define AG71XX_DEFAULT_MSG_ENABLE       \ 
    17         ( NETIF_MSG_DRV                 \ 
     17        (NETIF_MSG_DRV                  \ 
    1818        | NETIF_MSG_PROBE               \ 
    1919        | NETIF_MSG_LINK                \ 
     
    2222        | NETIF_MSG_IFUP                \ 
    2323        | NETIF_MSG_RX_ERR              \ 
    24         | NETIF_MSG_TX_ERR ) 
     24        | NETIF_MSG_TX_ERR) 
    2525 
    2626static int ag71xx_msg_level = -1; 
     
    120120 
    121121        for (i = 0; i < size; i++) { 
    122                 ring->buf[i].desc = (struct ag71xx_desc *)&ring->descs_cpu[i * ring->desc_size]; 
     122                int idx = i * ring->desc_size; 
     123                ring->buf[i].desc = (struct ag71xx_desc *)&ring->descs_cpu[idx]; 
    123124                DBG("ag71xx: ring %p, desc %d at %p\n", 
    124125                        ring, i, ring->buf[i].desc); 
     
    127128        return 0; 
    128129 
    129  err: 
     130err: 
    130131        return err; 
    131132} 
     
    574575{ 
    575576        struct ag71xx *ag = netdev_priv(dev); 
    576         struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
    577577        int ret; 
    578578 
     
    581581                goto err; 
    582582 
    583         if (pdata->is_ar724x) 
    584                 ag71xx_hw_init(ag); 
    585  
    586583        napi_enable(&ag->napi); 
    587584 
     
    600597        return 0; 
    601598 
    602  err: 
     599err: 
    603600        ag71xx_rings_cleanup(ag); 
    604601        return ret; 
     
    677674        return NETDEV_TX_OK; 
    678675 
    679  err_drop: 
     676err_drop: 
    680677        dev->stats.tx_dropped++; 
    681678 
     
    686683static int ag71xx_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 
    687684{ 
    688         struct mii_ioctl_data *data = (struct mii_ioctl_data *) &ifr->ifr_data; 
    689685        struct ag71xx *ag = netdev_priv(dev); 
    690686        int ret; 
     
    718714                        break; 
    719715 
    720                 return phy_mii_ioctl(ag->phy_dev, data, cmd); 
     716                return phy_mii_ioctl(ag->phy_dev, ifr, cmd); 
    721717 
    722718        default: 
     
    748744{ 
    749745        struct ag71xx *ag = container_of(work, struct ag71xx, restart_work); 
     746        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
    750747 
    751748        ag71xx_stop(ag->dev); 
     749 
     750        if (pdata->is_ar724x) 
     751                ag71xx_hw_init(ag); 
     752 
    752753        ag71xx_open(ag->dev); 
    753754} 
     
    910911        } 
    911912 
    912  more: 
     913more: 
    913914        DBG("%s: stay in polling mode, rx=%d, tx=%d, limit=%d\n", 
    914915                        dev->name, rx_done, tx_done, limit); 
    915916        return rx_done; 
    916917 
    917  oom: 
     918oom: 
    918919        if (netif_msg_rx_err(ag)) 
    919920                printk(KERN_DEBUG "%s: out of memory\n", dev->name); 
     
    992993}; 
    993994 
    994 static int __init ag71xx_probe(struct platform_device *pdev) 
     995static int __devinit ag71xx_probe(struct platform_device *pdev) 
    995996{ 
    996997        struct net_device *dev; 
     
    10591060        dev->irq = platform_get_irq(pdev, 0); 
    10601061        err = request_irq(dev->irq, ag71xx_interrupt, 
    1061                           IRQF_DISABLED | IRQF_SAMPLE_RANDOM, 
     1062                          IRQF_DISABLED, 
    10621063                          dev->name, dev); 
    10631064        if (err) { 
     
    11071108        return 0; 
    11081109 
    1109  err_phy_disconnect: 
     1110err_phy_disconnect: 
    11101111        ag71xx_phy_disconnect(ag); 
    1111  err_unregister_netdev: 
     1112err_unregister_netdev: 
    11121113        unregister_netdev(dev); 
    1113  err_free_irq: 
     1114err_free_irq: 
    11141115        free_irq(dev->irq, dev); 
    1115  err_unmap_mii_ctrl: 
     1116err_unmap_mii_ctrl: 
    11161117        iounmap(ag->mii_ctrl); 
    1117  err_unmap_base: 
     1118err_unmap_base: 
    11181119        iounmap(ag->mac_base); 
    1119  err_free_dev: 
     1120err_free_dev: 
    11201121        kfree(dev); 
    1121  err_out: 
     1122err_out: 
    11221123        platform_set_drvdata(pdev, NULL); 
    11231124        return err; 
    11241125} 
    11251126 
    1126 static int __exit ag71xx_remove(struct platform_device *pdev) 
     1127static int __devexit ag71xx_remove(struct platform_device *pdev) 
    11271128{ 
    11281129        struct net_device *dev = platform_get_drvdata(pdev); 
     
    11701171        return 0; 
    11711172 
    1172  err_mdio_exit: 
     1173err_mdio_exit: 
    11731174        ag71xx_mdio_driver_exit(); 
    1174  err_debugfs_exit: 
     1175err_debugfs_exit: 
    11751176        ag71xx_debugfs_root_exit(); 
    1176  err_out: 
     1177err_out: 
    11771178        return ret; 
    11781179} 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c

    r19031 r26672  
    4848} 
    4949 
    50 static int ag71xx_mdio_mii_read(struct ag71xx_mdio *am, int addr, int reg) 
     50int ag71xx_mdio_mii_read(struct ag71xx_mdio *am, int addr, int reg) 
    5151{ 
    5252        int ret; 
     
    7474        DBG("mii_read: addr=%04x, reg=%04x, value=%04x\n", addr, reg, ret); 
    7575 
    76  out: 
     76out: 
    7777        return ret; 
    7878} 
    7979 
    80 static void ag71xx_mdio_mii_write(struct ag71xx_mdio *am, 
    81                                   int addr, int reg, u16 val) 
     80void ag71xx_mdio_mii_write(struct ag71xx_mdio *am, int addr, int reg, u16 val) 
    8281{ 
    8382        int i; 
     
    123122        struct ag71xx_mdio *am = bus->priv; 
    124123 
    125         return ag71xx_mdio_mii_read(am, addr, reg); 
     124        if (am->pdata->is_ar7240) 
     125                return ar7240sw_phy_read(bus, addr, reg); 
     126        else 
     127                return ag71xx_mdio_mii_read(am, addr, reg); 
    126128} 
    127129 
     
    130132        struct ag71xx_mdio *am = bus->priv; 
    131133 
    132         ag71xx_mdio_mii_write(am, addr, reg, val); 
    133         return 0; 
    134 } 
    135  
    136 static int __init ag71xx_mdio_probe(struct platform_device *pdev) 
     134        if (am->pdata->is_ar7240) 
     135                ar7240sw_phy_write(bus, addr, reg, val); 
     136        else 
     137                ag71xx_mdio_mii_write(am, addr, reg, val); 
     138        return 0; 
     139} 
     140 
     141static int __devinit ag71xx_mdio_probe(struct platform_device *pdev) 
    137142{ 
    138143        struct ag71xx_mdio_platform_data *pdata; 
     
    200205        return 0; 
    201206 
    202  err_free_bus: 
     207err_free_bus: 
    203208        mdiobus_free(am->mii_bus); 
    204  err_iounmap: 
     209err_iounmap: 
    205210        iounmap(am->mdio_base); 
    206  err_free_mdio: 
     211err_free_mdio: 
    207212        kfree(am); 
    208  err_out: 
     213err_out: 
    209214        return err; 
    210215} 
    211216 
    212 static int __exit ag71xx_mdio_remove(struct platform_device *pdev) 
     217static int __devexit ag71xx_mdio_remove(struct platform_device *pdev) 
    213218{ 
    214219        struct ag71xx_mdio *am = platform_get_drvdata(pdev); 
     
    233238}; 
    234239 
    235 int ag71xx_mdio_driver_init(void) 
     240int __init ag71xx_mdio_driver_init(void) 
    236241{ 
    237242        return platform_driver_register(&ag71xx_mdio_driver); 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c

    r22678 r26672  
    191191} 
    192192 
    193 int ag71xx_phy_connect(struct ag71xx *ag) 
     193int __devinit ag71xx_phy_connect(struct ag71xx *ag) 
    194194{ 
    195195        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
     
    218218} 
    219219 
    220 void ag71xx_phy_disconnect(struct ag71xx *ag) 
     220void __devexit ag71xx_phy_disconnect(struct ag71xx *ag) 
    221221{ 
    222222        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
Note: See TracChangeset for help on using the changeset viewer.