1 // SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2 /* 3 * (C) Copyright 2019 Amarula Solutions(India) 4 * Author: Jagan Teki <jagan@amarulasolutions.com> 5 */ 6 7 #include <common.h> 8 #include <env.h> 9 #include <init.h> 10 #include <asm/io.h> 11 #include <asm/arch-rockchip/clock.h> 12 #include <asm/arch-rockchip/cru.h> 13 #include <asm/arch-rockchip/hardware.h> 14 #include <linux/err.h> 15 get_reset_cause(void)16char *get_reset_cause(void) 17 { 18 struct rockchip_cru *cru = rockchip_get_cru(); 19 char *cause = NULL; 20 21 if (IS_ERR(cru)) 22 return cause; 23 24 switch (cru->glb_rst_st) { 25 case GLB_POR_RST: 26 cause = "POR"; 27 break; 28 case FST_GLB_RST_ST: 29 case SND_GLB_RST_ST: 30 cause = "RST"; 31 break; 32 case FST_GLB_TSADC_RST_ST: 33 case SND_GLB_TSADC_RST_ST: 34 cause = "THERMAL"; 35 break; 36 case FST_GLB_WDT_RST_ST: 37 case SND_GLB_WDT_RST_ST: 38 cause = "WDOG"; 39 break; 40 default: 41 cause = "unknown reset"; 42 } 43 44 return cause; 45 } 46 47 #if CONFIG_IS_ENABLED(DISPLAY_CPUINFO) print_cpuinfo(void)48int print_cpuinfo(void) 49 { 50 char *cause = get_reset_cause(); 51 52 printf("SoC: Rockchip %s\n", CONFIG_SYS_SOC); 53 printf("Reset cause: %s\n", cause); 54 55 /** 56 * reset_reason env is used by rk3288, due to special use case 57 * to figure it the boot behavior. so keep this as it is. 58 */ 59 env_set("reset_reason", cause); 60 61 /* TODO print operating temparature and clock */ 62 63 return 0; 64 } 65 #endif 66