diff options
author | Tero Kristo <t-kristo@ti.com> | 2014-02-26 04:54:29 -0500 |
---|---|---|
committer | Tero Kristo <t-kristo@ti.com> | 2014-07-04 10:02:14 -0400 |
commit | 9efcea09b0b56488e46ab3a36fe8dbce9eded529 (patch) | |
tree | 8178e61ea7c2636384ab979391e4165b6db1a152 | |
parent | 55c6c3ad90f606d458d798b36f8ffca98c1894e0 (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.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/prm3xxx.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-omap2/prm3xxx.h | 1 |
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 | */ | ||
399 | int 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 | ||
394 | static int omap3_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) | 414 | static 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); | |||
165 | int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits); | 165 | int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits); |
166 | void omap3xxx_prm_iva_idle(void); | 166 | void omap3xxx_prm_iva_idle(void); |
167 | void omap3_prm_reset_modem(void); | 167 | void omap3_prm_reset_modem(void); |
168 | int omap3xxx_prm_clear_global_cold_reset(void); | ||
168 | 169 | ||
169 | #endif /* __ASSEMBLER */ | 170 | #endif /* __ASSEMBLER */ |
170 | 171 | ||