diff options
| author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2008-07-23 11:25:17 -0400 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2008-07-30 16:54:38 -0400 |
| commit | a49297e8fc8a9a835ac4ec124aa83028abdcc7d5 (patch) | |
| tree | 04b9c04589033206888789122d436e287953480c | |
| parent | 455cc256eb23915100e203fb33ee143afd127954 (diff) | |
[MIPS] TXx9: Cleanup restart/halt/power_off
Unify machine_restart/machine_halt/pm_power_off and add fallback
machine_halt routine.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
| -rw-r--r-- | arch/mips/txx9/generic/setup.c | 26 | ||||
| -rw-r--r-- | arch/mips/txx9/jmr3927/setup.c | 29 | ||||
| -rw-r--r-- | arch/mips/txx9/rbtx4927/setup.c | 33 | ||||
| -rw-r--r-- | arch/mips/txx9/rbtx4938/setup.c | 26 |
4 files changed, 34 insertions, 80 deletions
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c index 4fbd7baa7037..82272e85a042 100644 --- a/arch/mips/txx9/generic/setup.c +++ b/arch/mips/txx9/generic/setup.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
| 23 | #include <asm/bootinfo.h> | 23 | #include <asm/bootinfo.h> |
| 24 | #include <asm/time.h> | 24 | #include <asm/time.h> |
| 25 | #include <asm/reboot.h> | ||
| 25 | #include <asm/txx9/generic.h> | 26 | #include <asm/txx9/generic.h> |
| 26 | #include <asm/txx9/pci.h> | 27 | #include <asm/txx9/pci.h> |
| 27 | #ifdef CONFIG_CPU_TX49XX | 28 | #ifdef CONFIG_CPU_TX49XX |
| @@ -188,6 +189,25 @@ char * __init prom_getcmdline(void) | |||
| 188 | return &(arcs_cmdline[0]); | 189 | return &(arcs_cmdline[0]); |
| 189 | } | 190 | } |
| 190 | 191 | ||
| 192 | static void __noreturn txx9_machine_halt(void) | ||
| 193 | { | ||
| 194 | local_irq_disable(); | ||
| 195 | clear_c0_status(ST0_IM); | ||
| 196 | while (1) { | ||
| 197 | if (cpu_wait) { | ||
| 198 | (*cpu_wait)(); | ||
| 199 | if (cpu_has_counter) { | ||
| 200 | /* | ||
| 201 | * Clear counter interrupt while it | ||
| 202 | * breaks WAIT instruction even if | ||
| 203 | * masked. | ||
| 204 | */ | ||
| 205 | write_c0_compare(0); | ||
| 206 | } | ||
| 207 | } | ||
| 208 | } | ||
| 209 | } | ||
| 210 | |||
| 191 | /* wrappers */ | 211 | /* wrappers */ |
| 192 | void __init plat_mem_setup(void) | 212 | void __init plat_mem_setup(void) |
| 193 | { | 213 | { |
| @@ -195,6 +215,12 @@ void __init plat_mem_setup(void) | |||
| 195 | ioport_resource.end = ~0UL; /* no limit */ | 215 | ioport_resource.end = ~0UL; /* no limit */ |
| 196 | iomem_resource.start = 0; | 216 | iomem_resource.start = 0; |
| 197 | iomem_resource.end = ~0UL; /* no limit */ | 217 | iomem_resource.end = ~0UL; /* no limit */ |
| 218 | |||
| 219 | /* fallback restart/halt routines */ | ||
| 220 | _machine_restart = (void (*)(char *))txx9_machine_halt; | ||
| 221 | _machine_halt = txx9_machine_halt; | ||
| 222 | pm_power_off = txx9_machine_halt; | ||
| 223 | |||
| 198 | #ifdef CONFIG_PCI | 224 | #ifdef CONFIG_PCI |
| 199 | pcibios_plat_setup = txx9_pcibios_setup; | 225 | pcibios_plat_setup = txx9_pcibios_setup; |
| 200 | #endif | 226 | #endif |
diff --git a/arch/mips/txx9/jmr3927/setup.c b/arch/mips/txx9/jmr3927/setup.c index 7c16c402ff60..fa0503efc840 100644 --- a/arch/mips/txx9/jmr3927/setup.c +++ b/arch/mips/txx9/jmr3927/setup.c | |||
| @@ -32,7 +32,6 @@ | |||
| 32 | #include <linux/types.h> | 32 | #include <linux/types.h> |
| 33 | #include <linux/ioport.h> | 33 | #include <linux/ioport.h> |
| 34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
| 35 | #include <linux/pm.h> | ||
| 36 | #include <linux/platform_device.h> | 35 | #include <linux/platform_device.h> |
| 37 | #include <linux/gpio.h> | 36 | #include <linux/gpio.h> |
| 38 | #ifdef CONFIG_SERIAL_TXX9 | 37 | #ifdef CONFIG_SERIAL_TXX9 |
| @@ -46,13 +45,12 @@ | |||
| 46 | #include <asm/txx9/jmr3927.h> | 45 | #include <asm/txx9/jmr3927.h> |
| 47 | #include <asm/mipsregs.h> | 46 | #include <asm/mipsregs.h> |
| 48 | 47 | ||
| 49 | extern void puts(const char *cp); | ||
| 50 | |||
| 51 | /* don't enable - see errata */ | 48 | /* don't enable - see errata */ |
| 52 | static int jmr3927_ccfg_toeon; | 49 | static int jmr3927_ccfg_toeon; |
| 53 | 50 | ||
| 54 | static inline void do_reset(void) | 51 | static void jmr3927_machine_restart(char *command) |
| 55 | { | 52 | { |
| 53 | local_irq_disable(); | ||
| 56 | #if 1 /* Resetting PCI bus */ | 54 | #if 1 /* Resetting PCI bus */ |
| 57 | jmr3927_ioc_reg_out(0, JMR3927_IOC_RESET_ADDR); | 55 | jmr3927_ioc_reg_out(0, JMR3927_IOC_RESET_ADDR); |
| 58 | jmr3927_ioc_reg_out(JMR3927_IOC_RESET_PCI, JMR3927_IOC_RESET_ADDR); | 56 | jmr3927_ioc_reg_out(JMR3927_IOC_RESET_PCI, JMR3927_IOC_RESET_ADDR); |
| @@ -61,25 +59,8 @@ static inline void do_reset(void) | |||
| 61 | jmr3927_ioc_reg_out(0, JMR3927_IOC_RESET_ADDR); | 59 | jmr3927_ioc_reg_out(0, JMR3927_IOC_RESET_ADDR); |
| 62 | #endif | 60 | #endif |
| 63 | jmr3927_ioc_reg_out(JMR3927_IOC_RESET_CPU, JMR3927_IOC_RESET_ADDR); | 61 | jmr3927_ioc_reg_out(JMR3927_IOC_RESET_CPU, JMR3927_IOC_RESET_ADDR); |
| 64 | } | 62 | /* fallback */ |
| 65 | 63 | (*_machine_halt)(); | |
| 66 | static void jmr3927_machine_restart(char *command) | ||
| 67 | { | ||
| 68 | local_irq_disable(); | ||
| 69 | puts("Rebooting..."); | ||
| 70 | do_reset(); | ||
| 71 | } | ||
| 72 | |||
| 73 | static void jmr3927_machine_halt(void) | ||
| 74 | { | ||
| 75 | puts("JMR-TX3927 halted.\n"); | ||
| 76 | while (1); | ||
| 77 | } | ||
| 78 | |||
| 79 | static void jmr3927_machine_power_off(void) | ||
| 80 | { | ||
| 81 | puts("JMR-TX3927 halted. Please turn off the power.\n"); | ||
| 82 | while (1); | ||
| 83 | } | 64 | } |
| 84 | 65 | ||
| 85 | static void __init jmr3927_time_init(void) | 66 | static void __init jmr3927_time_init(void) |
| @@ -102,8 +83,6 @@ static void __init jmr3927_mem_setup(void) | |||
| 102 | set_io_port_base(JMR3927_PORT_BASE + JMR3927_PCIIO); | 83 | set_io_port_base(JMR3927_PORT_BASE + JMR3927_PCIIO); |
| 103 | 84 | ||
| 104 | _machine_restart = jmr3927_machine_restart; | 85 | _machine_restart = jmr3927_machine_restart; |
| 105 | _machine_halt = jmr3927_machine_halt; | ||
| 106 | pm_power_off = jmr3927_machine_power_off; | ||
| 107 | 86 | ||
| 108 | /* Reboot on panic */ | 87 | /* Reboot on panic */ |
| 109 | panic_timeout = 180; | 88 | panic_timeout = 180; |
diff --git a/arch/mips/txx9/rbtx4927/setup.c b/arch/mips/txx9/rbtx4927/setup.c index 65b72247d320..54c33c3e9f7d 100644 --- a/arch/mips/txx9/rbtx4927/setup.c +++ b/arch/mips/txx9/rbtx4927/setup.c | |||
| @@ -47,11 +47,9 @@ | |||
| 47 | #include <linux/types.h> | 47 | #include <linux/types.h> |
| 48 | #include <linux/ioport.h> | 48 | #include <linux/ioport.h> |
| 49 | #include <linux/interrupt.h> | 49 | #include <linux/interrupt.h> |
| 50 | #include <linux/pm.h> | ||
| 51 | #include <linux/platform_device.h> | 50 | #include <linux/platform_device.h> |
| 52 | #include <linux/delay.h> | 51 | #include <linux/delay.h> |
| 53 | #include <asm/io.h> | 52 | #include <asm/io.h> |
| 54 | #include <asm/processor.h> | ||
| 55 | #include <asm/reboot.h> | 53 | #include <asm/reboot.h> |
| 56 | #include <asm/txx9/generic.h> | 54 | #include <asm/txx9/generic.h> |
| 57 | #include <asm/txx9/pci.h> | 55 | #include <asm/txx9/pci.h> |
| @@ -167,17 +165,8 @@ static void __init rbtx4937_arch_init(void) | |||
| 167 | #define rbtx4937_arch_init NULL | 165 | #define rbtx4937_arch_init NULL |
| 168 | #endif /* CONFIG_PCI */ | 166 | #endif /* CONFIG_PCI */ |
| 169 | 167 | ||
| 170 | static void __noreturn wait_forever(void) | ||
| 171 | { | ||
| 172 | while (1) | ||
| 173 | if (cpu_wait) | ||
| 174 | (*cpu_wait)(); | ||
| 175 | } | ||
| 176 | |||
| 177 | static void toshiba_rbtx4927_restart(char *command) | 168 | static void toshiba_rbtx4927_restart(char *command) |
| 178 | { | 169 | { |
| 179 | printk(KERN_NOTICE "System Rebooting...\n"); | ||
| 180 | |||
| 181 | /* enable the s/w reset register */ | 170 | /* enable the s/w reset register */ |
| 182 | writeb(1, rbtx4927_softresetlock_addr); | 171 | writeb(1, rbtx4927_softresetlock_addr); |
| 183 | 172 | ||
| @@ -188,24 +177,8 @@ static void toshiba_rbtx4927_restart(char *command) | |||
| 188 | /* do a s/w reset */ | 177 | /* do a s/w reset */ |
| 189 | writeb(1, rbtx4927_softreset_addr); | 178 | writeb(1, rbtx4927_softreset_addr); |
| 190 | 179 | ||
| 191 | /* do something passive while waiting for reset */ | 180 | /* fallback */ |
| 192 | local_irq_disable(); | 181 | (*_machine_halt)(); |
| 193 | wait_forever(); | ||
| 194 | /* no return */ | ||
| 195 | } | ||
| 196 | |||
| 197 | static void toshiba_rbtx4927_halt(void) | ||
| 198 | { | ||
| 199 | printk(KERN_NOTICE "System Halted\n"); | ||
| 200 | local_irq_disable(); | ||
| 201 | wait_forever(); | ||
| 202 | /* no return */ | ||
| 203 | } | ||
| 204 | |||
| 205 | static void toshiba_rbtx4927_power_off(void) | ||
| 206 | { | ||
| 207 | toshiba_rbtx4927_halt(); | ||
| 208 | /* no return */ | ||
| 209 | } | 182 | } |
| 210 | 183 | ||
| 211 | static void __init rbtx4927_clock_init(void); | 184 | static void __init rbtx4927_clock_init(void); |
| @@ -233,8 +206,6 @@ static void __init rbtx4927_mem_setup(void) | |||
| 233 | } | 206 | } |
| 234 | 207 | ||
| 235 | _machine_restart = toshiba_rbtx4927_restart; | 208 | _machine_restart = toshiba_rbtx4927_restart; |
| 236 | _machine_halt = toshiba_rbtx4927_halt; | ||
| 237 | pm_power_off = toshiba_rbtx4927_power_off; | ||
| 238 | 209 | ||
| 239 | #ifdef CONFIG_PCI | 210 | #ifdef CONFIG_PCI |
| 240 | txx9_alloc_pci_controller(&txx9_primary_pcic, | 211 | txx9_alloc_pci_controller(&txx9_primary_pcic, |
diff --git a/arch/mips/txx9/rbtx4938/setup.c b/arch/mips/txx9/rbtx4938/setup.c index 4454b7901cd3..e1177b3b9103 100644 --- a/arch/mips/txx9/rbtx4938/setup.c +++ b/arch/mips/txx9/rbtx4938/setup.c | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/delay.h> | 15 | #include <linux/delay.h> |
| 16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
| 17 | #include <linux/console.h> | 17 | #include <linux/console.h> |
| 18 | #include <linux/pm.h> | ||
| 19 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 20 | #include <linux/gpio.h> | 19 | #include <linux/gpio.h> |
| 21 | 20 | ||
| @@ -28,33 +27,14 @@ | |||
| 28 | #include <asm/txx9/spi.h> | 27 | #include <asm/txx9/spi.h> |
| 29 | #include <asm/txx9pio.h> | 28 | #include <asm/txx9pio.h> |
| 30 | 29 | ||
| 31 | static void rbtx4938_machine_halt(void) | ||
| 32 | { | ||
| 33 | printk(KERN_NOTICE "System Halted\n"); | ||
| 34 | local_irq_disable(); | ||
| 35 | |||
| 36 | while (1) | ||
| 37 | __asm__(".set\tmips3\n\t" | ||
| 38 | "wait\n\t" | ||
| 39 | ".set\tmips0"); | ||
| 40 | } | ||
| 41 | |||
| 42 | static void rbtx4938_machine_power_off(void) | ||
| 43 | { | ||
| 44 | rbtx4938_machine_halt(); | ||
| 45 | /* no return */ | ||
| 46 | } | ||
| 47 | |||
| 48 | static void rbtx4938_machine_restart(char *command) | 30 | static void rbtx4938_machine_restart(char *command) |
| 49 | { | 31 | { |
| 50 | local_irq_disable(); | 32 | local_irq_disable(); |
| 51 | |||
| 52 | printk("Rebooting..."); | ||
| 53 | writeb(1, rbtx4938_softresetlock_addr); | 33 | writeb(1, rbtx4938_softresetlock_addr); |
| 54 | writeb(1, rbtx4938_sfvol_addr); | 34 | writeb(1, rbtx4938_sfvol_addr); |
| 55 | writeb(1, rbtx4938_softreset_addr); | 35 | writeb(1, rbtx4938_softreset_addr); |
| 56 | while(1) | 36 | /* fallback */ |
| 57 | ; | 37 | (*_machine_halt)(); |
| 58 | } | 38 | } |
| 59 | 39 | ||
| 60 | static void __init rbtx4938_pci_setup(void) | 40 | static void __init rbtx4938_pci_setup(void) |
| @@ -263,8 +243,6 @@ static void __init rbtx4938_mem_setup(void) | |||
| 263 | printk("request resource for fpga failed\n"); | 243 | printk("request resource for fpga failed\n"); |
| 264 | 244 | ||
| 265 | _machine_restart = rbtx4938_machine_restart; | 245 | _machine_restart = rbtx4938_machine_restart; |
| 266 | _machine_halt = rbtx4938_machine_halt; | ||
| 267 | pm_power_off = rbtx4938_machine_power_off; | ||
| 268 | 246 | ||
| 269 | writeb(0xff, rbtx4938_led_addr); | 247 | writeb(0xff, rbtx4938_led_addr); |
| 270 | printk(KERN_INFO "RBTX4938 --- FPGA(Rev %02x) DIPSW:%02x,%02x\n", | 248 | printk(KERN_INFO "RBTX4938 --- FPGA(Rev %02x) DIPSW:%02x,%02x\n", |
