Commit dc38e2ad authored by Russell King's avatar Russell King Committed by Russell King

[ARM] pxa: Fix RCSR handling

Related to d3930614.

RCSR is only present on PXA2xx CPUs, not on PXA3xx CPUs.  Therefore,
we should not be unconditionally writing to RCSR from generic code.

Since we now clear the RCSR status from the SoC specific PXA PM code
and before reset in the arch_reset() function, the duplication in
the corgi, poodle, spitz and tosa code can be removed.
Acked-by: default avatarRichard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent ffebabe0
...@@ -493,8 +493,6 @@ static struct platform_device *devices[] __initdata = { ...@@ -493,8 +493,6 @@ static struct platform_device *devices[] __initdata = {
static void corgi_poweroff(void) static void corgi_poweroff(void)
{ {
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
if (!machine_is_corgi()) if (!machine_is_corgi())
/* Green LED off tells the bootloader to halt */ /* Green LED off tells the bootloader to halt */
reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN); reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN);
...@@ -503,8 +501,6 @@ static void corgi_poweroff(void) ...@@ -503,8 +501,6 @@ static void corgi_poweroff(void)
static void corgi_restart(char mode) static void corgi_restart(char mode)
{ {
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
if (!machine_is_corgi()) if (!machine_is_corgi())
/* Green LED on tells the bootloader to reboot */ /* Green LED on tells the bootloader to reboot */
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN); set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN);
......
...@@ -46,9 +46,6 @@ int pxa_pm_enter(suspend_state_t state) ...@@ -46,9 +46,6 @@ int pxa_pm_enter(suspend_state_t state)
sleep_save_checksum += sleep_save[i]; sleep_save_checksum += sleep_save[i];
} }
/* Clear reset status */
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
/* *** go zzz *** */ /* *** go zzz *** */
pxa_cpu_pm_fns->enter(state); pxa_cpu_pm_fns->enter(state);
cpu_init(); cpu_init();
......
...@@ -326,13 +326,11 @@ static struct platform_device *devices[] __initdata = { ...@@ -326,13 +326,11 @@ static struct platform_device *devices[] __initdata = {
static void poodle_poweroff(void) static void poodle_poweroff(void)
{ {
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
arm_machine_restart('h'); arm_machine_restart('h');
} }
static void poodle_restart(char mode) static void poodle_restart(char mode)
{ {
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
arm_machine_restart('h'); arm_machine_restart('h');
} }
......
...@@ -198,6 +198,9 @@ static void pxa25x_cpu_pm_restore(unsigned long *sleep_save) ...@@ -198,6 +198,9 @@ static void pxa25x_cpu_pm_restore(unsigned long *sleep_save)
static void pxa25x_cpu_pm_enter(suspend_state_t state) static void pxa25x_cpu_pm_enter(suspend_state_t state)
{ {
/* Clear reset status */
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
switch (state) { switch (state) {
case PM_SUSPEND_MEM: case PM_SUSPEND_MEM:
/* set resume return address */ /* set resume return address */
......
...@@ -249,6 +249,9 @@ void pxa27x_cpu_pm_enter(suspend_state_t state) ...@@ -249,6 +249,9 @@ void pxa27x_cpu_pm_enter(suspend_state_t state)
/* Clear edge-detect status register. */ /* Clear edge-detect status register. */
PEDR = 0xDF12FE1B; PEDR = 0xDF12FE1B;
/* Clear reset status */
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
switch (state) { switch (state) {
case PM_SUSPEND_STANDBY: case PM_SUSPEND_STANDBY:
pxa_cpu_standby(); pxa_cpu_standby();
......
...@@ -529,8 +529,6 @@ static struct platform_device *devices[] __initdata = { ...@@ -529,8 +529,6 @@ static struct platform_device *devices[] __initdata = {
static void spitz_poweroff(void) static void spitz_poweroff(void)
{ {
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
pxa_gpio_mode(SPITZ_GPIO_ON_RESET | GPIO_OUT); pxa_gpio_mode(SPITZ_GPIO_ON_RESET | GPIO_OUT);
GPSR(SPITZ_GPIO_ON_RESET) = GPIO_bit(SPITZ_GPIO_ON_RESET); GPSR(SPITZ_GPIO_ON_RESET) = GPIO_bit(SPITZ_GPIO_ON_RESET);
......
...@@ -119,9 +119,6 @@ static void spitz_presuspend(void) ...@@ -119,9 +119,6 @@ static void spitz_presuspend(void)
/* nRESET_OUT Disable */ /* nRESET_OUT Disable */
PSLR |= PSLR_SL_ROD; PSLR |= PSLR_SL_ROD;
/* Clear reset status */
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
/* Stop 3.6MHz and drive HIGH to PCMCIA and CS */ /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
PCFR = PCFR_GPR_EN | PCFR_OPDE; PCFR = PCFR_GPR_EN | PCFR_OPDE;
} }
......
...@@ -467,8 +467,6 @@ static struct platform_device *devices[] __initdata = { ...@@ -467,8 +467,6 @@ static struct platform_device *devices[] __initdata = {
static void tosa_poweroff(void) static void tosa_poweroff(void)
{ {
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
pxa_gpio_mode(TOSA_GPIO_ON_RESET | GPIO_OUT); pxa_gpio_mode(TOSA_GPIO_ON_RESET | GPIO_OUT);
GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET); GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET);
......
...@@ -22,6 +22,7 @@ static inline void arch_idle(void) ...@@ -22,6 +22,7 @@ static inline void arch_idle(void)
static inline void arch_reset(char mode) static inline void arch_reset(char mode)
{ {
if (cpu_is_pxa2xx())
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR; RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
if (mode == 's') { if (mode == 's') {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment