[U-Boot] [PATCH 1/3] armv8/cache: Consolidate setting for MAIR and TCR
FengHua
fenghua at phytium.com.cn
Thu Feb 13 04:13:04 CET 2014
hi York,
> -----Original Messages-----
> From: "York Sun" <yorksun at freescale.com>
> Sent Time: 2014-02-11 05:55:52 (Tuesday)
> To: albert.u.boot at aribaud.net
> Cc: scottwood at freescale.com, "York Sun" <yorksun at freescale.com>, "David Feng" <fenghua at phytium.com.cn>
> Subject: [PATCH 1/3] armv8/cache: Consolidate setting for MAIR and TCR
>
> Move setting for MAIR and TCR to cache_v8.c, to avoid conflict with
> sub-architecture.
>
> Signed-off-by: York Sun <yorksun at freescale.com>
> CC: David Feng <fenghua at phytium.com.cn>
> ---
> arch/arm/cpu/armv8/cache_v8.c | 22 +++++++++++++++++++---
> arch/arm/cpu/armv8/start.S | 22 ----------------------
> 2 files changed, 19 insertions(+), 25 deletions(-)
>
> diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
> index 131fdab..7acae1b 100644
> --- a/arch/arm/cpu/armv8/cache_v8.c
> +++ b/arch/arm/cpu/armv8/cache_v8.c
> @@ -45,15 +45,31 @@ static void mmu_setup(void)
>
> /* load TTBR0 */
> el = current_el();
> - if (el == 1)
> + if (el == 1) {
> asm volatile("msr ttbr0_el1, %0"
> : : "r" (gd->arch.tlb_addr) : "memory");
> - else if (el == 2)
> + asm volatile("msr tcr_el1, %0"
> + : : "r" (TCR_FLAGS | TCR_EL1_IPS_BITS)
> + : "memory");
> + asm volatile("msr mair_el1, %0"
> + : : "r" (MEMORY_ATTRIBUTES) : "memory");
> + } else if (el == 2) {
> asm volatile("msr ttbr0_el2, %0"
> : : "r" (gd->arch.tlb_addr) : "memory");
> - else
> + asm volatile("msr tcr_el2, %0"
> + : : "r" (TCR_FLAGS | TCR_EL2_IPS_BITS)
> + : "memory");
> + asm volatile("msr mair_el2, %0"
> + : : "r" (MEMORY_ATTRIBUTES) : "memory");
> + } else {
> asm volatile("msr ttbr0_el3, %0"
> : : "r" (gd->arch.tlb_addr) : "memory");
> + asm volatile("msr tcr_el3, %0"
> + : : "r" (TCR_FLAGS | TCR_EL2_IPS_BITS)
> + : "memory");
> + asm volatile("msr mair_el3, %0"
> + : : "r" (MEMORY_ATTRIBUTES) : "memory");
> + }
>
> /* enable the mmu */
> set_sctlr(get_sctlr() | CR_M);
> diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
> index bcc2603..90daa4d 100644
> --- a/arch/arm/cpu/armv8/start.S
> +++ b/arch/arm/cpu/armv8/start.S
> @@ -128,28 +128,6 @@ ENTRY(c_runtime_cpu_setup)
> isb sy
> #endif
>
> -#ifndef CONFIG_SYS_DCACHE_OFF
> - /*
> - * Setup MAIR and TCR.
> - */
> - ldr x0, =MEMORY_ATTRIBUTES
> - ldr x1, =TCR_FLAGS
> -
> - switch_el x2, 3f, 2f, 1f
> -3: orr x1, x1, TCR_EL3_IPS_BITS
> - msr mair_el3, x0
> - msr tcr_el3, x1
> - b 0f
> -2: orr x1, x1, TCR_EL2_IPS_BITS
> - msr mair_el2, x0
> - msr tcr_el2, x1
> - b 0f
> -1: orr x1, x1, TCR_EL1_IPS_BITS
> - msr mair_el1, x0
> - msr tcr_el1, x1
> -0:
> -#endif
> -
> /* Relocate vBAR */
> adr x0, vectors
> switch_el x1, 3f, 2f, 1f
> --
> 1.7.9.5
>
This will be better. Acked.
More information about the U-Boot
mailing list