Changeset 22675


Ignore:
Timestamp:
2010-08-16T21:21:57+02:00 (7 years ago)
Author:
nbd
Message:

ar71xx: add a new driver for the ar7240 switch using swconfig.
hooks directly into the ethernet driver, as MAC resets also require switch reinitializations and the switch is part of the cpu core anyway
switch only tl-wr741nd (and other devices using this board file, such as tl-wr841nd) over to using this by default, as other devices are still untested
fixes #7563

Location:
trunk/target/linux/ar71xx
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/base-files/etc/defconfig/tl-wr741nd/network

    r20091 r22675  
    55        option netmask  255.0.0.0 
    66 
    7 config interface eth 
     7config interface lan 
    88        option ifname   eth0 
    9         option proto    none 
    10  
    11 config interface lan 
    12         option ifname   'lan1 lan2 lan3 lan4' 
    139        option type     bridge 
    1410        option proto    static 
     
    1915        option ifname   eth1 
    2016        option proto    dhcp 
     17 
     18config switch eth0 
     19        option enable_vlan      1 
     20 
     21config switch_vlan 
     22        option device   eth0 
     23        option vlan     1 
     24        option ports    "0 1 2 3 4" 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr741nd.c

    r21075 r22675  
    109109                                        tl_wr741nd_gpio_buttons); 
    110110 
    111         ap91_eth_init(mac, NULL); 
     111        ar71xx_eth1_data.has_ar7240_switch = 1; 
     112        ar71xx_set_mac_base(mac); 
     113 
     114        /* WAN port */ 
     115        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; 
     116        ar71xx_eth0_data.speed = SPEED_100; 
     117        ar71xx_eth0_data.duplex = DUPLEX_FULL; 
     118 
     119        /* LAN ports */ 
     120        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; 
     121        ar71xx_eth1_data.speed = SPEED_1000; 
     122        ar71xx_eth1_data.duplex = DUPLEX_FULL; 
     123 
     124        ar71xx_add_device_mdio(0x0); 
     125        ar71xx_add_device_eth(1); 
     126        ar71xx_add_device_eth(0); 
     127 
    112128        ap91_pci_init(ee, mac); 
    113129} 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/platform.h

    r18692 r22675  
    3232        u8              is_ar724x:1; 
    3333        u8              has_ar8216:1; 
     34        u8              has_ar7240_switch:1; 
    3435 
    3536        void            (* ddr_flush)(void); 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/Makefile

    r19031 r22675  
    77ag71xx-y        += ag71xx_phy.o 
    88ag71xx-y        += ag71xx_mdio.o 
     9ag71xx-y        += ag71xx_ar7240.o 
    910 
    1011ag71xx-$(CONFIG_AG71XX_DEBUG_FS)        += ag71xx_debugfs.o 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h

    r20751 r22675  
    5252 
    5353#define AG71XX_TX_FIFO_LEN      2048 
    54 #define AG71XX_TX_MTU_LEN       1536 
     54#define AG71XX_TX_MTU_LEN       1540 
    5555#define AG71XX_RX_PKT_RESERVE   64 
    5656#define AG71XX_RX_PKT_SIZE      \ 
     
    159159        struct mii_bus          *mii_bus; 
    160160        struct phy_device       *phy_dev; 
     161        void                    *phy_priv; 
    161162 
    162163        unsigned int            link; 
     
    498499#endif /* CONFIG_AG71XX_DEBUG_FS */ 
    499500 
     501void ag71xx_ar7240_start(struct ag71xx *ag); 
     502void ag71xx_ar7240_stop(struct ag71xx *ag); 
     503int ag71xx_ar7240_init(struct ag71xx *ag); 
     504void ag71xx_ar7240_cleanup(struct ag71xx *ag); 
     505 
    500506#endif /* _AG71XX_H */ 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c

    r20358 r22675  
    4545void ag71xx_phy_start(struct ag71xx *ag) 
    4646{ 
     47        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
     48 
    4749        if (ag->phy_dev) { 
    4850                phy_start(ag->phy_dev); 
    4951        } else { 
     52                if (pdata->has_ar7240_switch) 
     53                        ag71xx_ar7240_start(ag); 
    5054                ag->link = 1; 
    5155                ag71xx_link_adjust(ag); 
     
    5559void ag71xx_phy_stop(struct ag71xx *ag) 
    5660{ 
     61        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
     62 
    5763        if (ag->phy_dev) { 
    5864                phy_stop(ag->phy_dev); 
    5965        } else { 
     66                if (pdata->has_ar7240_switch) 
     67                        ag71xx_ar7240_stop(ag); 
    6068                ag->link = 0; 
    6169                ag71xx_link_adjust(ag); 
     
    201209        } 
    202210 
     211        if (pdata->has_ar7240_switch) 
     212                return ag71xx_ar7240_init(ag); 
     213 
    203214        if (pdata->phy_mask) 
    204215                return ag71xx_phy_connect_multi(ag); 
     
    209220void ag71xx_phy_disconnect(struct ag71xx *ag) 
    210221{ 
    211         if (ag->phy_dev) 
     222        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
     223 
     224        if (pdata->has_ar7240_switch) 
     225                ag71xx_ar7240_cleanup(ag); 
     226        else if (ag->phy_dev) 
    212227                phy_disconnect(ag->phy_dev); 
    213228} 
Note: See TracChangeset for help on using the changeset viewer.