forked from Mirrors/opensbi
		
	platform: implement K210 system reset
Implement rebooting the K210 via the system reset extension. All reset types are treated in the same way. A request for shutdown results in a reboot. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Reviewed-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							234ed8e427
						
					
				
				
					commit
					ec5274b04c
				
			@@ -129,6 +129,22 @@ static int k210_timer_init(bool cold_boot)
 | 
			
		||||
	return clint_warm_timer_init();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int k210_system_reset_check(u32 type, u32 reason)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void k210_system_reset(u32 type, u32 reason)
 | 
			
		||||
{
 | 
			
		||||
	u32 val;
 | 
			
		||||
 | 
			
		||||
	val = k210_read_sysreg(K210_RESET);
 | 
			
		||||
	val |= K210_RESET_MASK;
 | 
			
		||||
	k210_write_sysreg(val, K210_RESET);
 | 
			
		||||
 | 
			
		||||
	while (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const struct sbi_platform_operations platform_ops = {
 | 
			
		||||
	.final_init	= k210_final_init,
 | 
			
		||||
 | 
			
		||||
@@ -142,6 +158,9 @@ const struct sbi_platform_operations platform_ops = {
 | 
			
		||||
	.ipi_send  = clint_ipi_send,
 | 
			
		||||
	.ipi_clear = clint_ipi_clear,
 | 
			
		||||
 | 
			
		||||
	.system_reset_check	= k210_system_reset_check,
 | 
			
		||||
	.system_reset		= k210_system_reset,
 | 
			
		||||
 | 
			
		||||
	.timer_init	   = k210_timer_init,
 | 
			
		||||
	.timer_value	   = clint_timer_value,
 | 
			
		||||
	.timer_event_stop  = clint_timer_event_stop,
 | 
			
		||||
 
 | 
			
		||||
@@ -27,10 +27,19 @@
 | 
			
		||||
/* Registers */
 | 
			
		||||
#define K210_PLL0		0x08
 | 
			
		||||
#define K210_CLKSEL0		0x20
 | 
			
		||||
#define K210_RESET		0x30
 | 
			
		||||
 | 
			
		||||
/* Register bit masks */
 | 
			
		||||
#define K210_RESET_MASK		0x01
 | 
			
		||||
 | 
			
		||||
static inline u32 k210_read_sysreg(u32 reg)
 | 
			
		||||
{
 | 
			
		||||
	return readl((volatile void *)(K210_SYSCTL_BASE_ADDR + reg));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void k210_write_sysreg(u32 val, u32 reg)
 | 
			
		||||
{
 | 
			
		||||
	writel(val, (volatile void *)(K210_SYSCTL_BASE_ADDR + reg));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* _K210_PLATFORM_H_ */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user