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. It is 'ranges' that determines if addresses are translatable or not. Rob