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 */