[U-Boot] [PATCH] ARM: OMAP5/DRA7: Provide workaround for ARM erratum 801819

Nishanth Menon nm at ti.com
Fri Jul 24 23:46:03 CEST 2015


On 07/24/2015 10:12 AM, Nishanth Menon wrote:
> ARM erratum 801819 ("An eviction from L1 data cache might stall
> indefinitely in the L2 write buffer preventing a snoop from
> completing") applies to A15 which may not have the erratum fix
> integrated (CPUID maynot exactly help here, since certain SoC
> versions might choose to pick up just the fix and no update in MIDR
> register.
> 
> OMAP5 and DRA7 family of processors (at least the current revisions) do
> not have the fix integrated.
> 
> Errata summary is that "A livelock can occur in the L2 cache arbitration
> that might prevent a snoop from completing. Under certain conditions
> this can cause the system to deadlock. "
> 
> Recommended workaround is as follows:
> Do both of the following:
> 
> 1) Do not use the write-back no-allocate memory type.
> 2) Do not issue write-back cacheable stores at any time when the cache
> is disabled (SCTLR.C=0) and the MMU is enabled (SCTLR.M=1). Because it
> is implementation defined whether cacheable stores update the cache when
> the cache is disabled it is not expected that any portable code will
> execute cacheable stores when the cache is disabled.
> 
> For implementations of Cortex-A15 configured without the “L2 arbitration
> register slice” option (typically one or two core systems), you must
> also do the following:
> 
> 3) Disable write-streaming in each CPU by setting ACTLR[28:25] = 0b1111
> 
> So, we provide an option to disable write streaming on OMAP5 and DRA7.
> It is a rare condition to occur and may be enabled selectively based
> on platform acceptance of risk. Most TI platforms used for development
> may probably never see it, so, this is not enabled by default.
> 
> Suggested-by: Richard Woodruff <r-woodruff2 at ti.com>
> Suggested-by: Brad Griffis <bgriffis at ti.com>
> Signed-off-by: Nishanth Menon <nm at ti.com>
> ---
>  arch/arm/cpu/armv7/omap5/Kconfig  |  7 +++++++
>  arch/arm/cpu/armv7/omap5/hwinit.c | 11 +++++++++++
>  2 files changed, 18 insertions(+)
> 
> diff --git a/arch/arm/cpu/armv7/omap5/Kconfig b/arch/arm/cpu/armv7/omap5/Kconfig
> index 20c3bd963bc6..6a85848f229e 100644
> --- a/arch/arm/cpu/armv7/omap5/Kconfig
> +++ b/arch/arm/cpu/armv7/omap5/Kconfig
> @@ -21,6 +21,13 @@ endchoice
>  config SYS_SOC
>  	default "omap5"
>  
> +config TI_ARM_ERRATA_801819
> +	bool "Enable erratum workaround for 801819"
> +	help
> +	  Disable streaming as a workaround for ARM erratum 801819
> +	  NOTE: Enabling this erratum workaround may have severe
> +	  performance issues for a potentially rare deadlock condition
> +
>  source "board/compulab/cm_t54/Kconfig"
>  source "board/ti/omap5_uevm/Kconfig"
>  source "board/ti/dra7xx/Kconfig"
> diff --git a/arch/arm/cpu/armv7/omap5/hwinit.c b/arch/arm/cpu/armv7/omap5/hwinit.c
> index 39f8d0d5e200..0d57d78f6e4f 100644
> --- a/arch/arm/cpu/armv7/omap5/hwinit.c
> +++ b/arch/arm/cpu/armv7/omap5/hwinit.c
> @@ -330,6 +330,17 @@ void init_cpu_configuration(void)
>  	 * 8: Disable DVM/CMO message broadcast
>  	 */
>  	l2actlr |= 0x118;
> +
> +#ifdef CONFIG_TI_ARM_ERRATA_801819
> +	/*
> +	 * 28:27 Disables streaming. All write-allocate lines allocate in the L1
> +	 * or L2 cache
> +	 * 26:25 - Disables streaming. All write-allocate lines allocate in
> +	 * the L1 cache.
> +	 */
> +	l2actlr |= (0x3 << 27) | (0x3 << 25);
> +#endif
> +
>  	omap_smc1(OMAP5_SERVICE_L2ACTLR_SET, l2actlr);
>  }
>  
> 

Sorry about that.. I was supposed to write to ACTLR register, not
L2ACTLR register.. NAK for my own patch. :(


-- 
Regards,
Nishanth Menon


More information about the U-Boot mailing list