aboutsummaryrefslogtreecommitdiff
path: root/core/arch/arm/kernel
diff options
context:
space:
mode:
authorRouven Czerwinski <r.czerwinski@pengutronix.de>2019-03-12 11:16:39 +0100
committerJérôme Forissier <jerome.forissier@linaro.org>2019-03-15 10:26:19 +0100
commit995908f2a91c06ccd3e1bab7bc57325ecf270f62 (patch)
treef2fbe7de6dd6a685410c8b06dea6446dd8a4acc9 /core/arch/arm/kernel
parent4cf72d24a4a734f48053087e16456e4ab00de92a (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.c33
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;