[PATCH v5 2/4] mach-k3: add runtime configuration of MMU table

Ilias Apalodimas ilias.apalodimas at linaro.org
Mon Jul 7 22:15:59 CEST 2025


Hi Anshul,

On Thu Jul 3, 2025 at 4:35 PM EEST, Anshul Dalal wrote:
> k3_mem_map is used by u-boot to configure the MMU on k3 devices but
> currently it's a static array which does not scale for platforms with
> non-standard load addresses for ATF and OP-TEE. Additionally on systems
> with limited DRAM, more space is mapped than is available on the device.
>
> Therefore this patch adds a new k3_mem_map_init function which can
> be called from dram_init to configure the table at runtime where we
> can query the required DDR information and reserved regions from the
> device-tree.

Is this a problem for k3 only? This kind of code should be aimed at the mmu
support and improving armv8 overall, not specific platforms

>
> A dummy implementation is also added in r5/common.c to allow the build
> to pass without masking each call to k3_mem_map_init behind an ifdef
> CONFIG_ARM64.
>
> Signed-off-by: Anshul Dalal <anshuld at ti.com>

[...]

> +
> +static void k3_mmu_add_cachable_entry(u64 start, u64 end, unsigned int *map_idx)
> +{
> +	if (start >= end)
> +		return;
> +
> +	k3_mem_map[*map_idx].virt = start,
> +	k3_mem_map[*map_idx].phys = start,
> +	k3_mem_map[*map_idx].size = end - start,
> +	k3_mem_map[*map_idx].attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
> +				     PTE_BLOCK_INNER_SHARE;
> +	(*map_idx)++;
> +}

Doesn't this need a break-before-make?
Also why does it have to be a board specific function? Is there something mmu_change_region_attr()
doesn't do ?

> +
> +/* It is assumed that if ATF and OPTEE are loaded in DDR, they are loaded to
> + * first bank only
> +
> +static int k3_setup_extra_mem_banks(unsigned int *map_idx)
> +{
> +	unsigned int bank;
> +	int ret;
> +
> +	ret = fdtdec_setup_memory_banksize();
> +	if (ret)
> +		return ret;
> +
> +	for (bank = 1; bank < CONFIG_NR_DRAM_BANKS; bank++) {
> +		k3_mmu_add_cachable_entry(gd->bd->bi_dram[bank].start,
> +					  gd->bd->bi_dram[bank].start +
> +						  gd->bd->bi_dram[bank].size,
> +					  map_idx);
> +	}
> +

ditto

> +static int k3_uboot_mem_map_init(unsigned int *map_idx)
> +{
> +	int ret;
> +
> +	/* Overwrite the 128MiB SPL entry */
> +	(*map_idx)--;
> +
> +	ret = k3_setup_first_mem_bank(map_idx);
> +	if (ret)
> +		return ret;
> +
> +	if (CONFIG_NR_DRAM_BANKS > 1)
> +		ret = k3_setup_extra_mem_banks(map_idx);
> +
> +	return ret;
> +}
> +
> diff --git a/arch/arm/mach-k3/include/mach/k3-ddr.h b/arch/arm/mach-k3/include/mach/k3-ddr.h

[..]

Thanks
/Ilias


More information about the U-Boot mailing list