diff options
Diffstat (limited to 'target/linux/ar71xx')
5 files changed, 61 insertions, 27 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c index 42b5e0267..55fc61c92 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c @@ -50,8 +50,15 @@ static void __init ar71xx_generic_init(void) ARRAY_SIZE(ar71xx_generic_spi_info)); ar71xx_add_device_mdio(0xffe0ffff); - ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x000f0000); - ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00100000); + + ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ar71xx_eth0_data.phy_mask = 0x000f0000; + + ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; + ar71xx_eth1_data.phy_mask = 0x00100000; + + ar71xx_add_device_eth(0); + ar71xx_add_device_eth(1); ar71xx_add_device_usb(); diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c index dce20584d..8e63acac4 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c @@ -155,7 +155,11 @@ static void __init rb411_setup(void) rb4xx_add_device_spi(); ar71xx_add_device_mdio(0xfffffffe); - ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000001); + + ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ar71xx_eth0_data.phy_mask = 0x00000001; + + ar71xx_add_device_eth(0); ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio), rb4xx_leds_gpio); @@ -176,8 +180,15 @@ static void __init rb433_setup(void) rb433_add_device_spi(); ar71xx_add_device_mdio(0xffffffec); - ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00000010); - ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000003); + + ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ar71xx_eth0_data.phy_mask = 0x00000003; + + ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; + ar71xx_eth1_data.phy_mask = 0x00000010; + + ar71xx_add_device_eth(1); + ar71xx_add_device_eth(0); ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio), rb4xx_leds_gpio); @@ -198,8 +209,15 @@ static void __init rb450_setup(void) rb4xx_add_device_spi(); ar71xx_add_device_mdio(0xffffffe0); - ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00000010); - ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x0000000f); + + ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ar71xx_eth0_data.phy_mask = 0x0000000f; + + ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; + ar71xx_eth1_data.phy_mask = 0x00000010; + + ar71xx_add_device_eth(1); + ar71xx_add_device_eth(0); ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio), rb4xx_leds_gpio); @@ -217,10 +235,19 @@ static void __init rb493_setup(void) { rb4xx_add_device_spi(); -#if 0 ar71xx_add_device_mdio(0x3fffff00); - ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000000); - ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00000001); + +#if 0 + ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ar71xx_eth0_data.phy_mask = 0; + ar71xx_eth0_data.speed = SPEED_100; + ar71xx_eth0_data.duplex = DUPLEX_FULL; + + ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; + ar71xx_eth1_data.phy_mask = 0x00000001; + + ar71xx_add_device_eth(0); + ar71xx_add_device_eth(1); #endif ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio), diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c index 4abecd8a0..ef2ef0575 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c @@ -124,7 +124,10 @@ static void __init wp543_setup(void) ar71xx_add_device_spi(NULL, wp543_spi_info, ARRAY_SIZE(wp543_spi_info)); ar71xx_add_device_mdio(0xfffffff7); - ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000008); + + ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ar71xx_eth0_data.phy_mask = 0x00000008; + ar71xx_add_device_eth(0); ar71xx_add_device_usb(); diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c b/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c index b131ec1e2..aa4711d34 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c @@ -196,7 +196,7 @@ static struct resource ar71xx_eth0_resources[] = { }, }; -static struct ag71xx_platform_data ar71xx_eth0_data = { +struct ag71xx_platform_data ar71xx_eth0_data = { .reset_bit = RESET_MODULE_GE0_MAC, .flush_reg = DDR_REG_FLUSH_GE0, }; @@ -235,7 +235,7 @@ static struct resource ar71xx_eth1_resources[] = { }, }; -static struct ag71xx_platform_data ar71xx_eth1_data = { +struct ag71xx_platform_data ar71xx_eth1_data = { .reset_bit = RESET_MODULE_GE1_MAC, .flush_reg = DDR_REG_FLUSH_GE1, }; @@ -251,14 +251,13 @@ static struct platform_device ar71xx_eth1_device = { }; static int ar71xx_eth_instance __initdata; -void __init ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode, - u32 phy_mask) +void __init ar71xx_add_device_eth(unsigned int id) { struct platform_device *pdev; switch (id) { case 0: - switch (phy_if_mode) { + switch (ar71xx_eth0_data.phy_if_mode) { case PHY_INTERFACE_MODE_MII: ar71xx_eth0_data.mii_if = MII0_CTRL_IF_MII; break; @@ -276,12 +275,10 @@ void __init ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode, } memcpy(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, ETH_ALEN); ar71xx_eth0_data.mac_addr[5] += ar71xx_eth_instance; - ar71xx_eth0_data.phy_if_mode = phy_if_mode; - ar71xx_eth0_data.phy_mask = phy_mask; pdev = &ar71xx_eth0_device; break; case 1: - switch (phy_if_mode) { + switch (ar71xx_eth1_data.phy_if_mode) { case PHY_INTERFACE_MODE_RMII: ar71xx_eth1_data.mii_if = MII1_CTRL_IF_RMII; break; @@ -293,8 +290,6 @@ void __init ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode, } memcpy(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, ETH_ALEN); ar71xx_eth1_data.mac_addr[5] += ar71xx_eth_instance; - ar71xx_eth1_data.phy_if_mode = phy_if_mode; - ar71xx_eth1_data.phy_mask = phy_mask; pdev = &ar71xx_eth1_device; break; default: diff --git a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h index f712f3391..53ac555c7 100644 --- a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h +++ b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h @@ -20,13 +20,13 @@ #include <linux/gpio_buttons.h> struct ag71xx_platform_data { - u32 reset_bit; - u32 flush_reg; - u32 phy_mask; phy_interface_t phy_if_mode; - u32 mii_if; + u32 phy_mask; int speed; int duplex; + u32 reset_bit; + u32 flush_reg; + u32 mii_if; u8 mac_addr[ETH_ALEN]; }; @@ -49,8 +49,10 @@ extern void ar71xx_add_device_spi(struct ar71xx_spi_platform_data *pdata, extern void ar71xx_set_mac_base(unsigned char *mac) __init; extern void ar71xx_parse_mac_addr(char *mac_str) __init; -extern void ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode, - u32 phy_mask) __init; + +extern struct ag71xx_platform_data ar71xx_eth0_data; +extern struct ag71xx_platform_data ar71xx_eth1_data; +extern void ar71xx_add_device_eth(unsigned int id) __init; extern void ar71xx_add_device_mdio(u32 phy_mask) __init; |