diff mbox

[U-Boot,v3,1/3] net: eth: Clear MAC address in eth_pre_remove()

Message ID 1444279544-31914-1-git-send-email-bmeng.cn@gmail.com
State Accepted
Delegated to: Joe Hershberger
Headers show

Commit Message

Bin Meng Oct. 8, 2015, 4:45 a.m. UTC
platdata->enetaddr was assigned to a value in dev_probe() last time.
If we don't clear it, for dev_probe() at the second time, dm eth
will end up treating it as a MAC address from ROM no matter where it
came from originally (maybe env, ROM, or even random). Fix this by
clearing platdata->enetaddr when removing an Ethernet device.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

---

Changes in v3:
- Update commit message to mention the reason of why

Changes in v2:
- New patch to clear MAC address in eth_pre_remove()

 net/eth.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Joe Hershberger Oct. 28, 2015, 8:12 p.m. UTC | #1
Hi Bin,

On Wed, Oct 7, 2015 at 11:45 PM, Bin Meng <bmeng.cn@gmail.com> wrote:
> platdata->enetaddr was assigned to a value in dev_probe() last time.
> If we don't clear it, for dev_probe() at the second time, dm eth
> will end up treating it as a MAC address from ROM no matter where it
> came from originally (maybe env, ROM, or even random). Fix this by
> clearing platdata->enetaddr when removing an Ethernet device.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Joe Hershberger Oct. 29, 2015, 7:34 p.m. UTC | #2
On Wed, Oct 7, 2015 at 11:45 PM, Bin Meng <bmeng.cn@gmail.com> wrote:
> platdata->enetaddr was assigned to a value in dev_probe() last time.
> If we don't clear it, for dev_probe() at the second time, dm eth
> will end up treating it as a MAC address from ROM no matter where it
> came from originally (maybe env, ROM, or even random). Fix this by
> clearing platdata->enetaddr when removing an Ethernet device.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

Applied to u-boot-net/master, thanks!
-Joe
diff mbox

Patch

diff --git a/net/eth.c b/net/eth.c
index 2e24b55..0d66f33 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -575,8 +575,13 @@  static int eth_post_probe(struct udevice *dev)
 
 static int eth_pre_remove(struct udevice *dev)
 {
+	struct eth_pdata *pdata = dev->platdata;
+
 	eth_get_ops(dev)->stop(dev);
 
+	/* clear the MAC address */
+	memset(pdata->enetaddr, 0, 6);
+
 	return 0;
 }