This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 24c0e8bc75115344d075dd400c8f82a4ccccc769
Author: Gerson Fernando Budke <[email protected]>
AuthorDate: Sat Dec 4 11:51:51 2021 -0300

    boards/arm/samv7/samv71-xult: Add MCUboot support
    
    Refactor to use common sam_progmem implementation and enable MCUboot
    support.
    
    Signed-off-by: Gerson Fernando Budke <[email protected]>
---
 boards/arm/samv7/samv71-xult/README.txt            | 80 ++++++++++++++++++++++
 .../samv71-xult/configs/mcuboot-loader/defconfig   | 62 +++++++++++++++++
 .../samv71-xult/configs/mcuboot-nsh/defconfig      | 63 +++++++++++++++++
 boards/arm/samv7/samv71-xult/src/sam_bringup.c     | 39 ++---------
 4 files changed, 210 insertions(+), 34 deletions(-)

diff --git a/boards/arm/samv7/samv71-xult/README.txt 
b/boards/arm/samv7/samv71-xult/README.txt
index d56cee6..891c46e 100644
--- a/boards/arm/samv7/samv71-xult/README.txt
+++ b/boards/arm/samv7/samv71-xult/README.txt
@@ -2572,3 +2572,83 @@ Configuration sub-directories
          probably means some kind of memory corruption.
 
        2017-01-30: knsh configuration does not yet run correctly.
