forked from Mirrors/opensbi
		
	lib: Send IPI for all harts to hang on system shutdown
In case the platform specific method for shutting down the system fails (or is not implemented), at least make sure that all harts hang instead of just the current hart. Signed-off-by: Nick Kossifidis <mick@ics.forth.gr>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							16426420b5
						
					
				
				
					commit
					b44878b773
				
			@@ -5,11 +5,13 @@
 | 
			
		||||
 *
 | 
			
		||||
 * Authors:
 | 
			
		||||
 *   Anup Patel <anup.patel@wdc.com>
 | 
			
		||||
 *   Nick Kossifidis <mick@ics.forth.gr>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sbi/sbi_hart.h>
 | 
			
		||||
#include <sbi/sbi_platform.h>
 | 
			
		||||
#include <sbi/sbi_system.h>
 | 
			
		||||
#include <sbi/sbi_ipi.h>
 | 
			
		||||
 | 
			
		||||
int sbi_system_early_init(struct sbi_scratch *scratch, bool cold_boot)
 | 
			
		||||
{
 | 
			
		||||
@@ -34,6 +36,12 @@ void __attribute__((noreturn)) sbi_system_reboot(struct sbi_scratch *scratch,
 | 
			
		||||
void __attribute__((noreturn)) sbi_system_shutdown(struct sbi_scratch *scratch,
 | 
			
		||||
						   u32 type)
 | 
			
		||||
{
 | 
			
		||||
	/* First try the platform-specific method */
 | 
			
		||||
	sbi_platform_system_shutdown(sbi_platform_ptr(scratch), type);
 | 
			
		||||
 | 
			
		||||
	/* If that fails (or is not implemented) send an IPI on every
 | 
			
		||||
	 * hart to hang and then hang the current hart */
 | 
			
		||||
	sbi_ipi_send_many(scratch, NULL, SBI_IPI_EVENT_HALT);
 | 
			
		||||
 | 
			
		||||
	sbi_hart_hang();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user