diff options
Diffstat (limited to 'drivers/net/sh_eth.c')
-rw-r--r-- | drivers/net/sh_eth.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index f49d0800c1d1..a4da7e7574eb 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c | |||
@@ -298,16 +298,20 @@ static void update_mac_address(struct net_device *ndev) | |||
298 | * When you want use this device, you must set MAC address in bootloader. | 298 | * When you want use this device, you must set MAC address in bootloader. |
299 | * | 299 | * |
300 | */ | 300 | */ |
301 | static void read_mac_address(struct net_device *ndev) | 301 | static void read_mac_address(struct net_device *ndev, unsigned char *mac) |
302 | { | 302 | { |
303 | u32 ioaddr = ndev->base_addr; | 303 | u32 ioaddr = ndev->base_addr; |
304 | 304 | ||
305 | ndev->dev_addr[0] = (ctrl_inl(ioaddr + MAHR) >> 24); | 305 | if (mac[0] || mac[1] || mac[2] || mac[3] || mac[4] || mac[5]) { |
306 | ndev->dev_addr[1] = (ctrl_inl(ioaddr + MAHR) >> 16) & 0xFF; | 306 | memcpy(ndev->dev_addr, mac, 6); |
307 | ndev->dev_addr[2] = (ctrl_inl(ioaddr + MAHR) >> 8) & 0xFF; | 307 | } else { |
308 | ndev->dev_addr[3] = (ctrl_inl(ioaddr + MAHR) & 0xFF); | 308 | ndev->dev_addr[0] = (ctrl_inl(ioaddr + MAHR) >> 24); |
309 | ndev->dev_addr[4] = (ctrl_inl(ioaddr + MALR) >> 8) & 0xFF; | 309 | ndev->dev_addr[1] = (ctrl_inl(ioaddr + MAHR) >> 16) & 0xFF; |
310 | ndev->dev_addr[5] = (ctrl_inl(ioaddr + MALR) & 0xFF); | 310 | ndev->dev_addr[2] = (ctrl_inl(ioaddr + MAHR) >> 8) & 0xFF; |
311 | ndev->dev_addr[3] = (ctrl_inl(ioaddr + MAHR) & 0xFF); | ||
312 | ndev->dev_addr[4] = (ctrl_inl(ioaddr + MALR) >> 8) & 0xFF; | ||
313 | ndev->dev_addr[5] = (ctrl_inl(ioaddr + MALR) & 0xFF); | ||
314 | } | ||
311 | } | 315 | } |
312 | 316 | ||
313 | struct bb_info { | 317 | struct bb_info { |
@@ -1427,7 +1431,7 @@ static int sh_eth_drv_probe(struct platform_device *pdev) | |||
1427 | mdp->post_fw = POST_FW >> (devno << 1); | 1431 | mdp->post_fw = POST_FW >> (devno << 1); |
1428 | 1432 | ||
1429 | /* read and set MAC address */ | 1433 | /* read and set MAC address */ |
1430 | read_mac_address(ndev); | 1434 | read_mac_address(ndev, pd->mac_addr); |
1431 | 1435 | ||
1432 | /* First device only init */ | 1436 | /* First device only init */ |
1433 | if (!devno) { | 1437 | if (!devno) { |