reset_source: add thermal reset
Subsystems (3)
PATCH 1/2 reset_source: add thermal reset
Some SoCs are able to detect if they got reset
in response to an overtemperature event.
Signed-off-by Lucas Stach <[email protected]>
--- common/reset_source.c | 1 + include/reset_source.h | 1 + 2 files changed, 2 insertions(+)
common/reset_source.c +1 -0
@@ -25,6 +25,7 @@ static const char * const reset_src_names[] = { [RESET_WDG] = "WDG", [RESET_WKE] = "WKE", [RESET_JTAG] = "JTAG", + [RESET_THERM] = "THERM", };static enum reset_src_type reset_source;
include/reset_source.h +1 -0
@@ -20,6 +20,7 @@ enum reset_src_type {RESET_WDG ,/* watchdog */ RESET_WKE ,/* wake-up (some SoCs can handle this) */ RESET_JTAG ,/* JTAG reset */ + RESET_THERM, /* SoC shut down because of overtemperature */ };#ifdef CONFIG_RESET_SOURCE
Signature · 7 lines
1.9.3 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH 2/2 tegra: pmc: add support for reset src detection
Also activate in defconfig.
Signed-off-by Lucas Stach <[email protected]>
--- arch/arm/configs/tegra_v7_defconfig | 1 + arch/arm/mach-tegra/include/mach/tegra20-pmc.h | 9 +++++++ arch/arm/mach-tegra/tegra20-pmc.c | 33 +++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-)
arch/arm/configs/tegra_v7_defconfig +1 -0
@@ -16,6 +16,7 @@ CONFIG_AUTO_COMPLETE=y CONFIG_MENU=y CONFIG_BLSPEC=y CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y +CONFIG_RESET_SOURCE=y CONFIG_LONGHELP=y CONFIG_CMD_IOMEM=y CONFIG_CMD_MEMINFO=y
arch/arm/mach-tegra/include/mach/tegra20-pmc.h +9 -0
@@ -71,3 +71,12 @@#define PMC_PARTID_C0NC 15#define PMC_SCRATCH (i) (0x050 + 0x4*i) + +#define PMC_RST_STATUS 0x1b4 +#define PMC_RST_STATUS_RST_SRC_SHIFT 0 +#define PMC_RST_STATUS_RST_SRC_MASK (0x7 << PMC_RST_STATUS_RST_SRC_SHIFT) +#define PMC_RST_STATUS_RST_SRC_POR 0 +#define PMC_RST_STATUS_RST_SRC_WATCHDOG 1 +#define PMC_RST_STATUS_RST_SRC_SENSOR 2 +#define PMC_RST_STATUS_RST_SRC_SW_MAIN 3 +#define PMC_RST_STATUS_RST_SRC_LP0 4
arch/arm/mach-tegra/tegra20-pmc.c +32 -1
@@ -1,5 +1,5 @@/* -* Copyright (C) 2013 Lucas Stach <[email protected]> +* Copyright (C) 2013-2014 Lucas Stach <[email protected]> * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License,
@@ -24,6 +24,7 @@#include <init.h> #include <io.h> #include <linux/err.h> +#include <reset_source.h> #include <mach/tegra20-pmc.h>
@@ -38,6 +39,33 @@ void __noreturn reset_cpu(ulong addr) }EXPORT_SYMBOL (reset_cpu); +static void tegra20_pmc_detect_reset_cause (void ) +{ +u32 reg =readl (pmc_base +PMC_RST_STATUS ); + +switch ((reg &PMC_RST_STATUS_RST_SRC_MASK ) >> +PMC_RST_STATUS_RST_SRC_SHIFT ) { +case PMC_RST_STATUS_RST_SRC_POR : +reset_source_set (RESET_POR ); +break ; +case PMC_RST_STATUS_RST_SRC_WATCHDOG : +reset_source_set (RESET_WDG ); +break ; +case PMC_RST_STATUS_RST_SRC_LP0 : +reset_source_set (RESET_WKE ); +break ; +case PMC_RST_STATUS_RST_SRC_SW_MAIN : +reset_source_set (RESET_RST ); +break ; +case PMC_RST_STATUS_RST_SRC_SENSOR : +reset_source_set (RESET_THERM ); +break ; +default : +reset_source_set (RESET_UKWN ); +break ; + } +} +static int tegra20_pmc_probe (struct device_d *dev) { pmc_base =dev_request_mem_region (dev,0 );
@@ -46,6 +74,9 @@ static int tegra20_pmc_probe(struct device_d *dev)return PTR_ERR (pmc_base); } +if (IS_ENABLED (CONFIG_RESET_SOURCE )) +tegra20_pmc_detect_reset_cause (); +return 0 ; }
Signature · 7 lines
1.9.3 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Sascha Hauer
AppliedQuoted 4 lines · Lucas Stach
Some SoCs are able to detect if they got reset
in response to an overtemperature event.Signed-off-by Lucas Stach <[email protected]>
Applied, thanks
Sascha
Quoted 38 lines
--- common/reset_source.c | 1 + include/reset_source.h | 1 + 2 files changed, 2 insertions(+)common/reset_source.c +1
-0@@ -25,6 +25,7 @@ static const char * const reset_src_names[] = { [RESET_WDG] = "WDG", [RESET_WKE] = "WKE", [RESET_JTAG] = "JTAG", + [RESET_THERM] = "THERM", };static enum reset_src_type reset_source;include/reset_source.h +1
-0@@ -20,6 +20,7 @@ enum reset_src_type {RESET_WDG ,/* watchdog */ RESET_WKE ,/* wake-up (some SoCs can handle this) */ RESET_JTAG ,/* JTAG reset */ + RESET_THERM, /* SoC shut down because of overtemperature */ };#ifdef CONFIG_RESET_SOURCE Signature · 7 lines
1.9.3 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Signature · 9 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox