You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ut...@apache.org on 2020/05/15 11:03:35 UTC

[mynewt-mcumgr] branch master updated (9f6555a -> 3fdb7fe)

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

utzig pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-mcumgr.git.


    from 9f6555a  Merge pull request #79 from hakonfam/stream_flash
     new ce01c48  zephyr: Convert to new FLASH_AREA macros
     new 3fdb7fe  cmd/img_mgmt/port/zephyr: fix to img_mgmt_impl_erase_image_data()

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c | 71 ++++++++++++++++++++++----
 samples/smp_svr/zephyr/src/main.c              |  2 +-
 2 files changed, 61 insertions(+), 12 deletions(-)


[mynewt-mcumgr] 01/02: zephyr: Convert to new FLASH_AREA macros

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-mcumgr.git

commit ce01c4840948dd05c116023a5a2f518b5512e5cf
Author: Kumar Gala <ku...@linaro.org>
AuthorDate: Thu May 7 17:09:29 2020 -0500

    zephyr: Convert to new FLASH_AREA macros
    
    Signed-off-by: Kumar Gala <ku...@linaro.org>
---
 cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c | 12 ++++++------
 samples/smp_svr/zephyr/src/main.c              |  2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c b/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c
index e5db289..3bf30b5 100644
--- a/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c
+++ b/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c
@@ -95,16 +95,16 @@ zephyr_img_mgmt_flash_area_id(int slot)
 
     switch (slot) {
     case 0:
-        fa_id = DT_FLASH_AREA_IMAGE_0_ID;
+        fa_id = FLASH_AREA_ID(image_0);
         break;
 
     case 1:
-        fa_id = DT_FLASH_AREA_IMAGE_1_ID;
+        fa_id = FLASH_AREA_ID(image_1);
         break;
 
     default:
         assert(0);
-        fa_id = DT_FLASH_AREA_IMAGE_1_ID;
+        fa_id = FLASH_AREA_ID(image_1);
         break;
     }
 
@@ -189,14 +189,14 @@ img_mgmt_impl_erase_slot(void)
     bool empty;
     int rc;
 
