]>
Commit | Line | Data |
---|---|---|
373f9370 GKH |
1 | From foo@baz Wed Mar 11 11:44:33 CET 2015 |
2 | From: Geert Uytterhoeven <geert+renesas@glider.be> | |
3 | Date: Fri, 27 Feb 2015 17:16:26 +0100 | |
4 | Subject: sh_eth: Fix lost MAC address on kexec | |
5 | ||
6 | From: Geert Uytterhoeven <geert+renesas@glider.be> | |
7 | ||
8 | [ Upstream commit a14c7d15ca91b444e77df08b916befdce77562ab ] | |
9 | ||
10 | Commit 740c7f31c094703c ("sh_eth: Ensure DMA engines are stopped before | |
11 | freeing buffers") added a call to sh_eth_reset() to the | |
12 | sh_eth_set_ringparam() and sh_eth_close() paths. | |
13 | ||
14 | However, setting the software reset bit(s) in the EDMR register resets | |
15 | the MAC Address Registers to zero. Hence after kexec, the new kernel | |
16 | doesn't detect a valid MAC address and assigns a random MAC address, | |
17 | breaking DHCP. | |
18 | ||
19 | Set the MAC address again after the reset in sh_eth_dev_exit() to fix | |
20 | this. | |
21 | ||
22 | Tested on r8a7740/armadillo (GETHER) and r8a7791/koelsch (FAST_RCAR). | |
23 | ||
24 | Fixes: 740c7f31c094703c ("sh_eth: Ensure DMA engines are stopped before freeing buffers") | |
25 | Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> | |
26 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
28 | --- | |
29 | drivers/net/ethernet/renesas/sh_eth.c | 3 +++ | |
30 | 1 file changed, 3 insertions(+) | |
31 | ||
32 | --- a/drivers/net/ethernet/renesas/sh_eth.c | |
33 | +++ b/drivers/net/ethernet/renesas/sh_eth.c | |
34 | @@ -1392,6 +1392,9 @@ static void sh_eth_dev_exit(struct net_d | |
35 | msleep(2); /* max frame time at 10 Mbps < 1250 us */ | |
36 | sh_eth_get_stats(ndev); | |
37 | sh_eth_reset(ndev); | |
38 | + | |
39 | + /* Set MAC address again */ | |
40 | + update_mac_address(ndev); | |
41 | } | |
42 | ||
43 | /* free Tx skb function */ |