summaryrefslogtreecommitdiff
path: root/drivers/net/sunxi_emac.c
diff options
context:
space:
mode:
authoroliver@schinagl.nl <oliver@schinagl.nl>2016-11-25 18:38:34 +0300
committerJoe Hershberger <joe.hershberger@ni.com>2017-03-26 17:40:57 +0300
commitace1520cb5fc2628aa3bbe426d4066d2806d951c (patch)
tree4cbbe27e9854890e54ff0926d17f851226e407d4 /drivers/net/sunxi_emac.c
parent5cf618ee60a752d058a767372ca1ecb8d9c09b16 (diff)
downloadu-boot-ace1520cb5fc2628aa3bbe426d4066d2806d951c.tar.xz
net: sunxi-emac: Write HW address via function
Currently the mac address is programmed directly in _sunxi_emac_eth_init making it a one time inflexible operation. By moving it into a separate function, we can now use this more flexibly. Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'drivers/net/sunxi_emac.c')
-rw-r--r--drivers/net/sunxi_emac.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/net/sunxi_emac.c b/drivers/net/sunxi_emac.c
index 11cd0ea068..99339db4bf 100644
--- a/drivers/net/sunxi_emac.c
+++ b/drivers/net/sunxi_emac.c
@@ -327,6 +327,20 @@ static void emac_reset(struct emac_eth_dev *priv)
udelay(200);
}
+static int _sunxi_write_hwaddr(struct emac_eth_dev *priv, u8 *enetaddr)
+{
+ struct emac_regs *regs = priv->regs;
+ u32 enetaddr_lo, enetaddr_hi;
+
+ enetaddr_lo = enetaddr[2] | (enetaddr[1] << 8) | (enetaddr[0] << 16);
+ enetaddr_hi = enetaddr[5] | (enetaddr[4] << 8) | (enetaddr[3] << 16);
+
+ writel(enetaddr_hi, &regs->mac_a1);
+ writel(enetaddr_lo, &regs->mac_a0);
+
+ return 0;
+}
+
static int _sunxi_emac_eth_init(struct emac_eth_dev *priv, u8 *enetaddr)
{
struct emac_regs *regs = priv->regs;
@@ -350,10 +364,7 @@ static int _sunxi_emac_eth_init(struct emac_eth_dev *priv, u8 *enetaddr)
/* Set up EMAC */
emac_setup(priv);
- writel(enetaddr[0] << 16 | enetaddr[1] << 8 | enetaddr[2],
- &regs->mac_a1);
- writel(enetaddr[3] << 16 | enetaddr[4] << 8 | enetaddr[5],
- &regs->mac_a0);
+ _sunxi_write_hwaddr(priv, enetaddr);
mdelay(1);