<?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>topic Re: Strange results in QCVS generated code for DDR init in Layerscape</title>
    <link>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2320741#M16503</link>
    <description>&lt;P&gt;Thank you for the answer. The situation is clear to me now.Hope the issue will be fixed in future releases of QCVS.&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;</description>
    <pubDate>Fri, 20 Feb 2026 15:13:18 GMT</pubDate>
    <dc:creator>altu</dc:creator>
    <dc:date>2026-02-20T15:13:18Z</dc:date>
    <item>
      <title>Strange results in QCVS generated code for DDR init</title>
      <link>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2317819#M16469</link>
      <description>&lt;P&gt;Good day!&lt;/P&gt;&lt;P&gt;I'm performing the build of ATF bootloader from scratch, including DDR calibration on LS1046 ARDB board. The RCW is taken from NXP github -&amp;nbsp;rcw_1800_sdboot.rcw,&amp;nbsp;QCVS tool - version 4.27.00&lt;/P&gt;&lt;P&gt;The calibration on this RCW is successfully passed, and I receive code for DDR init. The values are quite similar to the reference ls1046ardb code from ATF git repo, execept&amp;nbsp;NXP_DDRCLK_FREQ:&lt;/P&gt;&lt;P&gt;In NXP ATF git repo -&amp;nbsp;&lt;STRONG&gt;##define NXP_DDRCLK_FREQ 10000000&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In code from QCVS -&amp;nbsp;&lt;STRONG&gt;##define NXP_DDRCLK_FREQ&amp;nbsp;105000000&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;With reference &lt;STRONG&gt;NXP_DDRCLK_FREQ&amp;nbsp;&lt;/STRONG&gt;the board successfully boots.&lt;/P&gt;&lt;P&gt;With QCVS-generated&amp;nbsp;&lt;STRONG&gt;NXP_DDRCLK_FREQ&lt;/STRONG&gt;&amp;nbsp;the boot is failed. It seems to me that QCVS is confusing the meaning of&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;NXP_DDRCLK_FREQ.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In CVS world - &lt;STRONG&gt;NXP_DDRCLK_FREQ&lt;/STRONG&gt;&amp;nbsp;- DDR bus clock(base memory clock after multipliers).&lt;/P&gt;&lt;P&gt;In real world -&amp;nbsp;&lt;STRONG&gt;NXP_DDRCLK_FREQ&lt;/STRONG&gt;&amp;nbsp;- base Memory clock.&lt;/P&gt;&lt;P&gt;Please explain the situation.&lt;/P&gt;</description>
      <pubDate>Fri, 13 Feb 2026 11:33:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2317819#M16469</guid>
      <dc:creator>altu</dc:creator>
      <dc:date>2026-02-13T11:33:27Z</dc:date>
    </item>
    <item>
      <title>Re: Strange results in QCVS generated code for DDR init</title>
      <link>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2318602#M16479</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;DIV class="Y3BBE" data-sfc-cp="" data-hveid="CAEQAA" data-processed="true"&gt;
