[PATCH v10 07/11] arm: armv8: mmu: add mmu_unmap_reserved_mem

Anshul Dalal anshuld at ti.com
Fri Oct 17 14:50:21 CEST 2025


On Fri Oct 17, 2025 at 6:04 PM IST, Ilias Apalodimas wrote:
> Hi Anshul,
>
> On Fri, 10 Oct 2025 at 16:44, Anshul Dalal <anshuld at ti.com> wrote:
>>
>> For armv8, U-Boot uses a static map defined as 'mem_map' for configuring
>> the MMU's page tables, done by mmu_setup.
>>
>> Though this works well for simpler platforms, it makes creating runtime
>> carveouts by modifying the static array at runtime exceedingly complex
>> like in mach-snapdragon/board.c.
>>
>> Creation of such carveouts are much better handled by APIs such as
>> mmu_change_region_attr once the page tables are configured. Usually such
>> carveouts are configured via the device-tree's reserved-memory node
>> which provides the address and size for the carveout.
>>
>> Therefore this patch adds mmu_unmap_reserved_mem which acts as a wrapper
>> over mmu_change_region_attr, helping unmap a reserved-memory region.
>>
>> Signed-off-by: Anshul Dalal <anshuld at ti.com>
>> Tested-by: Wadim Egorov <w.egorov at phytec.de>
>> ---
>>  arch/arm/cpu/armv8/cache_v8.c    | 26 ++++++++++++++++++++++++++
>>  arch/arm/include/asm/armv8/mmu.h |  8 ++++++++
>>  2 files changed, 34 insertions(+)
>>
>> diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
>> index 9b3c37dae82..f2e006a98ab 100644
>> --- a/arch/arm/cpu/armv8/cache_v8.c
>> +++ b/arch/arm/cpu/armv8/cache_v8.c
>> @@ -86,6 +86,32 @@ int mem_map_from_dram_banks(unsigned int index, unsigned int len, u64 attrs)
>>
>>         return 0;
>>  }
>> +
>> +int mmu_unmap_reserved_mem(const char *name)
>> +{
>> +       void *fdt = (void *)gd->fdt_blob;
>> +       char node_path[128];
>> +       fdt_addr_t addr;
>> +       fdt_size_t size;
>> +       int ret;
>> +
>> +       snprintf(node_path, sizeof(node_path), "/reserved-memory/%s", name);
>> +       ret = fdt_path_offset(fdt, node_path);
>> +       if (ret < 0)
>> +               return ret;
>> +
>> +       if (!fdtdec_get_bool(fdt, ret, "no-map"))
>> +               return -EINVAL;
>> +
>
> Apologies I wasn't clear on my last mail. Can we do this check
> conditional please? IOW add a "check_nomap" in the function args

Will add that in the next revision, thanks for the review!

Anshul

>
>> +       addr = fdtdec_get_addr_size(fdt, ret, "reg", &size);
>> +       if (addr == FDT_ADDR_T_NONE)
>> +               return -1;
>> +
>> +       mmu_change_region_attr_nobreak(addr, size, PTE_TYPE_FAULT);
>> +
>> +       return 0;
>> +}
>> +
>>  u64 get_tcr(u64 *pips, u64 *pva_bits)
>>  {
>>         int el = get_effective_el();
>> diff --git a/arch/arm/include/asm/armv8/mmu.h b/arch/arm/include/asm/armv8/mmu.h
>> index 6e7a3366844..ca402c7d74c 100644
>> --- a/arch/arm/include/asm/armv8/mmu.h
>> +++ b/arch/arm/include/asm/armv8/mmu.h
>> @@ -207,6 +207,14 @@ void setup_pgtables(void);
>>   */
>>  int mem_map_from_dram_banks(unsigned int index, unsigned int len, u64 attrs);
>>
>> +/**
>> + * mmu_unmap_reserved_mem() - Unmaps a reserved-memory node as PTE_TYPE_FAULT
>> + * once MMU is configured by mmu_setup.
>> + *
>> + * @name: The name of the node under "/reserved-memory/" path
>> + */
>> +int mmu_unmap_reserved_mem(const char *name);
>> +
>>  u64 get_tcr(u64 *pips, u64 *pva_bits);
>>
>>  /**
>> --
>> 2.51.0
>>
>
> Other than that
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>



More information about the U-Boot mailing list