-    rc = zephyr_img_mgmt_flash_check_empty(DT_FLASH_AREA_IMAGE_1_ID,
+    rc = zephyr_img_mgmt_flash_check_empty(FLASH_AREA_ID(image_1),
                                            &empty);
     if (rc != 0) {
         return MGMT_ERR_EUNKNOWN;
     }
 
     if (!empty) {
-        rc = boot_erase_img_bank(DT_FLASH_AREA_IMAGE_1_ID);
+        rc = boot_erase_img_bank(FLASH_AREA_ID(image_1));
         if (rc != 0) {
             return MGMT_ERR_EUNKNOWN;
         }
@@ -318,7 +318,7 @@ img_mgmt_impl_erase_image_data(unsigned int off, unsigned int num_bytes)
     const struct flash_area *fa;
     int rc;
 
-    rc = flash_area_open(DT_FLASH_AREA_IMAGE_1_ID, &fa);
+    rc = flash_area_open(FLASH_AREA_ID(image_1), &fa);
     if (rc != 0) {
         return MGMT_ERR_EUNKNOWN;
     }
diff --git a/samples/smp_svr/zephyr/src/main.c b/samples/smp_svr/zephyr/src/main.c
index 6937a5b..066ec9b 100644
--- a/samples/smp_svr/zephyr/src/main.c
+++ b/samples/smp_svr/zephyr/src/main.c
@@ -65,7 +65,7 @@ FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(cstorage);
 static struct fs_mount_t littlefs_mnt = {
 	.type = FS_LITTLEFS,
 	.fs_data = &cstorage,
-	.storage_dev = (void *)DT_FLASH_AREA_STORAGE_ID,
+	.storage_dev = (void *)FLASH_AREA_ID(storage),
 	.mnt_point = "/lfs"
 };
 #endif


[mynewt-mcumgr] 02/02: cmd/img_mgmt/port/zephyr: fix to img_mgmt_impl_erase_image_data()

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-mcumgr.git

commit 3fdb7fe0a59dd879f81569a4fb36ea4b44b83792
Author: Andrzej Puzdrowski <an...@nordicsemi.no>
AuthorDate: Tue May 12 12:59:59 2020 +0200

    cmd/img_mgmt/port/zephyr: fix to img_mgmt_impl_erase_image_data()
    
    It was possible that the function tried to erase non erase-block-size
    aligned number of bytes which might have cause failure.
    Additionally the image trailer area might have been not erased at all.
    
    Reworked implementation so:
     - the erase request is corrected to erase proper amount of memory
     - erase of image trailer is ensured.
    
    Signed-off-by: Andrzej Puzdrowski <an...@nordicsemi.no>
---
 cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c | 59 +++++++++++++++++++++++---
 1 file changed, 54 insertions(+), 5 deletions(-)

diff --git a/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c b/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c
index 3bf30b5..eb5647a 100644
--- a/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c
+++ b/cmd/img_mgmt/port/zephyr/src/zephyr_img_mgmt.c
@@ -318,18 +318,67 @@ img_mgmt_impl_erase_image_data(unsigned int off, unsigned int num_bytes)
     const struct flash_area *fa;
     int rc;
 
+    if (off != 0) {
+        rc = MGMT_ERR_EINVAL;
+        goto end;
+    }
+
     rc = flash_area_open(FLASH_AREA_ID(image_1), &fa);
     if (rc != 0) {
-        return MGMT_ERR_EUNKNOWN;
+        LOG_ERR("Can't bind to the flash area (err %d)", rc);
+        rc = MGMT_ERR_EUNKNOWN;
+        goto end;
     }
 
-    rc = flash_area_erase(fa, off, num_bytes);
-    flash_area_close(fa);
+    /* align requested erase size to the erase-block-size */
+    struct device *dev = flash_area_get_device(fa);
+    struct flash_pages_info page;
+
+    rc = flash_get_page_info_by_offs(dev, fa->fa_off + num_bytes -1, &page);
     if (rc != 0) {
-        return MGMT_ERR_EUNKNOWN;
+        LOG_ERR("bad offset (0x%x)", fa->fa_off + num_bytes -1);
+        rc = MGMT_ERR_EUNKNOWN;
+        goto end_fa;
     }
 
-    return 0;
+    size_t erase_size = page.start_offset + page.size - fa->fa_off;
+    
+    rc = flash_area_erase(fa, 0, erase_size);
+
+    if (rc != 0) {
+        LOG_ERR("image slot erase of 0x%x bytes failed (err %d)", erase_size,
+                rc);
+        rc = MGMT_ERR_EUNKNOWN;
+        goto end_fa;
+    }
+
+    LOG_INF("Erased 0x%x bytes of image slot", erase_size);
+
+    /* erase the image trailer area if it was not erased */
+    off = BOOT_TRAILER_IMG_STATUS_OFFS(fa);
+    if (off >= erase_size) {
+        rc = flash_get_page_info_by_offs(dev, fa->fa_off + off, &page);
+
+        off = page.start_offset - fa->fa_off;
+        erase_size = fa->fa_size - off;
+
+        rc = flash_area_erase(fa, off, erase_size);
+        if (rc != 0) {
+            LOG_ERR("image slot trailer erase of 0x%x bytes failed (err %d)",
+                    erase_size, rc);
+            rc = MGMT_ERR_EUNKNOWN;
+            goto end_fa;
+        }
+
+        LOG_INF("Erased 0x%x bytes of image slot trailer", erase_size);
+    }
+
+    rc = 0;
+
+end_fa:
+    flash_area_close(fa);
+end:
+    return rc;
 }
 
 #if IMG_MGMT_LAZY_ERASE