Re: of_platform_populate() for address-less nodes (OF: Bad cell count for ...)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jul 15, 2022 at 9:16 AM Rafał Miłecki <zajec5@xxxxxxxxx> wrote:
>
> On 15.07.2022 17:02, Rob Herring wrote:
> > On Fri, Jul 15, 2022 at 5:59 AM Rafał Miłecki <zajec5@xxxxxxxxx> wrote:
> >>
> >> I need Linux to support MTD partitions drivers. They should get probed
> >> for MTD partitions, access it, do their stuff. Random example:
> >>
> >> partitions {
> >>          compatible = "fixed-partitions";
> >>          #address-cells = <1>;
> >>          #size-cells = <1>;
> >>
> >>          partition@0 {
> >>                  compatible = "u-boot,bootloader";
> >>                  label = "loader";
> >>                  reg = <0x0 0x100000>;
> >>          };
> >>
> >>          partition@100000 {
> >>                  compatible = "u-boot,env";
> >>                  label = "image";
> >>                  reg = <0x100000 0x100000>;
> >>          };
> >> };
> >>
> >> (please don't confuse them with parsers which are MTD internals)
> >>
> >>
> >> To support that I added of_platform_populate() calls, see commit
> >> bcdf0315a61a2 ("mtd: call of_platform_populate() for MTD partitions"):
> >> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bcdf0315a61a29eb753a607d3a85a4032de72d94
> >>
> >>
> >> The problem I just noticed is it triggers errors like:
> >> OF: Bad cell count for /bus@ff800000/nand-controller@1800/nand@0/partitions
> >>
> >> It comes from (forward-trace):
> >> of_platform_populate()
> >> of_platform_bus_create()
> >> of_platform_device_create_pdata()
> >> of_device_alloc()
> >> of_address_to_resource()
> >> of_address_to_resource()
> >> __of_address_to_resource()
> >> of_translate_address()
> >> __of_translate_address()
> >> OF_CHECK_COUNTS()
> >> pr_err()
> >>
> >>
> >> It's caused by "partitions" node having 1 address cell and 0 size cells.
> >> It's a consequence of inheriting sizes from NAND CS:
> >>
> >> nand-controller@1800 {
> >>          ...
> >>
> >>          #address-cells = <1>;
> >>          #size-cells = <0>;
> >>
> >>          nand@0 {
> >>                  compatible = "brcm,nandcs";
> >>                  reg = <0>;
> >>
> >>                  partitions {
> >>                          ...
> >>                  };
> >>          };
> >> };
> >>
> >>
> >> Is that something that can / should be fixed in OF implementation?
> >>
> >> I don't think I should assign sizes to "partitions" node as it doesn't
> >> use "reg" at all. All "reg" in "partitions" subnodes contain flash
> >> relative offsets and they should not be translated.
> >
> > Yes, you should. The parent node of a node with 'reg' must have
> > #address-cells and #size-cells. Simple as that.
>
> For "parent node of a node with 'reg'" it's obvious. We have a different
> case here though.
>
> Please take one more look. Node named "partitions" does not have "reg".
> That is what I don't have #foo-cells in the nand@0.
>
> A complete example:

Okay, that looks valid.

Back to your original issue, I think the issue is that for (DT)
platform devices, the assumption is that they are MMIO (i.e.
translatable) based devices. Certainly that's the case for devices
created by the DT core if not all devices created. Maybe we could
relax this... But reg could not be a struct resource in this case
because there's not an address space for it (it's not MEM or IO). That
all seems to me a bit of abuse of the platform bus. Perhaps a
partition bus and devices are needed? You'll need to ask a wider
audience that.

Rob




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux