We try to implement suspend/resume in Linux with LPSTOP2 support (retain 16KB of data) on vanilla/mainline Linux kernel. Similar to the i.MX6 and Timesys Linux 3.0 kernel suspend/resume support, I relocate an assembler function into SRAM and go to deep sleep in there.
So far, the sleep part does the following steps:
The resume function executes this steps:
This works quite reliable, including jumping back to DDR and continue executing C-code. Currently, somewhere in the code located in DDR RAM, the kernel crashes. It is not yet clear why, but this is not my main concern here.
However, what I discovered when connecting a scope, that the memory controller is driving the RESET# signal to low, both when putting the memory into sleep state as well as when waking up the memory (see attached scope screenshots). We do have an external pull-up on the DDR3 RESET# (yellow in scope) signal as well as a pull-down on the CKE (blue in scope) signal. Those are my questions:
--
Stefan
解決済! 解決策の投稿を見る。
Hi Naoum,
Just "discovered" by chance the MISC2_0 bit in the SRC module, description says:
DDR RESET control on Standby
0 DDR memory reset is driven by DDR PHY
1 will remain high (inactive)
Sounds very promising! And indeed, verification showed, the DDR3 RESET signal is not driven low anymore! Yay! So with that, this thread can be closed.
--
Stefan
Dear Stefan,
This sequence has been discussed in detail, with a sample code, on the internal Community space ("Vybrid-FAE") for the Freescale FAEs. They have a right to share a relevant part of this information with our customers.
There is no need for you to develop it from scratch - feel free to turn to a local Freescale FAE in your region to get this information.
Sincerely, Naoum Gitnik.
Hi Naoum,
I have demo code from our local FAE called "Vybrid Low Power Demo Code". However, most is implemented in C, but on Linux I don't have a "full C" environment in SRAM. Like it is realized for i.MX6, the final suspend and the early resume logic is implemented in assembler which is relocated during runtime to SRAM when the user requests suspend to RAM. So it needs to be (re)implemented.
However, my main concern is not the implementation, I mainly point out the details of my implementation to draw a better picture of what we are doing... The main issue is the DDR3 Reset the controller is asserting. And we have so far not found a way to avoid that.
--
Stefan
Hi Naoum,
Just "discovered" by chance the MISC2_0 bit in the SRC module, description says:
DDR RESET control on Standby
0 DDR memory reset is driven by DDR PHY
1 will remain high (inactive)
Sounds very promising! And indeed, verification showed, the DDR3 RESET signal is not driven low anymore! Yay! So with that, this thread can be closed.
--
Stefan
timesyssupport do you have an update of this case?
timesyssupport can you attend this case?