I may be missing something, but there appears to be a memory type definition mismatch between the AM335x EMIF and the definitions used by the CM3 PM processor.
From AM335x TRM
And from src/include/msg.h of the AMX3-CM3 wakeup M3 processor firmware source code:
/* Board specifics populated in IPC_REG4 */
extern int mem_type; /* Memory Type 2 = DDR2, 3 = DDR3, 4 = LPDDR2 */
It looks to me like am33xx_pm_set_ipc_ops() in arch/arm/mach-omap2/pm33xx.c
calls ti_emif_get_mem_type() in drivers/memory/ti-emif-pm.c
and extracts the memory type directly from the EMIF register and from there
wkup_m3_set_mem_type() in drivers/soc/ti/wkup_m3_ipc.c
sets m3_ipc_state.mem_type which gets passed to the CM3 processor via IPC message
at Suspend time. If I hard code m3_ipc_state.mem_type to 4, Suspend/Resume works normally.
Otherwise, the AM3352 cannot resume if left suspended more than about a minute.
I see that Dave Gerlach seems to have done a lot of work in this code, so perhaps we can get him to address this.
There is a related patch 0001-CM3-ddr-Split-335x-and-437x-ddr-io-ctrl-handling.patch,
but I don't see how that addresses this apparent memory type definition mismatch.
I am using the CM3 firmware version 0x191 and the kernel from TI Processor SDK 2.0.1. It does not appear that there have been changes in this functionality between TI Processor SDK 2.0.1 and TI Processor SDK 2.0.2.
Best Regards,
Paul