diff options
author | Per Fransson <per.xx.fransson@stericsson.com> | 2011-09-06 10:06:56 +0200 |
---|---|---|
committer | Preetham-rao K <preetham.rao@stericsson.com> | 2011-10-04 11:20:18 +0200 |
commit | 72332e9c1c0780dd93bb4583526da27e248f50b0 (patch) | |
tree | 1147475cd88ef80af499f7e3c1e6ffc323c96df1 | |
parent | 63078acfbcc0362422df62d13553cba7bd2b9f08 (diff) |
u8500: Dump after SW reset at kernel crash
ST-Ericsson ID: 340331
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: Ie889ac1742da3244fa8fc6a8edf529b6c287f331
Signed-off-by: Per Fransson <per.xx.fransson@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/32691
Reviewed-by: QATOOLS
Reviewed-by: QATEST
Reviewed-by: Wenhai FANG <wenhai.h.fang@stericsson.com>
Reviewed-by: Preetham-rao K <preetham.rao@stericsson.com>
-rw-r--r-- | board/st-ericsson/u8500/u8500.c | 3 | ||||
-rw-r--r-- | cpu/arm_cortexa9/db8500/prcmu.c | 8 | ||||
-rw-r--r-- | include/asm-arm/arch-db8500/prcmu.h | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/board/st-ericsson/u8500/u8500.c b/board/st-ericsson/u8500/u8500.c index b26abed1c..3ad998dda 100644 --- a/board/st-ericsson/u8500/u8500.c +++ b/board/st-ericsson/u8500/u8500.c @@ -707,7 +707,8 @@ int board_late_init(void) */ prcmu_reset_status_reg = readl(PRCM_RESET_STATUS); if (restarted() || - (prcmu_reset_status_reg & (PRCM_A9_CPU_WATCHDOG_RESET))) + (prcmu_reset_status_reg & (PRCM_A9_CPU_WATCHDOG_RESET)) || + prcmu_crashed()) setenv("preboot", "checkcrash"); return (0); diff --git a/cpu/arm_cortexa9/db8500/prcmu.c b/cpu/arm_cortexa9/db8500/prcmu.c index 731cedfb8..29b717413 100644 --- a/cpu/arm_cortexa9/db8500/prcmu.c +++ b/cpu/arm_cortexa9/db8500/prcmu.c @@ -41,6 +41,7 @@ #define PRCM_ARM_IT1_VAL (PRCMU_BASE + 0x494) #define PRCM_XP70_CUR_PWR_STATE (tcdm_base + 0xFFC) +#define PRCM_SW_RST_REASON (tcdm_base + 0xFF8) #define PRCM_REQ_MB5 (tcdm_base + 0xE44) #define PRCM_ACK_MB5 (tcdm_base + 0xDF4) @@ -262,6 +263,13 @@ static void prcmu_enable(u32 *reg) writel(readl(reg) | (1 << 8), reg); } +int prcmu_crashed() +{ + if (!prcmu_is_ready()) + return 0; + return (readl(PRCM_SW_RST_REASON) & 0x0000ffff) == 0xDEAD; +} + void db8500_prcmu_init(void) { struct clk_mgt_regs *clks; diff --git a/include/asm-arm/arch-db8500/prcmu.h b/include/asm-arm/arch-db8500/prcmu.h index af6e271e0..d1da35519 100644 --- a/include/asm-arm/arch-db8500/prcmu.h +++ b/include/asm-arm/arch-db8500/prcmu.h @@ -55,6 +55,7 @@ /* Init PRCMU relatated things in db8500 SoC platform */ void db8500_prcmu_init(void); +int prcmu_crashed(void); #endif /* __PRCMU_H__ */ |