This is an automated email from Gerrit.

"Tomas Vanek <van...@fbl.cz>" just uploaded a new patch set to Gerrit, which 
you can find at https://review.openocd.org/c/openocd/+/8719

-- gerrit

commit 8865d6602c2df828a0a75764d7e30e9767d18a40
Author: Tomas Vanek <van...@fbl.cz>
Date:   Fri Jan 17 18:02:50 2025 +0100

    flash/nor/kinetis: fix assertion during flash write
    
    If the device has at lest one FlexNVM bank and it is set as EE backup
    only, the bank has no protection blocks.
    
    kinetis_fill_fcf() collects protection data from all banks before
    flash write of the sector containing FCF block. In case it encountered
    a FlexNVM bank with no protection blocks assert failed.
    
    Failed flash write of previously erased FCF block could cause
    engaging debugging lock (if the device was run or reset).
    
    Skip banks with zero protection blocks.
    Replace assert() by LOG_ERROR() as we have to finish FCF write.
    
    Change-Id: Ibe7e7ec6d0db4453b8a53c8256987621b809c99d
    Signed-off-by: Tomas Vanek <van...@fbl.cz>
    Suggested-by: Jasper v. Blanckenburg <jaz...@users.sourceforge.net>
    Fixes: https://sourceforge.net/p/openocd/tickets/448/

diff --git a/src/flash/nor/kinetis.c b/src/flash/nor/kinetis.c
index 2f88b9c1fe..85c306bd44 100644
--- a/src/flash/nor/kinetis.c
+++ b/src/flash/nor/kinetis.c
@@ -1489,7 +1489,22 @@ static int kinetis_fill_fcf(struct flash_bank *bank, 
uint8_t *fcf)
 
                kinetis_auto_probe(bank_iter);
 
-               assert(bank_iter->prot_blocks);
+               if (bank_iter->num_prot_blocks == 0) {
+                       if (k_bank->flash_class == FC_PFLASH) {
+                               LOG_ERROR("BUG: PFLASH bank %u has no 
protection blocks",
+                                                 bank_idx);
+                       } else {
+                               LOG_DEBUG("skipping FLEX_NVM bank %u with no 
prot blocks (EE bkp only)",
+                                                 bank_idx);
+                       }
+                       continue;
+               }
+
+               if (!bank_iter->prot_blocks) {
+                       LOG_ERROR("BUG: bank %u has NULL protection blocks 
array",
+                                         bank_idx);
+                       continue;
+               }
 
                if (k_bank->flash_class == FC_PFLASH) {
                        for (unsigned int i = 0; i < 
bank_iter->num_prot_blocks; i++) {

-- 

Reply via email to