aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/marvell/sky2.c
diff options
context:
space:
mode:
authorTim Harvey <tharvey@gateworks.com>2014-03-07 23:59:53 -0500
committerDavid S. Miller <davem@davemloft.net>2014-03-10 15:40:30 -0400
commit3ee2f8ce1ab8f235bda164295fa0cf39ec1c2400 (patch)
treeabc4e191182dc8dc534a715d37f84dc1a3f11d1f /drivers/net/ethernet/marvell/sky2.c
parent746e349980cb4dd73046434b25432257eefbbb72 (diff)
sky2: allow mac to come from dt
The driver reads the mac address from the device registers which would need to have been programmed by the bootloader. This patch adds the ability to pull the mac from devicetree via the pci device dt node. Signed-off-by: Tim Harvey <tharvey@gateworks.com> Cc: netdev@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: Grant Likely <grant.likely@linaro.org> Cc: Rob Herring <robh+dt@kernel.org> Changes since v2: - eliminated use of stack tmpaddr per feedback Changes since v1: - simplified based on feedback - fixed formatting Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/marvell/sky2.c')
-rw-r--r--drivers/net/ethernet/marvell/sky2.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
index 55a37ae11440..2434611d1b4e 100644
--- a/drivers/net/ethernet/marvell/sky2.c
+++ b/drivers/net/ethernet/marvell/sky2.c
@@ -44,6 +44,8 @@
44#include <linux/prefetch.h> 44#include <linux/prefetch.h>
45#include <linux/debugfs.h> 45#include <linux/debugfs.h>
46#include <linux/mii.h> 46#include <linux/mii.h>
47#include <linux/of_device.h>
48#include <linux/of_net.h>
47 49
48#include <asm/irq.h> 50#include <asm/irq.h>
49 51
@@ -4748,6 +4750,7 @@ static struct net_device *sky2_init_netdev(struct sky2_hw *hw, unsigned port,
4748{ 4750{
4749 struct sky2_port *sky2; 4751 struct sky2_port *sky2;
4750 struct net_device *dev = alloc_etherdev(sizeof(*sky2)); 4752 struct net_device *dev = alloc_etherdev(sizeof(*sky2));
4753 const void *iap;
4751 4754
4752 if (!dev) 4755 if (!dev)
4753 return NULL; 4756 return NULL;
@@ -4805,8 +4808,16 @@ static struct net_device *sky2_init_netdev(struct sky2_hw *hw, unsigned port,
4805 4808
4806 dev->features |= dev->hw_features; 4809 dev->features |= dev->hw_features;
4807 4810
4808 /* read the mac address */ 4811 /* try to get mac address in the following order:
4809 memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN); 4812 * 1) from device tree data
4813 * 2) from internal registers set by bootloader
4814 */
4815 iap = of_get_mac_address(hw->pdev->dev.of_node);
4816 if (iap)
4817 memcpy(dev->dev_addr, iap, ETH_ALEN);
4818 else
4819 memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8,
4820 ETH_ALEN);
4810 4821
4811 return dev; 4822 return dev;
4812} 4823}