[3.11.y.z extended stable] Patch "ARM: pxa: prevent PXA270 occasional reboot freezes" has been added to staging queue

Luis Henriques luis.henriques at canonical.com
Wed Dec 18 10:20:54 UTC 2013


This is a note to let you know that I have just added a patch titled

    ARM: pxa: prevent PXA270 occasional reboot freezes

to the linux-3.11.y-queue branch of the 3.11.y.z extended stable tree 
which can be found at:

 http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.11.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.11.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Luis

------

>From 9844995e1e735921468105a1b4769f812f9e7a52 Mon Sep 17 00:00:00 2001
From: Sergei Ianovich <ynvich at gmail.com>
Date: Tue, 10 Dec 2013 08:39:15 +0400
Subject: ARM: pxa: prevent PXA270 occasional reboot freezes

commit ff88b4724fde18056a4c539f7327389aec0f4c2d upstream.

Erratum 71 of PXA270M Processor Family Specification Update
(April 19, 2010) explains that watchdog reset time is just
8us insead of 10ms in EMTS.

If SDRAM is not reset, it causes memory bus congestion and
the device hangs. We put SDRAM in selfresh mode before watchdog
reset, removing potential freezes.

Without this patch PXA270-based ICP DAS LP-8x4x hangs after up to 40
reboots. With this patch it has successfully rebooted 500 times.

Signed-off-by: Sergei Ianovich <ynvich at gmail.com>
Tested-by: Marek Vasut <marex at denx.de>
Signed-off-by: Haojian Zhuang <haojian.zhuang at gmail.com>
Signed-off-by: Olof Johansson <olof at lixom.net>
Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
---
 arch/arm/mach-pxa/reset.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-pxa/reset.c b/arch/arm/mach-pxa/reset.c
index 0d5dd64..263b152 100644
--- a/arch/arm/mach-pxa/reset.c
+++ b/arch/arm/mach-pxa/reset.c
@@ -13,6 +13,7 @@

 #include <mach/regs-ost.h>
 #include <mach/reset.h>
+#include <mach/smemc.h>

 unsigned int reset_status;
 EXPORT_SYMBOL(reset_status);
@@ -81,6 +82,12 @@ static void do_hw_reset(void)
 	writel_relaxed(OSSR_M3, OSSR);
 	/* ... in 100 ms */
 	writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3);
+	/*
+	 * SDRAM hangs on watchdog reset on Marvell PXA270 (erratum 71)
+	 * we put SDRAM into self-refresh to prevent that
+	 */
+	while (1)
+		writel_relaxed(MDREFR_SLFRSH, MDREFR);
 }

 void pxa_restart(enum reboot_mode mode, const char *cmd)
@@ -104,4 +111,3 @@ void pxa_restart(enum reboot_mode mode, const char *cmd)
 		break;
 	}
 }
-
--
1.8.3.2





More information about the kernel-team mailing list