+
+  mcuboot-loader:
+    This configuration exercises the port of MCUboot loader to NuttX.
+
+    In this configuration both primary, secondary and scratch partitions are
+    mapped into the internal flash.
+    Relevant configuration settings:
+
+      CONFIG_BOARD_LATE_INITIALIZE=y
+
+      CONFIG_BOOT_MCUBOOT=y
+      CONFIG_MCUBOOT_BOOTLOADER=y
+
+      CONFIG_SAMV7_FORMAT_MCUBOOT=y
+      CONFIG_USER_ENTRYPOINT="mcuboot_loader_main"
+
+      Flash bootloader using embedded debugger:
+      openocd -f interface/cmsis-dap.cfg \
+              -c 'transport select swd' \
+             -c 'set CHIPNAME atsamv71q21' \
+             -f target/atsamv.cfg \
+             -c 'reset_config srst_only' \
+             -c init -c targets \
+             -c 'reset halt' \
+             -c 'program nuttx.bin 0x400000' \
+             -c 'reset halt' \
+             -c 'atsamv gpnvm set 1' \
+             -c 'reset run' -c shutdown
+
+  mcuboot-nsh:
+    This configuration exercises the MCUboot compatible application slot
+    example. The application is NuttX nsh with some special commands.
+
+    Generate signed binaries for MCUboot compatible application:
+
+      ./apps/boot/mcuboot/mcuboot/scripts/imgtool.py sign \
+        --key apps/boot/mcuboot/mcuboot/root-rsa-2048.pem --align 8 \
+        --version 1.0.0 --header-size 0x200 --pad-header --slot-size 0xe0000 \
+        nuttx/nuttx.bin mcuboot_nuttx.app.nsh.confirmed-v1.bin
+
+      ./apps/boot/mcuboot/mcuboot/scripts/imgtool.py sign \
+        --key apps/boot/mcuboot/mcuboot/root-rsa-2048.pem --align 8 \
+        --version 2.0.0 --header-size 0x200 --pad-header --slot-size 0xe0000 \
+        nuttx/nuttx.bin mcuboot_nuttx.app.nsh.confirmed-v2.bin
+
+      Flash application version 1.0.0 at MCUboot Slot-0:
+
+      openocd -f interface/cmsis-dap.cfg \
+              -c 'transport select swd' \
+             -c 'set CHIPNAME atsamv71q21' \
+             -f target/atsamv.cfg \
+             -c 'reset_config srst_only' \
+             -c init -c targets \
+             -c 'reset halt' \
+             -c 'program mcuboot_nuttx.app.nsh.confirmed-v1.bin 0x420000' \
+             -c 'reset halt' \
+             -c 'atsamv gpnvm set 1' \
+             -c 'reset run' -c shutdown
+
+      Flash version 2.0.0 at MCUboot Slot-1:
+
+      openocd -f interface/cmsis-dap.cfg \
+              -c 'transport select swd' \
+             -c 'set CHIPNAME atsamv71q21' \
+             -f target/atsamv.cfg \
+             -c 'reset_config srst_only' \
+             -c init -c targets \
+             -c 'reset halt' \
+             -c 'program mcuboot_nuttx.app.nsh.confirmed-v2.bin 0x500000' \
+             -c 'reset halt' \
+             -c 'atsamv gpnvm set 1' \
+             -c 'reset run' -c shutdown
+
+    Relevant configuration settings:
+
+      CONFIG_BOOT_MCUBOOT=y
+      CONFIG_MCUBOOT_SLOT_CONFIRM_EXAMPLE=y
+
+      CONFIG_SAMV7_FORMAT_MCUBOOT=y
+      CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/samv7/samv71-xult/configs/mcuboot-loader/defconfig 
b/boards/arm/samv7/samv71-xult/configs/mcuboot-loader/defconfig
new file mode 100644
index 0000000..a668ad8
--- /dev/null
+++ b/boards/arm/samv7/samv71-xult/configs/mcuboot-loader/defconfig
@@ -0,0 +1,62 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed 
.config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that 
includes your
+# modifications.
+#
+# CONFIG_SAMV7_UART0 is not set
+# CONFIG_SAMV7_UART2 is not set
+# CONFIG_SAMV7_UART4 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="samv71-xult"
+CONFIG_ARCH_BOARD_SAMV71_XULT=y
+CONFIG_ARCH_BUTTONS=y
+CONFIG_ARCH_CHIP="samv7"
+CONFIG_ARCH_CHIP_SAMV71=y
+CONFIG_ARCH_CHIP_SAMV71Q21=y
+CONFIG_ARCH_CHIP_SAMV71Q=y
+CONFIG_ARCH_CHIP_SAMV7=y
+CONFIG_ARCH_CHIP_SAMV7_MEM_FLASH=0x200000
+CONFIG_ARCH_CHIP_SAMV7_MEM_RAM=0x60000
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_IRQBUTTONS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_LAZYFPU=y
+CONFIG_BOARDCTL_RESET=y
+CONFIG_BOARD_LATE_INITIALIZE=y
+CONFIG_BOARD_LOOPSPERMSEC=51262
+CONFIG_BOOT_MCUBOOT=y
+CONFIG_BUILTIN=y
+CONFIG_FS_PROCFS=y
+CONFIG_MCUBOOT_BOOTLOADER=y
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAM_SIZE=393216
+CONFIG_RAM_START=0x20400000
+CONFIG_RAW_BINARY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SAMV7_FORMAT_MCUBOOT=y
+CONFIG_SAMV7_GPIOA_IRQ=y
+CONFIG_SAMV7_GPIOB_IRQ=y
+CONFIG_SAMV7_GPIOD_IRQ=y
+CONFIG_SAMV7_GPIO_IRQ=y
+CONFIG_SAMV7_SYSTEMRESET=y
+CONFIG_SAMV7_USART1=y
+CONFIG_SAMV7_XDMAC=y
+CONFIG_SCHED_HPWORK=y
+CONFIG_SCHED_WAITPID=y
+CONFIG_SDCLONE_DISABLE=y
+CONFIG_START_DAY=10
+CONFIG_START_MONTH=3
+CONFIG_START_YEAR=2014
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_RAMTEST=y
+CONFIG_USART1_SERIAL_CONSOLE=y
+CONFIG_USER_ENTRYPOINT="mcuboot_loader_main"
diff --git a/boards/arm/samv7/samv71-xult/configs/mcuboot-nsh/defconfig 
b/boards/arm/samv7/samv71-xult/configs/mcuboot-nsh/defconfig
new file mode 100644
index 0000000..eff9b0d
--- /dev/null
+++ b/boards/arm/samv7/samv71-xult/configs/mcuboot-nsh/defconfig
@@ -0,0 +1,63 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed 
.config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that 
includes your
+# modifications.
+#
+# CONFIG_SAMV7_UART0 is not set
+# CONFIG_SAMV7_UART2 is not set
+# CONFIG_SAMV7_UART4 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="samv71-xult"
+CONFIG_ARCH_BOARD_SAMV71_XULT=y
+CONFIG_ARCH_BUTTONS=y
+CONFIG_ARCH_CHIP="samv7"
+CONFIG_ARCH_CHIP_SAMV71=y
+CONFIG_ARCH_CHIP_SAMV71Q21=y
+CONFIG_ARCH_CHIP_SAMV71Q=y
+CONFIG_ARCH_CHIP_SAMV7=y
+CONFIG_ARCH_CHIP_SAMV7_MEM_FLASH=0x200000
+CONFIG_ARCH_CHIP_SAMV7_MEM_RAM=0x60000
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_IRQBUTTONS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_LAZYFPU=y
+CONFIG_BOARDCTL_RESET=y
+CONFIG_BOARD_LATE_INITIALIZE=y
+CONFIG_BOARD_LOOPSPERMSEC=51262
+CONFIG_BOOT_MCUBOOT=y
+CONFIG_BUILTIN=y
+CONFIG_FS_PROCFS=y
+CONFIG_MCUBOOT_SLOT_CONFIRM_EXAMPLE=y
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_PTABLE_PARTITION=y
+CONFIG_RAM_SIZE=393216
+CONFIG_RAM_START=0x20400000
+CONFIG_RAW_BINARY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SAMV7_FORMAT_MCUBOOT=y
+CONFIG_SAMV7_GPIOA_IRQ=y
+CONFIG_SAMV7_GPIOB_IRQ=y
+CONFIG_SAMV7_GPIOD_IRQ=y
+CONFIG_SAMV7_GPIO_IRQ=y
+CONFIG_SAMV7_SYSTEMRESET=y
+CONFIG_SAMV7_USART1=y
+CONFIG_SAMV7_XDMAC=y
+CONFIG_SCHED_HPWORK=y
+CONFIG_SCHED_WAITPID=y
+CONFIG_SDCLONE_DISABLE=y
+CONFIG_START_DAY=10
+CONFIG_START_MONTH=3
+CONFIG_START_YEAR=2014
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_RAMTEST=y
+CONFIG_USART1_SERIAL_CONSOLE=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/samv7/samv71-xult/src/sam_bringup.c 
b/boards/arm/samv7/samv71-xult/src/sam_bringup.c
index c59a7f3..d922e7c 100644
--- a/boards/arm/samv7/samv71-xult/src/sam_bringup.c
+++ b/boards/arm/samv7/samv71-xult/src/sam_bringup.c
@@ -62,6 +62,7 @@
 
 #ifdef HAVE_PROGMEM_CHARDEV
 #  include "sam_progmem.h"
