
Mike Frysinger wrote:
On Tuesday, March 01, 2011 03:19:12 Michal Simek wrote:
+static void setup_mac(struct eth_device *dev) +{
- /* Set the MAC address */
- int val = ((dev->enetaddr[3] << 24) | (dev->enetaddr[2] << 16) |
(dev->enetaddr[1] << 8) | (dev->enetaddr[0]));
- out_be32(dev->iobase + XAE_UAW0_OFFSET, val);
- val = (dev->enetaddr[5] << 8) | dev->enetaddr[4] ;
- val |= in_be32(dev->iobase + XAE_UAW1_OFFSET)
& ~XAE_UAW1_UNICASTADDR_MASK;
- out_be32(dev->iobase + XAE_UAW1_OFFSET, val);
+} ... +static int axiemac_init(struct eth_device *dev, bd_t * bis) +{ ...
- setup_mac(dev);
this should be moved to eth_device.write_hwaddr in the initialize function. then the common layers will call setup_mac for you as needed.
I am not going to use write_hwaddr function because axi emac needs some initialization before you can write a mac addr that's why I will keep it in the same location as is.
please add explicit comments to the setup_mac() func then so someone else doesnt go changing things without taking this into consideration first
No problem to write it.
I have experience with several network IPs but I think less amount than you. But anyway I think it is common that device must be in proper state to be able to setup mac for most of them. From my simple test I see that dev->write_hwaddr is called before dev->init which looks weird.
Michal