Thara Gopinath <thara@xxxxxx> writes: > This patch adds a parameter core_state , depicting the power state > which the core domain will attempt to enter, to omap3_core_save_context > and omap3_core_restore_context. This is so as to distinguish between > the context save and restore required when core domain is attempting > OSWR and OFF. Core OSWR does not require interrupt controller, > system control module and dma controller context save and retore > where as Core OFF reuires these. > > Signed-off-by: Thara Gopinath <thara@xxxxxx> Looks good, pulling this into PM branch after one minor fixup below... > --- > arch/arm/mach-omap2/pm34xx.c | 71 +++++++++++++++++++++++++----------------- > 1 files changed, 42 insertions(+), 29 deletions(-) > > diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c > index 895e9ef..e4db1ea 100644 > --- a/arch/arm/mach-omap2/pm34xx.c > +++ b/arch/arm/mach-omap2/pm34xx.c > @@ -150,44 +150,57 @@ static void omap3_disable_io_chain(void) > prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN, WKUP_MOD, PM_WKEN); > } > > -static void omap3_core_save_context(void) > +static void omap3_core_save_context(int core_state) > { > - u32 control_padconf_off; > + if (core_state == PWRDM_POWER_OFF) { > + u32 control_padconf_off; > + > + /* Save the padconf registers */ > + control_padconf_off = omap_ctrl_readl( > + OMAP343X_CONTROL_PADCONF_OFF); > + control_padconf_off |= START_PADCONF_SAVE; > + omap_ctrl_writel(control_padconf_off, > + OMAP343X_CONTROL_PADCONF_OFF); > + /* wait for the save to complete */ > + while (!(omap_ctrl_readl( > + OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS) & > + PADCONF_SAVE_DONE)) > + udelay(1); > > - /* Save the padconf registers */ > - control_padconf_off = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF); > - control_padconf_off |= START_PADCONF_SAVE; > - omap_ctrl_writel(control_padconf_off, OMAP343X_CONTROL_PADCONF_OFF); > - /* wait for the save to complete */ > - while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS) > - & PADCONF_SAVE_DONE)) > - udelay(1); > + /* > + * Force write last pad into memory, as this can fail in some > + * cases according to erratas 1.157, 1.185 > + */ > + omap_ctrl_writel(omap_ctrl_readl(OMAP343X_PADCONF_ETK_D14), > + OMAP343X_CONTROL_MEM_WKUP + 0x2a0); > > - /* > - * Force write last pad into memory, as this can fail in some > - * cases according to erratas 1.157, 1.185 > - */ > - omap_ctrl_writel(omap_ctrl_readl(OMAP343X_PADCONF_ETK_D14), > - OMAP343X_CONTROL_MEM_WKUP + 0x2a0); > + /* Save the Interrupt controller context */ > + omap_intc_save_context(); > + > + /* Save the system control module context, > + * padconf already save above > + */ > + omap3_control_save_context(); > + omap_dma_global_context_save(); > + } > > - /* Save the Interrupt controller context */ > - omap_intc_save_context(); > /* Save the GPMC context */ > omap3_gpmc_save_context(); > - /* Save the system control module context, padconf already save above*/ > - omap3_control_save_context(); > - omap_dma_global_context_save(); > } > > -static void omap3_core_restore_context(void) > +static void omap3_core_restore_context(int core_state) > { > - /* Restore the control module context, padconf restored by h/w */ > - omap3_control_restore_context(); > + if (core_state == PWRDM_POWER_OFF) { > + /* Restore the control module context, > + * padconf restored by h/w > + */ changing this to proper multi-line comment. Kevin > + omap3_control_restore_context(); > + /* Restore the interrupt controller context */ > + omap_intc_restore_context(); > + omap_dma_global_context_restore(); > + } > /* Restore the GPMC context */ > omap3_gpmc_restore_context(); > - /* Restore the interrupt controller context */ > - omap_intc_restore_context(); > - omap_dma_global_context_restore(); > } > > /* > @@ -445,7 +458,7 @@ void omap_sram_idle(void) > prm_set_mod_reg_bits(voltctrl, > OMAP3430_GR_MOD, > OMAP3_PRM_VOLTCTRL_OFFSET); > - omap3_core_save_context(); > + omap3_core_save_context(PWRDM_POWER_OFF); > omap3_prcm_save_context(); > } else if (core_next_state == PWRDM_POWER_RET) { > prm_set_mod_reg_bits(OMAP3430_AUTO_RET, > @@ -497,7 +510,7 @@ void omap_sram_idle(void) > if (core_next_state < PWRDM_POWER_ON) { > core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm); > if (core_prev_state == PWRDM_POWER_OFF) { > - omap3_core_restore_context(); > + omap3_core_restore_context(core_prev_state); > omap3_prcm_restore_context(); > omap3_sram_restore_context(); > omap2_sms_restore_context(); > -- > 1.5.6.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html