boot: nuttx: main: add suport for board late
initialization.
When using nuttx MCUBoot app as a main entry point in
place of nsh_main it is necesary to perform board-specific
driver initialization through boardctl().
Signed-off-by: Andrés Sánchez Pascual <tito97_sp@hotmail.com>
boot: nuttx: main: fix minor errors according
Signed-off-by: Andrés Sánchez Pascual <tito97_sp@hotmail.com>
diff --git a/boot/nuttx/main.c b/boot/nuttx/main.c
index 7c19c86..8973053 100644
--- a/boot/nuttx/main.c
+++ b/boot/nuttx/main.c
@@ -33,6 +33,27 @@
#include "flash_map_backend/flash_map_backend.h"
/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Should we perform board-specific driver initialization? There are two
+ * ways that board initialization can occur: 1) automatically via
+ * board_late_initialize() during bootupif CONFIG_BOARD_LATE_INITIALIZE
+ * or 2).
+ * via a call to boardctl() if the interface is enabled
+ * (CONFIG_BOARDCTL=y).
+ * If this task is running as an NSH built-in application, then that
+ * initialization has probably already been performed otherwise we do it
+ * here.
+ */
+
+#undef NEED_BOARDINIT
+
+#if defined(CONFIG_BOARDCTL) && !defined(CONFIG_NSH_ARCHINIT)
+# define NEED_BOARDINIT 1
+#endif
+
+/****************************************************************************
* Private Functions
****************************************************************************/
@@ -79,6 +100,18 @@
struct boot_rsp rsp;
fih_int fih_rc = FIH_FAILURE;
+#ifdef NEED_BOARDINIT
+ /* Perform architecture-specific initialization (if configured) */
+
+ boardctl(BOARDIOC_INIT, 0);
+
+#ifdef CONFIG_BOARDCTL_FINALINIT
+ /* Perform architecture-specific final-initialization (if configured) */
+
+ boardctl(BOARDIOC_FINALINIT, 0);
+#endif
+#endif
+
syslog(LOG_INFO, "*** Booting MCUboot build %s ***\n", CONFIG_MCUBOOT_VERSION);
FIH_CALL(boot_go, fih_rc, &rsp);