Platform: Add BL2 platform-specific hw initialization

Adding boot_platform_init() function.

Contrarily to SystemInit() intended for a high priority hw
initialization (for example clock and power subsystems), and
called on a very early boot stage from startup code, this
function is called from C code, hence variables and other drivers
data are protected from being cleared up by the C library init.

This function can be used for initializing platform-specific hw
resources (e.g. IPC, UART) thus freeing up application main()
function from the platform details.

Implemented as a "weak" function, it can be overwritten by a platform
specific implementation.

Signed-off-by: Andrei Narkevitch <ainh@cypress.com>
Change-Id: Id48c1443862fd52a4c11ac5071bbba8352c718b7
diff --git a/platform/ext/common/boot_hal.c b/platform/ext/common/boot_hal.c
new file mode 100644
index 0000000..16b0aa7
--- /dev/null
+++ b/platform/ext/common/boot_hal.c
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include "target_cfg.h"
+#include "cmsis.h"
+#include "Driver_Flash.h"
+#include "flash_layout.h"
+
+/* Flash device name must be specified by target */
+extern ARM_DRIVER_FLASH FLASH_DEV_NAME;
+
+/* bootloader platform-specific hw initialization */
+__WEAK int32_t boot_platform_init(void)
+{
+    int32_t result;
+
+    result = FLASH_DEV_NAME.Initialize(NULL);
+    if (result == ARM_DRIVER_OK) {
+        return 0;
+    }
+
+    return 1;
+}