[PATCH] cmd: cache: Fix non-cached memory cachability
Marek Vasut
marex at denx.de
Mon Apr 27 12:22:39 CEST 2020
On 4/23/20 6:01 PM, Patrice Chotard wrote:
[...]
> diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
> index 007d4ebc49..7f3cfb407c 100644
> --- a/arch/arm/lib/cache.c
> +++ b/arch/arm/lib/cache.c
> @@ -73,6 +73,15 @@ static unsigned long noncached_start;
> static unsigned long noncached_end;
> static unsigned long noncached_next;
>
> +void noncached_set_region(void)
> +{
Make this a __weak function and let architectures override it.
> +#if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
> + mmu_set_region_dcache_behaviour(noncached_start,
> + noncached_end - noncached_start,
> + DCACHE_OFF);
> +#endif
> +}
> +
> void noncached_init(void)
> {
> phys_addr_t start, end;
> @@ -89,9 +98,7 @@ void noncached_init(void)
> noncached_end = end;
> noncached_next = start;
>
> -#if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
> - mmu_set_region_dcache_behaviour(noncached_start, size, DCACHE_OFF);
> -#endif
> + noncached_set_region();
> }
>
> phys_addr_t noncached_alloc(size_t size, size_t align)
> diff --git a/cmd/cache.c b/cmd/cache.c
> index 27dcec0931..86fbaf8dd6 100644
> --- a/cmd/cache.c
> +++ b/cmd/cache.c
> @@ -64,6 +64,9 @@ static int do_dcache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> break;
> case 1:
> dcache_enable();
> +#ifdef CONFIG_SYS_NONCACHED_MEMORY
See above, then you won't need this ifdeffery.
> + noncached_set_region();
> +#endif
> break;
> case 2:
> flush_dcache_all();
>
More information about the U-Boot
mailing list