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>
This commit is contained in:
oliver@schinagl.nl 2016-11-25 16:38:34 +01:00 committed by Joe Hershberger
parent 5cf618ee60
commit ace1520cb5

View file

@ -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);