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.

AM623: GPIO wake-up time from Linux suspend to RAM

Part Number: AM623
Other Parts Discussed in Thread: SK-AM62B

What is the wake-up time for Linux suspend-to-RAM using a GPIO interrupt?

  • Hi,

    I am looking into it and will get back to you in a few days.

  • I was able to make a measurement that shows this resume time is on the order of 320mS with the stock Linux image from SDKv9 running on SK-AM62B EVM. Below are details on how I measured this while referencing this doc: https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_00_00_03/exports/docs/linux/Foundational_Components_Kernel_Drivers_Power_Management.html

    • Before doing anything, enable the feature that toggles TP25 upon resume. This is useful for confirming that the device is actually in deep-sleep.
      • Use: devmem2 0x43018080 b 0x15
      • This will cause TP25 to be high during normal operation and low during deep-sleep.
    • Now configure MCU_GPIO_15 to trigger resume (wake-up the device)
      • Need to change padconf (0x0408403C) reset value from 0x08214007 to 0x28254007 (setting bit 18 and 29),
      • Use: devmem2 0x0408403C w 0x28254007
      • Make sure to start with the pin at a known state (high or low). The pin is accessible on pin 10 of connector J9.
    • To enter suspend Use this: echo mem > /sys/power/state
    • Measure voltage at TP25 to confirm entry into deep-sleep/suspend-to-RAM. You should measure 0V.
    • Toggle MCU_GPIO_15 on connector J9:10 to trigger resume
    • I measure ~320mS from the MCU_GPIO_15 toggle to the first character on terminal UART TX after resume. There is no debounce done on the GPIO edge so the 327.7mS measured in logic analyzer capture below can be considered approximate.

    Below is the terminal output during this test:

    root@am62xx-evm:~# devmem2 0x43018080 b 0x15

    /dev/mem opened.

    Memory mapped at address 0xffffacb45000.

    Read at address  0x43018080 (0xffffacb45080): 0x10

    Write at address 0x43018080 (0xffffacb45080): 0x15, readback 0x15

    root@am62xx-evm:~# devmem2 0x0408403C w 0x28254007

    /dev/mem opened.

    Memory mapped at address 0xffff9d00a000.

    Read at address  0x0408403C (0xffff9d00a03c): 0x28254007

    Write at address 0x0408403C (0xffff9d00a03c): 0x28254007, readback 0x28254007

    root@am62xx-evm:~# echo mem > /sys/power/state

    [  109.911811] PM: suspend entry (deep)

    [  109.950749] Filesystems sync: 0.035 seconds

    [  109.978649] remoteproc remoteproc0: stopped remote processor 5000000.m4fss

    [  109.986024] Freezing user space processes

    [  109.992083] Freezing user space processes completed (elapsed 0.001 seconds)

    [  109.999128] OOM killer disabled.

    [  110.002350] Freezing remaining freezable tasks

    [  110.008391] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)

    [  110.016085] printk: Suspending console(s) (use no_console_suspend to debug)

    Device is in suspend-to-RAM at this point, as verified by 0 volts measured on TP25. Now toggle MCU_GPIO_15 from low-to-high to trigger resume.

    [  110.038558] omap8250 2800000.serial: PM domain pd:146 will not be powered off

    [  110.271626] Disabling non-boot CPUs ...

    [  110.273801] psci: CPU1 killed (polled 0 ms)

    [  110.276839] psci: CPU2 killed (polled 0 ms)

    [  110.278761] psci: CPU3 killed (polled 0 ms)

    [  110.279570] Enabling non-boot CPUs ...

    [  110.279968] Detected VIPT I-cache on CPU1

    [  110.280063] GICv3: CPU1: found redistributor 1 region 0:0x00000000018a0000

    [  110.280129] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]

    [  110.281069] CPU1 is up

    [  110.281328] Detected VIPT I-cache on CPU2

    [  110.281373] GICv3: CPU2: found redistributor 2 region 0:0x00000000018c0000

    [  110.281415] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]

    [  110.282115] CPU2 is up

    [  110.282380] Detected VIPT I-cache on CPU3

    [  110.282439] GICv3: CPU3: found redistributor 3 region 0:0x00000000018e0000

    [  110.282492] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]

    [  110.283315] CPU3 is up

    [  110.283989] ti-sci 44043000.system-controller: ti_sci_resume: wakeup source: 0x82

    [  110.292014] ti-udma 485c0000.dma-controller: PSI-L pairing failed: 0x7506 -> 0x9016

    [  110.292138] ti-udma 485c0000.dma-controller: PM: dpm_run_callback(): udma_pm_resume+0x0/0xb4 returns -22

    [  110.292165] ti-udma 485c0000.dma-controller: PM: failed to resume early: error -22

    [  110.295865] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19

    [  110.304898] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL)

    [  110.304930] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode

    [  110.311690] am65-cpsw-nuss 8000000.ethernet eth1: PHY [8000f00.mdio:01] driver [TI DP83867] (irq=POLL)

    [  110.311704] am65-cpsw-nuss 8000000.ethernet eth1: configuring for phy/rgmii-rxid link mode

    [  110.605116] OOM killer enabled.

    [  110.608260] Restarting tasks ... done.

    [  110.614511] random: crng reseeded on system resumption

    [  110.619750] remoteproc remoteproc0: powering up 5000000.m4fss

    [  110.625577] remoteproc remoteproc0: Booting fw image am62-mcu-m4f0_0-fw, size 54860

    [  110.634784] rproc-virtio rproc-virtio.0.auto: assigned reserved memory node m4f-dma-memory@9cb00000

    [  110.644957] virtio_rpmsg_bus virtio0: rpmsg host is online

    [  110.645956] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xd

    [  110.650729] rproc-virtio rproc-virtio.0.auto: registered virtio0 (type 7)

    [  110.658702] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xe

    [  110.665293] remoteproc remoteproc0: remote processor 5000000.m4fss is now up

    [  110.679474] PM: suspend exit

    root@am62xx-evm:~#