This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Suspend & resume makes wince device hang

Hi,

I am facing an issue during suspend & resume, when i am running omap4430 on max performance.

In my project i am using omap4430 & wince 

Written a script which place system/device in suspend state after 30 seconds & resumes back after 20 seconds. 

Issue is seen randomly on trials. In general it takes 300 to 500 suspend&resume cycles to reproduce the issue. During issue reproduction no external perherials like USB or JTAG were connected.

From the serial logs got to understand that system is hanging as below flow

- PrcmSuspend

     - OALCpuLowPower

             - OALCPUIdle

after OALCPUIdle is assembly code & not able to debug more. From logs also understood flow is entering into "SaveContext" 

Any feedback or pointers will be helpful to resolve the issue.

- gaurav

  • Hello Gaurav, 

    Yes, the PRCM registers values are written in save context registers.

    I think that your problem is caused by issue in SDRAM configuration.

    Could you see following registers:

    When returning from off mode, and before making any access to the memory in DPD state:
    1. Put CORE PLL in MN bypass mode CM_CLKMODE_DPLL_CORE.DPLL_EN = 0x4.
    2. Program the DLL override CM_DLL_CTRL.DLL_OVERRIDE = 1.
    3. Force the configuration field EMIF_SDRAM_CONFIG.REG_SDRAM_TYPE register to 0x1
    (reserved), then back to 0x4 (LPDDR2-S4) or 0x5 (LPDDR2-S2) according to memory
    configuration. This forces the controller back into its init state instead of self-refresh state.
    4. Reconfigure EMIF_SDRAM_REF_CTRL.REG_INITREF_DIS to 0.
    5. Perform normal init phase as from global cold reset.

    You can see Save and Restore register descriptions in section 17.4.21.5 SAR RAM Memory Allocation Reserved for Save and Restore of device TRM.


    Best regards,

    Yanko

  • Hi,

    Thanks for your reply.

    WE did some more experiments without the changes suggested by Yanko.

    When testing was performed in 800 Mhz speed (OPP2), no issue is observed. But in 1 GHz speed (OPP3), the issue is observed, so did some modifications, that is changed the OPP from 3 to 2 when the CPU Proxy driver goes down (CPU_PowerDown function) and during resume when the same driver comes up (CPU_PowerUp function) the OPP is restored to 3. But still the issue is observed, that is when it goes to suspend, it never wakesup.

    It has also been tried the same workaround in the OAL layer (OEMPowerOff function), but issue persists, that too, the issue happens quickly within 30 minutes.

    Can someone throw some light on where do we miss something?

    Thanks,