ar71xx: change mac address initialization
authorGabor Juhos <juhosg@openwrt.org>
Wed, 18 Aug 2010 16:00:28 +0000 (16:00 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Wed, 18 Aug 2010 16:00:28 +0000 (16:00 +0000)
SVN-Revision: 22700

31 files changed:
target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-eth.c
target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-eth.h
target/linux/ar71xx/files/arch/mips/ar71xx/devices.c
target/linux/ar71xx/files/arch/mips/ar71xx/devices.h
target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap81.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-dir-600-a1.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-dir-615-c1.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-dir-825-b1.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-eap7660d.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-mzk-w04nu.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-mzk-w300nh.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-nbg460n.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-pb42.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-pb44.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-pb92.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb4xx.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb750.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tew-632brp.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wa901nd.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr1043nd.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr741nd.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr841n.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr941nd.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-wndr3700.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-wnr2000.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-wrt160nl.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-wrt400n.c
target/linux/ar71xx/files/arch/mips/ar71xx/mach-wzr-hp-g300nh.c

index e45092c46cd6b68cf7053ff7794b4c7ddac27929..fbb813603fa4c5431c030a112f83828bdf4cbf56 100644 (file)
@@ -34,11 +34,8 @@ static void ap91_eth_set_port_name(unsigned port, const char *name)
                ap91_dsa_chip.port_names[port] = (char *) name;
 }
 
