[PATCH 6/6] net: octeontx: smi: fix mii probe

Stefan Roese sr at denx.de
Thu Apr 29 07:21:53 CEST 2021


Hi Tim,

On 28.04.21 17:11, Tim Harvey wrote:
> On Mon, Apr 26, 2021 at 10:19 PM Stefan Roese <sr at denx.de> wrote:
>>
>> Hi Tim,
>>
>> On 26.03.21 16:55, Tim Harvey wrote:
>>> On Thu, Mar 25, 2021 at 11:48 PM Stefan Roese <sr at denx.de> wrote:
>>>>
>>>> On 26.03.21 01:07, Tim Harvey wrote:
>>>>> The fdt node offset is apparently not set properly when probed
>>>>> causing no MDIO busses to be found. Fix this by obtaining the
>>>>> offset.
>>>>>
>>>>> Signed-off-by: Tim Harvey <tharvey at gateworks.com>
>>>>
>>>> Reviewed-by: Stefan Roese <sr at denx.de>
>>>>
>>>> Thanks,
>>>> Stefan
>>>>
>>>>> ---
>>>>>     drivers/net/octeontx/smi.c | 2 ++
>>>>>     1 file changed, 2 insertions(+)
>>>>>
>>>>> diff --git a/drivers/net/octeontx/smi.c b/drivers/net/octeontx/smi.c
>>>>> index 91dcd05e4b..27f4423c6a 100644
>>>>> --- a/drivers/net/octeontx/smi.c
>>>>> +++ b/drivers/net/octeontx/smi.c
>>>>> @@ -325,6 +325,8 @@ int octeontx_smi_probe(struct udevice *dev)
>>>>>                 return -1;
>>>>>         }
>>>>>
>>>>> +     node = fdt_node_offset_by_compatible(gd->fdt_blob, -1,
>>>>> +                                          "cavium,thunder-8890-mdio-nexus");
>>>>>         fdt_for_each_subnode(subnode, gd->fdt_blob, node) {
>>>>>                 ret = fdt_node_check_compatible(gd->fdt_blob, subnode,
>>>>>                                                 "cavium,thunder-8890-mdio");
>>>>>
>>>
>>> Honestly this is the wrong fix for this issue and I'm hoping someone
>>> could educate me. I'm a bit confused at why there are several ways to
>>> work with dt (int offsets vs ofnodes which are unions of int offsets
>>> and node pointers???).
>>>
>>> The above patch was not needed previously so something changed in the
>>> ofnode field of struct udevice between v2019.10 and v2021.01.
>>>
>>> Simon, could you explain what the proper way to work with dev->ofnode
>>> in probe functions is to loop over subnodes?
>>
>> This version is in mainline now. Tim, could you please re-visit this
>> and perhaps switch to using live tree API, as suggested by Suneel:
>>
>>          ofnode_for_each_subnode(subnode, dev_ofnode(dev)) {
>>                  ret = ofnode_device_is_compatible(subnode,
>>                          "cavium,thunder-8890-mdio");
>>
> 
> Stefan,
> 
> Yes, I can submit this but I would really like to understand the
> original issue. Do you or Simon perhaps know why the fdt node offset
> in dev passed to probe is wrong? It's not null but it does not appear
> to point to a device-tree (or perhaps I was using the wrong functions
> on it not fully understanding the current state of this live tree
> API).

I don't have an OcteonTX board installed right now, so it's not easy to
really verify this. AFAIU, fdt_for_each_subnode() etc is deprecated and
the use of e.g. this API seems "more modern":

	ofnode subnode;

	dev_for_each_subnode(subnode, dev) {
		...

Does this work for you?

Thanks,
Stefan


More information about the U-Boot mailing list