diff options
Diffstat (limited to 'arch/arm/mach-omap2/cm3xxx.c')
-rw-r--r-- | arch/arm/mach-omap2/cm3xxx.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/cm3xxx.c b/arch/arm/mach-omap2/cm3xxx.c index 9061c307d915..f6f028867bfe 100644 --- a/arch/arm/mach-omap2/cm3xxx.c +++ b/arch/arm/mach-omap2/cm3xxx.c | |||
@@ -636,6 +636,28 @@ void omap3_cm_restore_context(void) | |||
636 | OMAP3_CM_CLKOUT_CTRL_OFFSET); | 636 | OMAP3_CM_CLKOUT_CTRL_OFFSET); |
637 | } | 637 | } |
638 | 638 | ||
639 | void omap3_cm_save_scratchpad_contents(u32 *ptr) | ||
640 | { | ||
641 | *ptr++ = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL); | ||
642 | *ptr++ = omap2_cm_read_mod_reg(WKUP_MOD, CM_CLKSEL); | ||
643 | *ptr++ = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); | ||
644 | |||
645 | /* | ||
646 | * As per erratum i671, ROM code does not respect the PER DPLL | ||
647 | * programming scheme if CM_AUTOIDLE_PLL..AUTO_PERIPH_DPLL == 1. | ||
648 | * Then, in anycase, clear these bits to avoid extra latencies. | ||
649 | */ | ||
650 | *ptr++ = omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE) & | ||
651 | ~OMAP3430_AUTO_PERIPH_DPLL_MASK; | ||
652 | *ptr++ = omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL); | ||
653 | *ptr++ = omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL2_PLL); | ||
654 | *ptr++ = omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL3); | ||
655 | *ptr++ = omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKEN_PLL); | ||
656 | *ptr++ = omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL); | ||
657 | *ptr++ = omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL); | ||
658 | *ptr++ = omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL); | ||
659 | } | ||
660 | |||
639 | /* | 661 | /* |
640 | * | 662 | * |
641 | */ | 663 | */ |