diff options
author | Rouven Czerwinski <r.czerwinski@pengutronix.de> | 2019-03-12 11:16:39 +0100 |
---|---|---|
committer | Jérôme Forissier <jerome.forissier@linaro.org> | 2019-03-15 10:26:19 +0100 |
commit | 995908f2a91c06ccd3e1bab7bc57325ecf270f62 (patch) | |
tree | f2fbe7de6dd6a685410c8b06dea6446dd8a4acc9 /core/arch/arm/kernel | |
parent | 4cf72d24a4a734f48053087e16456e4ab00de92a (diff) |
generic_boot: retrieve address-cells and size-cells from root
If the reserved-memory subnode does not exist, retrieve address-cells
and size-cells from the root node.
The linux kernel checks whether these properties match between the root
and reserved-memory nodes and discards non-matching nodes.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
Diffstat (limited to 'core/arch/arm/kernel')
-rw-r--r-- | core/arch/arm/kernel/generic_boot.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/core/arch/arm/kernel/generic_boot.c b/core/arch/arm/kernel/generic_boot.c index 557866d8..dd77bbf9 100644 --- a/core/arch/arm/kernel/generic_boot.c +++ b/core/arch/arm/kernel/generic_boot.c @@ -760,21 +760,28 @@ static uint64_t get_dt_val_and_advance(const void *data, size_t *offs, static int add_res_mem_dt_node(struct dt_descriptor *dt, const char *name, paddr_t pa, size_t size) { - int offs; - int ret; - int addr_size = 2; - int len_size = 2; - char subnode_name[80]; + int offs = 0; + int ret = 0; + int addr_size = -1; + int len_size = -1; + bool found = true; + char subnode_name[80] = { 0 }; offs = fdt_path_offset(dt->blob, "/reserved-memory"); - if (offs >= 0) { - addr_size = fdt_address_cells(dt->blob, offs); - if (addr_size < 0) - return -1; - len_size = fdt_size_cells(dt->blob, offs); - if (len_size < 0) - return -1; - } else { + + if (offs < 0) { + found = false; + offs = 0; + } + + len_size = fdt_size_cells(dt->blob, offs); + if (len_size < 0) + return -1; + addr_size = fdt_address_cells(dt->blob, offs); + if (addr_size < 0) + return -1; + + if (!found) { offs = add_dt_path_subnode(dt, "/", "reserved-memory"); if (offs < 0) return -1; |