diff options
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0020-net-mvneta-read-MAC-address-from-hardware-when-avail.patch')
-rw-r--r-- | target/linux/mvebu/patches-3.10/0020-net-mvneta-read-MAC-address-from-hardware-when-avail.patch | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/target/linux/mvebu/patches-3.10/0020-net-mvneta-read-MAC-address-from-hardware-when-avail.patch b/target/linux/mvebu/patches-3.10/0020-net-mvneta-read-MAC-address-from-hardware-when-avail.patch deleted file mode 100644 index 9866f0c..0000000 --- a/target/linux/mvebu/patches-3.10/0020-net-mvneta-read-MAC-address-from-hardware-when-avail.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 25d3318a445c4f4360f86bf6d1d1a320d9646bb5 Mon Sep 17 00:00:00 2001 -From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> -Date: Tue, 4 Jun 2013 04:52:23 +0000 -Subject: [PATCH 020/203] net: mvneta: read MAC address from hardware when - available - -This patch improves the logic used by the mvneta driver to find a MAC -address for a particular interface. Until now, it was only looking at -the Device Tree, and if no address was found, was falling back to -generating a random MAC address. - -This patch adds the intermediate solution of reading the MAC address -from the hardware registers, in case it has been set by the -bootloader. So the order is now: - - 1) MAC address from the Device Tree - 2) MAC address from the hardware registers - 3) Random MAC address - -This requires moving the MAC address initialization a little bit later -in the ->probe() code, because it now requires the hardware registers -to be remapped. - -Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> -Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> -Cc: Joe Perches <joe@perches.com> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/marvell/mvneta.c | 44 ++++++++++++++++++++++++++++------- - 1 file changed, 35 insertions(+), 9 deletions(-) - ---- a/drivers/net/ethernet/marvell/mvneta.c -+++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -2260,6 +2260,21 @@ static int mvneta_change_mtu(struct net_ - return 0; - } - -+/* Get mac address */ -+static void mvneta_get_mac_addr(struct mvneta_port *pp, unsigned char *addr) -+{ -+ u32 mac_addr_l, mac_addr_h; -+ -+ mac_addr_l = mvreg_read(pp, MVNETA_MAC_ADDR_LOW); -+ mac_addr_h = mvreg_read(pp, MVNETA_MAC_ADDR_HIGH); -+ addr[0] = (mac_addr_h >> 24) & 0xFF; -+ addr[1] = (mac_addr_h >> 16) & 0xFF; -+ addr[2] = (mac_addr_h >> 8) & 0xFF; -+ addr[3] = mac_addr_h & 0xFF; -+ addr[4] = (mac_addr_l >> 8) & 0xFF; -+ addr[5] = mac_addr_l & 0xFF; -+} -+ - /* Handle setting mac address */ - static int mvneta_set_mac_addr(struct net_device *dev, void *addr) - { -@@ -2678,7 +2693,9 @@ static int mvneta_probe(struct platform_ - u32 phy_addr; - struct mvneta_port *pp; - struct net_device *dev; -- const char *mac_addr; -+ const char *dt_mac_addr; -+ char hw_mac_addr[ETH_ALEN]; -+ const char *mac_from; - int phy_mode; - int err; - -@@ -2714,13 +2731,6 @@ static int mvneta_probe(struct platform_ - goto err_free_irq; - } - -- mac_addr = of_get_mac_address(dn); -- -- if (!mac_addr || !is_valid_ether_addr(mac_addr)) -- eth_hw_addr_random(dev); -- else -- memcpy(dev->dev_addr, mac_addr, ETH_ALEN); -- - dev->tx_queue_len = MVNETA_MAX_TXD; - dev->watchdog_timeo = 5 * HZ; - dev->netdev_ops = &mvneta_netdev_ops; -@@ -2751,6 +2761,21 @@ static int mvneta_probe(struct platform_ - - clk_prepare_enable(pp->clk); - -+ dt_mac_addr = of_get_mac_address(dn); -+ if (dt_mac_addr && is_valid_ether_addr(dt_mac_addr)) { -+ mac_from = "device tree"; -+ memcpy(dev->dev_addr, dt_mac_addr, ETH_ALEN); -+ } else { -+ mvneta_get_mac_addr(pp, hw_mac_addr); -+ if (is_valid_ether_addr(hw_mac_addr)) { -+ mac_from = "hardware"; -+ memcpy(dev->dev_addr, hw_mac_addr, ETH_ALEN); -+ } else { -+ mac_from = "random"; -+ eth_hw_addr_random(dev); -+ } -+ } -+ - pp->tx_done_timer.data = (unsigned long)dev; - - pp->tx_ring_size = MVNETA_MAX_TXD; -@@ -2783,7 +2808,8 @@ static int mvneta_probe(struct platform_ - goto err_deinit; - } - -- netdev_info(dev, "mac: %pM\n", dev->dev_addr); -+ netdev_info(dev, "Using %s mac address %pM\n", mac_from, -+ dev->dev_addr); - - platform_set_drvdata(pdev, pp->dev); - |