Re: fwnode_for_each_child_node() and OF backend discrepancy

Michael Walle
2022-06-30T21:00:46Z

Am 2022-06-30 22:16, schrieb Horatiu Vultur:
> The 06/28/2022 23:07, Michael Walle wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know
>> the content is safe
>>
>> Am 2022-06-28 22:52, schrieb Horatiu Vultur:
>> > The 06/28/2022 22:28, Andy Shevchenko wrote:
>> > > EXTERNAL EMAIL: Do not click links or open attachments unless you know
>> > > the content is safe
>> > >
>> > > On Tue, Jun 28, 2022 at 5:17 PM Krzysztof Kozlowski
>> > > <krzysztof.kozlowski@linaro.org> wrote:
>> > > > On 28/06/2022 17:09, Michael Walle wrote:
>> >
>> > Hi,
>> >
>> > Sorry for joint this late.
>> >
>> > >
>> > > ...
>> > >
>> > > > > Mh. Assume a SoC with an integrated ethernet switch. Some ports
>> > > > > are externally connected, some don't. I'd think they should be disabled,
>> > > > > no? Until now, all bindings I know, treat them as disabled. But OTOH
>> > > > > you still need to do some configurations on them, like disable port
>> > > > > forwarding, disable them or whatever. So the hardware is present, but
>> > > > > it is not connected to anything.
>> > > >
>> > > > I see your point and the meaning is okay... except that drivers don't
>> > > > touch disabled nodes. If a device (with some address space) is disabled,
>> > > > you do not write there "please be power off". Here the case is a bit
>> > > > different, because I think ports do not have their own address space.
>> > > > Yet it contradicts the logic - something is disabled in DT and you
>> > > > expect to perform actual operations on it.
>> > >
>> > > You beat me up to this comment, I also see a contradiction of what
>> > > "disabled" means in your, Michael, case and what it should be.
>> > >
>> > > If you need to perform an operation on some piece of HW, it has not to
>> > > be disabled.
>> > >
>> > > Or, you may deduce them by knowing how many ports in hardware (this is
>> > > usually done not by counting the nodes, but by a property) and do
>> > > whatever you want on ones, you have not listed (by port_num) in the
>> > > array of parsed children.
>> >
>> > It is not possible to have a defined for the MAX number of ports that
>> > supported by lan966x. Which is 8. And assigned that define to
>> > num_phys_ports instead of counting the entries in DT?
>>
>> You mean also for the lan9662? I'm pretty sure that doesn't
>> work. Have a look where num_phys_ports is used. One random
>> example:
>> https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/microchip/lan966x/lan966x_main.c#L874
>>
>> So if your switch only has 4 ports, then I'd guess you'll
>> access a non-existing register.
>
> Underneath lan662 and lan668 is the same chip. The HW people disable
> some ports/features on each platform but from what I know you will
> still
> be able to access the registers.

I noticed that there are still 8 ports in the register description and
assumed that it was wrong [1]. But ok, that makes sense in some way.
OTOH that means, we cannot do the guesswork Vladimir proposed.

-michael

[1] https://microchip-ung.github.io/lan9662_reginfo/reginfo_LAN9662.html