From 1588c243b972eee7086cfbb98e04fc680f7fae13 Mon Sep 17 00:00:00 2001 From: Ye Li Date: Tue, 23 Sep 2025 10:14:56 +0800 Subject: [PATCH] imx9: scmi: Add i.MX94 support to get_reset_reason() Update get_reset_reason() to support i.MX94 to send message to the System Manager to retrieve the LM/system last booted/shutdown reasons. Signed-off-by: Ye Li Signed-off-by: Alice Guo Reviewed-by: Peng Fan --- arch/arm/mach-imx/imx9/scmi/soc.c | 39 +++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-imx/imx9/scmi/soc.c b/arch/arm/mach-imx/imx9/scmi/soc.c index f04b9255cdb..07022c65b88 100644 --- a/arch/arm/mach-imx/imx9/scmi/soc.c +++ b/arch/arm/mach-imx/imx9/scmi/soc.c @@ -494,6 +494,31 @@ static char *rst_string[32] = { "por" }; +static char *rst_string_imx94[32] = { + "cm33_lockup", + "cm33_swreq", + "cm70_lockup", + "cm70_swreq", + "fccu", + "jtag_sw", + "ele", + "tempsense", + "wdog1", + "wdog2", + "wdog3", + "wdog4", + "wdog5", + "jtag", + "wdog6", + "wdog7", + "wdog8", + "wo_netc", "cm33s_lockup", "cm33s_swreq", "cm71_lockup", "cm71_swreq", "cm33_exc", + "bbm", "sw", "sm_err", "fusa_sreco", "pmic", "unused", + "unused", "unused", + "por" +}; + + int get_reset_reason(bool sys, bool lm) { struct scmi_imx_misc_reset_reason_in in = { @@ -512,6 +537,12 @@ int get_reset_reason(bool sys, bool lm) int ret; struct udevice *dev; + char **rst; + + if (is_imx94()) + rst = rst_string_imx94; + else + rst = rst_string; ret = uclass_get_device_by_name(UCLASS_CLK, "protocol@14", &dev); if (ret) @@ -526,7 +557,7 @@ int get_reset_reason(bool sys, bool lm) if (out.bootflags & MISC_BOOT_FLAG_VLD) { printf("SYS Boot reason: %s, origin: %ld, errid: %ld\n", - rst_string[out.bootflags & MISC_BOOT_FLAG_REASON], + rst[out.bootflags & MISC_BOOT_FLAG_REASON], out.bootflags & MISC_BOOT_FLAG_ORG_VLD ? FIELD_GET(MISC_BOOT_FLAG_ORIGIN, out.bootflags) : -1, out.bootflags & MISC_BOOT_FLAG_ERR_VLD ? @@ -535,7 +566,7 @@ int get_reset_reason(bool sys, bool lm) } if (out.shutdownflags & MISC_SHUTDOWN_FLAG_VLD) { printf("SYS shutdown reason: %s, origin: %ld, errid: %ld\n", - rst_string[out.bootflags & MISC_SHUTDOWN_FLAG_REASON], + rst[out.bootflags & MISC_SHUTDOWN_FLAG_REASON], out.bootflags & MISC_SHUTDOWN_FLAG_ORG_VLD ? FIELD_GET(MISC_SHUTDOWN_FLAG_ORIGIN, out.bootflags) : -1, out.bootflags & MISC_SHUTDOWN_FLAG_ERR_VLD ? @@ -556,7 +587,7 @@ int get_reset_reason(bool sys, bool lm) if (out.bootflags & MISC_BOOT_FLAG_VLD) { printf("LM Boot reason: %s, origin: %ld, errid: %ld\n", - rst_string[out.bootflags & MISC_BOOT_FLAG_REASON], + rst[out.bootflags & MISC_BOOT_FLAG_REASON], out.bootflags & MISC_BOOT_FLAG_ORG_VLD ? FIELD_GET(MISC_BOOT_FLAG_ORIGIN, out.bootflags) : -1, out.bootflags & MISC_BOOT_FLAG_ERR_VLD ? @@ -566,7 +597,7 @@ int get_reset_reason(bool sys, bool lm) if (out.shutdownflags & MISC_SHUTDOWN_FLAG_VLD) { printf("LM shutdown reason: %s, origin: %ld, errid: %ld\n", - rst_string[out.bootflags & MISC_SHUTDOWN_FLAG_REASON], + rst[out.bootflags & MISC_SHUTDOWN_FLAG_REASON], out.bootflags & MISC_SHUTDOWN_FLAG_ORG_VLD ? FIELD_GET(MISC_SHUTDOWN_FLAG_ORIGIN, out.bootflags) : -1, out.bootflags & MISC_SHUTDOWN_FLAG_ERR_VLD ? -- 2.47.3