[PATCH 23/30] rockchip: cpuinfo: Use sysreset_get_status() helper

Jonas Karlman <[email protected]> Wed, 5 Aug 2026 17:44:54 +0000
Newsgroups gmane.comp.boot-loaders.u-boot
Message-ID <[email protected]>
The get_reset_cause() helper only works on RK3288, RK3399, RK3568 and
RK3588 due to its dependency on rockchip_get_cru() and the glb_rst_st
field in struct rockchip_cru.

Convert to use the sysreset_get_status() helper now that the
sysreset_rockchip driver implements the get_status() ops to remove any
dependency on rockchip_get_cru() and the glb_rst_st field.

Signed-off-by: Jonas Karlman <[email protected]>
---
 arch/arm/include/asm/arch-rockchip/cru.h | 13 ------
 arch/arm/mach-rockchip/cpu-info.c        | 50 ++++++------------------
 2 files changed, 13 insertions(+), 50 deletions(-)

diff --git a/arch/arm/include/asm/arch-rockchip/cru.h b/arch/arm/include/asm/arch-rockchip/cru.h
index c3259b8e7cc0..b583d08a50c3 100644
--- a/arch/arm/include/asm/arch-rockchip/cru.h
+++ b/arch/arm/include/asm/arch-rockchip/cru.h
@@ -21,19 +21,6 @@
 #include <asm/arch-rockchip/cru_rk3588.h>
 #endif
 
-/* CRU_GLB_RST_ST */
-enum {
-	GLB_POR_RST,
-	FST_GLB_RST_ST		= BIT(0),
-	SND_GLB_RST_ST		= BIT(1),
-	FST_GLB_TSADC_RST_ST	= BIT(2),
-	SND_GLB_TSADC_RST_ST	= BIT(3),
-	FST_GLB_WDT_RST_ST	= BIT(4),
-	SND_GLB_WDT_RST_ST	= BIT(5),
-};
-
 #define MHz		1000000
 
-char *get_reset_cause(void);
-
 #endif /* _ROCKCHIP_CLOCK_H */
diff --git a/arch/arm/mach-rockchip/cpu-info.c b/arch/arm/mach-rockchip/cpu-info.c
index 14c7331e1ab2..9be523b11003 100644
--- a/arch/arm/mach-rockchip/cpu-info.c
+++ b/arch/arm/mach-rockchip/cpu-info.c
@@ -4,48 +4,24 @@
  * Author: Jagan Teki <[email protected]>
  */
 
+#include <dm.h>
 #include <env.h>
-#include <init.h>
-#include <asm/arch-rockchip/clock.h>
-#include <asm/arch-rockchip/cru.h>
-#include <asm/arch-rockchip/hardware.h>
-#include <linux/err.h>
-
-char *get_reset_cause(void)
-{
-	struct rockchip_cru *cru = rockchip_get_cru();
-	char *cause = NULL;
-
-	if (IS_ERR(cru))
-		return cause;
-
-	switch (cru->glb_rst_st) {
-	case GLB_POR_RST:
-		cause = "POR";
-		break;
-	case FST_GLB_RST_ST:
-	case SND_GLB_RST_ST:
-		cause = "RST";
-		break;
-	case FST_GLB_TSADC_RST_ST:
-	case SND_GLB_TSADC_RST_ST:
-		cause = "THERMAL";
-		break;
-	case FST_GLB_WDT_RST_ST:
-	case SND_GLB_WDT_RST_ST:
-		cause = "WDOG";
-		break;
-	default:
-		cause = "unknown reset";
-	}
-
-	return cause;
-}
+#include <sysreset.h>
 
 #if IS_ENABLED(CONFIG_DISPLAY_CPUINFO)
 int print_cpuinfo(void)
 {
-	char *cause = get_reset_cause();
+	struct udevice *sysreset_dev;
+	char cause[16];
+	int ret;
+
+	ret = uclass_get_device_by_driver(UCLASS_SYSRESET,
+					  DM_DRIVER_GET(sysreset_rockchip),
+					  &sysreset_dev);
+	if (!ret)
+		ret = sysreset_get_status(sysreset_dev, cause, sizeof(cause));
+	if (ret)
+		strcpy(cause, "unknown reset");
 
 	printf("SoC: Rockchip %s\n", CONFIG_SYS_SOC);
 	printf("Reset cause: %s\n", cause);
-- 
2.54.0