This is an automated email from Gerrit.

Steven Stallion ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/4791

-- gerrit

commit 1f417ae06017fc5e44a0d6d8cd66a59afedf1dc6
Author: Steven Stallion <[email protected]>
Date:   Thu Dec 6 13:10:01 2018 -0600

    flash/esirisc: refactor register write protection
    
    This patch removes use of register write protection in protect() and
    protect_check() now that Change 4765 has merged. Register write
    protection is now disabled during bank initialization and is assumed to
    remain disabled for the duration of the debugging session.
    
    Change-Id: I42c429dc283c5b53989a6b98ebfc58214274ff16
    Signed-off-by: Steven Stallion <[email protected]>

diff --git a/src/flash/nor/esirisc_flash.c b/src/flash/nor/esirisc_flash.c
index 8ecd27a..8eda299 100644
--- a/src/flash/nor/esirisc_flash.c
+++ b/src/flash/nor/esirisc_flash.c
@@ -156,7 +156,7 @@ static int esirisc_flash_disable_protect(struct flash_bank 
*bank)
        if (!(control & CONTROL_WP))
                return ERROR_OK;
 
-       esirisc_flash_unlock(bank);
+       (void)esirisc_flash_unlock(bank);
 
        control &= ~CONTROL_WP;
 
@@ -165,6 +165,7 @@ static int esirisc_flash_disable_protect(struct flash_bank 
*bank)
        return ERROR_OK;
 }
 
+#if 0
 static int esirisc_flash_enable_protect(struct flash_bank *bank)
 {
        struct esirisc_flash_bank *esirisc_info = bank->driver_priv;
@@ -175,7 +176,7 @@ static int esirisc_flash_enable_protect(struct flash_bank 
*bank)
        if (control & CONTROL_WP)
                return ERROR_OK;
 
-       esirisc_flash_unlock(bank);
+       (void)esirisc_flash_unlock(bank);
 
        control |= CONTROL_WP;
 
@@ -183,6 +184,7 @@ static int esirisc_flash_enable_protect(struct flash_bank 
*bank)
 
        return ERROR_OK;
 }
+#endif
 
 static int esirisc_flash_check_status(struct flash_bank *bank)
 {
@@ -261,8 +263,6 @@ static int esirisc_flash_erase(struct flash_bank *bank, int 
first, int last)
        if (target->state != TARGET_HALTED)
                return ERROR_TARGET_NOT_HALTED;
 
-       esirisc_flash_disable_protect(bank);
-
        for (int page = first; page < last; ++page) {
                uint32_t address = page * PAGE_SIZE;
 
@@ -275,8 +275,6 @@ static int esirisc_flash_erase(struct flash_bank *bank, int 
first, int last)
                }
        }
 
-       esirisc_flash_enable_protect(bank);
-
        return retval;
 }
 
@@ -289,16 +287,12 @@ static int esirisc_flash_mass_erase(struct flash_bank 
*bank)
        if (target->state != TARGET_HALTED)
                return ERROR_TARGET_NOT_HALTED;
 
-       esirisc_flash_disable_protect(bank);
-
        target_write_u32(target, esirisc_info->cfg + ADDRESS, 0);
 
        retval = esirisc_flash_control(bank, CONTROL_E);
        if (retval != ERROR_OK)
                LOG_ERROR("%s: failed to mass erase", bank->name);
 
-       esirisc_flash_enable_protect(bank);
-
        return retval;
 }
 
@@ -315,32 +309,13 @@ static int esirisc_flash_ref_erase(struct flash_bank 
*bank)
        if (target->state != TARGET_HALTED)
                return ERROR_TARGET_NOT_HALTED;
 
-       esirisc_flash_disable_protect(bank);
-
        retval = esirisc_flash_control(bank, CONTROL_ERC);
        if (retval != ERROR_OK)
                LOG_ERROR("%s: failed to erase reference cell", bank->name);
 
-       esirisc_flash_enable_protect(bank);
-
        return retval;
 }
 
