
If there is no SROM attached to the SMSC chip it's MAC address is initialized to ff:ff:ff:ff:ff:ff and it causes the following warning:
Warning: smc911x-0 MAC addresses don't match: Address in SROM is ff:ff:ff:ff:ff:ff Address in environment is 00:01:ba:dc:0d:03
Set dev->enetaddr only if MAC address is valid, and thus avoid the above case.
Signed-off-by: Mike Rapoport mike@compulab.co.il --- drivers/net/smc911x.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 9ff1288..f5d984d 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c @@ -237,6 +237,7 @@ static int smc911x_rx(struct eth_device *dev) int smc911x_initialize(u8 dev_num, int base_addr) { unsigned long addrl, addrh; + unsigned char enetaddr[6]; struct eth_device *dev;
dev = malloc(sizeof(*dev)); @@ -257,12 +258,15 @@ int smc911x_initialize(u8 dev_num, int base_addr)
addrh = smc911x_get_mac_csr(dev, ADDRH); addrl = smc911x_get_mac_csr(dev, ADDRL); - dev->enetaddr[0] = addrl; - dev->enetaddr[1] = addrl >> 8; - dev->enetaddr[2] = addrl >> 16; - dev->enetaddr[3] = addrl >> 24; - dev->enetaddr[4] = addrh; - dev->enetaddr[5] = addrh >> 8; + enetaddr[0] = addrl; + enetaddr[1] = addrl >> 8; + enetaddr[2] = addrl >> 16; + enetaddr[3] = addrl >> 24; + enetaddr[4] = addrh; + enetaddr[5] = addrh >> 8; + + if (is_valid_ether_addr(enetaddr)) + memcpy(dev->enetaddr, enetaddr, 6);
dev->init = smc911x_init; dev->halt = smc911x_halt;