[U-Boot] [PATCH v4 1/2] Errata/ARM57: Add basic constructs to handle and apply A57 specific erratas

Albert ARIBAUD albert.u.boot at aribaud.net
Sun Feb 1 00:14:43 CET 2015


Hello Bhupesh,

On Fri, 23 Jan 2015 15:50:04 +0530, Bhupesh Sharma <bhupesh.sharma at freescale.com> wrote:
> This patch adds basic constructs in the ARMv8 u-boot code
> to handle and apply Cortex-A57 specific erratas.
> 
> As and example, the framework showcases how erratas 833069, 826974
> and 828024 can be handled and applied.
> 
> Later on this framework can be extended to include other
> erratas.
> 
> Signed-off-by: Bhupesh Sharma <bhupesh.sharma at freescale.com>
> ---
> Changes from v3:
> 	- Addressed comments from Scott regarding backward branching &
> 	  correct masking from A53's MIDR_EL1.
> 
> Changes from v2:
> 	- Addressed comments regarding incorrect handling of bl and ret
> 	  sequences.
> 	- Reorganized the code to be more readable.
> 
> Changes from v1:
> 	- Addressed Yorks' comments about x29 corruption.
> 
>  arch/arm/cpu/armv8/start.S   |   45 ++++++++++++++++++++++++++++++++++++++++++
>  arch/arm/include/asm/macro.h |   22 +++++++++++++++++++++
>  2 files changed, 67 insertions(+)
> 
> diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
> index 4b11aa4..540a5db 100644
> --- a/arch/arm/cpu/armv8/start.S
> +++ b/arch/arm/cpu/armv8/start.S
> @@ -67,6 +67,9 @@ reset:
>  	msr	cpacr_el1, x0			/* Enable FP/SIMD */
>  0:
>  
> +	/* Apply ARM core specific erratas */
> +	bl	apply_core_errata
> +
>  	/*
>  	 * Cache/BPB/TLB Invalidate
>  	 * i-cache is invalidated before enabled in icache_enable()
> @@ -97,6 +100,48 @@ master_cpu:
>  
>  /*-----------------------------------------------------------------------*/
>  
> +WEAK(apply_core_errata)
> +
> +	mov	x29, lr			/* Save LR */
> +	/* For now, we support Cortex-A57 specific errata only */
> +
> +	/* Check if we are running on a Cortex-A57 core */
> +	branch_if_a57_core x0, apply_a57_core_errata
> +0:
> +	mov	lr, x29			/* Restore LR */
> +	ret
> +
> +apply_a57_core_errata:
> +
> +#ifdef CONFIG_ARM_ERRATA_828024
> +	mrs	x0, S3_1_c15_c2_0	/* cpuactlr_el1 */
> +	/* Disable non-allocate hint of w-b-n-a memory type */
> +	mov	x0, #0x1 << 49
> +	/* Disable write streaming no L1-allocate threshold */
> +	mov	x0, #0x3 << 25
> +	/* Disable write streaming no-allocate threshold */
> +	mov	x0, #0x3 << 27
> +	msr	S3_1_c15_c2_0, x0	/* cpuactlr_el1 */
> +#endif
> +
> +#ifdef CONFIG_ARM_ERRATA_826974
> +	mrs	x0, S3_1_c15_c2_0	/* cpuactlr_el1 */
> +	/* Disable speculative load execution ahead of a DMB */
> +	mov	x0, #0x1 << 59
> +	msr	S3_1_c15_c2_0, x0	/* cpuactlr_el1 */
> +#endif
> +
> +#ifdef CONFIG_ARM_ERRATA_833069
> +	mrs	x0, S3_1_c15_c2_0	/* cpuactlr_el1 */
> +	/* Disable Enable Invalidates of BTB bit */
> +	and	x0, x0, #0xE
> +	msr	S3_1_c15_c2_0, x0	/* cpuactlr_el1 */
> +#endif
> +	b 0b
> +ENDPROC(apply_core_errata)
> +
> +/*-----------------------------------------------------------------------*/
> +
>  WEAK(lowlevel_init)
>  	mov	x29, lr			/* Save LR */
>  
> diff --git a/arch/arm/include/asm/macro.h b/arch/arm/include/asm/macro.h
> index 1c8c425..5f7c7e0 100644
> --- a/arch/arm/include/asm/macro.h
> +++ b/arch/arm/include/asm/macro.h
> @@ -74,6 +74,28 @@ lr	.req	x30
>  .endm
>  
>  /*
> + * Branch if current processor is a Cortex-A57 core.
> + */
> +.macro	branch_if_a57_core, xreg, a57_label
> +	mrs	\xreg, midr_el1
> +	lsr	\xreg, \xreg, #4
> +	and	\xreg, \xreg, #0x00000FFF
> +	cmp	\xreg, #0xD07		/* Cortex-A57 MPCore processor. */
> +	b.eq	\a57_label
> +.endm
> +
> +/*
> + * Branch if current processor is a Cortex-A53 core.
> + */
> +.macro	branch_if_a53_core, xreg, a53_label
> +	mrs	\xreg, midr_el1
> +	lsr	\xreg, \xreg, #4
> +	and	\xreg, \xreg, #0x00000FFF
> +	cmp	\xreg, #0xD03		/* Cortex-A53 MPCore processor. */
> +	b.eq	\a53_label
> +.endm
> +
> +/*
>   * Branch if current processor is a slave,
>   * choose processor with all zero affinity value as the master.
>   */
> -- 
> 1.7.9.5
> 
> 

Applied to u-boot-arm/master, thanks!

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list