diff options
-rw-r--r-- | arch/arm/mach-mx2/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/system.h | 5 | ||||
-rw-r--r-- | arch/arm/plat-mxc/system.c (renamed from arch/arm/mach-mx2/system.c) | 50 |
4 files changed, 30 insertions, 29 deletions
diff --git a/arch/arm/mach-mx2/Makefile b/arch/arm/mach-mx2/Makefile index 6e1a2bffc812..950649a91540 100644 --- a/arch/arm/mach-mx2/Makefile +++ b/arch/arm/mach-mx2/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | # Object file lists. | 5 | # Object file lists. |
6 | 6 | ||
7 | obj-y := system.o generic.o devices.o serial.o | 7 | obj-y := generic.o devices.o serial.o |
8 | 8 | ||
9 | obj-$(CONFIG_MACH_MX21) += clock_imx21.o | 9 | obj-$(CONFIG_MACH_MX21) += clock_imx21.o |
10 | 10 | ||
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile index 564fd4ebf38a..055406312b69 100644 --- a/arch/arm/plat-mxc/Makefile +++ b/arch/arm/plat-mxc/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | # Common support | 5 | # Common support |
6 | obj-y := irq.o clock.o gpio.o time.o devices.o cpu.o | 6 | obj-y := irq.o clock.o gpio.o time.o devices.o cpu.o system.o |
7 | 7 | ||
8 | obj-$(CONFIG_ARCH_MX1) += iomux-mx1-mx2.o dma-mx1-mx2.o | 8 | obj-$(CONFIG_ARCH_MX1) += iomux-mx1-mx2.o dma-mx1-mx2.o |
9 | obj-$(CONFIG_ARCH_MX2) += iomux-mx1-mx2.o dma-mx1-mx2.o | 9 | obj-$(CONFIG_ARCH_MX2) += iomux-mx1-mx2.o dma-mx1-mx2.o |
diff --git a/arch/arm/plat-mxc/include/mach/system.h b/arch/arm/plat-mxc/include/mach/system.h index cd03ebaa49bc..e56241af870e 100644 --- a/arch/arm/plat-mxc/include/mach/system.h +++ b/arch/arm/plat-mxc/include/mach/system.h | |||
@@ -26,9 +26,6 @@ static inline void arch_idle(void) | |||
26 | cpu_do_idle(); | 26 | cpu_do_idle(); |
27 | } | 27 | } |
28 | 28 | ||
29 | static inline void arch_reset(char mode, const char *cmd) | 29 | void arch_reset(char mode, const char *cmd); |
30 | { | ||
31 | cpu_reset(0); | ||
32 | } | ||
33 | 30 | ||
34 | #endif /* __ASM_ARCH_MXC_SYSTEM_H__ */ | 31 | #endif /* __ASM_ARCH_MXC_SYSTEM_H__ */ |
diff --git a/arch/arm/mach-mx2/system.c b/arch/arm/plat-mxc/system.c index 92c79d4bd162..79c37577c916 100644 --- a/arch/arm/mach-mx2/system.c +++ b/arch/arm/plat-mxc/system.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * Copyright (C) 2000 Deep Blue Solutions Ltd | 3 | * Copyright (C) 2000 Deep Blue Solutions Ltd |
4 | * Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved. | 4 | * Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved. |
5 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | 5 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de |
6 | * Copyright 2009 Ilya Yanok, Emcraft Systems Ltd, yanok@emcraft.com | ||
6 | * | 7 | * |
7 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -22,42 +23,45 @@ | |||
22 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
23 | #include <linux/clk.h> | 24 | #include <linux/clk.h> |
24 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/err.h> | ||
27 | #include <linux/delay.h> | ||
25 | 28 | ||
26 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
27 | #include <asm/proc-fns.h> | 30 | #include <asm/proc-fns.h> |
28 | #include <asm/system.h> | 31 | #include <asm/system.h> |
29 | 32 | ||
30 | /* | 33 | #ifdef CONFIG_ARCH_MX1 |
31 | * Put the CPU into idle mode. It is called by default_idle() | 34 | #define WDOG_WCR_REG IO_ADDRESS(WDT_BASE_ADDR) |
32 | * in process.c file. | 35 | #define WDOG_WCR_ENABLE (1 << 0) |
33 | */ | 36 | #else |
34 | void arch_idle(void) | 37 | #define WDOG_WCR_REG IO_ADDRESS(WDOG_BASE_ADDR) |
35 | { | 38 | #define WDOG_WCR_ENABLE (1 << 2) |
36 | /* | 39 | #endif |
37 | * This should do all the clock switching | ||
38 | * and wait for interrupt tricks. | ||
39 | */ | ||
40 | cpu_do_idle(); | ||
41 | } | ||
42 | |||
43 | #define WDOG_WCR_REG IO_ADDRESS(WDOG_BASE_ADDR) | ||
44 | #define WDOG_WCR_SRS (1 << 4) | ||
45 | 40 | ||
46 | /* | 41 | /* |
47 | * Reset the system. It is called by machine_restart(). | 42 | * Reset the system. It is called by machine_restart(). |
48 | */ | 43 | */ |
49 | void arch_reset(char mode, const char *cmd) | 44 | void arch_reset(char mode, const char *cmd) |
50 | { | 45 | { |
51 | struct clk *clk; | 46 | if (!cpu_is_mx1()) { |
47 | struct clk *clk; | ||
52 | 48 | ||
53 | clk = clk_get(NULL, "wdog_clk"); | 49 | clk = clk_get_sys("imx-wdt.0", NULL); |
54 | if (!clk) { | 50 | if (!IS_ERR(clk)) |
55 | printk(KERN_ERR"Cannot activate the watchdog. Giving up\n"); | 51 | clk_enable(clk); |
56 | return; | ||
57 | } | 52 | } |
58 | 53 | ||
59 | clk_enable(clk); | ||
60 | |||
61 | /* Assert SRS signal */ | 54 | /* Assert SRS signal */ |
62 | __raw_writew(__raw_readw(WDOG_WCR_REG) & ~WDOG_WCR_SRS, WDOG_WCR_REG); | 55 | __raw_writew(WDOG_WCR_ENABLE, WDOG_WCR_REG); |
56 | |||
57 | /* wait for reset to assert... */ | ||
58 | mdelay(500); | ||
59 | |||
60 | printk(KERN_ERR "Watchdog reset failed to assert reset\n"); | ||
61 | |||
62 | /* delay to allow the serial port to show the message */ | ||
63 | mdelay(50); | ||
64 | |||
65 | /* we'll take a jump through zero as a poor second */ | ||
66 | cpu_reset(0); | ||
63 | } | 67 | } |