"Kristo Tero (Nokia-D/Tampere)" <[EMAIL PROTECTED]> writes:
> Hi,
>
> Quick counter comments here. :P
>
>>This will leave cx->core_state to its previous value in case
>>of ON state. So just pwrdm_set_next_pwrst(core_pd,
>>cx->core_state) without if is better.
>
> I did not really consider the logic of cpu-idle code too much, just moved
> context / save functionality to omap_sram_idle. I just made suspend + dynamic
> idle work.
>
>>> + save_core = (pwrdm_read_next_pwrst(core_pwrdm) ==
>>PWRDM_POWER_OFF);
>>> + save_per = (pwrdm_read_next_pwrst(per_pwrdm) ==
>>> PWRDM_POWER_OFF);
>>
>>Just read next states here.
>
> I am comparing the values to PWRDM_POWER_OFF, because you will only
> need to save context if you enter OFF state.
Yes, but then you might need to read them again:
core_not_on = (pwrdm_read_next_pwrst(core_pwrdm) == PWRDM_POWER_OFF);
per_not_on = (pwrdm_read_next_pwrst(core_pwrdm) == PWRDM_POWER_OFF);
>
>>
>>> +
>>> + if (save_core) {
>>> + omap3_save_core_ctx();
>>> + omap3_save_prcm_ctx();
>>> + }
>>
>>And do this if core next_st < PWRDM_POWER_ON
>
> Save is not needed if you enter PWRDM_POWER_RET.
Yes I meant whole block:
if (core_not_on) {
/* Some more code here */
if (save_core) {
omap3_save_core_ctx();
omap3_save_prcm_ctx();
}
}
>
>>
>>> +
>>> + if (save_per)
>>> + omap3_save_per_ctx();
>>
>>And same here. Additionally, do this only if core next_st <
>>PWRDM_POWER_ON.
>
> Per domain can in theory go to OFF even if core stays on (yes, there
> is some discussion about tying Core + Per because of the gpio
> dependencies, but we might find something else for this.)
No per can't enter sleep if core is not entering sleep. Please read
discussion in cpuidle patch thread.
>
>>
>>>
>>> - omap3_save_per_ctx();
>>> omap2_gpio_prepare_for_retention();
>>>
>>> /* XXX This is for gpio fclk hack. Will be removed as
>>gpio driver
>>> * handqles fcks correctly */
>>> per_gpio_clk_disable();
>>>
>>> - omap_save_uart_ctx();
>>> + if (save_per)
>>> + omap_save_uart_ctx();
>>
>>Again, do this only if core next_st < PWRDM_POWER_ON and per
>>next_st == PWRDM_POWER_OFF.
>
> Same here.
>
>>
>>> +
>>> omap_serial_enable_clocks(0);
>>
>>Consider Rajendras idea to do this only if needed.
>
> I think the idea was to access uart clocks only if we can assume
> that per_pwrdm will enter ret / off? Yes good idea.
Yes, simpler option is to do this only if core or per is going to
sleep.
>
>>> /* XXX This is for gpio fclk hack. Will be removed as
>>gpio driver
>>> * handles fcks correctly */
>>>
>>> per_gpio_clk_enable();
>>> - omap3_restore_per_ctx();
>>> +
>>> + if (save_per)
>>> + omap3_restore_per_ctx();
>>>
>>> omap2_gpio_resume_after_retention();
>>
>>Same comments to restore part as before wfi. I think you
>>should look at what Rajendra has done (logic in
>>omap3_enter_idle). You might also want to look at previous
>>discussion related to this. Something like this:
>
> I have looked at this code, and I somehow consider it a bit too
> complicated for the purpose. The simpler setup I have implemented in
> omap_sram_idle is working, also all powerdomains have their next
> states set-up correctly when you reach omap_sram_idle. Anyway, it is
> easy to expand the code now that it actually works.
ok.
>
>>neon_pwrdm\n");
>>> + if (mpu_pwrdm == NULL || neon_pwrdm == NULL ||
>>per_pwrdm == NULL ||
>>> + core_pwrdm == NULL) {
>>> + printk(KERN_ERR "Failed to get pwrdm pointers\n");
>>
>>Neon handling is missing.
>
> Neon pwrdm is accessed only in the init code to make wakeup
> dependency from mpu -> neon. I have not tried out neon save /
> restore so far (just some vfp hack is needed.)
ok
>
> -Tero
>
>
--
Jouni Högander
--
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