Cannot resume after entering WFI or suspend state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
     I am trying to understand  the Linux Power management Unit framework. I have an ARM Cortex-A9x4 board. When I enable pm_test or pass initcall_debug parameter through U-boot via bootargs the system goes into (wfi/suspend state) and resumes properly. However, the issue is when I am not using pm_test and initcall_debug and put my system into WFI/SUSPEND state , it does not resume even if the registered wakeup IRQ is generated. 

Following are my Queries/observations.
1. Reading the log I find that Linux Masks the non-wakeup interrupts. This code was not present in linux 3.4.14.
2. I tried to disable IRQCHIP_MASK_ON_SUSPEND flag from irq_chip. Doing so the I was able to resume from wfi state only once. 
    After that the system resumed immediately without any interrupt after putting it into wfi state. 
3. I tried adding IRQF_NO_SUSPEND flag to the wakeup interrupt and also used enable_irq_wake() function but with no success. 
    The system does not respond to any interrupts once in wfi/suspend state.
4. I have attached log messages file for reference.

    I am using linux kernel source revision 4.4.16. Can somebody please help me regarding this issue?

Regards,
Amit.
# echo suspend > /sys/power/state
[  299.672333] @@@@@@@@ In state_store function @@@@@@@@@
[  299.677538] @@@@@@@@ Decoded state = 4 calling pm_suspend @@@@@@@
[  299.683633] @@@@@@@@ In pm_suspend function @@@@@@@
[  299.688543] PM: Syncing filesystems ... done.
[  299.693016] PM: Preparing system for sleep (suspend)
[  299.699451] Freezing user space processes ... (elapsed 0.001 seconds) done.
[  299.707676] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[  299.716284] PM: Suspending system (suspend)
[  299.720501] In suspend_devices_and_enter function
[  299.725884] cpufreq: cpufreq_suspend: Suspending Governors
[  299.731395] cpufreq: !!!!!!!!! __cpufreq_governor: for CPU 0, event 2 !!!!!!!!!!
[  299.742445] PM: suspend of devices complete after 16.554 msecs
[  299.748327] In dpm_suspend_start function OK...
[  299.752861] PM: suspend devices took 0.030 seconds
[  299.757672] In suspend_enter function
[  299.761334] ##### 1. PMU wakeup mask = 0x0 ########### 2. PMU wakeup mask = 0x40000000 ######
[  299.769713] Prepare function OK...
[  299.775443] PM: late suspend of devices complete after 2.144 msecs
[  299.781733] Disabling IRQ =33
[  299.784697] Masking this INT
[  299.787398] **** 2. Leaving suspend_device_irq function*****
[  299.793253] In suspend_device_irqs sync_irq = 33
[  299.797889] Disabling IRQ =34
[  299.800850] Masking this INT
[  299.803551] **** 2. Leaving suspend_device_irq function*****
[  299.809401] In suspend_device_irqs sync_irq = 34
[  299.814027] Disabling IRQ =39
[  299.816988] Masking this INT
[  299.819688] **** 2. Leaving suspend_device_irq function*****
[  299.825537] In suspend_device_irqs sync_irq = 39
[  299.830181] Disabling IRQ =46
[  299.833142] Masking this INT
[  299.835843] **** 2. Leaving suspend_device_irq function*****
[  299.841691] In suspend_device_irqs sync_irq = 46
[  299.846321] Disabling IRQ =53
[  299.849282] Masking this INT
[  299.851982] **** 2. Leaving suspend_device_irq function*****
[  299.857843] In suspend_device_irqs sync_irq = 53
[  299.862462] Disabling IRQ =54
[  299.865423] Masking this INT
[  299.868123] **** 2. Leaving suspend_device_irq function*****
[  299.873977] In suspend_device_irqs sync_irq = 54
[  299.878612] Disabling IRQ =56
[  299.881574] Masking this INT
[  299.884274] **** 2. Leaving suspend_device_irq function*****
[  299.890122] In suspend_device_irqs sync_irq = 56
[  299.894765] Disabling IRQ =70
[  299.897725] Masking this INT
[  299.900425] **** 2. Leaving suspend_device_irq function*****
[  299.906274] In suspend_device_irqs sync_irq = 70
[  299.910906] Disabling IRQ =71
[  299.913868] Masking this INT
[  299.916568] **** 2. Leaving suspend_device_irq function*****
[  299.922417] In suspend_device_irqs sync_irq = 71
[  299.927033] Disabling IRQ =72
[  299.929993] Masking this INT
[  299.932693] **** 2. Leaving suspend_device_irq function*****
[  299.938543] In suspend_device_irqs sync_irq = 72
[  299.943160] Disabling IRQ =73
[  299.946119] Masking this INT
[  299.948819] **** 2. Leaving suspend_device_irq function*****
[  299.954667] In suspend_device_irqs sync_irq = 73
[  299.959300] Disabling IRQ =74
[  299.962261] Masking this INT
[  299.964961] **** 2. Leaving suspend_device_irq function*****
[  299.970810] In suspend_device_irqs sync_irq = 74
[  299.975427] Disabling IRQ =75
[  299.978387] Masking this INT
[  299.981087] **** 2. Leaving suspend_device_irq function*****
[  299.986935] In suspend_device_irqs sync_irq = 75
[  299.991567] Disabling IRQ =76
[  299.994527] Masking this INT
[  299.997228] **** 2. Leaving suspend_device_irq function*****
[  300.003077] In suspend_device_irqs sync_irq = 76
[  300.007729] Disabling IRQ =77
[  300.010691] Masking this INT
[  300.013392] **** 2. Leaving suspend_device_irq function*****
[  300.019245] In suspend_device_irqs sync_irq = 77
[  300.023878] Disabling IRQ =86
[  300.026839] Masking this INT
[  300.029539] **** 2. Leaving suspend_device_irq function*****
[  300.035389] In suspend_device_irqs sync_irq = 86
[  300.040023] Disabling IRQ =88
[  300.042985] Masking this INT
[  300.045685] **** 2. Leaving suspend_device_irq function*****
[  300.051534] In suspend_device_irqs sync_irq = 88
[  300.056161] Disabling IRQ =94
[  300.059122] Masking this INT
[  300.061822] **** 2. Leaving suspend_device_irq function*****
[  300.067680] In suspend_device_irqs sync_irq = 94
[  300.074353] PM: noirq suspend of devices complete after 292.691 msecs
[  300.080832] Disabling non-boot CPUs ...
[  300.084724] cpufreq: cpufreq_offline_prepare: unregistering CPU 1
[  300.127229] IRQ70 no longer affine to CPU1
[  300.131327] IRQ72 no longer affine to CPU1
[  300.135420] IRQ74 no longer affine to CPU1
[  300.139512] IRQ76 no longer affine to CPU1
[  300.143855] CPU1: shutdown
[  300.147740] cpufreq: cpufreq_offline_prepare: unregistering CPU 2
[  300.177306] IRQ71 no longer affine to CPU2
[  300.181404] IRQ73 no longer affine to CPU2
[  300.185496] IRQ75 no longer affine to CPU2
[  300.189588] IRQ77 no longer affine to CPU2
[  300.193918] CPU2: shutdown
[  300.198046] After Disabled non boot CPUS
[  300.201974] Checking pending wakeup interrupts
[  300.206415] ^^^^ In opv5xc_pm_suspend function current_suspend_state = 4 calling opv5xc_pm_suspend_doze^^^^^^
[  300.206415] syscore_suspend OK.... *wakeup = 0
[  300.206415] Calling OPV5XC enter function
[  300.206415] opv5xc_pm_enter: Entering suspend state 4
[  300.206415] In opv5xc_pm_cpu_prepare function current state = 4 calling opv5xc_pm_cpu_prepare_doze
[  300.206415] !!!!! In opv5xc_pm_cpu_prepare_doze function !!!!
[  300.206415] System entering in DOZE mode
[  300.206415] @@@@@@@@ In opv5xc_pm_cpu_suspend function calling cpu_do_idle @@@@@@


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux