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