BL2: Add additional wait before starting to print if TEST_BL2

Adding an additional wait which periodically sends 0x55 char
helps the host UART to synchronise and gets time for prompt
to be available for parsing test results.

Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
Change-Id: I10b3fd98cbf21ed7e11562bde0b601268bb0a565
diff --git a/platform/ext/common/tfm_fatal_error.c b/platform/ext/common/tfm_fatal_error.c
index 8978a09..da5a603 100644
--- a/platform/ext/common/tfm_fatal_error.c
+++ b/platform/ext/common/tfm_fatal_error.c
@@ -5,14 +5,10 @@
  *
  */
 
-
-#include "fatal_error.h"
-
-#include "tfm_hal_device_header.h"
-
 #include <stdio.h>
-
-extern uint32_t stdio_is_initialized;
+#include "fatal_error.h"
+#include "tfm_hal_device_header.h"
+#include "uart_stdout.h"
 
 __WEAK bool log_error_permissions_check(uint32_t err, bool is_fatal)
 {
@@ -21,7 +17,7 @@
 
 __WEAK void log_error(char *file, uint32_t line, uint32_t err, void *sp, bool is_fatal)
 {
-    if (stdio_is_initialized) {
+    if (stdio_is_initialized()) {
         if (is_fatal) {
             printf("[ERR] Fatal error ");
         } else {
diff --git a/platform/ext/common/uart_stdout.c b/platform/ext/common/uart_stdout.c
index 186008c..cada473 100644
--- a/platform/ext/common/uart_stdout.c
+++ b/platform/ext/common/uart_stdout.c
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-#include "uart_stdout.h"
-
 #include <assert.h>
 #include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
 #include "Driver_USART.h"
 #include "target_cfg.h"
 #include "device_cfg.h"
@@ -33,23 +33,35 @@
 #define STDIO_DRIVER    TFM_DRIVER_STDIO
 #endif
 
+static bool is_initialized = false;
+
 int stdio_output_string(const unsigned char *str, uint32_t len)
 {
     int32_t ret;
 
     /* Add a busy wait before sending. */
     while (STDIO_DRIVER.GetStatus().tx_busy);
+
     ret = STDIO_DRIVER.Send(str, len);
     if (ret != ARM_DRIVER_OK) {
         return 0;
     }
+
     /* Add a busy wait after sending. */
     while (STDIO_DRIVER.GetStatus().tx_busy);
 
     return STDIO_DRIVER.GetTxCount();
 }
 
-uint32_t stdio_is_initialized = 0;
+void stdio_is_initialized_reset(void)
+{
+    is_initialized = false;
+}
+
+bool stdio_is_initialized(void)
+{
+    return is_initialized;
+}
 
 /* Redirects printf to STDIO_DRIVER in case of ARMCLANG*/
 #if defined(__ARMCC_VERSION)
@@ -105,7 +117,7 @@
 
     (void)STDIO_DRIVER.Control(ARM_USART_CONTROL_TX, 1);
 
-    stdio_is_initialized = true;
+    is_initialized = true;
 }
 
 void stdio_uninit(void)
@@ -118,5 +130,5 @@
     ASSERT_HIGH(ret);
     (void)ret;
 
-    stdio_is_initialized = false;
+    is_initialized = false;
 }
diff --git a/platform/ext/common/uart_stdout.h b/platform/ext/common/uart_stdout.h
index a725ee4..f0fed4b 100644
--- a/platform/ext/common/uart_stdout.h
+++ b/platform/ext/common/uart_stdout.h
@@ -18,6 +18,7 @@
 #define __UART_STDOUT_H__
 
 #include <stdint.h>
+#include <stdbool.h>
 
 /**
  * \brief Initializes the STDIO.
@@ -35,4 +36,14 @@
  */
 int stdio_output_string(const unsigned char *str, uint32_t len);
 
+/**
+ * \brief Returns the initialization status of the stdio
+ */
+bool stdio_is_initialized(void);
+
+/**
+ * \brief Reset the initialization status of the stdio to false
+ */
+void stdio_is_initialized_reset(void);
+
 #endif /* __UART_STDOUT_H__ */
diff --git a/platform/ext/target/arm/rse/common/device/source/startup_rse_bl1_1.c b/platform/ext/target/arm/rse/common/device/source/startup_rse_bl1_1.c
index d743ecd..162aa5b 100644
--- a/platform/ext/target/arm/rse/common/device/source/startup_rse_bl1_1.c
+++ b/platform/ext/target/arm/rse/common/device/source/startup_rse_bl1_1.c
@@ -22,11 +22,13 @@
  */
 
 #include "tfm_hal_device_header.h"
-
 #include "device_definition.h"
 #include "region_defs.h"
 #include "rse_kmu_slot_ids.h"
 #include "trng.h"
+#if defined(RSE_ENABLE_TRAM)
+#include "uart_stdout.h"
+#endif
 
 /*----------------------------------------------------------------------------
   External References
@@ -196,8 +198,6 @@
 #endif
 
 #ifdef RSE_ENABLE_TRAM
-extern uint32_t stdio_is_initialized;
-
 /*
  * This can't be inlined, since the stack push to get space for the local
  * variables is done at the start of the function, and the function which calls
@@ -238,7 +238,7 @@
     };
     struct lcm_dev_t lcm_dev_s = {&lcm_dev_cfg_s};
 
-    stdio_is_initialized = 0;
+    stdio_is_initialized_reset();
 
     lcm_get_sp_enabled(&lcm_dev_s, &sp_enabled);
     lcm_get_lcs(&lcm_dev_s, &lcs);
@@ -271,7 +271,7 @@
         }
     }
 
-    stdio_is_initialized = 0;
+    stdio_is_initialized_reset();
 };
 #endif /* RSE_ENABLE_TRAM */