From f0b6b837a438a41a58c196dbc5cdda7c57076f51 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 20 Apr 2018 18:05:31 -0700 Subject: ARM: i.MX6: Record reset reason as a part of startup Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/mach-imx/imx6.c | 13 ++++++++++++- arch/arm/mach-imx/include/mach/reset-reason.h | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-imx/imx6.c b/arch/arm/mach-imx/imx6.c index 14a1cba5a4..8d2788c59d 100644 --- a/arch/arm/mach-imx/imx6.c +++ b/arch/arm/mach-imx/imx6.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -147,10 +148,20 @@ static void imx6ul_enet_clk_init(void) writel(val, gprbase + IOMUXC_GPR1); } +static const struct imx_reset_reason imx6_reset_reasons[] = { + { IMX_SRC_SRSR_IPP_RESET, RESET_POR, 0 }, + { IMX_SRC_SRSR_WDOG1_RESET, RESET_WDG, 0 }, + { IMX_SRC_SRSR_JTAG_RESET, RESET_JTAG, 0 }, + { IMX_SRC_SRSR_JTAG_SW_RESET, RESET_JTAG, 0 }, + { IMX_SRC_SRSR_WARM_BOOT, RESET_RST, 0 }, + { /* sentinel */ } +}; + int imx6_init(void) { const char *cputypestr; u32 mx6_silicon_revision; + void __iomem *src = IOMEM(MX6_SRC_BASE_ADDR); imx6_init_lowlevel(); @@ -195,7 +206,7 @@ int imx6_init(void) } imx_set_silicon_revision(cputypestr, mx6_silicon_revision); - + imx_set_reset_reason(src + IMX6_SRC_SRSR, imx6_reset_reasons); imx6_setup_ipu_qos(); imx6ul_enet_clk_init(); diff --git a/arch/arm/mach-imx/include/mach/reset-reason.h b/arch/arm/mach-imx/include/mach/reset-reason.h index 39afc4b287..f2544a303c 100644 --- a/arch/arm/mach-imx/include/mach/reset-reason.h +++ b/arch/arm/mach-imx/include/mach/reset-reason.h @@ -14,6 +14,8 @@ #define IMX_SRC_SRSR_TEMPSENSE_RESET BIT(9) #define IMX_SRC_SRSR_WARM_BOOT BIT(16) +#define IMX6_SRC_SRSR 0x008 + struct imx_reset_reason { uint32_t mask; enum reset_src_type type; -- cgit v1.2.3