[oe-commits] org.oe.dev linux omap2 git: add patch to workaround cortex-a8 deadlock

koen commit oe at amethyst.openembedded.net
Wed Jul 30 09:11:52 UTC 2008


linux omap2 git: add patch to workaround cortex-a8 deadlock

Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 87e3cc07eb2fd42d7850e6b0c1f67268404695d0
ViewMTN: http://monotone.openembedded.org/revision/info/87e3cc07eb2fd42d7850e6b0c1f67268404695d0
Files:
1
packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch
packages/linux/linux-omap2-git/beagleboard/defconfig
packages/linux/linux-omap2_git.bb
Diffs:

#
# mt diff -r7768e79f8a911ff167d6c33d63e2fd28711d61e9 -r87e3cc07eb2fd42d7850e6b0c1f67268404695d0
#
#
#
# add_file "packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch"
#  content [67358daefda5443aa9a8a51de82b34c59d55a57d]
# 
# patch "packages/linux/linux-omap2-git/beagleboard/defconfig"
#  from [560914bc9a5ea2d1a400c348659a241349d2640d]
#    to [5f82c91745dd8c5f3359f78adb68c498cdb484ac]
# 
# patch "packages/linux/linux-omap2_git.bb"
#  from [ef14668a9a1c7d97225d194c81aa52ace025f767]
#    to [a4478e4132dde28a749922f2365db99a955cd8a9]
#
============================================================
--- packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch	67358daefda5443aa9a8a51de82b34c59d55a57d
+++ packages/linux/linux-omap2-git/beagleboard/no-cortex-deadlock.patch	67358daefda5443aa9a8a51de82b34c59d55a57d
@@ -0,0 +1,75 @@
+From: Mans Rullgard <mans at 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
============================================================
--- packages/linux/linux-omap2-git/beagleboard/defconfig	560914bc9a5ea2d1a400c348659a241349d2640d
+++ packages/linux/linux-omap2-git/beagleboard/defconfig	5f82c91745dd8c5f3359f78adb68c498cdb484ac
@@ -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_NEON=y
 CONFIG_VFP=y
 CONFIG_VFPv3=y
 CONFIG_NEON=y
+CONFIG_NEON_CACHE_BUG=y
 
 #
 # Userspace binary formats
============================================================
--- packages/linux/linux-omap2_git.bb	ef14668a9a1c7d97225d194c81aa52ace025f767
+++ packages/linux/linux-omap2_git.bb	a4478e4132dde28a749922f2365db99a955cd8a9
@@ -5,8 +5,8 @@ PV = "2.6.26"
 SRCREV = "d3b3ae0fe6c71641da19c8de466ec366d39847e3"
 
 PV = "2.6.26"
-#PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}"
-PR = "r48"
+#PV = "2.6.26+2.6.27-rc1+${PR}+git${SRCREV}"
+PR = "r49"
 
 SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \
 	   file://defconfig"
@@ -45,6 +45,7 @@ SRC_URI_append_beagleboard = " file://no
            file://mru-clocks3.diff;patch=1 \	
            file://4bitmmc.diff;patch=1 \
 	   file://400khz-i2c.diff;patch=1 \
+           file://no-cortex-deadlock.patch;patch=1 \
 "
 
 SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \






More information about the Openembedded-commits mailing list