From 2cc6af6188e6199d189553815a1486cc0fe75d37 Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Sat, 2 Aug 2025 13:42:13 -0500 Subject: [PATCH] bsps/aarch64: Fix warning on ILP32 ILP32 can't represent 4GB in uintptr_t. Avoid the warning that this assignment generates and update MMU config processing to avoid overflow when ILP32 is in use. --- bsps/aarch64/shared/mmu/mmu-setup.c | 6 +++--- bsps/aarch64/xilinx-zynqmp/start/mmu-config.c | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bsps/aarch64/shared/mmu/mmu-setup.c b/bsps/aarch64/shared/mmu/mmu-setup.c index 9c414c974d..09f8d9ed13 100644 --- a/bsps/aarch64/shared/mmu/mmu-setup.c +++ b/bsps/aarch64/shared/mmu/mmu-setup.c @@ -264,9 +264,9 @@ aarch64_mmu_set_translation_table_entries( { uint64_t max_mappable = 1LLU << aarch64_mmu_get_cpu_pa_bits(); /* Align to page boundaries */ - uintptr_t begin = RTEMS_ALIGN_DOWN( config->begin, MMU_PAGE_SIZE ); - uintptr_t end = RTEMS_ALIGN_UP( config->end, MMU_PAGE_SIZE ); - uintptr_t size = end - begin; + uint64_t begin = RTEMS_ALIGN_DOWN( config->begin, MMU_PAGE_SIZE ); + uint64_t end = RTEMS_ALIGN_UP( (uint64_t) config->end, MMU_PAGE_SIZE ); + uint64_t size = end - begin; if ( config->begin == config->end ) { return RTEMS_SUCCESSFUL; diff --git a/bsps/aarch64/xilinx-zynqmp/start/mmu-config.c b/bsps/aarch64/xilinx-zynqmp/start/mmu-config.c index 01801cc312..1b0169802a 100644 --- a/bsps/aarch64/xilinx-zynqmp/start/mmu-config.c +++ b/bsps/aarch64/xilinx-zynqmp/start/mmu-config.c @@ -54,7 +54,12 @@ aarch64_mmu_config_table[] = { /* Map OCM space */ }, { .begin = 0xfffc0000U, - .end = 0x100000000U, + /* + * This should be 4GB, but uintptr_t can't hold that for ILP32. This will be + * rounded up to MMU page alignment during initial setup and will end up + * being 4GB anyway. + */ + .end = 0xffffffffU, .flags = AARCH64_MMU_DATA_RW }, { /* DDRMC_region1_mem, if not used size is 0 and ignored */ .begin = (uintptr_t) bsp_r1_ram_base,