Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c583122c authored by Thiemo Seufer's avatar Thiemo Seufer Committed by Ralf Baechle
Browse files

[MIPS] Qemu system shutdown support

parent eae89076
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+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;
}
+4 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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();
}
+6 −0
Original line number Diff line number Diff line
@@ -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 */