Merge tag 'u-boot-atmel-fixes-2020.07-a' of https://gitlab.denx.de/u-boot/custodians...
[oweals/u-boot.git] / arch / arm / mach-rockchip / cpu-info.c
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
16 static char *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         /**
45          * reset_reason env is used by rk3288, due to special use case
46          * to figure it the boot behavior. so keep this as it is.
47          */
48         env_set("reset_reason", cause);
49
50         /*
51          * Clear glb_rst_st, so we can determine the last reset cause
52          * for following resets.
53          */
54         rk_clrreg(&cru->glb_rst_st, GLB_RST_ST_MASK);
55
56         return cause;
57 }
58
59 int print_cpuinfo(void)
60 {
61         printf("SoC: Rockchip %s\n", CONFIG_SYS_SOC);
62         printf("Reset cause: %s\n", get_reset_cause());
63
64         /* TODO print operating temparature and clock */
65
66         return 0;
67 }