diff options
Diffstat (limited to 'packages/linux/linux-omap/no-cortex-deadlock.patch')
-rw-r--r-- | packages/linux/linux-omap/no-cortex-deadlock.patch | 68 |
1 files changed, 35 insertions, 33 deletions
diff --git a/packages/linux/linux-omap/no-cortex-deadlock.patch b/packages/linux/linux-omap/no-cortex-deadlock.patch index 5bb6d22484..78547c8969 100644 --- a/packages/linux/linux-omap/no-cortex-deadlock.patch +++ b/packages/linux/linux-omap/no-cortex-deadlock.patch @@ -1,9 +1,9 @@ From: Mans Rullgard <mans@mansr.com> -Date: Wed, 30 Jul 2008 08:25:51 +0000 (+0100) -Subject: ARM: NEON L1 cache bug workaround (erratum 451034) -X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=26023493baf13e0a67fd6cf08d87be5ff6f7c56d +Date: Sat, 16 Aug 2008 23:03:06 +0000 (+0100) +Subject: ARM: Workaround for erratum 451034 +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=b84fa87873ffb68ad23930cf6cddeea8bec43ede -ARM: NEON L1 cache bug workaround (erratum 451034) +ARM: Workaround for erratum 451034 On Cortex-A8 r1p0 and r1p1, executing a NEON store with an integer store in the store buffer, can cause a processor deadlock under @@ -15,61 +15,63 @@ counter-measures. Userspace code can still trigger the deadlock, so a different workaround is required to safely run untrusted code. See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details. + +Signed-off-by: Mans Rullgard <mans@mansr.com> --- diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 8c75840..1172e14 100644 +index aa475d9..41d536e 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -1071,6 +1071,22 @@ config NEON +@@ -1117,6 +1117,22 @@ config NEON Say Y to include support code for NEON, the ARMv7 Advanced SIMD Extension. -+config NEON_CACHE_BUG -+ bool "NEON L1 cache bug workaround (erratum 451034)" ++config ARM_ERRATUM_451034 ++ bool "Enable workaround for ARM erratum 451034" + depends on VFPv3 + help -+ On Cortex-A8 r1p0 and r1p1, executing a NEON store with an integer -+ store in the store buffer, can cause a processor deadlock under -+ certain conditions. ++ On Cortex-A8 r1p0 and r1p1, executing a NEON store with an integer ++ store in the store buffer, can cause a processor deadlock under ++ certain conditions. + -+ See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details. ++ See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details. + -+ Say Y to include a workaround. ++ Say Y to include a partial workaround. + -+ WARNING: Even with this option enabled, userspace code can trigger -+ the deadlock. To safely run untrusted code, a different fix is -+ required. ++ WARNING: Even with this option enabled, userspace code can trigger ++ the deadlock. To safely run untrusted code, a different fix is ++ required. + endmenu menu "Userspace binary formats" -diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S -index 597ed00..e50094e 100644 ---- a/arch/arm/kernel/entry-common.S -+++ b/arch/arm/kernel/entry-common.S -@@ -68,6 +68,10 @@ no_work_pending: - /* perform architecture specific actions before user return */ - arch_ret_to_user r1, lr - -+#ifdef CONFIG_NEON_CACHE_BUG -+ dmb -+#endif -+ - @ slow_restore_user_regs - ldr r1, [sp, #S_PSR] @ get calling cpsr - ldr lr, [sp, #S_PC]! @ get pc diff --git a/arch/arm/include/asm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h -index cccb389..c9d2976 100644 +index 422f3cc..934798b 100644 --- a/arch/arm/include/asm/vfpmacros.h +++ b/arch/arm/include/asm/vfpmacros.h @@ -32,6 +32,9 @@ @ write all the working registers out of the VFP .macro VFPFSTMIA, base, tmp -+#ifdef CONFIG_NEON_CACHE_BUG ++#ifdef CONFIG_ARM_ERRATUM_451034 + dmb +#endif #if __LINUX_ARM_ARCH__ < 6 STC p11, cr0, [\base],#33*4 @ FSTMIAX \base!, {d0-d15} #else +diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S +index 060d7e2..9799a35 100644 +--- a/arch/arm/kernel/entry-common.S ++++ b/arch/arm/kernel/entry-common.S +@@ -69,6 +69,10 @@ no_work_pending: + /* perform architecture specific actions before user return */ + arch_ret_to_user r1, lr + ++#ifdef CONFIG_ARM_ERRATUM_451034 ++ dmb ++#endif ++ + @ slow_restore_user_regs + ldr r1, [sp, #S_PSR] @ get calling cpsr + ldr lr, [sp, #S_PC]! @ get pc |