+#  include "sam_progmem_common.h"
 #endif
 
 #if defined(HAVE_RTC_DSXXXX) || defined(HAVE_RTC_PCF85263)
@@ -165,13 +166,13 @@ int sam_bringup(void)
 #ifdef HAVE_S25FL1
   FAR struct qspi_dev_s *qspi;
 #endif
-#if defined(HAVE_S25FL1) || defined(HAVE_PROGMEM_CHARDEV)
+#if defined(HAVE_S25FL1)
   FAR struct mtd_dev_s *mtd;
 #endif
 #if defined(HAVE_RTC_DSXXXX) || defined(HAVE_RTC_PCF85263)
   FAR struct i2c_master_s *i2c;
 #endif
-#if defined(HAVE_S25FL1_CHARDEV) || defined(HAVE_PROGMEM_CHARDEV)
+#if defined(HAVE_S25FL1_CHARDEV)
 #if defined(CONFIG_BCH)
   char blockdev[18];
   char chardev[12];
@@ -440,42 +441,12 @@ int sam_bringup(void)
 #ifdef HAVE_PROGMEM_CHARDEV
   /* Initialize the SAMV71 FLASH programming memory library */
 
-  sam_progmem_initialize();
-
-  /* Create an instance of the SAMV71 FLASH program memory device driver */
-
-  mtd = progmem_initialize();
-  if (!mtd)
-    {
-      syslog(LOG_ERR, "ERROR: progmem_initialize failed\n");
-    }
-
-  /* Use the FTL layer to wrap the MTD driver as a block driver */
-
-  ret = ftl_initialize(PROGMEM_MTD_MINOR, mtd);
-  if (ret < 0)
-    {
-      syslog(LOG_ERR, "ERROR: Failed to initialize the FTL layer: %d\n",
-             ret);
-      return ret;
-    }
-
-#if defined(CONFIG_BCH)
-  /* Use the minor number to create device paths */
-
-  snprintf(blockdev, 18, "/dev/mtdblock%d", PROGMEM_MTD_MINOR);
-  snprintf(chardev, 12, "/dev/mtd%d", PROGMEM_MTD_MINOR);
-
-  /* Now create a character device on the block device */
-
-  ret = bchdev_register(blockdev, chardev, false);
+  ret = sam_progmem_common_initialize();
   if (ret < 0)
     {
-      syslog(LOG_ERR, "ERROR: bchdev_register %s failed: %d\n",
-             chardev, ret);
+      syslog(LOG_ERR, "ERROR: Failed to initialize progmem: %d\n", ret);
       return ret;
     }
-#endif /* defined(CONFIG_BCH) */
 #endif
 
 #ifdef HAVE_USBHOST

Reply via email to