|
@@ -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, ®s->mac_a1);
|
|
|
+ writel(enetaddr_lo, ®s->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],
|
|
|
- ®s->mac_a1);
|
|
|
- writel(enetaddr[3] << 16 | enetaddr[4] << 8 | enetaddr[5],
|
|
|
- ®s->mac_a0);
|
|
|
+ _sunxi_write_hwaddr(priv, enetaddr);
|
|
|
|
|
|
mdelay(1);
|
|
|
|