We have a board design based on the AM3352 which will not attempt Suspend/Resume.
Kernel is from TI Processor SDK 2.0.1
No PMIC
128 MB LPDDR
At this point we are TFTP booting, MLO and u-boot loaded from SPI flash.
sysfs shows NO suspend states supported:
# cat /sys/power/state
[ 312.734418] ################## I'm inside state_show() ##################
None of the Suspend states are enabled.
I see that the wakeup M3 processor firmware is being loaded:
[ 7.482907] remoteproc0: wkup_m3 is available
[ 7.487444] remoteproc0: Note: remoteproc is still under development and considered experimental.
[ 7.496446] remoteproc0: THE BINARY FORMAT IS NOT YET FINALIZED, and backward compatibility isn't yet guaranteed.
[ 7.509990] ################## I'm inside ti_emif_push_sram() ##################
[ 7.517631] ### got np_pool okay ###
[ 7.521243] ### got pdev okay ###
[ 7.524584] ti_emif_sram 4c000000.emif: Unable to get sram pool for ocmcram
[ 7.532994] oprofile: using arm/armv7
[ 7.537522] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 7.543025] Initializing XFRM netlink socket
[ 7.547423] NET: Registered protocol family 17
[ 7.551937] NET: Registered protocol family 15
[ 7.556982] Key type dns_resolver registered
[ 7.561737] omap_voltage_late_init: Voltage driver support not added
[ 7.569039] ################## I'm inside am33xx_pm_probe() ##################
[ 7.576321] ################## I'm inside ti_emif_copy_pm_function_table() ##################
[ 7.584935] PM: am33xx_prepare_push_sram_idle: EMIF function copy failed
[ 7.592065] ThumbEE CPU extension supported.
[ 7.596392] Registering SWP/SWPB emulation handler
[ 7.604675] ################## I'm inside am33xx_pm_probe() ##################
[ 7.612049] ################## I'm inside ti_emif_copy_pm_function_table() ##################
[ 7.620633] PM: am33xx_prepare_push_sram_idle: EMIF function copy failed
[ 7.627415] remoteproc0: powering up wkup_m3
[ 7.633433] remoteproc0: Booting fw image am335x-pm-firmware.elf, size 219803
[ 7.641160] remoteproc0: remote processor wkup_m3 is now up
[ 7.641185] wkup_m3_ipc 44e11324.wkup_m3_ipc: CM3 Firmware Version = 0x191
[ 7.654820] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 22:24:34 UTC (946765474)
[ 7.670077] Freeing unused kernel memory: 244K (c06d3000 - c0710000)
Starting logging: OK
Populating /dev using udev: [ 7.795390] udevd[680]: starting version 3.1.5
[ 7.819720] random: udevd urandom read with 12 bits of entropy available
[ 8.221814] ################## I'm inside am33xx_pm_probe() ##################
[ 8.229213] ################## I'm inside ti_emif_copy_pm_function_table() ##################
[ 8.237811] PM: am33xx_prepare_push_sram_idle: EMIF function copy failed
done
Initializing random number generator... done.
Starting haveged: OK
Starting network...
Starting nginx...
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
Starting sshd: OK
/etc/init.d/S93-am335x-pm-firmware-load: line 4: can't create /sys/devices/ocp.2/44d00000.wkup_m3/firmware/am335x-pm-firmware.bin/loading: nonexistent directory
/etc/init.d/S93-am335x-pm-firmware-load: line 5: can't create /sys/devices/ocp.2/44d00000.wkup_m3/firmware/am335x-pm-firmware.bin/data: nonexistent directory
/etc/init.d/S93-am335x-pm-firmware-load: line 6: can't create /sys/devices/ocp.2/44d00000.wkup_m3/firmware/am335x-pm-firmware.bin/loading: nonexistent directory
Welcome to Our-Board
our-board login: [ 246.247103] random: nonblocking pool is initialized
The last lines are from an init script that I believe used to be how the firmware was loaded, or maybe just an alternate way so I'm thinking they can be ignored, but I include them in case I'm mistaken.
I think this is the best clue:
[ 7.524584] ti_emif_sram 4c000000.emif: Unable to get sram pool for ocmcram
This results in there not being a memory handle for one of the on chip SRAM memories to be used to store the EMIF settings prior to Suspend/Resume. Because of that it never populates the suspend function ptr table or sets and suspend states as valid (I believe).
I traced a little ways deeper as can be seen by my kernel prints, but I'm hoping someone can point me where to look for the cause of the problem.
It sounds like a device tree problem, but I don't see anything different WRT the emif entity.
BTW I found a patch that I may need to support the LPDDR properly, but I expect that to only come into play once I get it to suspend.
I also see that there is no sram driver listed for our board, whereas there is for the BBB and the EVM boards, where suspend is working.
The compatible type listed in the DT is "mmio-sram", but the only realistic driver match I found is drivers/misc/sram.c, which is not getting compiled in my build.
Thanks for your help,
Paul