Explorar o código

MIPS: ath79: fix system restart

This patch disables irq on reboot to fix hang issues that were observed
due to pending interrupts.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/19913/
Cc: James Hogan <jhogan@kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Felix Fietkau %!s(int64=7) %!d(string=hai) anos
pai
achega
f8a7bfe1cb
Modificáronse 2 ficheiros con 2 adicións e 0 borrados
  1. 1 0
      arch/mips/ath79/setup.c
  2. 1 0
      arch/mips/include/asm/mach-ath79/ath79.h

+ 1 - 0
arch/mips/ath79/setup.c

@@ -40,6 +40,7 @@ static char ath79_sys_type[ATH79_SYS_TYPE_LEN];
 
 static void ath79_restart(char *command)
 {
+	local_irq_disable();
 	ath79_device_reset_set(AR71XX_RESET_FULL_CHIP);
 	for (;;)
 		if (cpu_wait)

+ 1 - 0
arch/mips/include/asm/mach-ath79/ath79.h

@@ -167,6 +167,7 @@ static inline u32 ath79_pll_rr(unsigned reg)
 static inline void ath79_reset_wr(unsigned reg, u32 val)
 {
 	__raw_writel(val, ath79_reset_base + reg);
+	(void) __raw_readl(ath79_reset_base + reg); /* flush */
 }
 
 static inline u32 ath79_reset_rr(unsigned reg)