Qemu system shutdown support
PATCH 1/1 Qemu system shutdown support
Support for qemu system shutdown.
Signed-off-by Thiemo Seufer <[email protected]>
arch/mips/qemu/Makefile +1 -1
@@ -2,7 +2,7 @@ # Makefile for Qemu specific kernel interface routines under Linux. # -obj-y = q-firmware.o q-irq.o q-mem.o q-setup.o +obj-y = q-firmware.o q-irq.o q-mem.o q-setup.o q-reset.o obj-$(CONFIG_VT) += q-vga.o obj-$(CONFIG_SMP) += q-smp.o
arch/mips/qemu/q-reset.c +34 -0
@@ -0,0 +1,34 @@ +#include <linux/config.h> + +#include <asm/io.h> +#include <asm/reboot.h> +#include <asm/cacheflush.h> +#include <asm/qemu.h> + +static void qemu_machine_restart (char *command) +{ +volatile unsigned int *reg = (unsigned int *)QEMU_RESTART_REG ; + +set_c0_status (ST0_BEV |ST0_ERL ); +change_c0_config (CONF_CM_CMASK ,CONF_CM_UNCACHED ); +flush_cache_all (); +write_c0_wired (0 ); + *reg =42 ; +while (1 ) +cpu_wait (); +} + +static void qemu_machine_halt (void ) +{ +volatile unsigned int *reg = (unsigned int *)QEMU_HALT_REG ; + + *reg =42 ; +while (1 ) +cpu_wait (); +} + +void qemu_reboot_setup (void ) +{ + _machine_restart = qemu_machine_restart; + _machine_halt = qemu_machine_halt; +}
arch/mips/qemu/q-setup.c +3 -0
@@ -3,6 +3,7 @@#include <asm/time.h> extern void qvga_init (void ); +extern void qemu_reboot_setup (void );#define QEMU_PORT_BASE 0xb4000000
@@ -27,4 +28,6 @@ void __init plat_setup(void)qvga_init ();#endif board_timer_setup = qemu_timer_setup; + +qemu_reboot_setup (); }
include/asm-mips/qemu.h +6 -0
@@ -21,4 +21,10 @@*/ #define QEMU_C0_COUNTER_CLOCK 100000000 +/* +* Magic qemu system control location. +*/ +#define QEMU_RESTART_REG 0xBFBF0000 +#define QEMU_HALT_REG 0xBFBF0004 +#endif /* __ASM_QEMU_H */
arch/mips/qemu/q-reset.c line 10
Quoted 2 lines · Thiemo Seufer
arch/mips/qemu/q-reset.c +2
-0+{ +volatile unsigned int *reg = (unsigned int *)QEMU_RESTART_REG ;
This should be a tab.
Signature · 2 lines
Martin Michlmayr http://www.cyrius.com/
Quoted 5 lines · Martin Michlmayr
Review
Quoted 2 lines · Thiemo Seufer
(quoted diff) +2
-0+{ + volatile unsigned int *reg = (unsigned int *)QEMU_RESTART_REG;This should be a tab.
Updated.
Support for qemu system shutdown.
Signed-off-by Thiemo Seufer <[email protected]>
arch/mips/qemu/Makefile +1 -1
@@ -2,7 +2,7 @@ # Makefile for Qemu specific kernel interface routines under Linux. # -obj-y = q-firmware.o q-irq.o q-mem.o q-setup.o +obj-y = q-firmware.o q-irq.o q-mem.o q-setup.o q-reset.o obj-$(CONFIG_VT) += q-vga.o obj-$(CONFIG_SMP) += q-smp.o
arch/mips/qemu/q-reset.c +34 -0
@@ -0,0 +1,34 @@ +#include <linux/config.h> + +#include <asm/io.h> +#include <asm/reboot.h> +#include <asm/cacheflush.h> +#include <asm/qemu.h> + +static void qemu_machine_restart (char *command) +{ +volatile unsigned int *reg = (unsigned int *)QEMU_RESTART_REG ; + +set_c0_status (ST0_BEV |ST0_ERL ); +change_c0_config (CONF_CM_CMASK ,CONF_CM_UNCACHED ); +flush_cache_all (); +write_c0_wired (0 ); + *reg =42 ; +while (1 ) +cpu_wait (); +} + +static void qemu_machine_halt (void ) +{ +volatile unsigned int *reg = (unsigned int *)QEMU_HALT_REG ; + + *reg =42 ; +while (1 ) +cpu_wait (); +} + +void qemu_reboot_setup (void ) +{ + _machine_restart = qemu_machine_restart; + _machine_halt = qemu_machine_halt; +}
arch/mips/qemu/q-setup.c +3 -0
@@ -3,6 +3,7 @@#include <asm/time.h> extern void qvga_init (void ); +extern void qemu_reboot_setup (void );#define QEMU_PORT_BASE 0xb4000000
@@ -27,4 +28,6 @@ void __init plat_setup(void)qvga_init ();#endif board_timer_setup = qemu_timer_setup; + +qemu_reboot_setup (); }
include/asm-mips/qemu.h +6 -0
@@ -21,4 +21,10 @@*/ #define QEMU_C0_COUNTER_CLOCK 100000000 +/* +* Magic qemu system control location. +*/ +#define QEMU_RESTART_REG 0xBFBF0000 +#define QEMU_HALT_REG 0xBFBF0004 +#endif /* __ASM_QEMU_H */
Quoted 1 line · Thiemo Seufer
Support for qemu system shutdown.
Queued,
Ralf