From dfbf3ffd2cf2542e97129e017f4a06afd65b079c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Eduard=20Vintil=C4=83?= Date: Thu, 16 Mar 2023 14:10:46 +0200 Subject: [PATCH] plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one` MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When a node is missing the "ranges" property, offset should be set to 0. The current implementation sets offset to the address to be translated, which ignores the fact that `fdt_default_translate` is later called. The latter function adds the offset to the same address, resulting in doubling the effective address, when in fact a 1-to-1 mapping is necessary. Signed-off-by: Eduard Vintilă Reviewed-by: Robert Kuban Reviewed-by: Razvan Virtan Approved-by: Michalis Pappas Tested-by: Unikraft CI GitHub-Closes: #805 --- plat/drivers/ofw/fdt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plat/drivers/ofw/fdt.c b/plat/drivers/ofw/fdt.c index 41b74f460..2c6735bc0 100644 --- a/plat/drivers/ofw/fdt.c +++ b/plat/drivers/ofw/fdt.c @@ -158,7 +158,7 @@ static int fdt_translate_one(const void *fdt, int parent, fdt32_t *addr, if (!ranges) return 1; if (rlen == 0) { - offset = fdt_reg_read_number(addr, na); + offset = 0; uk_pr_debug("empty ranges, 1:1 translation\n"); goto finish; } @@ -179,7 +179,7 @@ static int fdt_translate_one(const void *fdt, int parent, fdt32_t *addr, memcpy(addr, ranges + na, 4 * pna); finish: - uk_pr_info("parent translation for:%p %x", addr, pna); + uk_pr_info("parent translation for:%p %x\n", addr, pna); /* Translate it into parent bus space */ return fdt_default_translate(addr, offset, pna); -- 2.39.5