forked from Mirrors/opensbi
		
	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:
 | 
			
		||||
 *   Anup Patel <anup.patel@wdc.com>
 | 
			
		||||
 *   Nick Kossifidis <mick@ics.forth.gr>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sbi/riscv_encoding.h>
 | 
			
		||||
#include <sbi/riscv_io.h>
 | 
			
		||||
#include <sbi/sbi_const.h>
 | 
			
		||||
#include <sbi/sbi_hart.h>
 | 
			
		||||
#include <sbi/sbi_platform.h>
 | 
			
		||||
@@ -19,6 +21,8 @@
 | 
			
		||||
#define VIRT_HART_STACK_SIZE		8192
 | 
			
		||||
 | 
			
		||||
#define VIRT_TEST_ADDR			0x100000
 | 
			
		||||
#define VIRT_TEST_FINISHER_FAIL		0x3333
 | 
			
		||||
#define VIRT_TEST_FINISHER_PASS		0x5555
 | 
			
		||||
 | 
			
		||||
#define VIRT_CLINT_ADDR			0x2000000
 | 
			
		||||
 | 
			
		||||
@@ -122,7 +126,11 @@ static int virt_timer_init(bool cold_boot)
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user