<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VMC Volatile memory controller</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/83995/vmc-volatile-memory-controller</link><description>I would like to set memory retention for system off with memory address and size of some retained struct. System off example has this for NRF52, but I&amp;#39;m not able to find clear documentation for nRF5340. 
 Header hal/nrf_vmc.h has API for this. Function</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 01 Feb 2022 13:54:55 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/83995/vmc-volatile-memory-controller" /><item><title>RE: VMC Volatile memory controller</title><link>https://devzone.nordicsemi.com/thread/350697?ContentTypeID=1</link><pubDate>Tue, 01 Feb 2022 13:54:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:95f008eb-c5f9-4e80-8f45-8e085f5add27</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Thanks for sharing!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: VMC Volatile memory controller</title><link>https://devzone.nordicsemi.com/thread/350689?ContentTypeID=1</link><pubDate>Tue, 01 Feb 2022 13:41:00 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:28f6b906-6ac1-4ce3-8f27-41a3d8b3a1ec</guid><dc:creator>artop</dc:creator><description>&lt;p&gt;Finally&amp;nbsp;got this working. Required rather extensive study of how things are built and linked. I was hoping to be able to patch bootloader without touching SDK directories, but did not find a way. If there is nicer way to achieve the same suggestions are welcome.&lt;/p&gt;
&lt;h2&gt;Mcuboot&amp;nbsp;Modifications&lt;/h2&gt;
&lt;p&gt;At ncs/v1.7.0/bootloader/mcuboot&lt;/p&gt;
&lt;p&gt;To the end of CMakeLists.txt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zephyr_library_sources(&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ${CMAKE_CURRENT_SOURCE_DIR}/boot_keep_out.c&lt;/code&gt;&lt;br /&gt;&lt;code&gt;)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;zephyr_linker_sources(SECTIONS boot_keep_out.ld)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;New file boot_keep_out.c:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdint.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/* Reserve one memory section for retainable ram across boots */&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#define BOOT_LOADER_KEEP_OUT_REGION_SIZE 0x3000&lt;/code&gt;&lt;br /&gt;&lt;code&gt;__attribute__((section(&amp;quot;.boot_loader_keep_out&amp;quot;)))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;uint8_t boot_loader_keep_out_ram[BOOT_LOADER_KEEP_OUT_REGION_SIZE];&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;New file boot_keep_out.ld:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SECTION_PROLOGUE (boot_loader_keep_out, 0x2006A000 (NOLOAD),)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt; KEEP(*(SORT_BY_NAME(&amp;quot;.boot_loader_keep_out*&amp;quot;)))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;} &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Application Modifications&lt;/h2&gt;
&lt;p&gt;To app CMakeLists.txt:&lt;/p&gt;
&lt;div&gt;
&lt;pre&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(PM_STATIC_YML_FILE &lt;/span&gt;&lt;span&gt;&amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/pm_static.yml&amp;quot;)&lt;br /&gt;&lt;/span&gt;zephyr_linker_sources(SECTIONS src/boot_keep_out.ld)&lt;/pre&gt;
&lt;div&gt;To pm_static.yml file:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;# Reserve area from RAM to be retained by boot through modified mcuboot&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt;sram_primary&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x20000000&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;end_address&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x2006a000&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;sram_primary&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x6a000&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt;retained_sram&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x2006a000&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;end_address&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x2006e000&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;before&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;pcd_sram&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;sram_primary&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;retained_sram&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x3000&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;C file with retained data:&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;__in_section_unique(boot_loader_keep_out) struct retained_data retained;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;src/boot_keep_out.ld&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;SECTION_PROLOGUE (boot_loader_keep_out, 0x2006A000 (NOLOAD),)&lt;br /&gt;{&lt;br /&gt; KEEP(*(SORT_BY_NAME(&amp;quot;.boot_loader_keep_out*&amp;quot;)))&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;Block Calculation Hints&lt;/h2&gt;
&lt;div&gt;
&lt;pre&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SRAM_BEGIN&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;uintptr_t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;DT_REG_ADDR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DT_NODELABEL&lt;/span&gt;&lt;span&gt;(sram0))&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SRAM_END&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;SRAM_BEGIN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;uintptr_t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;DT_REG_SIZE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DT_NODELABEL&lt;/span&gt;&lt;span&gt;(sram0)))&lt;/span&gt;&lt;br /&gt;&lt;span&gt;/* Number of blocks */&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BLOCK_COUNT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;br /&gt;&lt;span&gt;/* Sections / block */&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SECTIONS_PER_BLOCK&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16&lt;/span&gt;&lt;br /&gt;&lt;span&gt;/* Size of a controllable RAM section in the small blocks */&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SECTION_SIZE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4096&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;NRF_VMC_S&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;RAM&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;block&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;POWERSET&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;1LU&lt;/span&gt;&lt;span&gt; &amp;lt;&amp;lt; (&lt;/span&gt;&lt;span&gt;VMC_RAM_POWER_S0RETENTION_Pos&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;&lt;/span&gt;volatile&lt;span&gt; &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dummy&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;NRF_VMC_S&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;RAM&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;block&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;POWERSET&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;ARG_UNUSED&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dummy&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;- Arto&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: VMC Volatile memory controller</title><link>https://devzone.nordicsemi.com/thread/349898?ContentTypeID=1</link><pubDate>Thu, 27 Jan 2022 09:24:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:25a15c17-c88a-4d0a-b872-a62ba0dca648</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;I could find these threads:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/zephyrproject-rtos/zephyr/issues/31087"&gt;https://github.com/zephyrproject-rtos/zephyr/issues/31087&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/mcu-tools/mcuboot/issues/905"&gt;https://github.com/mcu-tools/mcuboot/issues/905&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In specific check out:&amp;nbsp;&lt;a href="https://github.com/mcu-tools/mcuboot/issues/905#issuecomment-768551026"&gt;https://github.com/mcu-tools/mcuboot/issues/905#issuecomment-768551026&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: VMC Volatile memory controller</title><link>https://devzone.nordicsemi.com/thread/349694?ContentTypeID=1</link><pubDate>Wed, 26 Jan 2022 09:02:00 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2cf6974b-ced9-4642-9284-9b749ebe4268</guid><dc:creator>artop</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Thanks for pointing to correct pages,&amp;nbsp;&lt;span&gt;hal/nrf_vmc.h header seems to be incorrect then. It would also be good to update link at WMC documentation to point at more informative pages.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Actual retaining has some issue though. Even reset (kernel reboot warm) seems to fill noinit section with 0xFF. And when right retain bit is set I&amp;#39;m not able to get similar CRC check that system off example uses to pass.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Can for example debugging&amp;nbsp;affect&amp;nbsp;this?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- Arto&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: VMC Volatile memory controller</title><link>https://devzone.nordicsemi.com/thread/349558?ContentTypeID=1</link><pubDate>Tue, 25 Jan 2022 13:43:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:70741758-35dd-443a-afa1-1810cc11fd70</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Maybe you are looking for these figures:&lt;br /&gt;&lt;a href="https://infocenter.nordicsemi.com/topic/ps_nrf5340/chapters/memory/appmem.html"&gt;https://infocenter.nordicsemi.com/topic/ps_nrf5340/chapters/memory/appmem.html&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="https://infocenter.nordicsemi.com/topic/ps_nrf5340/chapters/memory.network/netmem.html"&gt;https://infocenter.nordicsemi.com/topic/ps_nrf5340/chapters/memory.network/netmem.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>