[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