Loading arch/mips/qemu/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,6 @@ # 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_SMP) += q-smp.o arch/mips/qemu/q-reset.c 0 → 100644 +34 −0 Original line number Diff line number Diff line #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 +4 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ #include <asm/io.h> #include <asm/time.h> extern void qemu_reboot_setup(void); #define QEMU_PORT_BASE 0xb4000000 const char *get_system_type(void) Loading @@ -22,4 +24,6 @@ void __init plat_setup(void) { set_io_port_base(QEMU_PORT_BASE); board_timer_setup = qemu_timer_setup; qemu_reboot_setup(); } include/asm-mips/qemu.h +6 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading
arch/mips/qemu/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,6 @@ # 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_SMP) += q-smp.o
arch/mips/qemu/q-reset.c 0 → 100644 +34 −0 Original line number Diff line number Diff line #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 +4 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ #include <asm/io.h> #include <asm/time.h> extern void qemu_reboot_setup(void); #define QEMU_PORT_BASE 0xb4000000 const char *get_system_type(void) Loading @@ -22,4 +24,6 @@ void __init plat_setup(void) { set_io_port_base(QEMU_PORT_BASE); board_timer_setup = qemu_timer_setup; qemu_reboot_setup(); }
include/asm-mips/qemu.h +6 −0 Original line number Diff line number Diff line Loading @@ -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 */