Title: [7237] branches/2009R1/arch/blackfin/include/asm/entry.h: Add workarounds for anomaly 283 which fixes bug [#5430]
- Revision
- 7237
- Author
- rgetz
- Date
- 2009-08-26 10:52:37 -0400 (Wed, 26 Aug 2009)
Log Message
Add workarounds for anomaly 283 which fixes bug [#5430]
'[!no_src_qa!]' - assembly files
Modified Paths
Diff
Modified: branches/2009R1/arch/blackfin/include/asm/entry.h (7236 => 7237)
--- branches/2009R1/arch/blackfin/include/asm/entry.h 2009-08-26 06:06:38 UTC (rev 7236)
+++ branches/2009R1/arch/blackfin/include/asm/entry.h 2009-08-26 14:52:37 UTC (rev 7237)
@@ -61,6 +61,25 @@
jump __common_int_entry;
#else /* CONFIG_EXACT_HWERR is defined */
+/*
+ * Add workarounds for 283 and 315
+ * If needed, also make sure that 244 is also not caused,
+ * by adding 3 nops at the end, since the next instruction
+ * is going to be a SSYNC
+ */
+
+# if ANOMALY_05000283 || ANOMALY_05000315
+# define ANOMALY_05000283_WORKAROUND(preg, dreg) \
+ cc = dreg == dreg; \
+ preg.h = HI(CHIPID); \
+ preg.l = LO(CHIPID); \
+ if cc jump 1f; \
+ dreg.l = W[preg]; \
+1: nop; nop; nop;
+#else
+# define ANOMALY_05000283_WORKAROUND(preg, dreg)
+# endif /* ANOMALY_05000283 || ANOMALY_05000315 */
+
/* if we want hardware error to be exact, we need to do a SSYNC (which forces
* read/writes to complete to the memory controllers), and check to see that
* caused a pending HW error condition. If so, we assume it was caused by user
@@ -75,9 +94,11 @@
[--sp] = R0; /*orig_r0*/ \
[--sp] = (R7:0,P5:0); \
R1 = ASTAT; \
+ ANOMALY_05000283_WORKAROUND(P0, R0) \
P0.L = LO(ILAT); \
P0.H = HI(ILAT); \
SSYNC; \
+ SSYNC; \
R0 = [P0]; \
CC = BITTST(R0, EVT_IVHW_P); \
IF CC JUMP 1f; \
@@ -98,9 +119,11 @@
[--sp] = R0; /*orig_r0*/ \
[--sp] = (R7:0,P5:0); \
R1 = ASTAT; \
+ ANOMALY_05000283_WORKAROUND(P0, R0) \
P0.L = LO(ILAT); \
P0.H = HI(ILAT); \
SSYNC; \
+ SSYNC; \
R0 = [P0]; \
CC = BITTST(R0, EVT_IVHW_P); \
IF CC JUMP 1f; \
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits