<?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>Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/112526/crash-after-powerdown-if-ram-is-not-powered</link><description>sdk: 2.5.1 
 cpu: nrf5340 
 I have a bootloader which have a big ram block for upgrade purpose (around 250kb) in bss section (I will move it in noinit, but it is not the point here). 
 I have an app, that poweroff unused ram with VMC register. 
 Sometimes</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 09 Jul 2024 06:57:30 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/112526/crash-after-powerdown-if-ram-is-not-powered" /><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492873?ContentTypeID=1</link><pubDate>Tue, 09 Jul 2024 06:57:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f0284f6f-89f7-40c2-ba11-5873a6bc3a71</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;I will stop there, because I cannot make myself understood. The code I mentioned in my first post works: the bootloader starts normally even if the ram has been turned off by the application (nothing to do with spu protection: I do not want to prevent the extinction of ram, since it is an important element for low-power). I just wanted to have it checked by the Nordic experts, and also shared.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492871?ContentTypeID=1</link><pubDate>Tue, 09 Jul 2024 06:53:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ce32a832-b355-419f-a824-0024922d6b63</guid><dc:creator>Bjarki Andreasen</dc:creator><description>&lt;p&gt;If you wish to protect&amp;nbsp;your bootloader/trusted application&amp;nbsp;from&amp;nbsp;a user application, you will want to look into the SPU (System Protection Unit)&amp;nbsp;&lt;a href="https://infocenter.nordicsemi.com/topic/ps_nrf5340/spu.html?cp=4_0_0_6_31_3#peripheral_access_control"&gt;https://infocenter.nordicsemi.com/topic/ps_nrf5340/spu.html?cp=4_0_0_6_31_3#peripheral_access_control&lt;/a&gt;&amp;nbsp;and TF-M (Trusted firmware)&amp;nbsp;&lt;a id="" href="https://trustedfirmware-m.readthedocs.io/en/latest/introduction/index.html"&gt;https://trustedfirmware-m.readthedocs.io/en/latest/introduction/index.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The SPU allows you to configure access to peripherals from the secure/non-secure domains, you can use this to disallow the application from accessing VMC all together, preventing invalid configuration of most peripherals, VMC included :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492782?ContentTypeID=1</link><pubDate>Mon, 08 Jul 2024 15:34:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fd912119-2bd4-4e83-9ac2-21de772cc8c7</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;4. At this point, before entering power off, you&amp;nbsp;configure all &lt;strong&gt;unused&lt;/strong&gt; RAM to be powered down in system ON state.&lt;/p&gt;
&lt;p&gt;5. You immediately&amp;nbsp;enter poweroff,&lt;span style="text-decoration:line-through;"&gt; if you tried to read from RAM here, the application would likely crash, and never enter&amp;nbsp;OFF&amp;nbsp;state.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;6. The system is now in the OFF state, and the VMC is configured to always power down all RAM &lt;strong&gt;unused by app&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I do not want to have separate section in ram for bootloader and app, as there are some app that will consume all the ram. It is not possible for the bootloader to reserve a part of ram.&lt;/p&gt;
&lt;p&gt;What I want here is to ensure that bootloader will not crash, even if app is doing bad thinks, like power down the ram needed by the bootloader. It must not be a need for the bootloader that the app developper is clever.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492612?ContentTypeID=1</link><pubDate>Mon, 08 Jul 2024 07:30:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:37832fa2-6690-4216-b508-b3901e56d023</guid><dc:creator>Bjarki Andreasen</dc:creator><description>&lt;p&gt;Okay, this is the complete sequence leading to successful start to crash on reset in your case:&lt;/p&gt;
&lt;p&gt;1. After device reset (reset pin or power reset), all RAM is configured through VMC to be enabled when the system is ON, and powered down when the system is OFF.&lt;/p&gt;
&lt;p&gt;2. Your bootloader starts successfully, as all RAM is powered.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;3. You jump to the application, all works as expected.&lt;/p&gt;
&lt;p&gt;4. At this point, before entering power off, you&amp;nbsp;configure all RAM to be powered down in system ON state.&lt;/p&gt;
&lt;p&gt;5. You immediately&amp;nbsp;enter poweroff, if you tried to read from RAM here, the application would likely crash, and never enter&amp;nbsp;OFF&amp;nbsp;state.&lt;/p&gt;
&lt;p&gt;6. The system is now in the OFF state, and the VMC is configured to always power down all RAM, regardless of power state.&lt;/p&gt;
&lt;p&gt;7. You trigger&amp;nbsp;wakeup&lt;/p&gt;
&lt;p&gt;8. System powers up, you bootloader&amp;nbsp;starts&lt;/p&gt;
&lt;p&gt;9. VMC has not been configured to automatically power on any RAM, including the RAM used by your bootloader for normal operation&lt;/p&gt;
&lt;p&gt;10. Bootloader reaches an instruction which requires reading from RAM&lt;/p&gt;
&lt;p&gt;11. System crashes&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;To add your solution to the sequence, this happens after step 9.&lt;/p&gt;
&lt;p&gt;9. ...&lt;/p&gt;
&lt;p&gt;10. Manually configure VMC to power all RAM&lt;/p&gt;
&lt;p&gt;11. Bootloader reaches an instruction which requires reading from RAM&lt;/p&gt;
&lt;p&gt;12. Bootloader runs as expected&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;So, to answer your original question:&lt;/p&gt;
[quote userid="74830" url="~/f/nordic-q-a/112526/crash-after-powerdown-if-ram-is-not-powered"]I found a solution with powering ram at early startup, but I would like to check with you if it is correct.[/quote]
&lt;p&gt;Wrapping early C code to manually power on RAM used by the bootloader for normal operation is not robust, nor necessary. The VMC is designed to automatically power the RAM needed for system ON, and retain any RAM required by the application as well.&lt;/p&gt;
&lt;p&gt;The solution is to configure the VMC to power RAM used by your bootloader and application automatically, and create a separate section in RAM which your bootloader/application manually powers on/off at runtime.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492605?ContentTypeID=1</link><pubDate>Mon, 08 Jul 2024 06:55:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e528d27f-b9bb-4e17-9731-73ae952fd41b</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;I can&amp;rsquo;t make myself understood.&lt;/p&gt;
&lt;p&gt;As the ram is powered down, the bootloader crash very very early. Far before init of the kernel. Inside the reset part, just when the MPS is needed.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492516?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 16:07:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8374f31e-c77e-4adf-941a-647e6549b100</guid><dc:creator>Bjarki Andreasen</dc:creator><description>&lt;p&gt;Ah, now I think I understand your setup. This is how I would solve your problem:&lt;/p&gt;
&lt;p&gt;The bootloader and application will share a &amp;quot;small&amp;quot; section of RAM, which will be configured to always follow the system state, powered when the system is ON, not powered when the system is OFF. I would make this explicit in the devicetree like this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;/ {
	chosen {
		zephyr,sram = &amp;amp;common_sram;
	};

	reserved-memory {
		common_sram: image@20000000 {
			reg = &amp;lt;0x20000000 0x4000&amp;gt;;
		};

		bank_sram: image@20004000 {
			reg = &amp;lt;0x20004000 0x3c000&amp;gt;;
		};
	};
};
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The common_sram section&amp;nbsp;is the RAM containing .bss, .no_init etc. shared by the application and bootloader. This section will never be powered down while the system is ON. The section bank_sram will be used exclusively for the RAM bank.&lt;/p&gt;
&lt;p&gt;Your bootloader will need to power this bank manually before using the memory, you can get the address and size of your memory section from the devicetree&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;uintptr_t bank_start = DT_REG_ADDR(DT_NODELABEL(bank_sram));
size_t bank_size = DT_REG_SIZE(DT_NODELABEL(bank_sram));
uintptr_t bank_end = DT_REG_ADDR(DT_NODELABEL(bank_sram)) + DT_REG_SIZE(DT_NODELABEL(bank_sram));
&lt;/pre&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Which you can then pass to&amp;nbsp;power_up_ram() and&amp;nbsp;power_down_ram() before and after using the RAM bank. From you application, simply call&amp;nbsp;power_down_unused_ram() if you don&amp;#39;t intend to power down the bank_sram RAM from the bootloader before entering the application.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492511?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 15:30:11 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3e183bba-47d1-4068-8f4a-bfd900dd4cad</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;I power down ram inside app, at startup using power_up_unused_ram in nrf\include\ram_pwrdn.h.&lt;/p&gt;
&lt;p&gt;The ram power status is then not modified anymore.&lt;/p&gt;
&lt;p&gt;The app is a sample app with very low ram usage, so a lot of ram is powered down.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The bootloader as a big ram buffer in bss section (that I will move in uninit, but it is not the point here). This buffer is before stacks that are in noinit sections. So the stacks are in positions that are powered off by app.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492509?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 15:25:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cbe9cf5f-47fd-4e1f-832b-32f444600aa3</guid><dc:creator>Bjarki Andreasen</dc:creator><description>&lt;p&gt;OK,&amp;nbsp;either your bootloader or&amp;nbsp;application is&amp;nbsp;must&amp;nbsp;configure the behavior of the VMC before entering poweroff.&lt;/p&gt;
&lt;p&gt;The VMC automatically powers on/off sections of the RAM blocks depending on the system power state. You can configure two options for each section of each RAM block:&lt;/p&gt;
&lt;p&gt;1. Should this section be powered when the system is ON.&lt;/p&gt;
&lt;p&gt;2. Should this section be retained (powered) when the system is OFF.&lt;/p&gt;
&lt;p&gt;By default, after a &amp;quot;real&amp;quot; reset (using the reset pin or power reset), all RAM blocks will be powered when the system is ON, and not powered when the system is OFF.&lt;/p&gt;
&lt;p&gt;The behavior you are describing I have only been able to recreate by configuring the VMC&amp;nbsp;to disable RAM sections in system ON which are in use by your bootloader/app, by doing the following:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;pre class="ui-code" data-mode="c_cpp"&gt;NRF_VMC-&amp;gt;RAM[0].POWERCLR = 0xFFFF;
NRF_VMC-&amp;gt;RAM[1].POWERCLR = 0xFFFF;
sys_poweroff();&lt;/pre&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;This will cause a crash when you reboot unless you manage to manually power the RAM sections again before accessing them, which seems to be what you are doing with&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;void __wrap_z_arm_reset(void)&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;How are you disabling power to the RAM blocks in power off would be my next question if the above is not accurate to your case :)&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492507?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 15:10:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bdb797f2-7e37-496f-b61a-081988e75d45</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;The reset function is the function called when the device start.&lt;/p&gt;
&lt;p&gt;Its implementation is in zephyr/arch/arm/core/aarch32/cortex_m\reset.S&lt;/p&gt;
&lt;p&gt;Its address is store in the vector table at addresse 0.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;By main stack I mean the main stack pointer registry (MSP).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492506?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 15:06:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:722925f7-b472-406e-873a-b2160af86e6a</guid><dc:creator>Bjarki Andreasen</dc:creator><description>&lt;p&gt;Could you expand on what you mean by &amp;quot;main stack of the bootloader&amp;quot; and &amp;quot;reset function of the bootloader&amp;quot;? Maybe a diagram of your memory layout could help as well, where is your bootloader and app placed in ROM, and which&amp;nbsp;RAM areas do they use?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492501?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 14:52:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c53731a6-33c8-44c8-b6ee-883b42cfef0e</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;I think I did not explained the problem correctly.&lt;/p&gt;
&lt;p&gt;At wakeup, the ram of the main stack inside the bootloader was turned off by the app because the main stack of the bootloader is in a part of ram unused for the app. When the reset function of the bootloader is called at wakeup, there is an exception immediately as the stack is used. The main method will never been executed. The purpose of my code was to turn ram on inside the bootloader before any use of ram.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492496?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 14:35:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3bec7fdb-cb3b-42e0-bce6-4694f3e6cb35</guid><dc:creator>Bjarki Andreasen</dc:creator><description>&lt;p&gt;Hi, the following example code will configure the RAM blocks to behave as you describe:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I created the following zephyr test application (modified main.c and prj.conf of the hello_world sample)&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;stdio.h&amp;gt;

#include &amp;lt;hal/nrf_gpio.h&amp;gt;
#include &amp;lt;zephyr/sys/poweroff.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;

/*
 * NOTE when running this sample, don&amp;#39;t debug it as it can&amp;#39;t enter real
 * power off while a debugger is attached. It will just be spinning forever.
 *
 * NOTE also that this is the default RAM behavior, so if you don&amp;#39;t
 * wish to retain any RAM blocks or sections of said blocks, you don&amp;#39;t
 * need to modify NRF_VMC
 *
 * Last note, this sample requires the following additional Kconfig options:
 *     CONFIG_POWEROFF=y
 *     CONFIG_GPIO=y
 */

int main(void)
{
	printf(&amp;quot;Hello World! %s\n&amp;quot;, CONFIG_BOARD_TARGET);

	/* Before doing anything which disables the debug interface, sleep
	 * to provide enough time to start a debug session / erase the device.
	 */
	k_msleep(10000);

	/* Prepare for power off
	 *
	 * The nRF5340 has two RAM blocks, we want the
	 * entire RAM block to be enabled when system powers on after reset, this
	 * is done by setting the section power bits (16 sections mapped to the lowest
	 * 16 bits of the NRF_VMC-&amp;gt;RAM registers).
	 */
	NRF_VMC-&amp;gt;RAM[0].POWERSET = UINT16_MAX;
	NRF_VMC-&amp;gt;RAM[1].POWERSET = UINT16_MAX;

	/* We want all RAM blocks to be powered down in power off mode, to do this, we
	 * clear the section retain bits (16 sections mapped to the upper 16 bits of
	 * the NRF_VMC-&amp;gt;RAM registers).
	 */
	NRF_VMC-&amp;gt;RAM[0].POWERCLR = UINT16_MAX &amp;lt;&amp;lt; 16;
	NRF_VMC-&amp;gt;RAM[1].POWERCLR = UINT16_MAX &amp;lt;&amp;lt; 16;

	/* Enable some wake up source. This is Button1 on the nRF5340DK connected to
	 * pin 0.23
	 */
	nrf_gpio_cfg(
		23,
		NRF_GPIO_PIN_DIR_INPUT,
		NRF_GPIO_PIN_INPUT_CONNECT,
		NRF_GPIO_PIN_PULLUP,
		NRF_GPIO_PIN_S0S1,
		NRF_GPIO_PIN_SENSE_LOW
	);

	/* Print last message, and wait for it to print to console before power off */
	printf(&amp;quot;Good night!\n&amp;quot;);
	k_msleep(100);

	/* When entering power off, the RAM blocks 0 and 1 will be powered down.
	 * When the system wakes up again, the RAM blocks come back automatically.
	 * After power off, press the button
	 */
	sys_poweroff();
	return 0;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Hopefully we can compare solutions to figure out why it is failing for you :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492466?ContentTypeID=1</link><pubDate>Fri, 05 Jul 2024 13:08:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0972cf60-884e-40fc-a928-0f8a2fbf687a</guid><dc:creator>Amanda Hsieh</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Not yet.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We are currently understaffed due to the summer vacation period, so delayed replies must be expected. I am sorry about any inconvenience this might cause.&lt;/p&gt;
&lt;p&gt;-Amanda H.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/492211?ContentTypeID=1</link><pubDate>Thu, 04 Jul 2024 10:19:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5124eb64-881e-43c6-8066-e21b8acd7df9</guid><dc:creator>Seb-labs</dc:creator><description>&lt;p&gt;Any news?&lt;/p&gt;
&lt;p&gt;Regards&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Crash after powerdown if ram is not powered</title><link>https://devzone.nordicsemi.com/thread/491158?ContentTypeID=1</link><pubDate>Thu, 27 Jun 2024 14:38:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:377ea21d-d5b5-4b20-8be4-5e99b72dcbae</guid><dc:creator>Amanda Hsieh</dc:creator><description>&lt;p&gt;(updated)&lt;/p&gt;
&lt;p&gt;I am waiting for the team&amp;#39;s help to confirm the solution. I will be back when I get enough information.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;----&lt;/p&gt;
&lt;p&gt;Hi,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am working on your case and will update it when the answer is ready.&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;Amanda H.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>