<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Vybrid Processors中的主题 Re: DDR3 self-refresh entry/exit sequence</title>
    <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345427#M3480</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Naoum,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Just "discovered" by chance the MISC2_0 bit in the SRC module, description says:&lt;/P&gt;&lt;P&gt;DDR RESET control on Standby&lt;/P&gt;&lt;P&gt;0 &lt;SPAN style="font-size: 13.3333339691162px;"&gt;DDR memory reset is driven by DDR PHY&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;1 &lt;SPAN style="font-size: 13.3333339691162px;"&gt;will remain high (inactive)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--&lt;/P&gt;&lt;P&gt;Stefan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 21 Nov 2014 16:45:05 GMT</pubDate>
    <dc:creator>falstaff</dc:creator>
    <dc:date>2014-11-21T16:45:05Z</dc:date>
    <item>
      <title>DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345421#M3474</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;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 &lt;/SPAN&gt;relocate&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt; an assembler function into SRAM and go to deep sleep in there. &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;So far, the sleep part does the following steps:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Save current memory registers&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Setup CCM_LPCR, GPC_PGCR and friends&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Flush D-cache&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Put the memory explicitly in self-refresh mode using LP_CMD(0xA), and wait for completion of this command&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Setup GPR0/GPR1 register&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Execute WFI instruction&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;The resume function executes this steps:&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Invalidate L1 cache&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Mask interrupts&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Ungate UART, ANADIG, SCSM, GPC, CCM, WKUP and MMDC&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Enable slow oscillators&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Enable fast oscillators and select external FOSC&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Enable PLL1/PLL2 and wait for lock (we use PLL2 as memory clock source...)&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Restore memory registers&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;[Set PWUP_SREF_EX in CR34, see 2 below]&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Start memory controller (set START bit of DDRMC_CR00)&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Stopping self-refresh mode using LP_CMD(0x9)&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Jump to standard Linux resume routine in DDR memory (cpu_resume)&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;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 &lt;/SPAN&gt;concern&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt; here.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;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:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Is it ok that the memory controller issues a reset right before going to sleep (as shown in DDR3_SelfRefreshEntry.TIF). In my understanding, this resets the DDR3 memory, which would invalidate the self-refresh command... If reset commands are not harmful while in self-refresh, I guess the pull-up for the RESET# signal would not be required...?&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;Is it ok that the memory controller issues a reset right when waking up (see DDR3_SelfRefreshExit.TIF). I found the &lt;SPAN style="font-size: 13.3333339691162px;"&gt;PWUP_SREF_EX bit, however when setting this bit, I cannot access the memory after initialization... (DDR3_SelfRefreshExitWith_PWUP_SREF_EX.TIF)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="line-height: 1.5em; font-size: 13.3333339691162px;"&gt;In chapter 34.6.6 Low Power Operation, the text says that Self-Refresh with Memory Clock Gating and Self-Refresh with Memory and Controller Clock Gating is only valid for LPDDR2. What does this mean exactly? As fair as I understood the low power architecture, the MMDC (memory controller) is in PD1, hence it will be turned off. In my understanding, this would mean that Memory and Controller Clock will be gated...&amp;nbsp; Is DDR3 self-refresh with LPSTOPx modes possible at all?&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--&lt;/P&gt;&lt;P&gt;Stefan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Nov 2014 13:53:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345421#M3474</guid>
      <dc:creator>falstaff</dc:creator>
      <dc:date>2014-11-17T13:53:47Z</dc:date>
    </item>
    <item>
      <title>Re: DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345422#M3475</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/timesyssupport"&gt;timesyssupport&lt;/A&gt; can you attend this case?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Nov 2014 18:56:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345422#M3475</guid>
      <dc:creator>karina_valencia</dc:creator>
      <dc:date>2014-11-18T18:56:20Z</dc:date>
    </item>
    <item>
      <title>Re: DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345423#M3476</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Stefan,&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;Sincerely, Naoum Gitnik.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Nov 2014 23:11:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345423#M3476</guid>
      <dc:creator>naoumgitnik</dc:creator>
      <dc:date>2014-11-18T23:11:23Z</dc:date>
    </item>
    <item>
      <title>Re: DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345424#M3477</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Naoum,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--&lt;/P&gt;&lt;P&gt;Stefan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Nov 2014 08:10:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345424#M3477</guid>
      <dc:creator>falstaff</dc:creator>
      <dc:date>2014-11-19T08:10:54Z</dc:date>
    </item>
    <item>
      <title>Re: DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345425#M3478</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;P&gt;Hello Stefan,&lt;/P&gt;&lt;P&gt;Got it.&lt;/P&gt;&lt;P&gt;Let's wait for a comment from &lt;A __default_attr="214905" _jive_internal="true" data-objecttype="3" href="https://community.nxp.com/people/timesyssupport" jivemacro="user"&gt;Timesys Support&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;Regards, Naoum Gitnik.&lt;/P&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Nov 2014 16:36:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345425#M3478</guid>
      <dc:creator>naoumgitnik</dc:creator>
      <dc:date>2014-11-19T16:36:38Z</dc:date>
    </item>
    <item>
      <title>Re: DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345426#M3479</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/timesyssupport"&gt;timesyssupport&lt;/A&gt; do you have an update of this case?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Nov 2014 18:35:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345426#M3479</guid>
      <dc:creator>karina_valencia</dc:creator>
      <dc:date>2014-11-20T18:35:52Z</dc:date>
    </item>
    <item>
      <title>Re: DDR3 self-refresh entry/exit sequence</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345427#M3480</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Naoum,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Just "discovered" by chance the MISC2_0 bit in the SRC module, description says:&lt;/P&gt;&lt;P&gt;DDR RESET control on Standby&lt;/P&gt;&lt;P&gt;0 &lt;SPAN style="font-size: 13.3333339691162px;"&gt;DDR memory reset is driven by DDR PHY&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;1 &lt;SPAN style="font-size: 13.3333339691162px;"&gt;will remain high (inactive)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--&lt;/P&gt;&lt;P&gt;Stefan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Nov 2014 16:45:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/DDR3-self-refresh-entry-exit-sequence/m-p/345427#M3480</guid>
      <dc:creator>falstaff</dc:creator>
      <dc:date>2014-11-21T16:45:05Z</dc:date>
    </item>
  </channel>
</rss>

