imx233: stop the watchdog before loading main firmware

Change-Id: I0a13444d6788a09b0fc04ed1a5115cb2e5fe6f57
diff --git a/bootloader/imx233.c b/bootloader/imx233.c
index d115389..6dc503b 100644
--- a/bootloader/imx233.c
+++ b/bootloader/imx233.c
@@ -209,6 +209,8 @@
 
     kernel_entry = (void*) loadbuffer;
     printf("Executing");
+    /* stop what was initialized to start from clean state */
+    system_prepare_fw_start();
     disable_interrupt(IRQ_FIQ_STATUS);
     commit_discard_idcache();
     kernel_entry();
diff --git a/firmware/target/arm/imx233/system-imx233.c b/firmware/target/arm/imx233/system-imx233.c
index 5298f7c..d5ed7fc 100644
--- a/firmware/target/arm/imx233/system-imx233.c
+++ b/firmware/target/arm/imx233/system-imx233.c
@@ -197,6 +197,13 @@
 #endif
 }
 
+void system_prepare_fw_start(void)
+{
+    /* keep alive to get enough time, stop watchdog */
+    imx233_keep_alive();
+    imx233_rtc_enable_watchdog(false);
+}
+
 bool imx233_us_elapsed(uint32_t ref, unsigned us_delay)
 {
     uint32_t cur = HW_DIGCTL_MICROSECONDS;
diff --git a/firmware/target/arm/imx233/system-target.h b/firmware/target/arm/imx233/system-target.h
index 6272cf7..e77b5dc 100644
--- a/firmware/target/arm/imx233/system-target.h
+++ b/firmware/target/arm/imx233/system-target.h
@@ -47,6 +47,7 @@
 #define CPUFREQ_MAX         IMX233_CPUFREQ_454_MHz
 #define CPUFREQ_SLEEP       IMX233_CPUFREQ_64_MHz
 
+void system_prepare_fw_start(void);
 void udelay(unsigned us);
 bool imx233_us_elapsed(uint32_t ref, unsigned us_delay);
 void imx233_reset_block(volatile uint32_t *block_reg);