How can I wake up the system from sleep?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How can I wake up the system from sleep?

18,453 Views
VincentChen
Contributor I

Hi,

Does iMX53 support resume from sleep?

After I execute:  echo mem > state ,  the system seems to suspend to RAM.

Shown as below:

root@cpc-105:/# uname -ra
Linux cpc-105 2.6.35.3 #19 PREEMPT Fri Mar 30 18:24:02 CST 2012 armv7l GNU/Linux
root@cpc-105:/# cd /sys/power/
root@cpc-105:/sys/power# cat state
standby mem
root@cpc-105:/sys/power# echo mem > state
[   42.026575] PM: Syncing filesystems ... done.
[   42.042099] Freezing user space processes ... (elapsed 0.01 seconds) done.
[   42.058816] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
[   42.078833] Suspending console(s) (use no_console_suspend to debug)

But how can I wake up the system? Can I use GPIO to wake up the system?

If I execute:   echo standby > state , the system should enter into standby mode.

But it seems no different from suspend to RAM as below:

root@cpc-105:/sys/power# cat state
standby mem
root@cpc-105:/sys/power# echo standby > state
[   51.256673] PM: Syncing filesystems ... done.
[   51.272181] Freezing user space processes ... (elapsed 0.01 seconds) done.
[   51.288891] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
[   51.308906] Suspending console(s) (use no_console_suspend to debug)

Does it mean that standby and sleep are all the same for iMX53?

Thanks for your reply.

0 Kudos
35 Replies

1,369 Views
VincentChen
Contributor I

The code ran in ram is cpu_do_suspend_workaround, shown as follows:

#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/mx5x.h>

#define ARM_CTRL_DCACHE  1 << 2
#define ARM_CTRL_ICACHE  1 << 12
#define ARM_AUXCR_L2EN   1 << 1

.macro PM_SET_BACKUP_REG, addr, num
    ldr r2, =\addr
    ldr r2, [r1, r2]
    str r2, [r3, #(\num * 4)]
.endm

.macro PM_SET_HIGHZ_PAD, addr
    ldr r2, =\addr
    str r4, [r1, r2]
.endm

.macro PM_SET_RESTORE_REG, addr, num
    ldr     r4, [r3, #(\num * 4)]
    ldr     r2, =\addr
    str     r4, [r1, r2]
.endm

.macro PM_SET_ADDR_REG, addr, reg
    mov    \reg, #(\addr & 0x000000FF)
    orr    \reg, \reg, #(\addr & 0x0000FF00)
    orr    \reg, \reg, #(\addr & 0x00FF0000)
    orr    \reg, \reg, #(\addr & 0xFF000000)
.endm

#define SUSPEND_ID_MX51 1
#define SUSPEND_ID_MX53 3
#define SUSPEND_ID_NONE 4

#define MX51_DRAM_SDCLK_PAD_CTRL_ADDR AIPS1_IO_ADDRESS(0x73FA84B8)
#define MX51_CCM_BASE AIPS1_IO_ADDRESS(0x73fd4000)
#define MX51_PLL1_BASE AIPS2_IO_ADDRESS(0x83f80000)

#define M4IF_MCR0_OFFSET            (0x008C)
#define M4IF_MCR0_FDVFS                (0x1 << 11)
#define M4IF_MCR0_FDVACK            (0x1 << 27)
#define IOMUXC_BASE_ADDR_VIRT        AIPS1_IO_ADDRESS(IOMUXC_BASE_ADDR)
#define M4IF_BASE_ADDR_VIRT            AIPS2_IO_ADDRESS(M4IF_BASE_ADDR)

#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3        0x554
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3    0x558
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2        0x560
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1    0x564
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2    0x568
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1    0x570
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS        0x574
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0    0x578
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0    0x57c
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0    0x580
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0        0x584
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS        0x588
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1    0x590
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1        0x594
#define IOMUXC_SW_PAD_CTL_GRP_ADDDS            0x6f0
#define IOMUXC_SW_PAD_CTL_GRP_B0DS            0x718
#define IOMUXC_SW_PAD_CTL_GRP_B1DS            0x71c
#define IOMUXC_SW_PAD_CTL_GRP_CTLDS            0x720
#define IOMUXC_SW_PAD_CTL_GRP_B2DS            0x728
#define IOMUXC_SW_PAD_CTL_GRP_B3DS            0x72c

/*
 *    cpu_do_suspend_workaround()
 *
 *    Suspend the processor (eg, wait for interrupt).
 *
 *    IRQs are already disabled.
 */
ENTRY(cpu_do_suspend_workaround)
    stmfd   sp!, {r4,r5,r6,r7,r9,r10,r11}     @ Save registers

    mov    r6, r0                       @save iomux address
    cmp     r6, #SUSPEND_ID_MX51
    bne     mx53_start               @ don't disable cache on imx53
    /* Disable L1 caches */
    mrc     p15, 0, r0, c1, c0, 0    @ R0 = system control reg
    bic     r0, r0, #ARM_CTRL_ICACHE @ Disable ICache
    bic     r0, r0, #ARM_CTRL_DCACHE @ Disable DCache
    mcr     p15, 0, r0, c1, c0, 0    @ Update system control reg

    mrc     p15, 1, r0, c0, c0, 1   @ Read CLIDR
    ands    r3, r0, #0x7000000       @ Isolate level of coherency
    mov     r3, r3, lsr #23         @ Cache level value (naturally aligned)
    beq     FinishedClean
    mov     r10, #0
Loop1Clean:
    add     r2, r10, r10, lsr #1    @ Work out cache level
    mov     r1, r0, lsr r2          @ R0 bottom 3 bits = Cache Type for this level
    and     r1, r1, #7              @ Get those 3 bits alone
    cmp     r1, #2
    blt     SkipClean                @ No cache or only instruction cache at this level
    mcr     p15, 2, r10, c0, c0, 0  @ Write the Cache Size selection register
    mov     r1, #0
    .long   0xF57FF06F              @ ISB
    mrc     p15, 1, r1, c0, c0, 0   @ Reads current Cache Size ID register
    and     r2, r1, #7             @ Extract the line length field
    add     r2, r2, #4              @ Add 4 for the line length offset (log2 16 bytes)
    ldr     r4, =0x3FF
    ands    r4, r4, r1, lsr #3      @ R4 is the max number on the way size (right aligned)
    clz     r5, r4                  @ R5 is the bit position of the way size increment
    ldr     r7, =0x00007FFF
    ands    r7, r7, r1, lsr #13     @ R7 is the max number of the index size (right aligned)
Loop2Clean:
    mov     r9, r4                  @ R9 working copy of the max way size (right aligned)
Loop3Clean:
    orr     r11, r10, r9, lsl r5    @ Factor in the way number and cache number into R11
    orr     r11, r11, r7, lsl r2    @ Factor in the index number
    mcr     p15, 0, r11, c7, c14, 2 @ Clean and invalidate by set/way
    subs    r9, r9, #1              @ Decrement the way number
    bge     Loop3Clean
    subs    r7, r7, #1              @ Decrement the index
    bge     Loop2Clean
SkipClean:
    add     r10, r10, #2            @ Increment the cache number
    cmp     r3, r10
    bgt     Loop1Clean

FinishedClean:

    /* Disable L2 cache */
    mrc     p15, 0, r0, c1, c0, 1   @ R0 = auxiliary control reg
    bic     r0, r0, #ARM_AUXCR_L2EN @ Disable L2 cache
    mcr     p15, 0, r0, c1, c0, 1   @ Update aux control reg

mx53_start:
    /* Do nothing for DDR */
    cmp     r6, #SUSPEND_ID_NONE
    beq     mx5x_wfi
    /*Set the DDR drive strength to low */
    cmp     r6, #SUSPEND_ID_MX51
    bne     mx53_reduce_ddr_drive_strength
    ldr r0, =MX51_DRAM_SDCLK_PAD_CTRL_ADDR
    ldr    r1, [r0]
    str r1, __mx5x_temp_stack
    bic r1, r1, #0x6
    str r1, [r0]
mx53_reduce_ddr_drive_strength:
    cmp     r6, #SUSPEND_ID_MX53
    bne     mx5x_wfi

mx53_force_ddr_selfrefresh:
    /* Point R0 at M4IF register set */
    ldr     r0, =M4IF_BASE_ADDR_VIRT

    /* Point R1 at IOMUX register set */
    ldr     r1, =IOMUXC_BASE_ADDR_VIRT

    /* Point R3 at temporary IRAM storage for DDR pad config */
    adr     r3, __mx5x_temp_stack

    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3,        0
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3,     1
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2,        2
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1,    3
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2,     4
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1,    5
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS,        6
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0,    7
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0,        8
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0,    9
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0,        10
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS,        11
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1,     12
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1,        13
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_ADDDS,            14
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B0DS,            15
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B1DS,             16
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_CTLDS,            17
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B2DS,             18
    PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B3DS,             19

    /* Set FDVFS bit of M4IF_MCR0 to request DDR to enter self-refresh */
    ldr     r2,[r0, #M4IF_MCR0_OFFSET]
    orr     r2, r2, #M4IF_MCR0_FDVFS
    str     r2,[r0, #M4IF_MCR0_OFFSET]

    /* Poll FDVACK bit of M4IF_MCR to wait for DDR to enter self-refresh */
WAIT_SR_ACK:
    ldr     r2,[r0, #M4IF_MCR0_OFFSET]
    ands    r2, r2, #M4IF_MCR0_FDVACK
    beq     WAIT_SR_ACK

    /*
     * Set DSE of all DDR I/O pads to 0 => HighZ
     * except CKE which must drive during self-refresh
     * according to JEDEC
     */

    ldr     r4, =0
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_ADDDS
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B0DS
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B1DS
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B2DS
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B3DS
    /* use DSE=1 for CKE pin,when DDR is in self-refresh */
    ldr     r4, =1
    PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_CTLDS
mx5x_wfi:
    /*
     * PLL1 workaround as the following: For mx51 only.
     * Before enter WFI
     *      (1) switch DDR and ARM to PLL2
     *      (2) Disable AREN bit to avoid PLL1 restart during MFN change)
     *      (3) set PLL1 to ~864Mhz with MFI = 8, MFN = 180, MFD = 179
     *          thus the equation |MFN/(MFD+1)|  < 1
     *      (4) Manual restart PLL1
     *      (5) Wait PLL1 lock
     * After CPU out of WFI
     *      (6) Set PLL1 to 800Mhz with only change MFN to 60, others keep
     *      (7) Wait MFN change complete by delay 4.6us,
     *      (8) Switch DDR and ARM back to PLL1
     */
    cmp r6, #SUSPEND_ID_MX51

    bne WFI
    PM_SET_ADDR_REG MX51_PLL1_BASE, r3
    PM_SET_ADDR_REG MX51_CCM_BASE, r4

    /* step 1 */
    ldr     r0, [r4, #0x14]
    bic     r0, r0, #(0x1 << 30)
    str     r0, [r4, #0x14]

1:
    ldr     r0, [r4, #0x48]
    ands    r0, r0, #(1 << 8)
    bne     1b

    ldr     r0, [r4, #0x0c]
    bic     r0, r0, #(0xf << 5)
    orr     r0, r0, #(0x1 << 8)
    str     r0, [r4, #0x0c]

    orr     r0, r0, #(1 << 2)
    str     r0, [r4, #0x0c]

    /* step 2 */
    ldr r0, [r3, #0x4]
    bic r0, r0, #0x2
    str r0, [r3, #0x4] /* disable auto-restart AREN bit */

    /* step 3 */
    mov r0, #0x80
    mov r1, #179
    mov r2, #180
    str r0, [r3, #0x08]
    str r0, [r3, #0x1c]

    str r1, [r3, #0x0c]
    str r1, [r3, #0x20]

    str r2, [r3, #0x10]
    str r2, [r3, #0x24]

    /* step 4 */
    ldr r0, =0x00001236 /* Set PLM =1, manual restart and enable PLL*/
    str r0, [r3, #0x0]
1:      ldr r0, [r3, #0x0]
    ands r0, r0, #0x1
    beq 1b
WFI:
    mov r0,#0x0
    .long     0xe320f003              @ Opcode for WFI

    cmp     r6, #SUSPEND_ID_MX51
    bne      wfi_done

    /* step 5 */
    ldr     r0, =60
    str     r0, [r3, #0x10]

    /* step 6 */
    /* Load MFN by setting LDREQ */
    ldr     r0, [r3, #0x04]
    orr     r0, r0, #0x1
    str     r0, [r3, #0x04]

      /* Wait for LDREQ bit to clear. */
2:    ldr     r0, [r3, #0x4]
       tst    r0, #1
       bne   2b

    mov r0, #100 /* delay more than 4.6 us */
3:      subs r0, r0, #1
    bge 3b

    /* step 8 */
    ldr     r0, [r4, #0x0c]
    bic     r0, r0, #(1 << 2)
    str     r0, [r4, #0x0c]

    /* Source step_clk from LPAPM. */
    ldr     r0, [r4, #0x0c]
    bic     r0, r0, #(3 << 7)
    str     r0, [r4, #0x0c]

    ldr     r0, [r4, #0x14]
    orr     r0, r0, #(0x1 << 30)
    str     r0, [r4, #0x14]

3:
    ldr     r0, [r4, #0x48]
    ands    r0, r0, #(1 << 8)
    bne     3b

wfi_done:
    cmp     r6, #SUSPEND_ID_NONE
    beq     mx5x_post_wfi

    /*Set the DDR drive strength to max */
    cmp     r6, #SUSPEND_ID_MX51
    bne     mx53_restore_ddr_drive_strength
    ldr r0, =MX51_DRAM_SDCLK_PAD_CTRL_ADDR
    ldr r1, __mx5x_temp_stack
    str r1, [r0]
mx53_restore_ddr_drive_strength:
    cmp     r6, #SUSPEND_ID_MX53
    bne     mx5x_post_wfi

    ldr     r0, =M4IF_BASE_ADDR_VIRT
    ldr     r1, =IOMUXC_BASE_ADDR_VIRT
    adr     r3, __mx5x_temp_stack
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3,        0
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3,     1
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2,        2
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1,    3
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2,     4
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1,    5
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS,        6
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0,    7
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0,    8
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0,    9
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0,        10
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS,        11
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1,     12
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1,        13
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_ADDDS,            14
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B0DS,            15
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B1DS,             16
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_CTLDS,            17
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B2DS,             18
    PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B3DS,             19

    /* Clear FDVFS bit of M4IF_MCR0 to request DDR to exit self-refresh */
    ldr     r2,[r0, #M4IF_MCR0_OFFSET]
    bic     r2, r2, #M4IF_MCR0_FDVFS
    str     r2,[r0, #M4IF_MCR0_OFFSET]

    /* Poll FDVACK bit of M4IF_MCR to wait for DDR to exit self-refresh */
WAIT_AR_ACK:
    ldr     r2,[r0, #M4IF_MCR0_OFFSET]
    ands    r2, r2, #M4IF_MCR0_FDVACK
    bne     WAIT_AR_ACK

    cmp     r6, #SUSPEND_ID_MX51
    bne     mx53_end
mx5x_post_wfi:
    mov     r0, #0
    mcr     p15, 0, r0, c7, c5, 0   @ Invalidate inst cache

    /* Invalidate data caches */
    mrc     p15, 1, r0, c0, c0, 1   @ Read CLIDR
    ands    r3, r0, #0x7000000      @ Isolate level of coherency
    mov     r3, r3, lsr #23         @ Cache level value (naturally aligned)
    beq     FinishedInvalidate
    mov     r10, #0
Loop1Invalidate:
    add     r2, r10, r10, lsr #1    @ Work out cache level
    mov     r1, r0, lsr r2          @ R0 bottom 3 bits = Cache Type for this level
    and     r1, r1, #7              @ Get those 3 bits alone
    cmp     r1, #2
    blt     SkipInvalidate          @ No cache or only instruction cache at this level
    mcr     p15, 2, r10, c0, c0, 0  @ Write the Cache Size selection register
    mov     r1, #0
    .long   0xF57FF06F              @ ISB
    mrc     p15, 1, r1, c0, c0, 0   @ Reads current Cache Size ID register
    and     r2, r1, #7              @ Extract the line length field
    add     r2, r2, #4              @ Add 4 for the line length offset (log2 16 bytes)
    ldr     r4, =0x3FF
    ands    r4, r4, r1, lsr #3      @ R4 is the max number on the way size (right aligned)
    clz     r5, r4                  @ R5 is the bit position of the way size increment
    ldr     r7, =0x00007FFF
    ands    r7, r7, r1, lsr #13     @ R7 is the max number of the index size (right aligned)
Loop2Invalidate:
    mov     r9, r4                  @ R9 working copy of the max way size (right aligned)
Loop3Invalidate:
    orr     r11, r10, r9, lsl r5    @ Factor in the way number and cache number into R11
    orr     r11, r11, r7, lsl r2    @ Factor in the index number
    mcr     p15, 0, r11, c7, c6, 2  @ Invalidate by set/way
    subs    r9, r9, #1              @ Decrement the way number
    bge     Loop3Invalidate
    subs    r7, r7, #1              @ Decrement the index
    bge     Loop2Invalidate
SkipInvalidate:
    add     r10, r10, #2            @ Increment the cache number
    cmp     r3, r10
    bgt     Loop1Invalidate

FinishedInvalidate:

    /* Enable L2 cache */
    mrc     p15, 0, r0, c1, c0, 1   @ R0 = auxiliary control reg
    orr     r0, r0, #ARM_AUXCR_L2EN @ Enable L2 cache
    mcr     p15, 0, r0, c1, c0, 1   @ Update aux control reg

    /* Enable L1 caches */
    mrc     p15, 0, r0, c1, c0, 0    @ R0 = system control reg
    orr     r0, r0, #ARM_CTRL_ICACHE @ Enable ICache
    orr     r0, r0, #ARM_CTRL_DCACHE @ Enable DCache
    mcr     p15, 0, r0, c1, c0, 0    @ Update system control reg

mx53_end:
    /* Restore registers */
    ldmfd sp!, {r4,r5,r6,r7,r9,r10,r11}
    mov        pc, lr
__mx5x_temp_stack:
    .space 128

    .type    cpu_do_suspend, #object
ENTRY(cpu_do_suspend)
    .word    cpu_do_suspend_workaround
    .size    cpu_do_suspend_workaround, . - cpu_do_suspend_workaround

0 Kudos

1,369 Views
VincentChen
Contributor I

Look like I was stuck in suspend_in_iram(suspend_param1, NULL, NULL) and waited for power button interrupt.

      if (cpu_is_mx51() || cpu_is_mx53()) {
            /* Run the suspend code from iRAM. */
            
            printk("mx5_suspend_enter 12\n");//vin added 2012/4/10
            suspend_in_iram(suspend_param1, NULL, NULL);
            printk("mx5_suspend_enter 13\n");//vin added 2012/4/10
            if (!cpu_is_mx53()) {
                
                printk("mx5_suspend_enter 14\n");//vin added 2012/4/10
                /*clear the EMPGC0/1 bits */
                __raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR);
                __raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR);
            }

0 Kudos

1,369 Views
VincentChen
Contributor I

I don't known what's the meaning of GPIO7_0_11_IRQ_BIT.

Is there any document about how to set the GPIO7_0_11_IRQ_BIT ?

#define MX53_OFFSET                    (0x20000000)
#define TZIC_WAKEUP0_OFFSET         (0x0E00)
#define TZIC_WAKEUP1_OFFSET         (0x0E04)
#define TZIC_WAKEUP2_OFFSET         (0x0E08)
#define TZIC_WAKEUP3_OFFSET         (0x0E0C)
#define GPIO7_0_11_IRQ_BIT            (0x100000000000)

static void loco_da9053_irq_wakeup_only_fixup(void)
{
    void __iomem *tzic_base;
    tzic_base = ioremap(MX53_TZIC_BASE_ADDR, SZ_4K);
    if (NULL == tzic_base) {
        pr_err("fail to map MX53_TZIC_BASE_ADDR\n");
        return;
    }
    __raw_writel(0, tzic_base + TZIC_WAKEUP0_OFFSET);
    __raw_writel(0, tzic_base + TZIC_WAKEUP1_OFFSET);
    __raw_writel(0, tzic_base + TZIC_WAKEUP2_OFFSET);
    /* only enable irq wakeup for da9053 */
    __raw_writel(GPIO7_0_11_IRQ_BIT, tzic_base + TZIC_WAKEUP3_OFFSET);
//    __raw_writel(0x1F0F, tzic_base + TZIC_WAKEUP3_OFFSET);//vin added 2012/4/11
    iounmap(tzic_base);
    pr_info("only da9053 irq is wakeup-enabled 1\n");
}

0 Kudos

1,369 Views
VincentChen
Contributor I

Because we do have DA9053 chip on board, so I think I should use da9053_suspend_cmd_hw instead of da9053_suspend_cmd_sw.

static void loco_suspend_enter(void)
{
    printk("xxxxxxxxxxx loco_suspend_enter hw");//vin added 2012/4/6
    if (!board_is_mx53_loco_mc34708()) {
        loco_da9053_irq_wakeup_only_fixup();
//vin    da9053_suspend_cmd_sw();
        da9053_suspend_cmd_hw(); //vin added 2012/4/11

    }

int da9053_suspend_cmd_sw(void)
{
    unsigned char buf[2] = {0, 0};
    struct clk *i2c_clk;
    u8 data;
    buf[0] = 29;
    
    printk("xxxxxxxxxxx da9053_suspend_cmd_sw 1");//vin added 2012/4/6
    i2c_clk = clk_get(NULL, "i2c_clk");
    if (IS_ERR(i2c_clk)) {
        pr_err("unable to get i2c clk\n");
        printk("xxxxxxxxxxx da9053_suspend_cmd_sw 2");//vin added 2012/4/6
        return PTR_ERR(i2c_clk);
    }
    clk_enable(i2c_clk);

    pm_da9053_preset_voltage();

    pm_da9053_read_reg(DA9052_ID01_REG, &data);
    data &= ~(DA9052_ID01_DEFSUPPLY | DA9052_ID01_nRESMODE);
    pm_da9053_write_reg(DA9052_ID01_REG, data);

    pm_da9053_write_reg(DA9052_SEQB_REG, DA9053_SLEEP_DELAY);

    pm_da9053_read_reg(DA9052_CONTROLB_REG, &data);
    data |= DA9052_CONTROLB_DEEPSLEEP;
    pm_da9053_write_reg(DA9052_CONTROLB_REG, data);

    clk_disable(i2c_clk);
    clk_put(i2c_clk);
    printk("xxxxxxxxxxx da9053_suspend_cmd_sw 3");//vin added 2012/4/6
    return 0;
}

int da9053_suspend_cmd_hw(void)
{
    unsigned char buf[2] = {0, 0};
    struct clk *i2c_clk;
    u8 data;
    buf[0] = 29;

    i2c_clk = clk_get(NULL, "i2c_clk");
    if (IS_ERR(i2c_clk)) {
        pr_err("unable to get i2c clk\n");
        return PTR_ERR(i2c_clk);
    }
    clk_enable(i2c_clk);

    pm_da9053_read_reg(DA9052_IRQMASKB_REG, &data);
    data |= DA9052_IRQ_MASKB_ONKEY;
    pm_da9053_write_reg(DA9052_IRQMASKB_REG, data);

    pm_da9053_preset_voltage();
    pm_da9053_write_reg(DA9052_CONTROLC_REG,
                DA9052_CONTROLC_SMD_SET);

    pm_da9053_read_reg(DA9052_ID01_REG, &data);
    data &= ~(DA9052_ID01_DEFSUPPLY | DA9052_ID01_nRESMODE);
    pm_da9053_write_reg(DA9052_ID01_REG, data);

    pm_da9053_write_reg(DA9052_GPIO0809_REG,
            DA9052_GPIO0809_SMD_SET);
    pm_da9053_read_reg(DA9052_IRQMASKD_REG, &data);
    data |= DA9052_GPI9_IRQ_MASK;
    pm_da9053_write_reg(DA9052_IRQMASKD_REG, data);

    pm_da9053_read_reg(DA9052_ID1415_REG, &data);
    data &= 0xf0;
    data |= DA9052_ID1415_SMD_SET;
    pm_da9053_write_reg(DA9052_ID1415_REG, data);

    pm_da9053_write_reg(DA9052_SEQTIMER_REG, 0);
    /* pm_da9053_write_reg(DA9052_SEQB_REG, 0x1f); */
    
    pm_da9053_read_reg(DA9052_IRQMASKB_REG, &data);
    data &= ~DA9052_IRQ_MASKB_ONKEY;
    pm_da9053_write_reg(DA9052_IRQMASKB_REG, data);

    clk_disable(i2c_clk);
    clk_put(i2c_clk);
    return 0;
}

0 Kudos

1,369 Views
VincentChen
Contributor I

I also added some printk messages in the following code snippet.

#define MX53_OFFSET                    (0x20000000)
#define TZIC_WAKEUP0_OFFSET         (0x0E00)
#define TZIC_WAKEUP1_OFFSET         (0x0E04)
#define TZIC_WAKEUP2_OFFSET         (0x0E08)
#define TZIC_WAKEUP3_OFFSET         (0x0E0C)
#define GPIO7_0_11_IRQ_BIT            (0x100000000000)

static void loco_da9053_irq_wakeup_only_fixup(void)
{
    void __iomem *tzic_base;
    tzic_base = ioremap(MX53_TZIC_BASE_ADDR, SZ_4K);
    if (NULL == tzic_base) {
        pr_err("fail to map MX53_TZIC_BASE_ADDR\n");
        return;
    }
    __raw_writel(0, tzic_base + TZIC_WAKEUP0_OFFSET);
    __raw_writel(0, tzic_base + TZIC_WAKEUP1_OFFSET);
    __raw_writel(0, tzic_base + TZIC_WAKEUP2_OFFSET);
    /* only enable irq wakeup for da9053 */
    __raw_writel(GPIO7_0_11_IRQ_BIT, tzic_base + TZIC_WAKEUP3_OFFSET);
//    __raw_writel(0x1F0F, tzic_base + TZIC_WAKEUP3_OFFSET);//vin added 2012/4/11
    iounmap(tzic_base);
    pr_info("only da9053 irq is wakeup-enabled 1\n");
}

static void loco_suspend_enter(void)
{
    printk("xxxxxxxxxxx loco_suspend_enter hw");//vin added 2012/4/6
    if (!board_is_mx53_loco_mc34708()) {
        loco_da9053_irq_wakeup_only_fixup();
//vin    da9053_suspend_cmd_sw();
        da9053_suspend_cmd_hw(); //vin added 2012/4/11

    }

0 Kudos

1,369 Views
VincentChen
Contributor I

I added some printk messages, so I can make sure where I stuck in sleep and failed in wakeup, shown as below:

static int mx5_suspend_enter(suspend_state_t state)
{
    if (gpc_dvfs_clk == NULL)
        gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs_clk");
    /* gpc clock is needed for SRPG */
    printk("mx5_suspend_enter 1\n");//vin added 2012/4/10
    clk_enable(gpc_dvfs_clk);
    switch (state) {
    case PM_SUSPEND_MEM:
        
        printk("mx5_suspend_enter 2\n");//vin added 2012/4/10
        mxc_cpu_lp_set(STOP_POWER_OFF);
        break;
    case PM_SUSPEND_STANDBY:
        
        printk("mx5_suspend_enter 3\n");//vin added 2012/4/10
        mxc_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
        break;
    default:
        return -EINVAL;
    }
    printk("mx5_suspend_enter 5\n");//vin added 2012/4/10

    if (tzic_enable_wake(0) != 0)
        return -EAGAIN;

    
    printk("mx5_suspend_enter 6\n");//vin added 2012/4/10
    if (state == PM_SUSPEND_MEM) {
        
        printk("mx5_suspend_enter 7\n");//vin added 2012/4/10
        if (!cpu_is_mx53()) {
            
            printk("mx5_suspend_enter 8\n");//vin added 2012/4/10
            local_flush_tlb_all();
            flush_cache_all();
        }
        
        printk("mx5_suspend_enter 9\n");//vin added 2012/4/10
        if (pm_data && pm_data->suspend_enter)
            {
            
            printk("mx5_suspend_enter 10\n");//vin added 2012/4/10
            pm_data->suspend_enter();
            }
        
        printk("mx5_suspend_enter 11\n");//vin added 2012/4/10
        if (cpu_is_mx51() || cpu_is_mx53()) {
            /* Run the suspend code from iRAM. */
            
            printk("mx5_suspend_enter 12\n");//vin added 2012/4/10
            suspend_in_iram(suspend_param1, NULL, NULL);
            printk("mx5_suspend_enter 13\n");//vin added 2012/4/10
            if (!cpu_is_mx53()) {
                
                printk("mx5_suspend_enter 14\n");//vin added 2012/4/10
                /*clear the EMPGC0/1 bits */
                __raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR);
                __raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR);
            }
        } else {
        
            printk("mx5_suspend_enter 15\n");//vin added 2012/4/10
            if (cpu_is_mx50()) {
                printk("mx5_suspend_enter 16\n");//vin added 2012/4/10
                /* Store the LPM mode of databanhn */
                databahn_mode = __raw_readl(
                    databahn_base + DATABAHN_CTL_REG20);

                /* Suspend now. */
                
                printk("mx5_suspend_enter 17\n");//vin added 2012/4/10
                suspend_in_iram(databahn_base,
                        ccm_base, pll1_base);
                printk("mx5_suspend_enter 18\n");//vin added 2012/4/10

                /* Restore the LPM databahn_mode. */
                __raw_writel(databahn_mode,
                    databahn_base + DATABAHN_CTL_REG20);
                printk("mx5_suspend_enter 19\n");//vin added 2012/4/10

            }
        }
        if (pm_data && pm_data->suspend_exit)
            {
            
            printk("mx5_suspend_enter 20\n");//vin added 2012/4/10
            pm_data->suspend_exit();
            
            printk("mx5_suspend_enter 21\n");//vin added 2012/4/10
            }
    } else {
        
        printk("mx5_suspend_enter 22\n");//vin added 2012/4/10
            cpu_do_idle();
            
            printk("mx5_suspend_enter 23\n");//vin added 2012/4/10
    }
    
    printk("mx5_suspend_enter 24\n");//vin added 2012/4/10
    clk_disable(gpc_dvfs_clk);
    printk("mx5_suspend_enter 25\n");//vin added 2012/4/10

    return 0;
}

0 Kudos

1,369 Views
VincentChen
Contributor I

I tried resume from sleep, but can't wake up from sleep by pressing the power button, shown as below:

root@cpc-105:/# echo 8 > /proc/sys/kernel/printk
root@cpc-105:/# cat /proc/sys/kernel/printk
8       4       1       7
root@cpc-105:/# echo mem > /sys/power/state
[   66.368029] xxxxxxxxxx 0. state_store
[   66.371707] xxxxxxxxxx 3. state_store
[   66.375371] PM: Syncing filesystems ... done.
[   66.379835] PM: Preparing system for mem sleep
[   66.384818] PM: Adding info for No Bus:vcs63
[   66.387023] PM: Adding info for No Bus:vcsa63
[   66.404368] Freezing user space processes ... (elapsed 0.01 seconds) done.
[   66.420284] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
[   66.440288] PM: Entering mem sleep
[   66.443706] mxc_sdma mxc_sdma: preparing suspend
[   66.448344] mxc_wdt mxc_wdt.0: preparing suspend
[   66.452965] imx-i2c imx-i2c.0: preparing suspend
[   66.457583] imx-i2c imx-i2c.1: preparing suspend
[   66.462214] imx-i2c imx-i2c.2: preparing suspend
[   66.466835] mxc_rtc mxc_rtc.0: preparing suspend, may wakeup
[   66.472510] mxc_ipu mxc_ipu: preparing suspend
[   66.476956] platform mxc_ldb: preparing suspend
[   66.481499] tve tve.0: preparing suspend
[   66.485425] mxc_vpu mxc_vpu.0: preparing suspend
[   66.490057] mxc_gpu mxc_gpu.0: preparing suspend
[   66.494677] platform mxc_scc.0: preparing suspend
[   66.499396] mx5_pm mx5_pm.0: preparing suspend
[   66.503842] mxc_dvfs_core mxc_dvfs_core.0: preparing suspend
[   66.509514] busfreq busfreq.0: preparing suspend
[   66.514135] mxc_iim mxc_iim.0: preparing suspend
[   66.518765] mxc_pwm mxc_pwm.1: preparing suspend
[   66.523385] pwm-backlight pwm-backlight.0: preparing suspend
[   66.529057] mxsdhci mxsdhci.0: preparing suspend
[   66.533678] mxsdhci mxsdhci.1: preparing suspend
[   66.538307] mxsdhci mxsdhci.2: preparing suspend
[   66.542927] platform mxc_ssi.0: preparing suspend
[   66.547644] platform mxc_ssi.1: preparing suspend
[   66.552351] platform mxc_spdif.0: preparing suspend
[   66.557231] ahci ahci.0: preparing suspend
[   66.561359] platform imx-ahci-hwmon: preparing suspend
[   66.566515] fec fec.0: preparing suspend
[   66.570462] platform ptp.0: preparing suspend
[   66.574833] mxc_asrc mxc_asrc.0: preparing suspend
[   66.579656] platform imx-3stack-sgtl5000.0: preparing suspend
[   66.585405] platform imx-3stack-tlv320aic3x.0: preparing suspend
[   66.591428] platform imx-spdif-audio-device.0: preparing suspend
[   66.597440] fsl-ehci fsl-ehci.0: preparing suspend
[   66.602244] usb_wakeup usb_wakeup.0: preparing suspend
[   66.607387] fsl-ehci fsl-ehci.1: preparing suspend
[   66.612207] usb_wakeup usb_wakeup.1: preparing suspend
[   66.617348] platform mxc_v4l2_capture.0: preparing suspend
[   66.622849] platform mxc_v4l2_output.0: preparing suspend
[   66.628263] gpio-keys gpio-keys: preparing suspend
[   66.633057] mxcintuart mxcintuart.0: preparing suspend
[   66.638210] mxcintuart mxcintuart.1: preparing suspend
[   66.643351] mxcintuart mxcintuart.2: preparing suspend
[   66.648503] mxcintuart mxcintuart.3: preparing suspend
[   66.653644] mxcintuart mxcintuart.4: preparing suspend
[   66.658799] platform da9052-rtc: preparing suspend
[   66.663593] da9052-onkey da9052-onkey: preparing suspend
[   66.668918] platform WLED-1: preparing suspend
[   66.673364] platform WLED-2: preparing suspend
[   66.677820] platform WLED-3: preparing suspend
[   66.682266] da9052-adc da9052-adc: preparing suspend
[   66.687233] platform da9052-wdt: preparing suspend
[   66.692037] platform da9052-leds: preparing suspend
[   66.696918] da9052-regulator da9052-regulator: preparing suspend
[   66.702955] da9052-tsi da9052-tsi: preparing suspend
[   66.707935] platform da9052-bat: preparing suspend
[   66.712751] mxc_sdc_fb mxc_sdc_fb.1: preparing suspend
[   66.717904] mxc_sdc_fb mxc_sdc_fb.0: preparing suspend
[   66.723045] mxc_sdc_fb mxc_sdc_fb.2: preparing suspend
[   66.728200] platform mxc_ddc.0: preparing suspend
[   66.733582] usb usb1: preparing type suspend, may wakeup
[   66.738931] usb usb2: preparing type suspend, may wakeup
[   66.744320] mmcblk mmc2:0001: legacy suspend
[   66.748620] mmc mmc1:0001: legacy suspend
[   66.752636] mmcblk mmc0:c502: legacy suspend
[   66.756921] rtc rtc0: legacy class suspend
[   66.761048] input input2: type suspend
[   66.764806] input input1: type suspend
[   66.768575] input input0: type suspend
[   66.772460] Generic PHY 0:00: suspend
[   66.776204] hub 2-0:1.0: suspend
[   66.780262] platform mxc_ddc.0: suspend
[   66.784109] backlight pwm-backlight.0: legacy class suspend
[   66.789741] usb usb2: type suspend, may wakeup
[   66.794193] usb usb2: suspend, may wakeup
[   66.798228] hub 1-0:1.0: suspend
[   66.801462] usb usb1: type suspend, may wakeup
[   66.805909] usb usb1: suspend, may wakeup
[   66.810051] scsi host0: legacy suspend
[   66.813839] mxc_sdc_fb mxc_sdc_fb.2: suspend
[   66.818157] mxc_sdc_fb mxc_sdc_fb.0: suspend
[   66.822436] mxc_sdc_fb mxc_sdc_fb.1: suspend
[   66.867723] i2c 2-0004: suspend
[   66.870870] i2c 2-0041: suspend
[   66.874015] i2c i2c-2: suspend
[   66.877073] kxtf9 1-000f: suspend
[   66.880413] i2c i2c-1: suspend
[   66.883470] i2c 0-0018: suspend
[   66.886614] i2c 0-0030: suspend
[   66.889770] i2c 0-001c: suspend
[   66.892914] platform da9052-bat: suspend
[   66.896840] da9052-tsi da9052-tsi: suspend
[   66.900950] da9052_tsi_suspend: called
[   66.904725] da9052-regulator da9052-regulator: suspend
[   66.909878] platform da9052-leds: suspend
[   66.913891] platform da9052-wdt: suspend
[   66.917829] da9052-adc da9052-adc: suspend
[   66.921930] platform WLED-3: suspend
[   66.925507] platform WLED-2: suspend
[   66.929096] platform WLED-1: suspend
[   66.932675] da9052-onkey da9052-onkey: suspend
[   66.937122] platform da9052-rtc: suspend
[   66.941060] da9052_ssc_i2c 0-0048: suspend
[   66.945165] i2c i2c-0: suspend
[   66.948235] mxcintuart mxcintuart.4: suspend
[   66.952510] mxcintuart mxcintuart.3: suspend
[   66.956785] mxcintuart mxcintuart.2: suspend
[   66.961071] mxcintuart mxcintuart.1: suspend
[   66.965345] mxcintuart mxcintuart.0: suspend
[   66.969631] gpio-keys gpio-keys: suspend
[   66.973558] platform mxc_v4l2_output.0: suspend
[   66.978103] platform mxc_v4l2_capture.0: suspend
[   66.982724] usb_wakeup usb_wakeup.1: suspend
[   66.986999] fsl-ehci fsl-ehci.1: suspend
[   66.990935] USB Host suspend begins
[   66.994424] ehci_fsl_drv_suspend, pm event
[   66.998738] usb_wakeup usb_wakeup.0: suspend
[   67.003016] fsl-ehci fsl-ehci.0: suspend
[   67.006939] USB Host suspend begins
[   67.010456] ehci_fsl_drv_suspend, pm event
[   67.014859] platform imx-spdif-audio-device.0: suspend
[   67.020015] platform imx-3stack-tlv320aic3x.0: suspend
[   67.025157] platform imx-3stack-sgtl5000.0: suspend
[   67.030049] mxc_asrc mxc_asrc.0: suspend
[   67.033978] platform ptp.0: suspend
[   67.037472] fec fec.0: suspend
[   67.041484] platform imx-ahci-hwmon: suspend
[   67.045767] ahci ahci.0: suspend
[   67.049043] platform mxc_spdif.0: suspend
[   67.053057] platform mxc_ssi.1: suspend
[   67.056897] platform mxc_ssi.0: suspend
[   67.060754] mxsdhci mxsdhci.2: suspend
[   67.064603] mxsdhci mxsdhci.1: suspend
[   67.068395] mxsdhci mxsdhci.0: suspend
[   67.072195] pwm-backlight pwm-backlight.0: suspend
[   67.076999] mxc_pwm mxc_pwm.1: suspend
[   67.080768] mxc_iim mxc_iim.0: suspend
[   67.084521] busfreq busfreq.0: suspend
[   67.088285] mxc_dvfs_core mxc_dvfs_core.0: suspend
[   67.093081] mx5_pm mx5_pm.0: suspend
[   67.096659] platform mxc_scc.0: suspend
[   67.100507] mxc_gpu mxc_gpu.0: suspend
[   67.104264] mxc_vpu mxc_vpu.0: suspend
[   67.108028] tve tve.0: suspend
[   67.111086] platform mxc_ldb: suspend
[   67.114750] mxc_ipu mxc_ipu: suspend
[   67.118343] mxc_rtc mxc_rtc.0: suspend, may wakeup
[   67.123143] imx-i2c imx-i2c.2: suspend
[   67.126896] imx-i2c imx-i2c.1: suspend
[   67.130658] imx-i2c imx-i2c.0: suspend
[   67.134412] mxc_wdt mxc_wdt.0: suspend
[   67.138175] mxc_sdma mxc_sdma: suspend
[   67.141955] PM: suspend of devices complete after 397.646 msecs
[   67.147892] suspend wp cpu=400000000
[   67.154416] input input2: LATE type suspend
[   67.158658] input input1: LATE type suspend
[   67.162856] input input0: LATE type suspend
[   67.167056] hub 2-0:1.0: LATE suspend
[   67.170753] usb usb2: LATE type suspend, may wakeup
[   67.175645] usb usb2: LATE suspend, may wakeup
[   67.180123] hub 1-0:1.0: LATE suspend
[   67.183798] usb usb1: LATE type suspend, may wakeup
[   67.188706] usb usb1: LATE suspend, may wakeup
[   67.193166] Generic PHY 0:00: LATE suspend
[   67.197675] platform mxc_ddc.0: LATE suspend
[   67.201965] mxc_sdc_fb mxc_sdc_fb.2: LATE suspend
[   67.206685] mxc_sdc_fb mxc_sdc_fb.0: LATE suspend
[   67.211495] mxc_sdc_fb mxc_sdc_fb.1: LATE suspend
[   67.216222] i2c 2-0004: LATE suspend
[   67.219838] i2c 2-0041: LATE suspend
[   67.223428] i2c i2c-2: LATE suspend
[   67.226928] kxtf9 1-000f: LATE suspend
[   67.230707] i2c i2c-1: LATE suspend
[   67.234209] i2c 0-0018: LATE suspend
[   67.237813] i2c 0-0030: LATE suspend
[   67.241401] i2c 0-001c: LATE suspend
[   67.244987] platform da9052-bat: LATE suspend
[   67.249376] da9052-tsi da9052-tsi: LATE suspend
[   67.253928] da9052-regulator da9052-regulator: LATE suspend
[   67.259535] platform da9052-leds: LATE suspend
[   67.263993] platform da9052-wdt: LATE suspend
[   67.268380] da9052-adc da9052-adc: LATE suspend
[   67.272926] platform WLED-3: LATE suspend
[   67.276947] platform WLED-2: LATE suspend
[   67.280986] platform WLED-1: LATE suspend
[   67.285010] da9052-onkey da9052-onkey: LATE suspend
[   67.289920] platform da9052-rtc: LATE suspend
[   67.294292] da9052_ssc_i2c 0-0048: LATE suspend
[   67.298853] i2c i2c-0: LATE suspend
[   67.302357] mxcintuart mxcintuart.4: LATE suspend
[   67.307075] mxcintuart mxcintuart.3: LATE suspend
[   67.311812] mxcintuart mxcintuart.2: LATE suspend
[   67.316531] mxcintuart mxcintuart.1: LATE suspend
[   67.321265] mxcintuart mxcintuart.0: LATE suspend
[   67.325984] gpio-keys gpio-keys: LATE suspend
[   67.330371] platform mxc_v4l2_output.0: LATE suspend
[   67.335351] platform mxc_v4l2_capture.0: LATE suspend
[   67.340434] usb_wakeup usb_wakeup.1: LATE suspend
[   67.345153] fsl-ehci fsl-ehci.1: LATE suspend
[   67.349540] usb_wakeup usb_wakeup.0: LATE suspend
[   67.354259] fsl-ehci fsl-ehci.0: LATE suspend
[   67.358646] platform imx-spdif-audio-device.0: LATE suspend
[   67.364235] platform imx-3stack-tlv320aic3x.0: LATE suspend
[   67.369840] platform imx-3stack-sgtl5000.0: LATE suspend
[   67.375168] mxc_asrc mxc_asrc.0: LATE suspend
[   67.379555] platform ptp.0: LATE suspend
[   67.383491] fec fec.0: LATE suspend
[   67.386992] platform imx-ahci-hwmon: LATE suspend
[   67.391726] ahci ahci.0: LATE suspend
[   67.395401] platform mxc_spdif.0: LATE suspend
[   67.399876] platform mxc_ssi.1: LATE suspend
[   67.404160] platform mxc_ssi.0: LATE suspend
[   67.408489] mxsdhci mxsdhci.2: LATE suspend
[   67.412687] mxsdhci mxsdhci.1: LATE suspend
[   67.416883] mxsdhci mxsdhci.0: LATE suspend
[   67.421103] pwm-backlight pwm-backlight.0: LATE suspend
[   67.426343] mxc_pwm mxc_pwm.1: LATE suspend
[   67.430558] mxc_iim mxc_iim.0: LATE suspend
[   67.434756] busfreq busfreq.0: LATE suspend
[   67.438969] mxc_dvfs_core mxc_dvfs_core.0: LATE suspend
[   67.444209] mx5_pm mx5_pm.0: LATE suspend
[   67.448249] platform mxc_scc.0: LATE suspend
[   67.452533] mxc_gpu mxc_gpu.0: LATE suspend
[   67.456729] mxc_vpu mxc_vpu.0: LATE suspend
[   67.460943] tve tve.0: LATE suspend
[   67.464445] platform mxc_ldb: LATE suspend
[   67.468570] mxc_ipu mxc_ipu: LATE suspend
[   67.472594] mxc_rtc mxc_rtc.0: LATE suspend, may wakeup
[   67.477851] imx-i2c imx-i2c.2: LATE suspend
[   67.482048] imx-i2c imx-i2c.1: LATE suspend
[   67.486244] imx-i2c imx-i2c.0: LATE suspend
[   67.490457] mxc_wdt mxc_wdt.0: LATE suspend
[   67.494655] mxc_sdma mxc_sdma: LATE suspend
[   67.498878] PM: late suspend of devices complete after 344.722 msecs
[   67.505383] mx5_suspend_enter 1
[   67.508539] mx5_suspend_enter 2
[   67.511693] mx5_suspend_enter 5
[   67.514841] mx5_suspend_enter 6
[   67.517989] mx5_suspend_enter 7
[   67.521137] mx5_suspend_enter 9
[   67.524286] mx5_suspend_enter 10
[   67.527521] xxxxxxxxxxx loco_suspend_enter hw
[   67.531795] only da9053 irq is wakeup-enabled 1
[   67.564606] mx5_suspend_enter 11
[   67.567842] mx5_suspend_enter 12

0 Kudos

1,369 Views
VincentChen
Contributor I

If you encountered file system crash after resume from standby mode as I did, modify the kernel configuration as below:

   Device Drivers --->
        [*] MMC/SD/SDIO card support -->
                [*] Assume MMC/SD cards are non-removable (DANGEROUS)   

0 Kudos

1,369 Views
VincentChen
Contributor I

After went into standby mode, I pressed the power button, and then the system resumes from standby mode as below:

[   45.357324] mxc_sdma mxc_sdma: EARLY resume
[   45.361527] mxc_wdt mxc_wdt.0: EARLY resume
[   45.365767] imx-i2c imx-i2c.0: EARLY resume
[   45.369964] imx-i2c imx-i2c.1: EARLY resume
[   45.374186] imx-i2c imx-i2c.2: EARLY resume
[   45.378383] mxc_rtc mxc_rtc.0: EARLY resume
[   45.382579] mxc_ipu mxc_ipu: EARLY resume
[   45.386625] platform mxc_ldb: EARLY resume
[   45.390735] tve tve.0: EARLY resume
[   45.394257] mxc_vpu mxc_vpu.0: EARLY resume
[   45.398456] mxc_gpu mxc_gpu.0: EARLY resume
[   45.402652] platform mxc_scc.0: EARLY resume
[   45.406956] mx5_pm mx5_pm.0: EARLY resume
[   45.410979] mxc_dvfs_core mxc_dvfs_core.0: EARLY resume
[   45.416241] busfreq busfreq.0: EARLY resume
[   45.420438] mxc_iim mxc_iim.0: EARLY resume
[   45.424655] mxc_pwm mxc_pwm.1: EARLY resume
[   45.428854] pwm-backlight pwm-backlight.0: EARLY resume
[   45.434115] mxsdhci mxsdhci.2: EARLY resume
[   45.438312] mxsdhci mxsdhci.1: EARLY resume
[   45.442508] mxsdhci mxsdhci.0: EARLY resume
[   45.446725] platform mxc_ssi.0: EARLY resume
[   45.451008] platform mxc_ssi.1: EARLY resume
[   45.455313] platform mxc_spdif.0: EARLY resume
[   45.459771] platform ahci.0: EARLY resume
[   45.463793] platform imx-ahci-hwmon: EARLY resume
[   45.468532] fec fec.0: EARLY resume
[   45.472034] platform ptp.0: EARLY resume
[   45.475990] mxc_asrc mxc_asrc.0: EARLY resume
[   45.480361] platform imx-3stack-sgtl5000.0: EARLY resume
[   45.485710] platform imx-3stack-tlv320aic3x.0: EARLY resume
[   45.491299] platform imx-spdif-audio-device.0: EARLY resume
[   45.496908] fsl-ehci fsl-ehci.0: EARLY resume
[   45.501280] usb_wakeup usb_wakeup.0: EARLY resume
[   45.506019] fsl-ehci fsl-ehci.1: EARLY resume
[   45.510390] usb_wakeup usb_wakeup.1: EARLY resume
[   45.515130] platform mxc_v4l2_capture.0: EARLY resume
[   45.520196] platform mxc_v4l2_output.0: EARLY resume
[   45.525196] platform gpio-keys: EARLY resume
[   45.529480] mxcintuart mxcintuart.0: EARLY resume
[   45.534219] mxcintuart mxcintuart.1: EARLY resume
[   45.538938] mxcintuart mxcintuart.2: EARLY resume
[   45.543656] mxcintuart mxcintuart.3: EARLY resume
[   45.548397] mxcintuart mxcintuart.4: EARLY resume
[   45.553116] i2c i2c-0: EARLY resume
[   45.556669] da9052_ssc_i2c 0-0048: EARLY resume
[   45.561215] platform da9052-rtc: EARLY resume
[   45.565612] da9052-onkey da9052-onkey: EARLY resume
[   45.570504] platform WLED-1: EARLY resume
[   45.574549] platform WLED-2: EARLY resume
[   45.578571] platform WLED-3: EARLY resume
[   45.582593] da9052-adc da9052-adc: EARLY resume
[   45.587160] platform da9052-wdt: EARLY resume
[   45.591531] platform da9052-leds: EARLY resume
[   45.596011] da9052-regulator da9052-regulator: EARLY resume
[   45.601604] da9052-tsi da9052-tsi: EARLY resume
[   45.606168] platform da9052-bat: EARLY resume
[   45.610540] i2c 0-001c: EARLY resume
[   45.614148] i2c 0-0030: EARLY resume
[   45.617736] i2c 0-0018: EARLY resume
[   45.621323] i2c i2c-1: EARLY resume
[   45.624846] kxtf9 1-000f: EARLY resume
[   45.628608] i2c i2c-2: EARLY resume
[   45.632109] i2c 2-0041: EARLY resume
[   45.635718] i2c 2-0004: EARLY resume
[   45.639311] mxc_sdc_fb mxc_sdc_fb.1: EARLY resume
[   45.644050] mxc_sdc_fb mxc_sdc_fb.0: EARLY resume
[   45.648768] mxc_sdc_fb mxc_sdc_fb.2: EARLY resume
[   45.653487] platform mxc_ddc.0: EARLY resume
[   45.658252] Generic PHY 0:00: EARLY resume
[   45.662372] usb usb1: EARLY resume
[   45.665906] usb usb1: EARLY type resume
[   45.669759] hub 1-0:1.0: EARLY resume
[   45.673436] usb usb2: EARLY resume
[   45.676915] usb usb2: EARLY type resume
[   45.680765] hub 2-0:1.0: EARLY resume
[   45.684470] input input0: EARLY type resume
[   45.688669] input input1: EARLY type resume
[   45.692894] PM: early resume of devices complete after 335.572 msecs
[   45.702260] xxxxxxxxxxxxxxxxx  KEY_POWER event
[   45.709176] mxc_sdma mxc_sdma: resume
[   45.712849] mxc_wdt mxc_wdt.0: resume
[   45.716635] imx-i2c imx-i2c.0: resume
[   45.720301] imx-i2c imx-i2c.1: resume
[   45.723966] imx-i2c imx-i2c.2: resume
[   45.727705] mxc_rtc mxc_rtc.0: resume
[   45.731375] mxc_ipu mxc_ipu: resume
[   45.734895] IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7)
[   45.741025] platform mxc_ldb: resume
[   45.744615] tve tve.0: resume
[   45.747585] mxc_vpu mxc_vpu.0: resume
[   45.751250] mxc_gpu mxc_gpu.0: resume
[   45.754953] platform mxc_scc.0: resume
[   45.758706] mx5_pm mx5_pm.0: resume
[   45.762196] mxc_dvfs_core mxc_dvfs_core.0: resume
[   45.766919] busfreq busfreq.0: resume
[   45.770585] mxc_iim mxc_iim.0: resume
[   45.774262] mxc_pwm mxc_pwm.1: resume
[   45.777928] pwm-backlight pwm-backlight.0: resume
[   45.782645] mxsdhci mxsdhci.2: resume
[   45.926289] mxsdhci mxsdhci.1: resume
[   45.985449] mmc1: error -110 during resume (card was removed?)
[   45.991289] PM: Removing info for sdio:mmc1:0001:1
[   45.996198] PM: Removing info for sdio:mmc1:0001:2
[   46.001034] PM: Removing info for sdio:mmc1:0001:3
[   46.005940] mmc1: card 0001 removed
[   46.009431] PM: Removing info for mmc:mmc1:0001
[   46.014040] mxsdhci mxsdhci.0: resume
[   46.017725] platform mxc_ssi.0: resume
[   46.021477] platform mxc_ssi.1: resume
[   46.025262] platform mxc_spdif.0: resume
[   46.029187] platform ahci.0: resume
[   46.032676] platform imx-ahci-hwmon: resume
[   46.036878] fec fec.0: resume
[   46.039892] platform ptp.0: resume
[   46.043297] mxc_asrc mxc_asrc.0: resume
[   46.057183] platform imx-3stack-sgtl5000.0: resume
[   46.061978] platform imx-3stack-tlv320aic3x.0: resume
[   46.067049] platform imx-spdif-audio-device.0: resume
[   46.072104] fsl-ehci fsl-ehci.0: resume
[   46.075952] ehci fsl drv resume begins: DR
[   46.080048] ehci_fsl_drv_resume,pm event, wait for wakeup irq if needed
[   46.086712] usb usb1: resume
[   46.089626] usb usb1: type resume
[   46.102990] usb_wakeup usb_wakeup.0: resume
[   46.107192] ehci_fsl_bus_resume, DR
[   46.111058] fsl-ehci fsl-ehci.1: resume
[   46.115914] ehci fsl drv resume begins: Host 1
[   46.131407] ehci_fsl_drv_resume,pm event, wait for wakeup irq if needed
[   46.138048] usb usb2: resume
[   46.140931] usb usb2: type resume
[   46.144317] hub 1-0:1.0: resume
[   46.147467] usb_wakeup usb_wakeup.1: resume
[   46.151653] platform mxc_v4l2_capture.0: resume
[   46.157227] ehci_fsl_bus_resume, Host 1
[   46.161203] platform mxc_v4l2_output.0: resume
[   46.175717] platform gpio-keys: resume
[   46.179469] mxcintuart mxcintuart.0: resume
[   46.183656] mxcintuart mxcintuart.1: resume
[   46.187864] mxcintuart mxcintuart.2: resume
[   46.192080] mxcintuart mxcintuart.3: resume
[   46.206347] hub 2-0:1.0: resume
[   46.209501] mxcintuart mxcintuart.4: resume
[   46.213689] i2c i2c-0: resume
[   46.216683] da9052_ssc_i2c 0-0048: resume
[   46.220723] platform da9052-rtc: resume
[   46.224596] da9052-onkey da9052-onkey: resume
[   46.228977] platform WLED-1: resume
[   46.232488] platform WLED-2: resume
[   46.236012] platform WLED-3: resume
[   46.239525] da9052-adc da9052-adc: resume
[   46.243556] platform da9052-wdt: resume
[   46.247429] platform da9052-leds: resume
[   46.251376] da9052-regulator da9052-regulator: resume
[   46.256475] da9052-tsi da9052-tsi: resume
[   46.260506] da9052_tsi_resume: called
[   46.264204] platform da9052-bat: resume
[   46.268062] i2c 0-001c: resume
[   46.271139] i2c 0-0030: resume
[   46.274230] i2c 0-0018: resume
[   46.277307] i2c i2c-1: resume
[   46.280297] kxtf9 1-000f: resume
[   46.283550] i2c i2c-2: resume
[   46.286552] i2c 2-0041: resume
[   46.289630] i2c 2-0004: resume
[   46.292718] mxc_sdc_fb mxc_sdc_fb.1: resume
[   46.296944] mxc_ipu mxc_ipu: Channel already disabled 9
[   46.296954] mxc_ipu mxc_ipu: Channel already uninitialized 9
[   46.308384] mmc1: queuing unknown CIS tuple 0x80 (50 bytes)
[   46.314079] DMFC high resolution has set, will not change
[   46.316070] mmc1: queuing unknown CIS tuple 0x80 (7 bytes)
[   46.318840] mmc1: queuing unknown CIS tuple 0x80 (7 bytes)
[   46.354670] mxc_sdc_fb mxc_sdc_fb.0: resume
[   46.358886] mxc_sdc_fb mxc_sdc_fb.2: resume
[   46.363099] backlight pwm-backlight.0: legacy class resume
[   46.368625] platform mxc_ddc.0: resume
[   46.372971] Generic PHY 0:00: resume
[   46.376714] input input0: type resume
[   46.380414] input input1: type resume
[   46.384124] rtc rtc0: legacy class resume
[   46.388191] mmcblk mmc0:0001: legacy resume
[   46.392454] PM: resume of devices complete after 683.495 msecs
[   46.398356] usb usb2: completing type resume
[   46.402660] usb usb1: completing type resume
[   46.407489] platform mxc_ddc.0: completing resume
[   46.412238] mxc_sdc_fb mxc_sdc_fb.2: completing resume
[   46.417432] mxc_sdc_fb mxc_sdc_fb.0: completing resume
[   46.422595] mxc_sdc_fb mxc_sdc_fb.1: completing resume
[   46.427791] platform da9052-bat: completing resume
[   46.432610] da9052-tsi da9052-tsi: completing resume
[   46.437629] da9052-regulator da9052-regulator: completing resume
[   46.443663] platform da9052-leds: completing resume
[   46.448576] platform da9052-wdt: completing resume
[   46.453390] da9052-adc da9052-adc: completing resume
[   46.458388] platform WLED-3: completing resume
[   46.462853] platform WLED-2: completing resume
[   46.467331] platform WLED-1: completing resume
[   46.471797] da9052-onkey da9052-onkey: completing resume
[   46.477143] platform da9052-rtc: completing resume
[   46.481960] mxcintuart mxcintuart.4: completing resume
[   46.487132] mxcintuart mxcintuart.3: completing resume
[   46.492293] mxcintuart mxcintuart.2: completing resume
[   46.497466] mxcintuart mxcintuart.1: completing resume
[   46.502627] mxcintuart mxcintuart.0: completing resume
[   46.507799] platform gpio-keys: completing resume
[   46.512525] platform mxc_v4l2_output.0: completing resume
[   46.517957] platform mxc_v4l2_capture.0: completing resume
[   46.523465] usb_wakeup usb_wakeup.1: completing resume
[   46.528637] fsl-ehci fsl-ehci.1: completing resume
[   46.533451] usb_wakeup usb_wakeup.0: completing resume
[   46.538622] fsl-ehci fsl-ehci.0: completing resume
[   46.543436] platform imx-spdif-audio-device.0: completing resume
[   46.549476] platform imx-3stack-tlv320aic3x.0: completing resume
[   46.555550] platform imx-3stack-sgtl5000.0: completing resume
[   46.561322] mxc_asrc mxc_asrc.0: completing resume
[   46.566153] platform ptp.0: completing resume
[   46.570532] fec fec.0: completing resume
[   46.574489] platform imx-ahci-hwmon: completing resume
[   46.579649] platform ahci.0: completing resume
[   46.584127] platform mxc_spdif.0: completing resume
[   46.589027] platform mxc_ssi.1: completing resume
[   46.593751] platform mxc_ssi.0: completing resume
[   46.598489] mxsdhci mxsdhci.0: completing resume
[   46.603129] mxsdhci mxsdhci.1: completing resume
[   46.607779] mxsdhci mxsdhci.2: completing resume
[   46.612418] pwm-backlight pwm-backlight.0: completing resume
[   46.618111] mxc_pwm mxc_pwm.1: completing resume
[   46.622751] mxc_iim mxc_iim.0: completing resume
[   46.627401] busfreq busfreq.0: completing resume
[   46.632040] mxc_dvfs_core mxc_dvfs_core.0: completing resume
[   46.637733] mx5_pm mx5_pm.0: completing resume
[   46.642199] platform mxc_scc.0: completing resume
[   46.646938] mxc_gpu mxc_gpu.0: completing resume
[   46.651578] mxc_vpu mxc_vpu.0: completing resume
[   46.656230] tve tve.0: completing resume
[   46.660175] platform mxc_ldb: completing resume
[   46.664738] mxc_ipu mxc_ipu: completing resume
[   46.669207] mxc_rtc mxc_rtc.0: completing resume
[   46.673845] imx-i2c imx-i2c.2: completing resume
[   46.678497] imx-i2c imx-i2c.1: completing resume
[   46.683137] imx-i2c imx-i2c.0: completing resume
[   46.687788] mxc_wdt mxc_wdt.0: completing resume
[   46.692432] mxc_sdma mxc_sdma: completing resume
[   46.697079] mmc1: queuing unknown CIS tuple 0x02 (1 bytes)
[   46.702578] PM: Finishing wakeup.
[   46.715947] Restarting tasks ...
[   46.719175] hub 1-0:1.0: __pm_runtime_resume()!
[   46.723892] usb usb1: __pm_runtime_resume()!
[   46.728164] usb usb1: __pm_runtime_resume() returns 1!
[   46.739038] done.
[   46.789150] hub 1-0:1.0: __pm_runtime_resume() returns 0!
[   46.797390] mmc1: new SDIO card at address 0001
[   46.801997] PM: Adding info for mmc:mmc1:0001
[   46.819165] hub 1-0:1.0: __pm_runtime_suspend()!
[   46.825823] PM: Adding info for sdio:mmc1:0001:1
[   46.845749] hub 1-0:1.0: __pm_runtime_suspend() returns 0!
[   46.851261] hub 2-0:1.0: __pm_runtime_resume()!
[   46.855795] usb usb2: __pm_runtime_resume()!
[   46.860066] usb usb2: __pm_runtime_resume() returns 1!
[   46.874266] PM: Adding info for sdio:mmc1:0001:2
[   46.882962] PM: Adding info for sdio:mmc1:0001:3
[   46.934192] hub 2-0:1.0: __pm_runtime_resume() returns 0!
[   46.939615] hub 2-0:1.0: __pm_runtime_suspend()!
[   46.976921] hub 2-0:1.0: __pm_runtime_suspend() returns 0!
[   48.854051] usb usb1: __pm_runtime_suspend() from workqueue!
[   48.859752] ehci_fsl_bus_suspend, DR
[   48.864082] usb usb1: __pm_runtime_suspend() returns 0!
[   49.864066] usb usb2: __pm_runtime_suspend() from workqueue!
[   49.869768] ehci_fsl_bus_suspend, Host 1
[   49.874382] usb usb2: __pm_runtime_suspend() returns 0!
[  119.774049] mmc2: Card removed and resetting controller.
[  119.779409] mmc2: Card removed and resetting controller.
[  120.538346] mmc2: new SD card at address aaaa
[  120.542816] PM: Adding info for mmc:mmc2:aaaa
[  120.574253] mmcblk1: mmc2:aaaa SU02G 1.84 GiB
[  120.578875] PM: Adding info for No Bus:mmcblk1
[  120.583406]  mmcblk1: p1
[  120.595222] PM: Adding info for No Bus:mmcblk1p1
[  120.624713] PM: Adding info for No Bus:179:16
[  132.857513] EXT2-fs (mmcblk1p1): warning: mounting unchecked fs, running e2fsck is recommended

0 Kudos

1,369 Views
VincentChen
Contributor I

Now I can see the whole debug messages while entering into standby mode as below:

........................................................................................

........................................................................................

[   41.668836] fec fec.0: LATE suspend
[   41.672337] platform imx-ahci-hwmon: LATE suspend
[   41.677055] platform ahci.0: LATE suspend
[   41.681100] platform mxc_spdif.0: LATE suspend
[   41.685558] platform mxc_ssi.1: LATE suspend
[   41.689867] platform mxc_ssi.0: LATE suspend
[   41.694150] mxsdhci mxsdhci.0: LATE suspend
[   41.698368] mxsdhci mxsdhci.1: LATE suspend
[   41.702565] mxsdhci mxsdhci.2: LATE suspend
[   41.706762] pwm-backlight pwm-backlight.0: LATE suspend
[   41.712024] mxc_pwm mxc_pwm.1: LATE suspend
[   41.716222] mxc_iim mxc_iim.0: LATE suspend
[   41.720439] busfreq busfreq.0: LATE suspend
[   41.724637] mxc_dvfs_core mxc_dvfs_core.0: LATE suspend
[   41.729899] mx5_pm mx5_pm.0: LATE suspend
[   41.733923] platform mxc_scc.0: LATE suspend
[   41.738228] mxc_gpu mxc_gpu.0: LATE suspend
[   41.742424] mxc_vpu mxc_vpu.0: LATE suspend
[   41.746620] tve tve.0: LATE suspend
[   41.750142] platform mxc_ldb: LATE suspend
[   41.754254] mxc_ipu mxc_ipu: LATE suspend
[   41.758298] mxc_rtc mxc_rtc.0: LATE suspend, may wakeup
[   41.763539] imx-i2c imx-i2c.2: LATE suspend
[   41.767735] imx-i2c imx-i2c.1: LATE suspend
[   41.771953] imx-i2c imx-i2c.0: LATE suspend
[   41.776151] mxc_wdt mxc_wdt.0: LATE suspend
[   41.780369] mxc_sdma mxc_sdma: LATE suspend
[   41.784573] PM: late suspend of devices complete after 340.880 msecs

0 Kudos

1,369 Views
VincentChen
Contributor I

In order to see more debug messages while in standby or sleep mode,

I added " console_suspend_enabled = 0;" in suspend_console  as below:

void suspend_console(void)
{
    console_suspend_enabled = 0;//vin added 2012/4/9

    if (!console_suspend_enabled)
        return;
    printk("Suspending console(s) (use no_console_suspend to debug)\n");
    acquire_console_sem();
    console_suspended = 1;
    up(&console_sem);
}

0 Kudos

1,369 Views
VincentChen
Contributor I

You can create sysfs entries to keep the power management state.

0 Kudos

1,369 Views
i_Mx53
Contributor II

Thanks for your response.yes you are right i have enable this drriver and i am getting the power button interrupt.

No entries are created in /proc or /sys for this.

how to check our GUI to put the system in to standby state.

Thanks,

0 Kudos

1,369 Views
VincentChen
Contributor I

From the Linux 2.6.35.3 kernel source: drivers/input/misc/Da9052_onkey.c, the function da9052_onkey_work_func
should be the entry for the power button event, I guess, but I haven't tried on hardware.

I will get hardware next week and then I will tell you in more detailed.

0 Kudos

1,369 Views
i_Mx53
Contributor II

I think so but,theoritically are different.

Once it enter into standby state,by pressing the power button it is resuming to the normal state.

Please  help me if you get where the entry is getting for the power button event.

And any user space commands are provided to check the power button press.Like acpi listen

0 Kudos