On 23.11.2021 10:15, Tony Lindgren wrote:
* Rafał Miłecki <zajec5@xxxxxxxxx> [211123 07:56]:
Does it mean above "reg" usages are all incorrect and binding "reg" in
such way is deprecated? This is something totally new to me, can you
confirm that, please?
Here you have a device with multiple control register instances at
various register offsets. Using index here makes as much sense as
the old interrupt number defines we used to have but got rid of.
Please don't use an index to address them. Index makes sense when
there is no real offset to use, like a SPI chip select, or a bit
offset inside the register like a GPIO instance bit.
I think I'll simply trust you on this as there seems to be some thin
line I can't really see. It may be however worth documenting somehwere
what's the rule for changing "reg" context. So that in future less
experienced developers (like me) don't bother maintainers with such
bad concepts.
What I understood from your e-mail is that it's a matter of "reg" usage
in a hardware block binding. If reg contains "multiple control register
instances" (I understand it as reg space size > 0x4) then children nodes
may use "reg" only as address in that register space.
My above understanding doesn't fit however what I see in various
controllers.
*****
Example 1:
usb/generic-xhci.yaml / usb/usb-xhci.yaml
That block binding covers *multiple* registers, see:
reg = <0xf0931000 0x8c8>;
However its children nodes are indexed and use "reg", see:
hub@1 {
compatible = "usb5e3,610";
reg = <1>;
};
*****
Example 2:
spi/spi-controller.yaml
That binding uses "fsl,imx28-spi" as example. Its binding covers
*multiple* registers, see:
reg = <0x80010000 0x2000>;
However its children nodes are indexed and use "reg", see:
display@0 {
compatible = "lg,lg4573";
spi-max-frequency = <1000000>;
reg = <0>;
};
*****
So it appears my understanding is wrong somewhere. It seems to be a bit
tricky to get things right so I'd really appreciate some documentation
on that.