linux-mips
[Top] [All Lists]

[PATCH] Alchemy: fix reset for MTX-1 and XXS1500

To: linux-mips@linux-mips.org
Subject: [PATCH] Alchemy: fix reset for MTX-1 and XXS1500
From: Florian Fainelli <florian@openwrt.org>
Date: Mon, 21 Feb 2011 14:28:02 +0100
Cc: ralf@linux-mips.org, br1@einfach.org
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:sender:from:to:subject:date:user-agent :organization:cc:mime-version:content-type:content-transfer-encoding :message-id; bh=w4/OiM69rO3yA0nulzRZT4vEPgB1wULZei8QmoJ2HXc=; b=Ii8oyCYS7owEz/CFPwg70auIk9uC6jUVUlUr1ajawufAuS71pj7nu2TnjkFukJvvIj ls/yQTayehPVnsmTtqQcTYMEzz2vCvj+VFPv0IAuMS0fUlwfAP06ZnKqBGb7oemOx8Hx /a0JnebJ5VQO185WGEJGC8b+6xHoBfhB4kDiI=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:subject:date:user-agent:organization:cc:mime-version :content-type:content-transfer-encoding:message-id; b=sPCnqhnQ/WGgLwI0vhuDLNSY60ozlFuknCtRLHyk1HQAEXIF2xVV3KczIxgSq7qYlL 386deI0LysuUBD8z4kMfTnn0rNUBtzDBBCMGo4UBVaj9N9F8XlIy4lO/uNwFStTIquvo Fp5ds/CMdrdGOR4YAv9GckD/3/GjHQVuhnKRQ=
Organization: OpenWrt
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
User-agent: KMail/1.13.5 (Linux/2.6.35-25-server; KDE/4.5.1; x86_64; ; )
Since commit 32fd6901 (MIPS: Alchemy: get rid of common/reset.c)
Alchemy-based boards use their own reset function. For MTX-1 and XXS1500,
the reset function pokes at the BCSR.SYSTEM_RESET register, but this does
not work. According to Bruno Randolf, this was not tested when written.

Previously, the generic au1000_restart() routine called the board specific
reset function, which for MTX-1 and XXS1500 did not work, but finally made
a jump to the reset vector, which really triggers a system restart. Fix
reboot for both targets by jumping to the reset vector.

CC: Bruno Randolf <br1@einfach.org>
CC: stable@kernel.org
Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
Stable: 2.6.34+

diff --git a/arch/mips/alchemy/mtx-1/board_setup.c 
b/arch/mips/alchemy/mtx-1/board_setup.c
index 6398fa9..40b84b9 100644
--- a/arch/mips/alchemy/mtx-1/board_setup.c
+++ b/arch/mips/alchemy/mtx-1/board_setup.c
@@ -54,8 +54,8 @@ int mtx1_pci_idsel(unsigned int devsel, int assert);

 static void mtx1_reset(char *c)
 {
-       /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */
-       au_writel(0x00000000, 0xAE00001C);
+       /* Jump to the reset vector */
+       __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000));
 }

 static void mtx1_power_off(void)
diff --git a/arch/mips/alchemy/xxs1500/board_setup.c 
b/arch/mips/alchemy/xxs1500/board_setup.c
index b43c918..80c521e 100644
--- a/arch/mips/alchemy/xxs1500/board_setup.c
+++ b/arch/mips/alchemy/xxs1500/board_setup.c
@@ -36,8 +36,8 @@

 static void xxs1500_reset(char *c)
 {
-       /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */
-       au_writel(0x00000000, 0xAE00001C);
+       /* Jump to the reset vector */
+       __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000));
 }

 static void xxs1500_power_off(void)
--
1.7.1


<Prev in Thread] Current Thread [Next in Thread>