aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2008-08-07 06:05:25 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2008-08-07 06:06:47 -0400
commitafd2fc02ab7bae6062671c5ca80dd34c34a63fb7 (patch)
tree6048ce3ba252a95ac2195b680caa2b55c384073e
parent1f4de5a0e3b4a4b8afa2cddb46429d32e1053c14 (diff)
parent214c6a7ed13e01cab2addeef56124067e4d20147 (diff)
Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6
Conflicts: arch/arm/mach-pxa/generic.c arch/arm/mach-pxa/pxa25x.c arch/arm/mach-pxa/pxa27x.c arch/arm/mach-pxa/pxa2xx.c arch/arm/mach-pxa/pxa3xx.c arch/arm/mach-pxa/reset.c arch/arm/mach-pxa/spitz.c arch/arm/mach-pxa/tosa.c drivers/watchdog/sa1100_wdt.c
-rw-r--r--arch/arm/mach-pxa/generic.c10
-rw-r--r--arch/arm/mach-pxa/generic.h8
-rw-r--r--arch/arm/mach-pxa/include/mach/hardware.h5
-rw-r--r--arch/arm/mach-pxa/include/mach/reset.h18
-rw-r--r--arch/arm/mach-pxa/pxa25x.c4
-rw-r--r--arch/arm/mach-pxa/pxa27x.c4
-rw-r--r--arch/arm/mach-pxa/pxa2xx.c9
-rw-r--r--arch/arm/mach-pxa/pxa3xx.c10
-rw-r--r--arch/arm/mach-pxa/reset.c8
-rw-r--r--arch/arm/mach-pxa/spitz.c1
-rw-r--r--arch/arm/mach-pxa/tosa.c1
-rw-r--r--arch/arm/mach-sa1100/generic.c3
-rw-r--r--arch/arm/mach-sa1100/include/mach/reset.h18
-rw-r--r--drivers/watchdog/sa1100_wdt.c4
14 files changed, 94 insertions, 9 deletions
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c
index 2834b7fff78c..ceaed0076366 100644
--- a/arch/arm/mach-pxa/generic.c
+++ b/arch/arm/mach-pxa/generic.c
@@ -26,9 +26,19 @@
26#include <asm/mach/map.h> 26#include <asm/mach/map.h>
27 27
28#include <mach/pxa-regs.h> 28#include <mach/pxa-regs.h>
29#include <mach/reset.h>
29 30
30#include "generic.h" 31#include "generic.h"
31 32
33void clear_reset_status(unsigned int mask)
34{
35 if (cpu_is_pxa2xx())
36 pxa2xx_clear_reset_status(mask);
37
38 if (cpu_is_pxa3xx())
39 pxa3xx_clear_reset_status(mask);
40}
41
32/* 42/*
33 * Get the clock frequency as reflected by CCCR and the turbo flag. 43 * Get the clock frequency as reflected by CCCR and the turbo flag.
34 * We assume these values have been applied via a fcs. 44 * We assume these values have been applied via a fcs.
diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h
index 5bb7ae757831..041c048320e4 100644
--- a/arch/arm/mach-pxa/generic.h
+++ b/arch/arm/mach-pxa/generic.h
@@ -47,12 +47,20 @@ extern unsigned pxa27x_get_memclk_frequency_10khz(void);
47#define pxa27x_get_memclk_frequency_10khz() (0) 47#define pxa27x_get_memclk_frequency_10khz() (0)
48#endif 48#endif
49 49
50#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
51extern void pxa2xx_clear_reset_status(unsigned int);
52#else
53static inline void pxa2xx_clear_reset_status(unsigned int mask) {}
54#endif
55
50#ifdef CONFIG_PXA3xx 56#ifdef CONFIG_PXA3xx
51extern unsigned pxa3xx_get_clk_frequency_khz(int); 57extern unsigned pxa3xx_get_clk_frequency_khz(int);
52extern unsigned pxa3xx_get_memclk_frequency_10khz(void); 58extern unsigned pxa3xx_get_memclk_frequency_10khz(void);
59extern void pxa3xx_clear_reset_status(unsigned int);
53#else 60#else
54#define pxa3xx_get_clk_frequency_khz(x) (0) 61#define pxa3xx_get_clk_frequency_khz(x) (0)
55#define pxa3xx_get_memclk_frequency_10khz() (0) 62#define pxa3xx_get_memclk_frequency_10khz() (0)
63static inline void pxa3xx_clear_reset_status(unsigned int mask) {}
56#endif 64#endif
57 65
58extern struct sysdev_class pxa_irq_sysclass; 66extern struct sysdev_class pxa_irq_sysclass;
diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h
index f8fb1e75997f..e89df4d0d239 100644
--- a/arch/arm/mach-pxa/include/mach/hardware.h
+++ b/arch/arm/mach-pxa/include/mach/hardware.h
@@ -224,11 +224,6 @@ extern void pxa_gpio_set_value(unsigned gpio, int value);
224 */ 224 */
225extern unsigned int get_memclk_frequency_10khz(void); 225extern unsigned int get_memclk_frequency_10khz(void);
226 226
227/*
228 * register GPIO as reset generator
229 */
230extern int init_gpio_reset(int gpio);
231
232#endif 227#endif
233 228
234#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI) 229#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
diff --git a/arch/arm/mach-pxa/include/mach/reset.h b/arch/arm/mach-pxa/include/mach/reset.h
new file mode 100644
index 000000000000..9489a48871a8
--- /dev/null
+++ b/arch/arm/mach-pxa/include/mach/reset.h
@@ -0,0 +1,18 @@
1#ifndef __ASM_ARCH_RESET_H
2#define __ASM_ARCH_RESET_H
3
4#define RESET_STATUS_HARDWARE (1 << 0) /* Hardware Reset */
5#define RESET_STATUS_WATCHDOG (1 << 1) /* Watchdog Reset */
6#define RESET_STATUS_LOWPOWER (1 << 2) /* Low Power/Sleep Exit */
7#define RESET_STATUS_GPIO (1 << 3) /* GPIO Reset */
8#define RESET_STATUS_ALL (0xf)
9
10extern unsigned int reset_status;
11extern void clear_reset_status(unsigned int mask);
12
13/*
14 * register GPIO as reset generator
15 */
16extern int init_gpio_reset(int gpio);
17
18#endif /* __ASM_ARCH_RESET_H */
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c
index 3c2d22de9a13..9e5d8a8c6424 100644
--- a/arch/arm/mach-pxa/pxa25x.c
+++ b/arch/arm/mach-pxa/pxa25x.c
@@ -28,6 +28,7 @@
28#include <mach/pxa-regs.h> 28#include <mach/pxa-regs.h>
29#include <mach/pxa2xx-regs.h> 29#include <mach/pxa2xx-regs.h>
30#include <mach/mfp-pxa25x.h> 30#include <mach/mfp-pxa25x.h>
31#include <mach/reset.h>
31#include <mach/pm.h> 32#include <mach/pm.h>
32#include <mach/dma.h> 33#include <mach/dma.h>
33 34
@@ -348,6 +349,9 @@ static int __init pxa25x_init(void)
348 clks_register(&pxa25x_hwuart_clk, 1); 349 clks_register(&pxa25x_hwuart_clk, 1);
349 350
350 if (cpu_is_pxa21x() || cpu_is_pxa25x()) { 351 if (cpu_is_pxa21x() || cpu_is_pxa25x()) {
352
353 reset_status = RCSR;
354
351 clks_register(pxa25x_clks, ARRAY_SIZE(pxa25x_clks)); 355 clks_register(pxa25x_clks, ARRAY_SIZE(pxa25x_clks));
352 356
353 if ((ret = pxa_init_dma(16))) 357 if ((ret = pxa_init_dma(16)))
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index 6bec43484ba7..f9f6a9c31f4b 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -24,6 +24,7 @@
24#include <mach/pxa-regs.h> 24#include <mach/pxa-regs.h>
25#include <mach/pxa2xx-regs.h> 25#include <mach/pxa2xx-regs.h>
26#include <mach/mfp-pxa27x.h> 26#include <mach/mfp-pxa27x.h>
27#include <mach/reset.h>
27#include <mach/ohci.h> 28#include <mach/ohci.h>
28#include <mach/pm.h> 29#include <mach/pm.h>
29#include <mach/dma.h> 30#include <mach/dma.h>
@@ -384,6 +385,9 @@ static int __init pxa27x_init(void)
384 int i, ret = 0; 385 int i, ret = 0;
385 386
386 if (cpu_is_pxa27x()) { 387 if (cpu_is_pxa27x()) {
388
389 reset_status = RCSR;
390
387 clks_register(pxa27x_clks, ARRAY_SIZE(pxa27x_clks)); 391 clks_register(pxa27x_clks, ARRAY_SIZE(pxa27x_clks));
388 392
389 if ((ret = pxa_init_dma(32))) 393 if ((ret = pxa_init_dma(32)))
diff --git a/arch/arm/mach-pxa/pxa2xx.c b/arch/arm/mach-pxa/pxa2xx.c
index 00b4de6d6bdd..73d04d81c75a 100644
--- a/arch/arm/mach-pxa/pxa2xx.c
+++ b/arch/arm/mach-pxa/pxa2xx.c
@@ -14,10 +14,19 @@
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/device.h> 15#include <linux/device.h>
16 16
17#include <mach/hardware.h>
18#include <mach/pxa2xx-regs.h>
17#include <mach/mfp-pxa2xx.h> 19#include <mach/mfp-pxa2xx.h>
18#include <mach/mfp-pxa25x.h> 20#include <mach/mfp-pxa25x.h>
21#include <mach/reset.h>
19#include <mach/irda.h> 22#include <mach/irda.h>
20 23
24void pxa2xx_clear_reset_status(unsigned int mask)
25{
26 /* RESET_STATUS_* has a 1:1 mapping with RCSR */
27 RCSR = mask;
28}
29
21static unsigned long pxa2xx_mfp_fir[] = { 30static unsigned long pxa2xx_mfp_fir[] = {
22 GPIO46_FICP_RXD, 31 GPIO46_FICP_RXD,
23 GPIO47_FICP_TXD, 32 GPIO47_FICP_TXD,
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 37b07212b5a5..03cbc38103ed 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -24,6 +24,7 @@
24 24
25#include <mach/hardware.h> 25#include <mach/hardware.h>
26#include <mach/pxa3xx-regs.h> 26#include <mach/pxa3xx-regs.h>
27#include <mach/reset.h>
27#include <mach/ohci.h> 28#include <mach/ohci.h>
28#include <mach/pm.h> 29#include <mach/pm.h>
29#include <mach/dma.h> 30#include <mach/dma.h>
@@ -109,6 +110,12 @@ unsigned int pxa3xx_get_memclk_frequency_10khz(void)
109 return (clk / 10000); 110 return (clk / 10000);
110} 111}
111 112
113void pxa3xx_clear_reset_status(unsigned int mask)
114{
115 /* RESET_STATUS_* has a 1:1 mapping with ARSR */
116 ARSR = mask;
117}
118
112/* 119/*
113 * Return the current AC97 clock frequency. 120 * Return the current AC97 clock frequency.
114 */ 121 */
@@ -532,6 +539,9 @@ static int __init pxa3xx_init(void)
532 int i, ret = 0; 539 int i, ret = 0;
533 540
534 if (cpu_is_pxa3xx()) { 541 if (cpu_is_pxa3xx()) {
542
543 reset_status = ARSR;
544
535 /* 545 /*
536 * clear RDH bit every time after reset 546 * clear RDH bit every time after reset
537 * 547 *
diff --git a/arch/arm/mach-pxa/reset.c b/arch/arm/mach-pxa/reset.c
index fabead71d681..9996c612c3d6 100644
--- a/arch/arm/mach-pxa/reset.c
+++ b/arch/arm/mach-pxa/reset.c
@@ -11,7 +11,10 @@
11#include <asm/proc-fns.h> 11#include <asm/proc-fns.h>
12 12
13#include <mach/pxa-regs.h> 13#include <mach/pxa-regs.h>
14#include <mach/pxa2xx-regs.h> 14#include <mach/reset.h>
15
16unsigned int reset_status;
17EXPORT_SYMBOL(reset_status);
15 18
16static void do_hw_reset(void); 19static void do_hw_reset(void);
17 20
@@ -77,8 +80,7 @@ static void do_hw_reset(void)
77 80
78void arch_reset(char mode) 81void arch_reset(char mode)
79{ 82{
80 if (cpu_is_pxa2xx()) 83 clear_reset_status(RESET_STATUS_ALL);
81 RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
82 84
83 switch (mode) { 85 switch (mode) {
84 case 's': 86 case 's':
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index 26b9fa56cffd..cd39005c98ff 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -39,6 +39,7 @@
39#include <mach/pxa2xx-regs.h> 39#include <mach/pxa2xx-regs.h>
40#include <mach/pxa2xx-gpio.h> 40#include <mach/pxa2xx-gpio.h>
41#include <mach/pxa27x-udc.h> 41#include <mach/pxa27x-udc.h>
42#include <mach/reset.h>
42#include <mach/irda.h> 43#include <mach/irda.h>
43#include <mach/mmc.h> 44#include <mach/mmc.h>
44#include <mach/ohci.h> 45#include <mach/ohci.h>
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index 38bc59c44110..5dab30eafddc 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -36,6 +36,7 @@
36#include <asm/mach-types.h> 36#include <asm/mach-types.h>
37#include <mach/pxa2xx-regs.h> 37#include <mach/pxa2xx-regs.h>
38#include <mach/mfp-pxa25x.h> 38#include <mach/mfp-pxa25x.h>
39#include <mach/reset.h>
39#include <mach/irda.h> 40#include <mach/irda.h>
40#include <mach/i2c.h> 41#include <mach/i2c.h>
41#include <mach/mmc.h> 42#include <mach/mmc.h>
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c
index 5a08fe20a319..1362994c78aa 100644
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -31,6 +31,9 @@
31 31
32#include "generic.h" 32#include "generic.h"
33 33
34unsigned int reset_status;
35EXPORT_SYMBOL(reset_status);
36
34#define NR_FREQS 16 37#define NR_FREQS 16
35 38
36/* 39/*
diff --git a/arch/arm/mach-sa1100/include/mach/reset.h b/arch/arm/mach-sa1100/include/mach/reset.h
new file mode 100644
index 000000000000..f61957e6842a
--- /dev/null
+++ b/arch/arm/mach-sa1100/include/mach/reset.h
@@ -0,0 +1,18 @@
1#ifndef __ASM_ARCH_RESET_H
2#define __ASM_ARCH_RESET_H
3
4#include "hardware.h"
5
6#define RESET_STATUS_HARDWARE (1 << 0) /* Hardware Reset */
7#define RESET_STATUS_WATCHDOG (1 << 1) /* Watchdog Reset */
8#define RESET_STATUS_LOWPOWER (1 << 2) /* Exit from Low Power/Sleep */
9#define RESET_STATUS_GPIO (1 << 3) /* GPIO Reset */
10#define RESET_STATUS_ALL (0xf)
11
12extern unsigned int reset_status;
13static inline void clear_reset_status(unsigned int mask)
14{
15 RCSR = mask;
16}
17
18#endif /* __ASM_ARCH_RESET_H */
diff --git a/drivers/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c
index 52a533c274fd..97d9da758dcc 100644
--- a/drivers/watchdog/sa1100_wdt.c
+++ b/drivers/watchdog/sa1100_wdt.c
@@ -31,6 +31,7 @@
31#include <mach/pxa-regs.h> 31#include <mach/pxa-regs.h>
32#endif 32#endif
33 33
34#include <mach/reset.h>
34#include <mach/hardware.h> 35#include <mach/hardware.h>
35#include <asm/uaccess.h> 36#include <asm/uaccess.h>
36 37
@@ -162,7 +163,8 @@ static int __init sa1100dog_init(void)
162 * we suspend, RCSR will be cleared, and the watchdog 163 * we suspend, RCSR will be cleared, and the watchdog
163 * reset reason will be lost. 164 * reset reason will be lost.
164 */ 165 */
165 boot_status = (RCSR & RCSR_WDR) ? WDIOF_CARDRESET : 0; 166 boot_status = (reset_status & RESET_STATUS_WATCHDOG) ?
167 WDIOF_CARDRESET : 0;
166 pre_margin = OSCR_FREQ * margin; 168 pre_margin = OSCR_FREQ * margin;
167 169
168 ret = misc_register(&sa1100dog_miscdev); 170 ret = misc_register(&sa1100dog_miscdev);