|
@@ -348,14 +348,6 @@ static int at91emac_init(struct eth_device *netdev, bd_t *bd)
|
|
|
writel(1 << AT91_ID_EMAC, &pmc->pcer);
|
|
|
writel(readl(&emac->ctl) | AT91_EMAC_CTL_CSR, &emac->ctl);
|
|
|
|
|
|
- DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
|
|
|
- cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))),
|
|
|
- cpu_to_le32(*((u32 *)netdev->enetaddr)));
|
|
|
- writel(cpu_to_le32(*((u32 *)netdev->enetaddr)), &emac->sa2l);
|
|
|
- writel(cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))), &emac->sa2h);
|
|
|
- DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
|
|
|
- readl(&emac->sa2h), readl(&emac->sa2l));
|
|
|
-
|
|
|
/* Init Ethernet buffers */
|
|
|
for (i = 0; i < RBF_FRAMEMAX; i++) {
|
|
|
dev->rbfdt[i].addr = (unsigned long) NetRxPackets[i];
|
|
@@ -456,6 +448,25 @@ static int at91emac_recv(struct eth_device *netdev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int at91emac_write_hwaddr(struct eth_device *netdev)
|
|
|
+{
|
|
|
+ emac_device *dev;
|
|
|
+ at91_emac_t *emac;
|
|
|
+ at91_pmc_t *pmc = (at91_pmc_t *) AT91_PMC_BASE;
|
|
|
+ emac = (at91_emac_t *) netdev->iobase;
|
|
|
+ dev = (emac_device *) netdev->priv;
|
|
|
+
|
|
|
+ writel(1 << AT91_ID_EMAC, &pmc->pcer);
|
|
|
+ DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
|
|
|
+ cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))),
|
|
|
+ cpu_to_le32(*((u32 *)netdev->enetaddr)));
|
|
|
+ writel(cpu_to_le32(*((u32 *)netdev->enetaddr)), &emac->sa2l);
|
|
|
+ writel(cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))), &emac->sa2h);
|
|
|
+ DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
|
|
|
+ readl(&emac->sa2h), readl(&emac->sa2l));
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int at91emac_register(bd_t *bis, unsigned long iobase)
|
|
|
{
|
|
|
emac_device *emac;
|
|
@@ -488,6 +499,7 @@ int at91emac_register(bd_t *bis, unsigned long iobase)
|
|
|
dev->halt = at91emac_halt;
|
|
|
dev->send = at91emac_send;
|
|
|
dev->recv = at91emac_recv;
|
|
|
+ dev->write_hwaddr = at91emac_write_hwaddr;
|
|
|
|
|
|
eth_register(dev);
|
|
|
|