Thara Gopinath <[email protected]> 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 <[email protected]>
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 [email protected]
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html