mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00
platform: qemu-virt: Implement system shutdown
In order for QEMU to be compatible with Spike, it implements a simple protocol used for reporting back the simulation's status, through the memory-mapped "test finisher" device. We use that protocol to make QEMU exit on system shutdown. Signed-off-by: Nick Kossifidis <mick@ics.forth.gr>
This commit is contained in:

committed by
Anup Patel

parent
b44878b773
commit
51e543511a
@@ -5,9 +5,11 @@
|
|||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Anup Patel <anup.patel@wdc.com>
|
* Anup Patel <anup.patel@wdc.com>
|
||||||
|
* Nick Kossifidis <mick@ics.forth.gr>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sbi/riscv_encoding.h>
|
#include <sbi/riscv_encoding.h>
|
||||||
|
#include <sbi/riscv_io.h>
|
||||||
#include <sbi/sbi_const.h>
|
#include <sbi/sbi_const.h>
|
||||||
#include <sbi/sbi_hart.h>
|
#include <sbi/sbi_hart.h>
|
||||||
#include <sbi/sbi_platform.h>
|
#include <sbi/sbi_platform.h>
|
||||||
@@ -19,6 +21,8 @@
|
|||||||
#define VIRT_HART_STACK_SIZE 8192
|
#define VIRT_HART_STACK_SIZE 8192
|
||||||
|
|
||||||
#define VIRT_TEST_ADDR 0x100000
|
#define VIRT_TEST_ADDR 0x100000
|
||||||
|
#define VIRT_TEST_FINISHER_FAIL 0x3333
|
||||||
|
#define VIRT_TEST_FINISHER_PASS 0x5555
|
||||||
|
|
||||||
#define VIRT_CLINT_ADDR 0x2000000
|
#define VIRT_CLINT_ADDR 0x2000000
|
||||||
|
|
||||||
@@ -122,7 +126,11 @@ static int virt_timer_init(bool cold_boot)
|
|||||||
|
|
||||||
static int virt_system_down(u32 type)
|
static int virt_system_down(u32 type)
|
||||||
{
|
{
|
||||||
/* For now nothing to do. */
|
/* Tell the "finisher" that the simulation
|
||||||
|
* was successful so that QEMU exits
|
||||||
|
*/
|
||||||
|
writew(VIRT_TEST_FINISHER_PASS, (void *)VIRT_TEST_ADDR);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user