-static int esirisc_flash_protect(struct flash_bank *bank, int set, int first, 
int last)
-{
-       struct target *target = bank->target;
-
-       if (target->state != TARGET_HALTED)
-               return ERROR_TARGET_NOT_HALTED;
-
-       if (set)
-               esirisc_flash_enable_protect(bank);
-       else
-               esirisc_flash_disable_protect(bank);
-
-       return ERROR_OK;
-}
-
 static int esirisc_flash_fill_pb(struct flash_bank *bank,
                const uint8_t *buffer, uint32_t count)
 {
@@ -382,8 +357,6 @@ static int esirisc_flash_write(struct flash_bank *bank,
        if (target->state != TARGET_HALTED)
                return ERROR_TARGET_NOT_HALTED;
 
-       esirisc_flash_disable_protect(bank);
-
        /*
         * The address register is auto-incremented based on the contents of
         * the pb_index register after each operation completes. It can be
@@ -413,8 +386,6 @@ static int esirisc_flash_write(struct flash_bank *bank,
                count -= num_bytes;
        }
 
-       esirisc_flash_enable_protect(bank);
-
        return retval;
 }
 
@@ -439,7 +410,8 @@ static int esirisc_flash_init(struct flash_bank *bank)
        uint32_t value;
        int retval;
 
-       esirisc_flash_disable_protect(bank);
+       /* disable register write protection */
+       (void)esirisc_flash_disable_protect(bank);
 
        /* initialize timing registers */
        value = TIMING0_F(esirisc_flash_num_cycles(bank, TNVH))
@@ -465,8 +437,6 @@ static int esirisc_flash_init(struct flash_bank *bank)
        if (retval != ERROR_OK)
                LOG_ERROR("%s: failed to recall trim code", bank->name);
 
-       esirisc_flash_enable_protect(bank);
-
        return retval;
 }
 
@@ -482,13 +452,6 @@ static int esirisc_flash_probe(struct flash_bank *bank)
        bank->num_sectors = bank->size / PAGE_SIZE;
        bank->sectors = alloc_block_array(0, PAGE_SIZE, bank->num_sectors);
 
-       /*
-        * Register write protection is enforced using a single protection
-        * block for the entire bank. This is as good as it gets.
-        */
-       bank->num_prot_blocks = 1;
-       bank->prot_blocks = alloc_block_array(0, bank->size, 
bank->num_prot_blocks);
-
        retval = esirisc_flash_init(bank);
        if (retval != ERROR_OK) {
                LOG_ERROR("%s: failed to initialize bank", bank->name);
@@ -510,23 +473,6 @@ static int esirisc_flash_auto_probe(struct flash_bank 
*bank)
        return esirisc_flash_probe(bank);
 }
 
-static int esirisc_flash_protect_check(struct flash_bank *bank)
-{
-       struct esirisc_flash_bank *esirisc_info = bank->driver_priv;
-       struct target *target = bank->target;
-       uint32_t control;
-
-       if (target->state != TARGET_HALTED)
-               return ERROR_TARGET_NOT_HALTED;
-
-       target_read_u32(target, esirisc_info->cfg + CONTROL, &control);
-
-       /* single protection block (also see: esirisc_flash_probe()) */
-       bank->prot_blocks[0].is_protected = !!(control & CONTROL_WP);
-
-       return ERROR_OK;
-}
-
 static int esirisc_flash_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        struct esirisc_flash_bank *esirisc_info = bank->driver_priv;
@@ -616,13 +562,11 @@ struct flash_driver esirisc_flash = {
                        "cfg_address clock_hz wait_states",
        .flash_bank_command = esirisc_flash_bank_command,
        .erase = esirisc_flash_erase,
-       .protect = esirisc_flash_protect,
        .write = esirisc_flash_write,
        .read = default_flash_read,
        .probe = esirisc_flash_probe,
        .auto_probe = esirisc_flash_auto_probe,
        .erase_check = default_flash_blank_check,
-       .protect_check = esirisc_flash_protect_check,
        .info = esirisc_flash_info,
        .free_driver_priv = default_flash_free_driver_priv,
 };

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to