summaryrefslogtreecommitdiffstats
path: root/target/linux/ixp4xx-2.6/patches/133-ixp4xx_net_driver_improve_mac_handling.patch
blob: d632b3045b5d78f716dd2f85c5d2347b3f0a304c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
diff -Naupr a/drivers/net/ixp4xx/mac_driver.c b/drivers/net/ixp4xx/mac_driver.c
--- a/drivers/net/ixp4xx/mac_driver.c	2007-01-12 21:54:40.000000000 -0700
+++ b/drivers/net/ixp4xx/mac_driver.c	2007-01-12 22:27:18.000000000 -0700
@@ -350,6 +350,16 @@ static int ixmac_open (struct net_device
 	mac->npe_stat_num = i<NPE_STAT_NUM ? NPE_STAT_NUM_BASE : NPE_STAT_NUM;
 	mac->npe_stat_num += NPE_Q_STAT_NUM;
 
+	/* Only use platform or random if there's currently no device hw addr */
+	if (is_zero_ether_addr(dev->dev_addr)) {
+		if (is_zero_ether_addr(mac->plat->hwaddr)) {
+			random_ether_addr(dev->dev_addr);
+			dev->dev_addr[5] = mac->plat->phy_id;
+		}
+		else
+			memcpy(dev->dev_addr, mac->plat->hwaddr, 6);
+	}
+
 	mac_set_uniaddr(dev);
 	media_check(dev, 1);
 	ixmac_set_rx_mode(dev);
@@ -691,20 +701,6 @@ static int mac_probe(struct platform_dev
 
 	INIT_WORK(&mac->mdio_thread, mac_mdio_thread, dev);
 
-	/* The place of the MAC address is very system dependent.
-	 * Here we use a random one to be replaced by one of the
-	 * following commands:
-	 * "ip link set address 02:03:04:04:04:01 dev eth0"
-	 * "ifconfig eth0 hw ether 02:03:04:04:04:07"
-	*/
-
-	if (is_zero_ether_addr(plat->hwaddr)) {
-		random_ether_addr(dev->dev_addr);
-		dev->dev_addr[5] = plat->phy_id;
-	}
-	else
-		memcpy(dev->dev_addr, plat->hwaddr, 6);
-
 	printk(KERN_INFO IXMAC_NAME " driver " IXMAC_VERSION
 			": %s on %s with PHY[%d] initialized\n",
 			dev->name, npe->plat->name, plat->phy_id);