public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Nishanth Menon <nm@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 5/9] ARM: DRA7 / OMAP5: Add workaround for ARM errata 798870
Date: Tue, 24 Feb 2015 16:57:48 -0600	[thread overview]
Message-ID: <1424818672-29501-6-git-send-email-nm@ti.com> (raw)
In-Reply-To: <1424818672-29501-1-git-send-email-nm@ti.com>

From: Praveen Rao <prao@ti.com>

This patch adds workaround for ARM errata 798870 which says
"If back-to-back speculative cache line fills (fill A and fill B) are
issued from the L1 data cache of a CPU to the L2 cache, the second
request (fill B) is then cancelled, and the second request would have
detected a hazard against a recent write or eviction (write B) to the
same cache line as fill B then the L2 logic might deadlock."

An implementation for OMAP5 and DRA7 is introduced here as well.
Obviously, implementations for other SoC families such as Exynos etc
will be widely different.

Signed-off-by: Praveen Rao <prao@ti.com>
Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
---
 README                                      |    1 +
 arch/arm/cpu/armv7/omap5/Makefile           |    1 +
 arch/arm/cpu/armv7/omap5/lowlevel_init.S    |   46 +++++++++++++++++++++++++++
 arch/arm/include/asm/arch-omap5/sys_proto.h |    1 +
 4 files changed, 49 insertions(+)
 create mode 100644 arch/arm/cpu/armv7/omap5/lowlevel_init.S

diff --git a/README b/README
index 2e53e0c5757d..d76cdc68d406 100644
--- a/README
+++ b/README
@@ -625,6 +625,7 @@ 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_798870
 
 - Driver Model
 		Driver model is a new framework for devices in U-Boot
diff --git a/arch/arm/cpu/armv7/omap5/Makefile b/arch/arm/cpu/armv7/omap5/Makefile
index 64c68791f18e..b645dd4f58b7 100644
--- a/arch/arm/cpu/armv7/omap5/Makefile
+++ b/arch/arm/cpu/armv7/omap5/Makefile
@@ -11,3 +11,4 @@ obj-y	+= sdram.o
 obj-y	+= prcm-regs.o
 obj-y	+= hw_data.o
 obj-y	+= abb.o
+obj-y	+= lowlevel_init.o
diff --git a/arch/arm/cpu/armv7/omap5/lowlevel_init.S b/arch/arm/cpu/armv7/omap5/lowlevel_init.S
new file mode 100644
index 000000000000..974e3a59fb08
--- /dev/null
+++ b/arch/arm/cpu/armv7/omap5/lowlevel_init.S
@@ -0,0 +1,46 @@
+/*
+ * Board specific misc setup
+ *
+ * (C) Copyright 2015
+ * Texas Instruments, <www.ti.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <config.h>
+#include <asm/arch/omap.h>
+#include <asm/omap_common.h>
+#include <asm/arch/spl.h>
+#include <linux/linkage.h>
+
+#define OMAP5_SERVICE_L2ACTLR_SET    0x104
+
+#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-r11, lr}	@ save registers - ROM code may pollute
+
+#ifdef CONFIG_ARM_ERRATA_798870
+	/* We are r2p2, but anyways for completeness.. */
+	cmp	r3, #0x30		@ Applies to lower than R3p0
+	bge     skip_errata_798870      @ skip if not affected rev
+	cmp	r3, #0x20		@ Applies to including and above R2p0
+	blt     skip_errata_798870      @ skip if not affected rev
+
+	mrc     p15, 1, r1, c15, c0, 0  @ read l2 aux ctrl reg
+	orr     r1, r1, #1 << 7         @ set bit #7
+	ldr     r0, =OMAP5_SERVICE_L2ACTLR_SET    @ Set L2 Cache Auxiliary control register - value in R0
+	b omap_smc1
+
+skip_errata_798870:
+#endif
+	pop	{r4-r11, pc}
+ENDPROC(arch_cp15_errata_workaround)
+
+#endif
diff --git a/arch/arm/include/asm/arch-omap5/sys_proto.h b/arch/arm/include/asm/arch-omap5/sys_proto.h
index 103830319a41..0a7a52d138df 100644
--- a/arch/arm/include/asm/arch-omap5/sys_proto.h
+++ b/arch/arm/include/asm/arch-omap5/sys_proto.h
@@ -56,6 +56,7 @@ void force_emif_self_refresh(void);
 void get_ioregs(const struct ctrl_ioregs **regs);
 void srcomp_enable(void);
 void setup_warmreset_time(void);
+void omap_smc1(u32 service, u32 val);
 
 static inline u32 div_round_up(u32 num, u32 den)
 {
-- 
1.7.9.5

  parent reply	other threads:[~2015-02-24 22:57 UTC|newest]

Thread overview: 24+ 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 ` Nishanth Menon [this message]
2015-02-24 22:57 ` [U-Boot] [PATCH V2 6/9] configs: ti_omap5_common: Enable workaround for ARM errata 798870 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
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
  -- strict thread matches above, loose matches on Subject: below --
2015-02-24 22:52 [U-Boot] [PATCH V2 0/9] ARM: OMAP3-DRA7: CP15 erratum workarounds and improvements Nishanth Menon
2015-02-24 22:52 ` [U-Boot] [PATCH V2 5/9] ARM: DRA7 / OMAP5: Add workaround for ARM errata 798870 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=1424818672-29501-6-git-send-email-nm@ti.com \
    --to=nm@ti.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox