[U-Boot] [PATCH 2/2] at91_emac: Write MAC address automatically
Ben Warren
biggerbadderben at gmail.com
Mon Jun 21 07:59:27 CEST 2010
Hi Eric,
On 6/15/2010 5:36 AM, Eric Bénard wrote:
> tested on cpuat91.
>
> Signed-off-by: Eric Bénard<eric at 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
More information about the U-Boot
mailing list