From: Paul Kocialkowski <contact@paulk.fr>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 7/9] ARM: OMAP3: Introduce OMAP3 Cortex-A8 revision specific errata
Date: Wed, 25 Feb 2015 12:15:54 +0100 [thread overview]
Message-ID: <1424862954.2460.14.camel@collins> (raw)
In-Reply-To: <1424818672-29501-8-git-send-email-nm@ti.com>
Le mardi 24 f?vrier 2015 ? 16:57 -0600, Nishanth Menon a ?crit :
> 430973: Stale prediction on replaced inter working branch causes
> Cortex-A8 to execute in the wrong ARM/Thumb state
> Impacts: Everything lower than r2p1
> Work around: Set IBE to 1
According to the Linux kernel source, this should only affect r1p*
(hence, not r2p0):
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/mm/proc-v7.S#n321
> 454179: Stale prediction may inhibit target address misprediction on
> next predicted taken branch
> Impacts: Everything lower than r2p1
> Work around: Set IBE and disable branch size mispredict to 1
>
> 621766: Under a specific set of conditions, executing a sequence of
> NEON or vfp load instructions can cause processor deadlock
> Impacts: Everything lower than r2p1
> Work around: Set L1NEON to 1
Erratum 458693 also sets L1NEON bit and is said to only affect r2p0
according to the Linux kernel source:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/mm/proc-v7.S#n321
I'm not sure this is relevant (different erratum but similar
workaround), but it seems odd to me.
> Since the OMAP3 generation of processors have a wide variety of CPU
> revisions, it is more logical to enforce an implementation using
> revision checks.
Anyways, this worked just fine on my omap3630 device (> r2p1) and didn't
trigger the errata workarounds. I reckon someone would have to test on a
device that does require those workarounds (e.g. omap35xx).
> Signed-off-by: Nishanth Menon <nm@ti.com>
> ---
> README | 3 +++
> arch/arm/cpu/armv7/omap3/board.c | 2 +-
> arch/arm/cpu/armv7/omap3/lowlevel_init.S | 37 +++++++++++++++++++++++++++
> arch/arm/include/asm/arch-omap3/sys_proto.h | 1 +
> 4 files changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/README b/README
> index d76cdc68d406..f309e27bbd02 100644
> --- a/README
> +++ b/README
> @@ -625,6 +625,9 @@ The following options need to be configured:
> with CONFIG_ARM_ARCH_CP15_ERRATA define. These need to have an
> SoC specific implementation of the erratum workaround to
> function.
> + CONFIG_ARM_ERRATA_430973
> + CONFIG_ARM_ERRATA_454179
> + CONFIG_ARM_ERRATA_621766
> CONFIG_ARM_ERRATA_798870
>
> - Driver Model
> diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> index 51abc4b09e36..7ce30949a6c6 100644
> --- a/arch/arm/cpu/armv7/omap3/board.c
> +++ b/arch/arm/cpu/armv7/omap3/board.c
> @@ -408,7 +408,7 @@ static void omap3_emu_romcode_call(u32 service_id, u32 *parameters)
> do_omap3_emu_romcode_call(service_id, OMAP3_PUBLIC_SRAM_SCRATCH_AREA);
> }
>
> -static void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
> +void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
> {
> u32 acr;
>
> diff --git a/arch/arm/cpu/armv7/omap3/lowlevel_init.S b/arch/arm/cpu/armv7/omap3/lowlevel_init.S
> index 84591b8b5bab..b8e6ebccd4e7 100644
> --- a/arch/arm/cpu/armv7/omap3/lowlevel_init.S
> +++ b/arch/arm/cpu/armv7/omap3/lowlevel_init.S
> @@ -48,6 +48,43 @@ ENTRY(do_omap3_emu_romcode_call)
> POP {r4-r12, pc}
> ENDPROC(do_omap3_emu_romcode_call)
>
> +#ifdef CONFIG_ARM_ARCH_CP15_ERRATA
> + .globl arch_cp15_errata_workaround
> +/*
> + * R0 has MIDR
> + * R1 has CPU Variant (bits 20-23)
> + * R2 has CPU Revision (bits 0-3)
> + * R3 is compbined CPU variant << 4 + CPU revision
> + */
> +ENTRY(arch_cp15_errata_workaround)
> + push {r4-r12, lr} @ save registers - ROM code may pollute
> +
> + mov r0, #0 @ Nothing to set in ACR
> + mov r1, #0 @ Nothing to clear in ACR
> +
> +#ifdef CONFIG_ARM_ERRATA_454179
> + cmp r3, #0x21 @ Only on < r2p1
> + orrlt r0, r0, #(0x3 << 6) @ Set DBSM(BIT7) and IBE(BIT6) bits
> +#endif
> +
> +#ifdef CONFIG_ARM_ERRATA_430973
> + cmp r3, #0x21 @ Only on < r2p1
> + orrlt r0, r0, #(0x1 << 6) @ Set IBE bit
> +#endif
> +
> +#ifdef CONFIG_ARM_ERRATA_621766
> + cmp r3, #0x21 @ Only on < r2p1
> + orrlt r0, r0, #(0x1 << 5) @ Set L1NEON bit
> +#endif
> +
> + add r2, r1, r0
> + teq r2, #0 @ See if nothing to set or clear
> + bne omap3_update_aux_cr_secure @update as per ROM code configuration needs
> +
> + pop {r4-r12, pc} @restore the registers back.
> +ENDPROC(arch_cp15_errata_workaround)
> +#endif
> +
> #if !defined(CONFIG_SYS_NAND_BOOT) && !defined(CONFIG_SYS_NAND_BOOT)
> /**************************************************************************
> * cpy_clk_code: relocates clock code into SRAM where its safer to execute
> diff --git a/arch/arm/include/asm/arch-omap3/sys_proto.h b/arch/arm/include/asm/arch-omap3/sys_proto.h
> index c06605d533d3..56126fe8e863 100644
> --- a/arch/arm/include/asm/arch-omap3/sys_proto.h
> +++ b/arch/arm/include/asm/arch-omap3/sys_proto.h
> @@ -74,5 +74,6 @@ void dieid_num_r(void);
> void get_dieid(u32 *id);
> void do_omap3_emu_romcode_call(u32 service_id, u32 parameters);
> void omap_smc1(u32 service, u32 val);
> +void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits);
> u32 warm_reset(void);
> #endif
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150225/d74623c2/attachment.sig>
next prev parent reply other threads:[~2015-02-25 11:15 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-24 22:57 [U-Boot] [PATCH V2 0/9] ARM: OMAP3-DRA7: CP15 erratum workarounds and improvements Nishanth Menon
2015-02-24 22:57 ` [U-Boot] [PATCH V2 1/9] ARM: OMAP: Change set_pl310_ctrl_reg to be generic Nishanth Menon
2015-02-24 22:57 ` [U-Boot] [PATCH V2 2/9] ARM: OMAP3: Rename omap3.h to omap.h to be generic as all SoCs Nishanth Menon
2015-02-25 11:02 ` Paul Kocialkowski
2015-02-25 17:53 ` Nishanth Menon
2015-02-24 22:57 ` [U-Boot] [PATCH V2 3/9] ARM: OMAP3: Get rid of omap3_gp_romcode_call and replace with omap_smc1 Nishanth Menon
2015-02-25 11:06 ` Paul Kocialkowski
2015-02-24 22:57 ` [U-Boot] [PATCH V2 4/9] ARM: Provide a mechanism to invoke SoC specific errata WA for CP15 Nishanth Menon
2015-02-24 22:57 ` [U-Boot] [PATCH V2 5/9] ARM: DRA7 / OMAP5: Add workaround for ARM errata 798870 Nishanth Menon
2015-02-24 22:57 ` [U-Boot] [PATCH V2 6/9] configs: ti_omap5_common: Enable " Nishanth Menon
2015-02-24 22:57 ` [U-Boot] [PATCH V2 7/9] ARM: OMAP3: Introduce OMAP3 Cortex-A8 revision specific errata Nishanth Menon
2015-02-25 11:15 ` Paul Kocialkowski [this message]
2015-02-25 19:49 ` Nishanth Menon
2015-03-03 7:30 ` Siarhei Siamashka
2015-02-24 22:57 ` [U-Boot] [PATCH V2 8/9] configs: ti_omap3_common: Enable workaround for ARM errata 454179, 430973, 621766 Nishanth Menon
2015-02-25 11:19 ` Paul Kocialkowski
2015-02-25 11:31 ` Igor Grinberg
2015-02-25 12:27 ` Paul Kocialkowski
2015-02-25 14:32 ` menon.nishanth at gmail.com
2015-02-25 21:23 ` Paul Kocialkowski
2015-02-26 5:11 ` Nishanth Menon
2015-02-27 19:27 ` Paul Kocialkowski
2015-02-24 22:57 ` [U-Boot] [PATCH V2 9/9] ARM: OMAP5 / DRA7: Setup L2 Aux Control Register with recommended configuration Nishanth Menon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1424862954.2460.14.camel@collins \
--to=contact@paulk.fr \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.