aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPer Fransson <per.xx.fransson@stericsson.com>2011-09-06 10:06:56 +0200
committerPreetham-rao K <preetham.rao@stericsson.com>2011-10-04 11:20:18 +0200
commit72332e9c1c0780dd93bb4583526da27e248f50b0 (patch)
tree1147475cd88ef80af499f7e3c1e6ffc323c96df1
parent63078acfbcc0362422df62d13553cba7bd2b9f08 (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.c3
-rw-r--r--cpu/arm_cortexa9/db8500/prcmu.c8
-rw-r--r--include/asm-arm/arch-db8500/prcmu.h1
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__ */