9
0
Fork 0

mtd: partition: Fix OF partition fixup

To get the number of address cells and size cells we have to use
the newly created partition node, not the parent device node. The
parent device node returns the address/size cells of the controller
node, not the partition node.

On an am335x machine this fixes the device tree passed to Linux.
The situation there is:
	...
	gpmc@50000000 {
		...
		#address-cells = <0x2>;
		#size-cells = <0x1>;
		ranges = <0x0 0x0 0x8000000 0x10000000>;
		...
		nand@0,0 {
			reg = <0x0 0x0 0x0>;
			#address-cells = <0x1>;
			#size-cells = <0x1>;
			...
			partition@7 {
				label = "system";
				reg = <0x220000 0x7de0000>;
			};
		};
	};

and without this patch barebox passes three bytes for
partition@7's reg property instead of only two which naturally
confuses Linux and yields to the system partition to start at 0
with a size of 0x220000.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reported-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tested-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This commit is contained in:
Sascha Hauer 2015-04-27 11:22:16 +02:00
parent dbe6023074
commit 10e6930323
1 changed files with 2 additions and 2 deletions

View File

@ -520,8 +520,8 @@ static int of_mtd_fixup(struct device_node *root, void *ctx)
if (!p)
return -ENOMEM;
na = of_n_addr_cells(np);
ns = of_n_size_cells(np);
na = of_n_addr_cells(part);
ns = of_n_size_cells(part);
of_write_number(tmp + len, partmtd->master_offset, na);
len += na * 4;