linux-mips
[Top] [All Lists]

[PATCH] MIPS: Alchemy: fix wait function

To: Ralf Baechle <ralf@linux-mips.org>
Subject: [PATCH] MIPS: Alchemy: fix wait function
From: Manuel Lauss <manuel.lauss@gmail.com>
Date: Thu, 23 May 2013 12:44:16 +0200
Cc: Linux-MIPS <linux-mips@linux-mips.org>, Manuel Lauss <manuel.lauss@gmail.com>
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=TqVBKml/Vp8N650Qaent7OA0GsgPu0Gut0K6fZNxbBc=; b=WcnZRyW9dvlyCV2G2GCvXfkp4crlaqtqpkyThALZb1hVq6PCv2uagRvArzUrvzhGMW 12WsRg4X35qqPiGeV4eSmposeSOe1WP6IA5ise2CRqmJpuMKNQ0ikLrHmoF1i9nBjqC4 bEP3+dlDKQpyjTiGRRCMuV0eIHWFO3amlTtDna5DSwdnN8QjT+iEiOqqPs8EHEAda5Jn azzT6ZLPjzPgqV1L93BVJUBrfJmcIafTrt9DMulrcBSAR59hB6YfUaCjug5FWE/uudsT OFErleH9L7/bKJuuc7Dx37/V6z80P7fHXDRt33Gf8GdMME+tHBP2c2qiE8TmD0YCQH/K UefQ==
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
Only an interrupt can wake the core from 'wait', enable interrupts
locally before executing 'wait'.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
---
Please add to the 3.10 queue, fixes a rather boring hang on boot.

 arch/mips/kernel/idle.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c
index 3b09b88..6da2c0f 100644
--- a/arch/mips/kernel/idle.c
+++ b/arch/mips/kernel/idle.c
@@ -93,12 +93,13 @@ static void rm7k_wait_irqoff(void)
 }
 
 /*
- * The Au1xxx wait is available only if using 32khz counter or
- * external timer source, but specifically not CP0 Counter.
- * alchemy/common/time.c may override cpu_wait!
+ * Au1 'wait' is only useful when the 32kHz counter is used as timer,
+ * since coreclock (and the cp0 counter) stops upon executing it. Only an
+ * interrupt can wake it, so they must be enabled before entering idle modes.
  */
 static void au1k_wait(void)
 {
+       local_irq_enable();
        __asm__(
        "       .set    mips3                   \n"
        "       cache   0x14, 0(%0)             \n"
@@ -112,7 +113,6 @@ static void au1k_wait(void)
        "       nop                             \n"
        "       .set    mips0                   \n"
        : : "r" (au1k_wait));
-       local_irq_enable();
 }
 
 static int __initdata nowait;
-- 
1.8.2.1


<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] MIPS: Alchemy: fix wait function, Manuel Lauss <=