&lt;DIV style="display: contents;" data-subtree="aimfl,mfl" data-processed="true"&gt;The failure when using the QCVS-generated&lt;/DIV&gt;
&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ&lt;/CODE&gt; (
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_0" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
) on the LS1046ARDB, while
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_1" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
works, is likely due to a mismatch between the QCVS-calculated data rate/timing parameters and the actual board's reference clock (
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_2" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
) defined in the RCW. The QCVS tool, for DDR4, often generates &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ&lt;/CODE&gt; as the base memory clock (
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_3" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
), which must match the RCW and PLL settings.&lt;/DIV&gt;
&lt;DIV class="Y3BBE" data-sfc-cp="" data-hveid="CAIQAA" data-processed="true"&gt;Analysis of the Situation:&lt;/DIV&gt;
&lt;UL class="KsbFXc U6u95" data-processed="true"&gt;
&lt;LI data-hveid="CAMQAA" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;RCW &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;rcw_1800_sdboot.rcw&lt;/CODE&gt;: This file dictates the system clock settings, typically setting the DDR reference clock to &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_4" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-hveid="CAMQAg" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;Reference ATF Value (&lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_5" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;LI-EMOJI id="lia_disappointed-face" title=":disappointed_face:"&gt;&lt;/LI-EMOJI&gt; Corresponds to a standard &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_6" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt; input clock, allowing standard &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_7" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt; or &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_8" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt; DDR timing calculations to match the hardware PLL.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-hveid="CAMQBw" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;QCVS Value (&lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_9" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;LI-EMOJI id="lia_disappointed-face" title=":disappointed_face:"&gt;&lt;/LI-EMOJI&gt; If QCVS calculated a slightly higher clock (&lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_10" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;), it assumes the PLLs are configured to generate that frequency. If the RCW still provides &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_11" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;, the DDR controller is improperly clocked, causing training failures (e.g., &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_12" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt; or timeout).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-hveid="CAMQDA" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;Resolution: Change the &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ&lt;/CODE&gt; in &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;ddr_init.c&lt;/CODE&gt; back to &lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_13" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt; (&lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_14" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;) to match the reference RCW. Ensure all other timing values generated by QCVS are updated based on this correct input clock.&lt;/SPAN&gt;&lt;SPAN class="uJ19be notranslate" data-wiz-uids="a7kbWd_1g,a7kbWd_1h" data-processed="true"&gt;&lt;SPAN class="vKEkVd" data-animation-atomic="" data-wiz-attrbind="class=a7kbWd_1f/TKHnVd" data-processed="true"&gt;&lt;SPAN aria-hidden="true" data-processed="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;DIV class="Y3BBE" data-sfc-cp="" data-hveid="CAQQAA" data-processed="true"&gt;Actionable Steps:&lt;/DIV&gt;
&lt;OL class="IaGLZe VimKh Lem6n" data-processed="true"&gt;
&lt;LI data-hveid="CAYQAA" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;Verify the &lt;/SPAN&gt;&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;sys_pll&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="N9Q8Lc"&gt; settings in the &lt;/SPAN&gt;&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;rcw_1800_sdboot.rcw&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="N9Q8Lc"&gt; file to confirm the DDR clock source is &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_15" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-hveid="CAYQAg" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;Update the ATF &lt;/SPAN&gt;&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;plat/nxp/soc-ls1046a/ls1046ardb/ddr_init.c&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="N9Q8Lc"&gt; to use &lt;/SPAN&gt;&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;100000000&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="N9Q8Lc"&gt; for &lt;/SPAN&gt;&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;NXP_DDRCLK_FREQ&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="N9Q8Lc"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-hveid="CAYQAw" data-processed="true"&gt;&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;Ensure the generated ddr_init structure in &lt;/SPAN&gt;&lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;ddr_init.c&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="N9Q8Lc"&gt; is fully updated with the rest of the QCVS output (timings, controllers) while keeping the frequency at &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV style="position: relative; direction: ltr; display: inline-block;" data-xpm-copy-root="" data-processed="true"&gt;
&lt;DIV id="tinyMceEditorBio_TICFSL_16" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;SPAN class="T286Pc" data-sfc-cp="" data-processed="true"&gt;&lt;SPAN class="N9Q8Lc"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="uJ19be notranslate" data-wiz-uids="a7kbWd_2y,a7kbWd_2z" data-processed="true"&gt;&lt;SPAN class="vKEkVd" data-animation-atomic="" data-wiz-attrbind="class=a7kbWd_2x/TKHnVd" data-processed="true"&gt;&lt;SPAN aria-hidden="true" data-processed="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN class="uJ19be notranslate" data-wiz-uids="a7kbWd_2y,a7kbWd_2z" data-processed="true"&gt;&lt;SPAN class="vKEkVd" data-animation-atomic="" data-wiz-attrbind="class=a7kbWd_2x/TKHnVd" data-processed="true"&gt;&lt;SPAN aria-hidden="true" data-processed="true"&gt;Regards&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 16 Feb 2026 14:05:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2318602#M16479</guid>
      <dc:creator>Bio_TICFSL</dc:creator>
      <dc:date>2026-02-16T14:05:30Z</dc:date>
    </item>
    <item>
      <title>Re: Strange results in QCVS generated code for DDR init</title>
      <link>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2319079#M16486</link>
      <description>&lt;P&gt;So does it mean that QCVS generates the wrong code?&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="clk1.png" style="width: 771px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377056i06655342A191AB5F/image-size/large?v=v2&amp;amp;px=999" role="button" title="clk1.png" alt="clk1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Here we can see a memory clock - the base clock for DDR memory system.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="clk2.png" style="width: 791px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377057i225E3DB53920ED5F/image-size/large?v=v2&amp;amp;px=999" role="button" title="clk2.png" alt="clk2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Here we can see a &lt;STRONG&gt;DDR bus clock / DDR data rate&lt;/STRONG&gt; , which is produces by&lt;STRONG&gt; DDRCLK x multiplier (21)&lt;/STRONG&gt;. This multiplier is set by RCW - the parameter is called&lt;STRONG&gt; MEM_PLL_RAT&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;1050.000.000 Hz (1050 MHz) - is &lt;STRONG&gt;DDR bus clock&lt;/STRONG&gt; (DDR data rate / 2 - 2100 / 2).&lt;/P&gt;&lt;P&gt;In all ATF sources,which are definetely OK(succsessful boot) - &lt;STRONG&gt;NXP_DDRCLK_FREQ&lt;/STRONG&gt; = 100000000 (&lt;STRONG&gt;100 Mhz&lt;/STRONG&gt;), which clearly correspond with the first picture - on which we can see Memory clock(&lt;STRONG&gt;DDRCLK&lt;/STRONG&gt;) = 100000000(&lt;STRONG&gt;100 Mhz&lt;/STRONG&gt;).&lt;/P&gt;&lt;P&gt;But QCVS gives a completely different value - &lt;STRONG&gt;NXP_DDRCLK_FREQ&lt;/STRONG&gt; = 1050000000(&lt;STRONG&gt;1050 MHz&lt;/STRONG&gt;). This value seems to be wrong, because ATF simply fails to boot with it. So please confirm - are my conclusions correct or not?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 17 Feb 2026 14:51:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2319079#M16486</guid>
      <dc:creator>altu</dc:creator>
      <dc:date>2026-02-17T14:51:54Z</dc:date>
    </item>
    <item>
      <title>Re: Strange results in QCVS generated code for DDR init</title>
      <link>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2320709#M16502</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;DIV class="Y3BBE" data-processed="true" data-hveid="CAEQAA" data-sfc-cp=""&gt;
&lt;DIV style="display: contents;" data-processed="true" data-subtree="aimfl,mfl"&gt;Based on your description and the behavior of the ATF (Arm Trusted Firmware) failing to boot,&lt;/DIV&gt;
your conclusions are correct. The QCVS tool has likely generated an incorrect value for &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ&lt;/CODE&gt;.&lt;/DIV&gt;
&lt;DIV class="Y3BBE" data-processed="true" data-hveid="CAIQAA" data-sfc-cp=""&gt;Here is the breakdown of the situation based on standard NXP Layerscape/QorIQ DDR configuration practices:&lt;/DIV&gt;
&lt;DIV class="Fsg96" data-processed="true" data-sfc-cp=""&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="otQkpb" role="heading" data-processed="true" data-sfc-cp="" data-animation-nesting="" aria-level="3"&gt;Analysis of the Conflict&lt;/DIV&gt;
&lt;UL class="KsbFXc U6u95" data-processed="true"&gt;
&lt;LI data-processed="true" data-hveid="CAQQAA"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;Memory Clock (DDRCLK): As shown in your &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;clk1.png&lt;/CODE&gt;, the physical oscillator providing the base clock to the DDR controller is 100 MHz (100,000,000 Hz).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-processed="true" data-hveid="CAQQAQ"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;DDR Data Rate / Bus Clock: As shown in &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;clk2.png&lt;/CODE&gt;, the DDR bus clock (or data rate halved) is 1050 MHz (1050.000.000 Hz).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-processed="true" data-hveid="CAQQAg"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;ATF Behavior: The successful boot configuration uses &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ = 100000000&lt;/CODE&gt; (100 MHz).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-processed="true" data-hveid="CAQQAw"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;QCVS Behavior: QCVS is setting &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ = 1050000000&lt;/CODE&gt; (1050 MHz).&lt;/SPAN&gt;&lt;SPAN class="uJ19be notranslate" data-processed="true" data-wiz-uids="qCaFue_18,qCaFue_19"&gt;&lt;SPAN class="vKEkVd" data-processed="true" data-wiz-attrbind="class=qCaFue_17/TKHnVd" data-animation-atomic=""&gt;&lt;SPAN data-processed="true" aria-hidden="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;DIV class="Fsg96" data-processed="true" data-sfc-cp=""&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="otQkpb" role="heading" data-processed="true" data-sfc-cp="" data-animation-nesting="" aria-level="3"&gt;Why QCVS is Wrong&lt;/DIV&gt;
&lt;DIV class="Y3BBE" data-processed="true" data-hveid="CAYQAA" data-sfc-cp=""&gt;The &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ&lt;/CODE&gt; parameter in the RCW (Reset Configuration Word) or DDR initialization code refers to the input frequency of the oscillator (the 100 MHz clock), not the resulting memory bus speed (1050 MHz).&lt;SPAN class="uJ19be notranslate" data-processed="true" data-wiz-uids="qCaFue_1j,qCaFue_1k"&gt;&lt;SPAN class="vKEkVd" data-processed="true" data-wiz-attrbind="class=qCaFue_1i/TKHnVd" data-animation-atomic=""&gt;&lt;SPAN data-processed="true" aria-hidden="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="Y3BBE" data-processed="true" data-hveid="CAcQAA" data-sfc-cp=""&gt;By setting &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;NXP_DDRCLK_FREQ&lt;/CODE&gt; to 1050 MHz, the DDR controller assumes the input clock is much faster than it actually is. Consequently, it calculates wrong internal PLL multipliers and timing registers, leading to a failed memory initialization (DDR training failure), which causes the ATF to halt.&lt;SPAN class="uJ19be notranslate" data-processed="true" data-wiz-uids="qCaFue_1o,qCaFue_1p"&gt;&lt;SPAN class="vKEkVd" data-processed="true" data-wiz-attrbind="class=qCaFue_1n/TKHnVd" data-animation-atomic=""&gt;&lt;SPAN data-processed="true" aria-hidden="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="Fsg96" data-processed="true" data-sfc-cp=""&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="otQkpb" role="heading" data-processed="true" data-sfc-cp="" data-animation-nesting="" aria-level="3"&gt;Recommendations&lt;/DIV&gt;
&lt;OL class="IaGLZe VimKh" data-processed="true"&gt;
&lt;LI data-processed="true" data-hveid="CAkQAA"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;Correct the QCVS Parameter: In the QCVS DDR configuration wizard, under the "DDR Properties" or "Clock" section, ensure that the input clock frequency is explicitly set to 100 MHz (100,000,000 Hz), even if the target data rate is 2100 MT/s (1050 MHz).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-processed="true" data-hveid="CAkQAQ"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;Verify &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;MEM_PLL_RAT&lt;/CODE&gt;: Ensure that the MEM_PLL_RAT in the RCW is set to a value that multiplies your 100 MHz input to reach your target bus clock (e.g., if input is 100MHz, &lt;CODE class="o8j0Mc" dir="ltr" data-processed="true"&gt;MEM_PLL_RAT&lt;/CODE&gt; should be around 21 to get 2100 MT/s or 1050MHz bus clock).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-processed="true" data-hveid="CAkQAg"&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;Use "Import from Target": If you have a working setup, you can import the existing DDR registers from U-Boot into QCVS to ensure the correct values are used in future generated code&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN class="T286Pc" data-processed="true" data-sfc-cp=""&gt;regards&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Feb 2026 14:28:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2320709#M16502</guid>
      <dc:creator>Bio_TICFSL</dc:creator>
      <dc:date>2026-02-20T14:28:03Z</dc:date>
    </item>
    <item>
      <title>Re: Strange results in QCVS generated code for DDR init</title>
      <link>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2320741#M16503</link>
      <description>&lt;P&gt;Thank you for the answer. The situation is clear to me now.Hope the issue will be fixed in future releases of QCVS.&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;</description>
      <pubDate>Fri, 20 Feb 2026 15:13:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Strange-results-in-QCVS-generated-code-for-DDR-init/m-p/2320741#M16503</guid>
      <dc:creator>altu</dc:creator>
      <dc:date>2026-02-20T15:13:18Z</dc:date>
    </item>
  </channel>
</rss>

