Re: fwnode_for_each_child_node() and OF backend discrepancy

From: Michael Walle
Date: Tue Jun 28 2022 - 17:07:43 EST


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@xxxxxxxxxx> 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.

-michael