aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTero Kristo <t-kristo@ti.com>2014-02-26 04:54:29 -0500
committerTero Kristo <t-kristo@ti.com>2014-07-04 10:02:14 -0400
commit9efcea09b0b56488e46ab3a36fe8dbce9eded529 (patch)
tree8178e61ea7c2636384ab979391e4165b6db1a152
parent55c6c3ad90f606d458d798b36f8ffca98c1894e0 (diff)
ARM: OMAP3: PRM: add API for checking and clearing cold reset status
This isolates the PRM register access within the PRM driver. Signed-off-by: Tero Kristo <t-kristo@ti.com>
-rw-r--r--arch/arm/mach-omap2/control.c6
-rw-r--r--arch/arm/mach-omap2/prm3xxx.c20
-rw-r--r--arch/arm/mach-omap2/prm3xxx.h1
3 files changed, 22 insertions, 5 deletions
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c
index 751f3549bf6f..f8eb3e4354ad 100644
--- a/arch/arm/mach-omap2/control.c
+++ b/arch/arm/mach-omap2/control.c
@@ -282,13 +282,9 @@ void omap3_clear_scratchpad_contents(void)
282 void __iomem *v_addr; 282 void __iomem *v_addr;
283 u32 offset = 0; 283 u32 offset = 0;
284 v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM); 284 v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM);
285 if (omap2_prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) & 285 if (omap3xxx_prm_clear_global_cold_reset()) {
286 OMAP3430_GLOBAL_COLD_RST_MASK) {
287 for ( ; offset <= max_offset; offset += 0x4) 286 for ( ; offset <= max_offset; offset += 0x4)
288 writel_relaxed(0x0, (v_addr + offset)); 287 writel_relaxed(0x0, (v_addr + offset));
289 omap2_prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,
290 OMAP3430_GR_MOD,
291 OMAP3_PRM_RSTST_OFFSET);
292 } 288 }
293} 289}
294 290
diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c
index e46ff7184c9d..4733c28d9d64 100644
--- a/arch/arm/mach-omap2/prm3xxx.c
+++ b/arch/arm/mach-omap2/prm3xxx.c
@@ -389,6 +389,26 @@ void omap3xxx_prm_iva_idle(void)
389 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 389 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
390} 390}
391 391
392/**
393 * omap3xxx_prm_clear_global_cold_reset - checks the global cold reset status
394 * and clears it if asserted
395 *
396 * Checks if cold-reset has occurred and clears the status bit if yes. Returns
397 * 1 if cold-reset has occurred, 0 otherwise.
398 */
399int omap3xxx_prm_clear_global_cold_reset(void)
400{
401 if (omap2_prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) &
402 OMAP3430_GLOBAL_COLD_RST_MASK) {
403 omap2_prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,
404 OMAP3430_GR_MOD,
405 OMAP3_PRM_RSTST_OFFSET);
406 return 1;
407 }
408
409 return 0;
410}
411
392/* Powerdomain low-level functions */ 412/* Powerdomain low-level functions */
393 413
394static int omap3_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) 414static int omap3_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
diff --git a/arch/arm/mach-omap2/prm3xxx.h b/arch/arm/mach-omap2/prm3xxx.h
index 21eb1d5ba524..7548ae0e86d5 100644
--- a/arch/arm/mach-omap2/prm3xxx.h
+++ b/arch/arm/mach-omap2/prm3xxx.h
@@ -165,6 +165,7 @@ extern u32 omap3xxx_prm_get_reset_sources(void);
165int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits); 165int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits);
166void omap3xxx_prm_iva_idle(void); 166void omap3xxx_prm_iva_idle(void);
167void omap3_prm_reset_modem(void); 167void omap3_prm_reset_modem(void);
168int omap3xxx_prm_clear_global_cold_reset(void);
168 169
169#endif /* __ASSEMBLER */ 170#endif /* __ASSEMBLER */
170 171