Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions platform/qemu-virt-m68k/include/platform/virt.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@
#define VIRT_CTRL_MMIO_BASE 0xff009000 /* MMIO: 0xff009000 - 0xff009fff */
#define VIRT_CTRL_IRQ_BASE PIC_IRQ(1, 1) /* PIC: #1, IRQ: #1 */

/* virt-ctrl registers */
#define VIRT_CTRL_REG_FEATURES 0x00
#define VIRT_CTRL_REG_CMD 0x04

/* virt-ctrl command codes */
#define VIRT_CTRL_CMD_NOOP 0
#define VIRT_CTRL_CMD_RESET 1
#define VIRT_CTRL_CMD_HALT 2
#define VIRT_CTRL_CMD_PANIC 3

/*
* virtio-mmio size is 0x200 bytes
* we use 4 goldfish-pic to attach them,
Expand Down
12 changes: 12 additions & 0 deletions platform/qemu-virt-m68k/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,15 @@ void platform_init(void) {
}
#endif
}

static void virt_ctrl_system_reset(void) {
writel(VIRT_CTRL_CMD_RESET, VIRT_CTRL_MMIO_BASE + VIRT_CTRL_REG_CMD);
}

static void virt_ctrl_system_off(void) {
writel(VIRT_CTRL_CMD_HALT, VIRT_CTRL_MMIO_BASE + VIRT_CTRL_REG_CMD);
}

void platform_halt(platform_halt_action action, platform_halt_reason reason) {
platform_halt_default(action, reason, &virt_ctrl_system_reset, &virt_ctrl_system_off);
}