From be59e85da9515edfde48abf3d5bfab5de1a3cfc8 Mon Sep 17 00:00:00 2001 From: Laura Abbott <lauraa@codeaurora.org> Date: Wed, 25 Sep 2013 13:40:02 -0700 Subject: [PATCH] cma: Add support for different size_cells and address_cells Currently, the CMA flat device tree code does not take into account targets that may specify size_cells and address_cells > 1. This will lead to unsuccessful parsing. Add support for taking into account nodes that may specify size_cells and address_cells explicitly. Change-Id: I9ea63b8c34e903b186c29ec6555dd7a5c317c602 Signed-off-by: Laura Abbott <lauraa@codeaurora.org> --- drivers/base/dma-contiguous.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c index 3baca0e1b37b..caf870b3c852 100644 --- a/drivers/base/dma-contiguous.c +++ b/drivers/base/dma-contiguous.c @@ -220,16 +220,26 @@ int __init cma_fdt_scan(unsigned long node, const char *uname, __be32 *prop; char *name; bool in_system; + unsigned long size_cells = dt_root_size_cells; + unsigned long addr_cells = dt_root_addr_cells; if (!of_get_flat_dt_prop(node, "linux,contiguous-region", NULL)) return 0; + prop = of_get_flat_dt_prop(node, "#size-cells", NULL); + if (prop) + size_cells = be32_to_cpu(prop); + + prop = of_get_flat_dt_prop(node, "#address-cells", NULL); + if (prop) + addr_cells = be32_to_cpu(prop); + prop = of_get_flat_dt_prop(node, "reg", &len); - if (!prop || (len != 2 * sizeof(unsigned long))) + if (!prop || depth != 2) return 0; - base = be32_to_cpu(prop[0]); - size = be32_to_cpu(prop[1]); + base = dt_mem_next_cell(addr_cells, &prop); + size = dt_mem_next_cell(size_cells, &prop); name = of_get_flat_dt_prop(node, "label", NULL); in_system = -- GitLab