-void __init ap91_eth_init(u8 *mac_addr, const char *port_names[])
+void __init ap91_eth_init(const char *port_names[])
 {
-       if (mac_addr)
-               ar71xx_set_mac_base(mac_addr);
-
        if (port_names) {
                int i;
 
index d9cd2141ada9a118462258083ad60d6dc8a52eca..08b1dde6bbf74591f5302f19b4c3efaae5ce1fd6 100644 (file)
@@ -14,9 +14,9 @@
 #define AP91_ETH_NUM_PORT_NAMES        4
 
 #if defined(CONFIG_AR71XX_DEV_AP91_ETH)
-void ap91_eth_init(u8 *mac_addr, const char *port_names[]) __init;
+void ap91_eth_init(const char *port_names[]) __init;
 #else
-static inline void ap91_eth_init(u8 *mac_addr) { }
+static inline void ap91_eth_init(const char *port_names[]) { }
 #endif
 
 #endif /* _AR71XX_DEV_AP91_ETH_H */
index 6f1d2619efe3574a747aa18d0eebcc4f58c5fdc5..8879448ac17f666698adf8fcf2af0a4def65b5e1 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "devices.h"
 
-static u8 ar71xx_mac_base[ETH_ALEN] __initdata;
+unsigned char ar71xx_mac_base[ETH_ALEN] __initdata;
 
 static struct resource ar71xx_uart_resources[] = {
        {
@@ -490,10 +490,7 @@ void __init ar71xx_add_device_eth(unsigned int id)
                break;
        }
 
-       if (is_valid_ether_addr(ar71xx_mac_base)) {
-               memcpy(pdata->mac_addr, ar71xx_mac_base, ETH_ALEN);
-               pdata->mac_addr[5] += ar71xx_eth_instance;
-       } else {
+       if (!is_valid_ether_addr(pdata->mac_addr)) {
                random_ether_addr(pdata->mac_addr);
                printk(KERN_DEBUG
                        "ar71xx: using random MAC address for eth%d\n",
@@ -580,3 +577,24 @@ static int __init ar71xx_kmac_setup(char *str)
        return 1;
 }
 __setup("kmac=", ar71xx_kmac_setup);
+
+void __init ar71xx_init_mac(unsigned char *dst, const unsigned char *src,
+                           unsigned offset)
+{
+       u32 t;
+
+       if (!is_valid_ether_addr(src)) {
+               memset(dst, '\0', ETH_ALEN);
+               return;
+       }
+
+       t = (((u32) src[3]) << 16) + (((u32) src[4]) << 8) + ((u32) src[5]);
+       t += offset;
+
+       dst[0] = src[0];
+       dst[1] = src[1];
+       dst[2] = src[2];
+       dst[3] = (t >> 16) & 0xff;
+       dst[4] = (t >> 8) & 0xff;
+       dst[5] = t & 0xff;
+}
index 957675b0e15dc9fa50d6f0f4fcd2ea8ccb7bdb06..0a3255ff89b1058644b6f9ad96ba538cbe26d718 100644 (file)
@@ -20,8 +20,10 @@ void ar71xx_add_device_spi(struct ar71xx_spi_platform_data *pdata,
                           struct spi_board_info const *info,
                           unsigned n) __init;
 
-void ar71xx_set_mac_base(unsigned char *mac) __init;
+extern unsigned char ar71xx_mac_base[] __initdata;
 void ar71xx_parse_mac_addr(char *mac_str) __init;
+void ar71xx_init_mac(unsigned char *dst, const unsigned char *src,
+                    unsigned offset) __init;
 
 struct ar71xx_eth_pll_data {
        u32     pll_10;
index cd865b001e9f194fa3e0687dd6989342c30781e9..5e06c6c1e3ee55a97c076f4587f2f89f07110fd5 100644 (file)
@@ -109,14 +109,15 @@ static void __init ap81_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(eeprom);
        ar71xx_add_device_mdio(0x0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, eeprom, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
        ar71xx_eth0_data.has_ar8216 = 1;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, eeprom, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = 0x10;
 
index acb9f5a1c23c82a049950215029379c7e215102e..8417b75396e1c3b83c4093d57b9333286b1f3c32 100644 (file)
@@ -196,15 +196,15 @@ static void __init ap83_generic_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(eeprom);
-
        ar71xx_add_device_mdio(0xfffffffe);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, eeprom, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.phy_mask = 0x1;
 
        ar71xx_add_device_eth(0);
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, eeprom, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth1_data.speed = SPEED_1000;
        ar71xx_eth1_data.duplex = DUPLEX_FULL;
index d0a4490fc573f9294162baf9f72a1b5fe8a80177..438d19468d593621b0218e5cb3b4a2d6474cc1e9 100644 (file)
@@ -118,8 +118,11 @@ static void __init dir_600_a1_setup(void)
        u8 *mac = NULL;
 
        if (nvram_parse_mac_addr(nvram, DIR_600_A1_NVRAM_SIZE,
-                                "lan_mac=", mac_buff) == 0)
+                                "lan_mac=", mac_buff) == 0) {
+               ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
+               ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
                mac = mac_buff;
+       }
 
        ar71xx_add_device_m25p80(&dir_600_a1_flash_data);
 
@@ -130,7 +133,7 @@ static void __init dir_600_a1_setup(void)
                                        ARRAY_SIZE(dir_600_a1_gpio_buttons),
                                        dir_600_a1_gpio_buttons);
 
-       ap91_eth_init(mac, NULL);
+       ap91_eth_init(NULL);
        ap91_pci_init(ee, mac);
 }
 
index 9c302f79fc6c98bb434ae29eaba8fd75f697bd99..260397bf2c6dd9e5a86ef3114c7dd79261687ed4 100644 (file)
@@ -142,7 +142,8 @@ static void __init dir_615c1_setup(void)
 
        if (nvram_parse_mac_addr(config, DIR_615C1_CONFIG_SIZE,
                                 "lan_mac=", mac) == 0) {
-               ar71xx_set_mac_base(mac);
+               ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
+               ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
                wlan_mac = mac;
        }
 
index f009bfb7ae6d5ba5253a50608504d8b83090296a..e886f5b217a7bf29ae6803d946d2e16653f85af8 100644 (file)
@@ -145,22 +145,18 @@ static struct platform_device dir825b1_rtl8366s_device = {
 
 static void __init dir825b1_setup(void)
 {
-        u8 mac[6], i;
-
-       memcpy(mac, (u8*)KSEG1ADDR(DIR825B1_MAC_LOCATION_1), 6);
-       for(i = 5; i >= 3; i--)
-               if(++mac[i] != 0x00) break;
-
-       ar71xx_set_mac_base(mac);
+       u8 *mac = (u8 *) KSEG1ADDR(DIR825B1_MAC_LOCATION_1);
 
        ar71xx_add_device_mdio(0x0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 1);
        ar71xx_eth0_data.mii_bus_dev = &dir825b1_rtl8366s_device.dev;
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.speed = SPEED_1000;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
        ar71xx_eth0_pll_data.pll_1000 = 0x11110000;
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 2);
        ar71xx_eth1_data.mii_bus_dev = &dir825b1_rtl8366s_device.dev;
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth1_data.phy_mask = 0x10;
index 6da318e2d1dce9a434421c9075af7607d65fc55f..3006698f941fb0906dd0ccfefed0e71262a352f7 100644 (file)
@@ -145,8 +145,11 @@ static struct gpio_button eap7660d_gpio_buttons[] __initdata = {
 static void __init eap7660d_setup(void)
 {
        u8 *boardconfig = (u8 *) KSEG1ADDR(EAP7660D_BOARDCONFIG);
-       ar71xx_set_mac_base(boardconfig + EAP7660D_GBIC_MAC_OFFSET);
+
        ar71xx_add_device_mdio(~EAP7660D_PHYMASK);
+
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr,
+                       boardconfig + EAP7660D_GBIC_MAC_OFFSET, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.phy_mask = EAP7660D_PHYMASK;
        ar71xx_add_device_eth(0);
index df68b282fca0282b3ae789b92e41b5259c6fc83a..48e080fe2cd10eda24f91f0dc2f15aabd34bf65b 100644 (file)
@@ -133,15 +133,15 @@ static void __init mzk_w04nu_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(eeprom);
-
        ar71xx_add_device_mdio(MZK_W04NU_MDIO_MASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, eeprom, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
        ar71xx_eth0_data.has_ar8216 = 1;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, eeprom, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = MZK_W04NU_WAN_PHYMASK;
 
index 28a79eac6b0cc4bafdb472602fc99fea45920039..4d5df02cfc8fd4d6f776da4846d6e16d67decd9e 100644 (file)
@@ -128,15 +128,15 @@ static void __init mzk_w300nh_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(eeprom);
-
        ar71xx_add_device_mdio(MZK_W300NH_MDIO_MASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, eeprom, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
        ar71xx_eth0_data.has_ar8216 = 1;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, eeprom, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = MZK_W300NH_WAN_PHYMASK;
 
index 602a9f022dac8695fed21b013157f773482e51d2..3ef8afa1e215ef30acfc97afb9ff3e857015d146 100644 (file)
@@ -184,15 +184,15 @@ static void __init nbg460n_setup(void)
        /* last sector contains wlan calib data */
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(mac);
-
        /* LAN Port */
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_eth0_data.mii_bus_dev = &nbg460n_rtl8366s_device.dev;
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.speed = SPEED_1000;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
 
        /* WAN Port */
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
        ar71xx_eth1_data.mii_bus_dev = &nbg460n_rtl8366s_device.dev;
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth1_data.phy_mask = 0x10;
index 576da4ba7a67bb0f61aeadcdf452b267fbcc1c7b..d14cc9b9540dc2f2ae59fca77e463d5cedac5282 100644 (file)
@@ -51,9 +51,11 @@ static void __init pb42_init(void)
 
        ar71xx_add_device_mdio(~PB42_MDIO_PHYMASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = PB42_WAN_PHYMASK;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.speed = SPEED_100;
        ar71xx_eth1_data.duplex = DUPLEX_FULL;
index e514635d1608a5164527c4cb2c898a9810d96fe8..51951614e9c8de6303b3e46327e078d2ab3397e1 100644 (file)
@@ -173,11 +173,13 @@ static void __init pb44_init(void)
 {
        ar71xx_add_device_mdio(~PB44_MDIO_PHYMASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.phy_mask = PB44_WAN_PHYMASK;
 
        ar71xx_add_device_eth(0);
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth1_data.speed = SPEED_1000;
        ar71xx_eth1_data.duplex = DUPLEX_FULL;
index de6b86d16d38958d5245ab04ed059c9f8f5a858d..0419e9b7218a0aa02c128d8cc5fcfcac2507ad92 100644 (file)
@@ -84,14 +84,15 @@ static void __init pb92_init(void)
 {
        u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000);
 
-       ar71xx_set_mac_base(mac);
        ar71xx_add_device_m25p80(&pb92_flash_data);
 
        ar71xx_add_device_mdio(~0);
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_1000;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.speed = SPEED_1000;
        ar71xx_eth1_data.duplex = DUPLEX_FULL;
index dc3c2005dfad0e0f61eac454bd99cbbb1e9737e1..a477cd3ade4108f824068cb09965b0621ed0c70b 100644 (file)
@@ -179,6 +179,7 @@ static void __init rb411_setup(void)
 
        ar71xx_add_device_mdio(0xfffffffc);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = 0x00000003;
 
@@ -210,9 +211,11 @@ static void __init rb433_setup(void)
 
        ar71xx_add_device_mdio(~RB433_MDIO_PHYMASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = RB433_LAN_PHYMASK;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = RB433_WAN_PHYMASK;
 
@@ -245,9 +248,11 @@ static void __init rb450_generic_setup(int gige)
 
        ar71xx_add_device_mdio(~RB450_MDIO_PHYMASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth0_data.phy_if_mode = (gige) ? PHY_INTERFACE_MODE_RGMII : PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = RB450_LAN_PHYMASK;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth1_data.phy_if_mode = (gige) ? PHY_INTERFACE_MODE_RGMII : PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = RB450_WAN_PHYMASK;
 
@@ -278,10 +283,12 @@ static void __init rb493_setup(void)
 
        ar71xx_add_device_mdio(0x3fffff00);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = 0x00000001;
 
index 3972f57ac734f53bad09cb390957ec1f3bd7eef5..9c8386b7ba3510470a24e6bd0d976fe44d83d44c 100644 (file)
@@ -13,6 +13,7 @@
 #include <asm/mach-ar71xx/mach-rb750.h>
 
 #include "machtype.h"
+#include "devices.h"
 #include "dev-ap91-eth.h"
 
 static struct rb750_led_data rb750_leds[] = {
@@ -124,7 +125,10 @@ static void __init rb750_setup(void)
                                     AR724X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
                                     AR724X_GPIO_FUNC_ETH_SWITCH_LED4_EN);
 
-       ap91_eth_init(NULL, rb750_port_names);
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 1);
+       ap91_eth_init(rb750_port_names);
+
        platform_device_register(&rb750_leds_device);
        platform_device_register(&rb750_nand_device);
 }
index 4581fa0b5736d0402447ddcdfdd11c3313726075..3ace1dd5446d47c6b5c77820c1b5b27c7ab159df 100644 (file)
@@ -118,7 +118,8 @@ static void __init tew_632brp_setup(void)
 
        if (nvram_parse_mac_addr(config, TEW_632BRP_CONFIG_SIZE,
                                 "lan_mac=", mac) == 0) {
-               ar71xx_set_mac_base(mac);
+               ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
+               ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
                wlan_mac = mac;
        }
 
index c7779bf50cdc06d9b0f9a6464f6f6fc47d159880..ea4135a3d00ace4b322d77c301a4bc2dbdbeb9a9 100644 (file)
@@ -110,13 +110,12 @@ static void __init tl_wa901nd_setup(void)
        u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
        u8 *ee  = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(mac);
-
        /*
         * ar71xx_eth0 would be the WAN port, but is not connected on
         * the TL-WA901ND. ar71xx_eth1 connects to the internal switch chip,
         * however we have a single LAN port only.
         */
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 0);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.speed       = SPEED_1000;
        ar71xx_eth1_data.duplex      = DUPLEX_FULL;
index b1e203859c14b60edce8d0e78b1df9d9e1da00a3..99cb7d843ae588edc5503dce96bca1528d545718 100644 (file)
@@ -126,8 +126,7 @@ static void __init tl_wr1043nd_setup(void)
        u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(mac);
-
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_eth0_data.mii_bus_dev = &tl_wr1043nd_rtl8366rb_device.dev;
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.speed = SPEED_1000;
index ed217f9e23c797dbdc0e87ba2fee80a033314d57..834b462de4bfe8bf7c84c7919ba5034f2cbd308f 100644 (file)
@@ -109,7 +109,8 @@ static void __init tl_wr741nd_setup(void)
                                        tl_wr741nd_gpio_buttons);
 
        ar71xx_eth1_data.has_ar7240_switch = 1;
-       ar71xx_set_mac_base(mac);
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
 
        /* WAN port */
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
index fd832d6d9781f896504c3a903a0471ed6f24fe3f..74f5c2c16d0d0ca8e19b63056aa1129934365dda 100644 (file)
@@ -115,10 +115,9 @@ static void __init tl_wr841n_v1_setup(void)
 {
        u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
 
-       ar71xx_set_mac_base(mac);
-
        ar71xx_add_device_mdio(0x0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
index 2471d48d2e6d1398506b82150a2d092e7853703b..85289bdf59269a489f14b179aff3f314b3949e24 100644 (file)
@@ -116,10 +116,9 @@ static void __init tl_wr941nd_setup(void)
        u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(mac);
-
        ar71xx_add_device_mdio(0x0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
index 130d9e421d379589c4c149ffe0042172266b7059..5af18a7e05cac361227763963b6340c475d3ee3d 100644 (file)
@@ -142,9 +142,11 @@ static void __init ubnt_rs_setup(void)
 
        ar71xx_add_device_mdio(~(UBNT_RS_WAN_PHYMASK | UBNT_RS_LAN_PHYMASK));
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = UBNT_RS_WAN_PHYMASK;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.speed = SPEED_100;
        ar71xx_eth1_data.duplex = DUPLEX_FULL;
@@ -170,9 +172,11 @@ static void __init ubnt_rspro_setup(void)
 
        ar71xx_add_device_mdio(~(UBNT_RSPRO_WAN_PHYMASK | UBNT_RSPRO_LAN_PHYMASK));
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.phy_mask = UBNT_RSPRO_WAN_PHYMASK;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth1_data.phy_mask = UBNT_RSPRO_LAN_PHYMASK;
        ar71xx_eth1_data.speed = SPEED_1000;
@@ -205,6 +209,7 @@ static void __init ubnt_lssr71_setup(void)
 
        ar71xx_add_device_mdio(~UBNT_LSSR71_PHY_MASK);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = UBNT_LSSR71_PHY_MASK;
 
@@ -222,12 +227,12 @@ static void __init ubnt_m_setup(void)
        u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000);
        u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(mac);
-
        ar71xx_add_device_m25p80(NULL);
 
        ar71xx_add_device_mdio(~0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
index 51e2ce53fc4b485baa033579b2f34844fdc74291..0d3e374fe289cf32417db5d9b6d286f5e3cdbd46 100644 (file)
@@ -168,14 +168,14 @@ static void __init wndr3700_setup(void)
 {
        u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
 
-       ar71xx_set_mac_base(art);
-
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, art, 0);
        ar71xx_eth0_pll_data.pll_1000 = 0x11110000;
        ar71xx_eth0_data.mii_bus_dev = &wndr3700_rtl8366s_device.dev;
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.speed = SPEED_1000;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, art, 1);
        ar71xx_eth1_pll_data.pll_1000 = 0x11110000;
        ar71xx_eth1_data.mii_bus_dev = &wndr3700_rtl8366s_device.dev;
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
index b0c547065fe9b1ec3a41868fa79ec14914540969..002c8ab9f2daf1d86570776ac05765fe6eae6e8f 100644 (file)
@@ -118,14 +118,15 @@ static void __init wnr2000_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
 
-       ar71xx_set_mac_base(eeprom);
        ar71xx_add_device_mdio(0x0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, eeprom, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
        ar71xx_eth0_data.has_ar8216 = 1;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, eeprom, 1);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = 0x10;
 
index 22585842e20160320e0641a08b6ae6673f5f046a..20e032441138dd59cb70c11ffc09bf09c0e36a26 100644 (file)
@@ -78,6 +78,7 @@ static void __init wp543_setup(void)
 
        ar71xx_add_device_mdio(0xfffffff7);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
        ar71xx_eth0_data.phy_mask = 0x08;
        ar71xx_eth0_data.reset_bit = RESET_MODULE_GE0_MAC |
index 74d30573cf1116aa8bb3119585c345afa46de44a..acb7e0d1bb149d479c8ccd859a5805280a571451 100644 (file)
@@ -121,8 +121,10 @@ static void __init wrt160nl_setup(void)
        u8 mac[6];
 
        if (nvram_parse_mac_addr(nvram, WRT160NL_NVRAM_SIZE,
-                                "lan_hwaddr=", mac) == 0)
-               ar71xx_set_mac_base(mac);
+                                "lan_hwaddr=", mac) == 0) {
+               ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
+               ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
+       }
 
        ar71xx_add_device_mdio(0x0);
 
index d28193850e83399dbd163a1fb05cd1db86086670..5e5536a9f8149c5883eb0c80b26c4f82c31ae308 100644 (file)
@@ -131,21 +131,16 @@ static struct gpio_button wrt400n_gpio_buttons[] __initdata = {
 static void __init wrt400n_setup(void)
 {
        u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
-       u8 mac[6];
-       int i;
-
-       memcpy(mac, art + WRT400N_MAC_ADDR_OFFSET, 6);
-       for (i = 5; i >= 3; i--)
-               if (++mac[i] != 0x00) break;
-
-       ar71xx_set_mac_base(mac);
+       u8 *mac = art + WRT400N_MAC_ADDR_OFFSET;
 
        ar71xx_add_device_mdio(0x0);
 
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 1);
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 2);
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.phy_mask = 0x10;
 
index c12b0a041521a9b56c21f56440a7e78ab2f2919e..83935377a688e3c75a6a85667f77b7e989627528 100644 (file)
@@ -228,15 +228,16 @@ static struct platform_device wzrhpg300nh_rtl8366s_device = {
 static void __init wzrhpg300nh_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
+       u8 *mac = eeprom + WZRHPG300NH_MAC_OFFSET;
 
-       ar71xx_set_mac_base(eeprom + WZRHPG300NH_MAC_OFFSET);
-
+       ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_eth0_pll_data.pll_1000 = 0x1e000100;
        ar71xx_eth0_data.mii_bus_dev = &wzrhpg300nh_rtl8366s_device.dev;
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
        ar71xx_eth0_data.speed = SPEED_1000;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
 
+       ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);
        ar71xx_eth1_pll_data.pll_1000 = 0x1e000100;
        ar71xx_eth1_data.mii_bus_dev = &wzrhpg300nh_rtl8366s_device.dev;
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;