
Hi Eric,
On 6/15/2010 5:36 AM, Eric Bénard wrote:
tested on cpuat91.
Signed-off-by: Eric Bénarderic@eukrea.com
drivers/net/at91_emac.c | 31 +++++++++++++++++++++++-------- 1 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/drivers/net/at91_emac.c b/drivers/net/at91_emac.c index 1ebcf05..ac5903d 100644 --- a/drivers/net/at91_emac.c +++ b/drivers/net/at91_emac.c @@ -352,14 +352,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];
@@ -460,6 +452,28 @@ 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;
- if (netdev->enetaddr != 0) {
This check's not necessary. The caller checks if the MAC address is valid ( a more extensive check than you do here)
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;
@@ -492,6 +506,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);
regards, Ben