[PATCH] net: uclass: Save ethernet MAC address when generated

Michal Simek michal.simek at xilinx.com
Thu Nov 4 12:16:53 CET 2021



On 11/4/21 03:09, Grygorii Strashko wrote:
> 
> 
> On 02/11/2021 12:27, Michal Simek wrote:
>>
>>
>> On 11/2/21 10:00, Michael Walle wrote:
>>>> On Fri, Oct 29, 2021 at 2:14 PM Michal Simek 
>>>> <michal.simek at xilinx.com> wrote:
>>>>>
>>>>> When MAC address is randomly generated it should be also saved to
>>>>> variables. This step is there when MAC address is passed via pdata 
>>>>> but not
>>>>> when it is randomly generated.
>>>>>
>>>>> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
>>>>> ---
>>>>>
>>>>>   net/eth-uclass.c | 2 ++
>>>>>   1 file changed, 2 insertions(+)
>>>>>
>>>>> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
>>>>> index 0da0e85be031..58c308f33276 100644
>>>>> --- a/net/eth-uclass.c
>>>>> +++ b/net/eth-uclass.c
>>>>> @@ -583,6 +583,8 @@ static int eth_post_probe(struct udevice *dev)
>>>>>                  net_random_ethaddr(pdata->enetaddr);
>>>>>                  printf("\nWarning: %s (eth%d) using random MAC 
>>>>> address - %pM\n",
>>>>>                         dev->name, dev_seq(dev), pdata->enetaddr);
>>>>> +               eth_env_set_enetaddr_by_index("eth", dev_seq(dev),
>>>>> +                                             pdata->enetaddr);
>>>>>   #else
>>>>>                  printf("\nError: %s address not set.\n",
>>>>>                         dev->name);
>>>>> -- 
>>>>> 2.33.1
>>>>>
>>>> Reviewed-by: Ramon Fried <rfried.dev at gmail.com>
>>>
>>> Please note, that this will change behavior. Before this commit, the
>>> random mac address was local to u-boot (at least for most network 
>>> drivers).
>>> After this commit, it will also be communicated to linux.
>>>
>>> I'm not sure what to think of this. At the very least, this should be
>>> documented in the commit message and in the Kconfig help text.
>>
>> Thanks for bringing this up. I have no issue that this address is 
>> being propagated to Linux but others can feel this as an issue.
>> I can definitely extend commit message to say it.
> 
> Propagating random MAC to Linux might be not a good idea as Linux will 
> silently use it while in many cases it means that smth is wrong,
> and message like "Driver uses random MAC!" helps narrow down issues 
> earlier.

Not sure if you have ever tried this feature.

Mac address is shown on the log.
Warning: ethernet at ff0c0000 (eth1) using random MAC address - 
66:dc:38:d1:24:a9

And if you don't want to use this feature just don't enable it via 
CONFIG_NET_RANDOM_ETHADDR.


> For example, we occasionally copy-pasted wrong mac in DT and detected 
> this only after some time when started connecting
> similar boards to each other :(

That's not issue with this patch.

> Also, Linux may have it's own way to retrieve MAC if not provided by 
> u-boot.

Sure and I am not blocking it. I am just saying that u-boot is 
generating random mac address which is not exported to variables which 
is what net list command expects.
If fdt_fixup_ethernet() is called to update pass it to next phase is 
different story.
Also in our case when u-boot doesn't record mac to DT but mac remains in 
IP itself.

> 
> Wouldn't be enough to just print MAC console when random is used?

As I said above it is already there but IMHO not enough.
Take a look at behavior with this patch and without.

ZYNQ GEM: ff0b0000, mdio bus ff0c0000, phyaddr 4, interface sgmii
Loading new PMUFW cfg obj (32 bytes)

Warning: ethernet at ff0b0000 (eth0) using random MAC address - 
7a:77:b5:39:e8:12

ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 8, interface rgmii-id
Loading new PMUFW cfg obj (32 bytes)

Warning: ethernet at ff0c0000 (eth1) using random MAC address - 
32:77:95:89:df:0b
ethernet at ff0c0000 Waiting for PHY auto negotiation to complete....... done
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.0.143 (3260 ms)
gpio: pin resetchip5 (gpio 179) value is 0
gpio: pin resetchip5 (gpio 179) value is 1
ethernet at ff0b0000 Waiting for PHY auto negotiation to complete........ done
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.0.163 (3513 ms)
Hit any key to stop autoboot:  0
ZynqMP> net list
eth0 : ethernet at ff0b0000 7a:77:b5:39:e8:12 active
eth1 : ethernet at ff0c0000 32:77:95:89:df:0b
ZynqMP>


compare to
ZynqMP> net list
eth0 : ethernet at ff0b0000 00:00:00:00:00:00 active
eth1 : ethernet at ff0c0000 00:00:00:00:00:00

Thanks,
Michal



More information about the U-Boot mailing list