arm: socfpga: stratix10: Add cpu_has_been_warmreset()
authorLey Foon Tan <ley.foon.tan@intel.com>
Thu, 21 Mar 2019 17:24:04 +0000 (01:24 +0800)
committerMarek Vasut <marex@denx.de>
Wed, 17 Apr 2019 20:20:17 +0000 (22:20 +0200)
Add helper function cpu_has_been_warmreset() to check
if CPU is from warm reset boot.

Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com>
arch/arm/mach-socfpga/include/mach/reset_manager_s10.h
arch/arm/mach-socfpga/reset_manager_s10.c

index 31b73edabe211aebe85e2acedd56c42fdd6769eb..e18629679161e5f104a3dbfa649b470efdba7880 100644 (file)
@@ -9,6 +9,7 @@
 
 void reset_cpu(ulong addr);
 void reset_deassert_peripherals_handoff(void);
+int cpu_has_been_warmreset(void);
 
 void socfpga_bridges_reset(int enable);
 
@@ -47,6 +48,8 @@ struct socfpga_reset_manager {
 #define RSTMGR_MPUMODRST_CORE0         0
 #define RSTMGR_PER0MODRST_OCP_MASK     0x0020bf00
 #define RSTMGR_BRGMODRST_DDRSCH_MASK   0X00000040
+/* Watchdogs and MPU warm reset mask */
+#define RSTMGR_L4WD_MPU_WARMRESET_MASK 0x000F0F00
 
 /*
  * Define a reset identifier, from which a permodrst bank ID
index f176c384951a2cb191edc1606c831ee701cda251..f8dd787cc6ae41069222d96e1d7f362ba81b0501 100644 (file)
@@ -103,3 +103,12 @@ void reset_deassert_peripherals_handoff(void)
        writel(~RSTMGR_PER0MODRST_OCP_MASK, &reset_manager_base->per0modrst);
        writel(0, &reset_manager_base->per0modrst);
 }
+
+/*
+ * Return non-zero if the CPU has been warm reset
+ */
+int cpu_has_been_warmreset(void)
+{
+       return readl(&reset_manager_base->status) &
+               RSTMGR_L4WD_MPU_WARMRESET_MASK;
+}