[PATCH] fdtdec: fdtdec_get_aliases_highest_id: skip aliases to disabled nodes

Tim Harvey tharvey at gateworks.com
Fri Jun 11 19:16:12 CEST 2021


On Fri, Jun 11, 2021 at 10:09 AM Sean Anderson <sean.anderson at seco.com> wrote:
>
>
>
> On 6/11/21 12:32 PM, Tim Harvey wrote:
>  > On Thu, Apr 29, 2021 at 9:48 AM Tim Harvey <tharvey at gateworks.com> wrote:
>  >>
>  >> On Thu, Apr 29, 2021 at 9:10 AM Simon Glass <sjg at chromium.org> wrote:
>  >>>
>  >>> Hi Tim,
>  >>>
>  >>> On Fri, 16 Apr 2021 at 14:30, Tim Harvey <tharvey at gateworks.com> wrote:
>  >>>>
>  >>>> When looking for an alias with the highest id skip aliases for nodes
>  >>>> that are disabled.
>  >>>>
>  >>>> Signed-off-by: Tim Harvey <tharvey at gateworks.com>
>  >>>> ---
>  >>>>   lib/fdtdec.c | 2 ++
>  >>>>   1 file changed, 2 insertions(+)
>  >>>>
>  >>>> diff --git a/lib/fdtdec.c b/lib/fdtdec.c
>  >>>> index 864589193b..d47195525a 100644
>  >>>> --- a/lib/fdtdec.c
>  >>>> +++ b/lib/fdtdec.c
>  >>>> @@ -546,6 +546,8 @@ int fdtdec_get_alias_highest_id(const void *blob, const char *base)
>  >>>>                  if (*prop != '/' || prop[len - 1] ||
>  >>>>                      strncmp(name, base, base_len))
>  >>>>                          continue;
>  >>>> +               if (!fdtdec_get_is_enabled(blob, fdt_path_offset(blob, prop)))
>  >>>> +                       continue;
>  >>>
>  >>> We really can't do this here. It is quite an expensive operation to
>  >>> locate the node for a path.
>  >>>
>  >>> Why is this needed? It seems odd to have an alias pointing to a disabled device.
>  >>>
>  >>
>  >> Simon,
>  >>
>  >> The issue I ran into here was with an imx6 based board that does not
>  >> use the FEC ethernet on the SoC. In this case imx6qdl.dtsi delcares an
>  >> alias 'thernet0 = &fec' yet the fec node is not enabled. However
>  >> because fdtdec_get_alias_highest_id does not skip this alias to a
>  >> disabled device any enumerated ethernet devices get an index of 1
>  >> instead of 0 which is incorrect and causes the mac addresses to be
>  >> misaligned.
>
> Is this due getting mac address from the OTP? As I understand it, the
> OTP mac addresses are for fec0/fec1, and not for whatever ethernet0
> happens to be.
>

Sean,

No, the issue is that U-Boot thinks there is an fec device simply
because an alias points to it even though the fec node pointed to is
disabled so when U-Boot finds an ethernet device that is enumerated at
runtime (think pcie or usb based mac) those start at index 1 instead
of index 0 and end up wanting to be assigned mac's from eth1addr
instead of ethaddr.

Tim


More information about the U-Boot mailing list