From 10e69303239b91a81149490fd22c848a0813c35e Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 27 Apr 2015 11:22:16 +0200 Subject: mtd: partition: Fix OF partition fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reported-by: Uwe Kleine-König Tested-by: Uwe Kleine-König --- drivers/mtd/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index 63b1e4a824..431114bab8 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -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; -- cgit v1.2.3