aboutsummaryrefslogtreecommitdiffstats
path: root/extras/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch')
-rw-r--r--extras/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch b/extras/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch
new file mode 100644
index 00000000..5ae9609e
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch
@@ -0,0 +1,46 @@
+From b7072ddc2682868372d060e1e25447e5c1aee007 Mon Sep 17 00:00:00 2001
+From: Aric D. Blumer <aric@sdgsystems.com>
+Date: Wed, 29 Dec 2010 11:18:29 -0500
+Subject: [PATCH 56/65] ARM: pxa: fix page table corruption on resume
+
+Before this patch, the following error would sometimes occur after a
+resume on pxa3xx:
+
+ /path/to/mm/memory.c:144: bad pmd 8040542e.
+
+The problem was that a temporary page table mapping was being improperly
+restored.
+
+The PXA3xx resume code creates a temporary mapping of resume_turn_on_mmu
+to avoid a prefetch abort. The pxa3xx_resume_after_mmu code requires
+that the r1 register holding the address of this mapping not be
+modified, however, resume_turn_on_mmu does modify it. It is mostly
+correct in that r1 receives the base table address, but it may also
+get other bits in 13:0. This results in pxa3xx_resume_after_mmu
+restoring the original mapping to the wrong place, corrupting memory
+and leaving the temporary mapping in place.
+
+Signed-off-by: Matt Reimer <mreimer@sdgsystems.com>
+Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
+---
+ arch/arm/mach-pxa/sleep.S | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-pxa/sleep.S b/arch/arm/mach-pxa/sleep.S
+index 52c30b0..ae00811 100644
+--- a/arch/arm/mach-pxa/sleep.S
++++ b/arch/arm/mach-pxa/sleep.S
+@@ -353,8 +353,8 @@ resume_turn_on_mmu:
+
+ @ Let us ensure we jump to resume_after_mmu only when the mcr above
+ @ actually took effect. They call it the "cpwait" operation.
+- mrc p15, 0, r1, c2, c0, 0 @ queue a dependency on CP15
+- sub pc, r2, r1, lsr #32 @ jump to virtual addr
++ mrc p15, 0, r0, c2, c0, 0 @ queue a dependency on CP15
++ sub pc, r2, r0, lsr #32 @ jump to virtual addr
+ nop
+ nop
+ nop
+--
+1.6.6.1
+