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 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




[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