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.
>
>> +
>> + 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.
>
>> +
>> + 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.)
>
>>
>> - 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.
>> /* 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.
>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.)
-Tero
--
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