Skip to content

Commit 84549c8

Browse files
dolcinimiquelraynal
authored andcommitted
mtd: parsers: ofpart: add workaround for #size-cells 0
Add a mechanism to handle the case in which partitions are present as direct child of the nand controller node and #size-cells is set to <0>. This could happen if the nand-controller node in the DTS is supposed to have #size-cells set to 0, but for some historical reason/bug it was set to 1 in the past, and the firmware (e.g. U-Boot) is adding the partition as direct children of the nand-controller defaulting to #size-cells being to 1. This prevents a real boot failure on colibri-imx7 that happened during v6.1 development cycles. Link: https://lore.kernel.org/all/[email protected]/ Link: https://lore.kernel.org/all/[email protected]/ Signed-off-by: Francesco Dolcini <[email protected]> Signed-off-by: Miquel Raynal <[email protected]> Link: https://lore.kernel.org/linux-mtd/[email protected]
1 parent c705e63 commit 84549c8

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

drivers/mtd/parsers/ofpart_core.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,25 @@ static int parse_fixed_partitions(struct mtd_info *master,
122122

123123
a_cells = of_n_addr_cells(pp);
124124
s_cells = of_n_size_cells(pp);
125+
if (!dedicated && s_cells == 0) {
126+
/*
127+
* This is a ugly workaround to not create
128+
* regression on devices that are still creating
129+
* partitions as direct children of the nand controller.
130+
* This can happen in case the nand controller node has
131+
* #size-cells equal to 0 and the firmware (e.g.
132+
* U-Boot) just add the partitions there assuming
133+
* 32-bit addressing.
134+
*
135+
* If you get this warning your firmware and/or DTS
136+
* should be really fixed.
137+
*
138+
* This is working only for devices smaller than 4GiB.
139+
*/
140+
pr_warn("%s: ofpart partition %pOF (%pOF) #size-cells is wrongly set to <0>, assuming <1> for parsing partitions.\n",
141+
master->name, pp, mtd_node);
142+
s_cells = 1;
143+
}
125144
if (len / 4 != a_cells + s_cells) {
126145
pr_debug("%s: ofpart partition %pOF (%pOF) error parsing reg property.\n",
127146
master->name, pp,

0 commit comments

Comments
 (0)