Skip to content

Commit 8b53aba

Browse files
cooldaviddavem330
authored andcommitted
jme: Refill receive unicase MAC addr after resume
The value of the register which holds receive Unicast MAC Address sometimes get messed-up after resume. This patch refill it before enabling the hardware filter. Signed-off-by: Guo-Fu Tseng <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 854a2e7 commit 8b53aba

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

drivers/net/jme.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,7 @@ jme_enable_rx_engine(struct jme_adapter *jme)
898898
/*
899899
* Setup Unicast Filter
900900
*/
901+
jme_set_unicastaddr(jme->dev);
901902
jme_set_multi(jme->dev);
902903

903904
/*
@@ -2114,27 +2115,34 @@ jme_start_xmit(struct sk_buff *skb, struct net_device *netdev)
21142115
return NETDEV_TX_OK;
21152116
}
21162117

2118+
static void
2119+
jme_set_unicastaddr(struct net_device *netdev)
2120+
{
2121+
struct jme_adapter *jme = netdev_priv(netdev);
2122+
u32 val;
2123+
2124+
val = (netdev->dev_addr[3] & 0xff) << 24 |
2125+
(netdev->dev_addr[2] & 0xff) << 16 |
2126+
(netdev->dev_addr[1] & 0xff) << 8 |
2127+
(netdev->dev_addr[0] & 0xff);
2128+
jwrite32(jme, JME_RXUMA_LO, val);
2129+
val = (netdev->dev_addr[5] & 0xff) << 8 |
2130+
(netdev->dev_addr[4] & 0xff);
2131+
jwrite32(jme, JME_RXUMA_HI, val);
2132+
}
2133+
21172134
static int
21182135
jme_set_macaddr(struct net_device *netdev, void *p)
21192136
{
21202137
struct jme_adapter *jme = netdev_priv(netdev);
21212138
struct sockaddr *addr = p;
2122-
u32 val;
21232139

21242140
if (netif_running(netdev))
21252141
return -EBUSY;
21262142

21272143
spin_lock_bh(&jme->macaddr_lock);
21282144
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
2129-
2130-
val = (addr->sa_data[3] & 0xff) << 24 |
2131-
(addr->sa_data[2] & 0xff) << 16 |
2132-
(addr->sa_data[1] & 0xff) << 8 |
2133-
(addr->sa_data[0] & 0xff);
2134-
jwrite32(jme, JME_RXUMA_LO, val);
2135-
val = (addr->sa_data[5] & 0xff) << 8 |
2136-
(addr->sa_data[4] & 0xff);
2137-
jwrite32(jme, JME_RXUMA_HI, val);
2145+
jme_set_unicastaddr(netdev);
21382146
spin_unlock_bh(&jme->macaddr_lock);
21392147

21402148
return 0;

drivers/net/jme.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,6 +1258,7 @@ static inline int new_phy_power_ctrl(u8 chip_main_rev)
12581258
*/
12591259
static int jme_set_settings(struct net_device *netdev,
12601260
struct ethtool_cmd *ecmd);
1261+
static void jme_set_unicastaddr(struct net_device *netdev);
12611262
static void jme_set_multi(struct net_device *netdev);
12621263

12631264
#endif

0 commit comments

Comments
 (0)