From 386946ee5427bbc7cb6510daa09bb3fa48c1d80e Mon Sep 17 00:00:00 2001 From: Masayuki Ishikawa Date: Fri, 4 Jun 2021 10:54:46 +0900 Subject: [PATCH] arch: cxd56xx: Fix address mapping in cxd56_modtext.c Summary: - I noticed that DEBUGASSERTION() happens when executing an ELF application - This commit fixes this issue by re-mapping the address to SYSBUS in up_module_text_free() Impact: - None Testing: - Tested with spresense (both DEBUG_ASSERTIONS=n and y) Signed-off-by: Masayuki Ishikawa --- arch/arm/src/cxd56xx/cxd56_modtext.c | 36 +++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/arch/arm/src/cxd56xx/cxd56_modtext.c b/arch/arm/src/cxd56xx/cxd56_modtext.c index b58fcb38689..f17faba805c 100644 --- a/arch/arm/src/cxd56xx/cxd56_modtext.c +++ b/arch/arm/src/cxd56xx/cxd56_modtext.c @@ -33,6 +33,12 @@ #include #include +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define SYSBUS_ADDRESS_OFFSET 0x20000000 + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -55,7 +61,19 @@ FAR void *up_module_text_memalign(size_t align, size_t size) ret = (FAR void *)kmm_malloc(size); #ifdef CONFIG_CXD56_USE_SYSBUS - ret -= 0x20000000; + if (ret) + { + binfo("** ret=%p \n", ret); + + /* NOTE: + * kmm_malloc() will return the address in SYSBUS. + * So convert the address to I/D BUS. + */ + + ret -= SYSBUS_ADDRESS_OFFSET; + + binfo("** mapped to %p \n", ret); + } #endif return ret; @@ -67,5 +85,21 @@ FAR void *up_module_text_memalign(size_t align, size_t size) void up_module_text_free(FAR void *p) { +#ifdef CONFIG_CXD56_USE_SYSBUS + if (p) + { + binfo("** p=%p \n", p); + + /* NOTE: + * The address p will be in I/D BUS. + * So convert the address to SYSBUS. + */ + + p += SYSBUS_ADDRESS_OFFSET; + + binfo("** mapped to %p \n", p); + } +#endif + kmm_free(p); }