diff options
author | Koen Kooi <koen@openembedded.org> | 2008-07-30 08:37:19 +0000 |
---|---|---|
committer | Koen Kooi <koen@openembedded.org> | 2008-07-30 08:37:19 +0000 |
commit | 8a0cde8c5a6fb7ee2cf3ca52cd5a68b8f343ca4d (patch) | |
tree | 427292b2b34837afbac980928beff5810ca87965 /packages/linux/linux-omap2-git | |
parent | f0a1a1c98976bec41dda49ec8cd7dc84e0be5361 (diff) |
linux omap2 git: add patch to workaround cortex-a8 deadlock
Diffstat (limited to 'packages/linux/linux-omap2-git')
-rw-r--r-- | packages/linux/linux-omap2-git/beagleboard/defconfig | 5 | ||||
-rw-r--r-- | packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch | 75 |
2 files changed, 78 insertions, 2 deletions
diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 6381271cf9..9c41ce01cb 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.26-rc9-omap1 -# Tue Jul 8 15:36:02 2008 +# Linux kernel version: 2.6.26-omap1 +# Wed Jul 30 10:34:59 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -331,6 +331,7 @@ CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_VFP=y CONFIG_VFPv3=y CONFIG_NEON=y +CONFIG_NEON_CACHE_BUG=y # # Userspace binary formats diff --git a/packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch b/packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch new file mode 100644 index 0000000000..32ec4c2d33 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch @@ -0,0 +1,75 @@ +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 + +ARM: NEON L1 cache bug workaround (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 +certain conditions. + +Executing a DMB instruction before saving NEON/VFP registers and before +return to userspace makes it safe to run code which includes similar +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. +--- + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 8c75840..1172e14 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1071,6 +1071,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)" ++ 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. ++ ++ See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details. ++ ++ Say Y to include a workaround. ++ ++ 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/include/asm-arm/vfpmacros.h b/include/asm-arm/vfpmacros.h +index cccb389..c9d2976 100644 +--- a/include/asm-arm/vfpmacros.h ++++ b/include/asm-arm/vfpmacros.h +@@ -32,6 +32,9 @@ + + @ write all the working registers out of the VFP + .macro VFPFSTMIA, base, tmp ++#ifdef CONFIG_NEON_CACHE_BUG ++ dmb ++#endif + #if __LINUX_ARM_ARCH__ < 6 + STC p11, cr0, [\base],#33*4 @ FSTMIAX \base!, {d0-d15} + #else |