[U-Boot] [PATCH v2] mx6: Add workaround for ARM errata

Troy Kisky troy.kisky at boundarydevices.com
Sat Jan 5 02:27:09 CET 2013


On 1/4/2013 5:54 PM, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam at freescale.com>
>
> Add workaround for the following ARM errata: 743622 and 751472.
>
> The motivation for this change is the following kernel commit 62e4d357a
> (ARM: 7609/1: disable errata work-arounds which access
> secure registers), which removes the errata from multiplatform kernel.
>
> Since imx has been converted to multiplatform in the kernel, we need to apply
> such workaround into the bootloader.
>
> Workaround code has been taken from arch/arm/mm/proc-v7.S from 3.7.1 kernel.
>
> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
> ---
> Following patch has been proposed into arm kernel mailing list:
> http://www.spinics.net/lists/arm-kernel/msg214840.html
>
> Changes since v1:
> - Use the same style of the erratum in arch/arm/cpu/armv7/mx5/lowlevel_init.S.
>
>   arch/arm/cpu/armv7/mx6/lowlevel_init.S |   10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/arch/arm/cpu/armv7/mx6/lowlevel_init.S b/arch/arm/cpu/armv7/mx6/lowlevel_init.S
> index acadef2..ae8141d 100644
> --- a/arch/arm/cpu/armv7/mx6/lowlevel_init.S
> +++ b/arch/arm/cpu/armv7/mx6/lowlevel_init.S
> @@ -20,6 +20,16 @@
>   
>   #include <linux/linkage.h>
>   
> +.macro init_arm_errata
> +	mrc 15, 0, r1, c1, c0, 1		/* read diagnostic register */
i.MX 6Quad_6Dual Errata (Rev 0) TO1.2.pdf says this should be

mrc 15, 0, r1, c15, c0, 1

Since it also says "undocumented Diagnostic Control register"
and "c1, c0, 1" is "Auxiliary Control Register" I think c15 is right.

Besides, you had C15 in rev 1.

> +	/* ARM erratum ID #743622 */
> +	orr r1, r1, #(1 << 6)			/* set bit #6 */
> +	/* ARM erratum ID #751472 */
> +	orr r1, r1, #(1 << 11)			/* set bit #11 */
> +	mcr 15, 0, r1, c1, c0, 1		/* write diagnostic register */

mcr 15, 0, r1, c15, c0, 1

> +.endm
> +
>   ENTRY(lowlevel_init)
> +	init_arm_errata
>   	mov pc, lr
>   ENDPROC(lowlevel_init)



More information about the U-Boot mailing list