diff options
author | Jason Chen <b02280@freescale.com> | 2010-06-30 11:25:26 +0800 |
---|---|---|
committer | Justin Waters <justin.waters@timesys.com> | 2010-12-17 12:10:42 -0500 |
commit | 9fe0c73a58995b42a97dae4fda6f10e228e8e09d (patch) | |
tree | 6328f8fc4b3130ba921d16b11f929bfe73bdb9a3 /drivers | |
parent | 315b3096450de88a0b1f8070d57110779b8d6cb4 (diff) |
ENGR00124760 fec: set mac address correctly
Fix dynamicly set mac address make network hang issue.
Signed-off-by: Jason Chen <b02280@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/fec.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 63d84b692390..b176bd4f20e9 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -1131,17 +1131,18 @@ fec_set_mac_address(struct net_device *dev, void *p) { struct fec_enet_private *fep = netdev_priv(dev); struct sockaddr *addr = p; + u32 temp_mac[2]; if (!is_valid_ether_addr(addr->sa_data)) return -EADDRNOTAVAIL; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); - writel(dev->dev_addr[3] | (dev->dev_addr[2] << 8) | - (dev->dev_addr[1] << 16) | (dev->dev_addr[0] << 24), - fep->hwp + FEC_ADDR_LOW); - writel((dev->dev_addr[5] << 16) | (dev->dev_addr[4] << 24), - fep + FEC_ADDR_HIGH); + memcpy(&temp_mac, dev->dev_addr, ETH_ALEN); + + writel(cpu_to_be32(temp_mac[0]), fep->hwp + FEC_ADDR_LOW); + writel(cpu_to_be32(temp_mac[1]), fep->hwp + FEC_ADDR_HIGH); + return 0; } |