This is an automated email from Gerrit.

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

-- gerrit

commit bf15aaadc84bee501127351c0f0d97d673d22a6a
Author: Tomas Vanek <[email protected]>
Date:   Fri Dec 20 23:26:51 2019 +0100

    flash/nor/numicro: use flash infrastructure to align write
    
    The aligning code generated a clang static analyzer warning and
    imposed huge memory leak. This part of code was removed and
    flash infrastructure to alignment is used instead.
    
    Not tested on hw!
    
    Change-Id: I7c71da87547e71d595a7e7071ae5adcc1cecc827
    Signed-off-by: Tomas Vanek <[email protected]>

diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c
index c62af04..ece3a3e 100644
--- a/src/flash/nor/numicro.c
+++ b/src/flash/nor/numicro.c
@@ -1548,7 +1548,6 @@ static int numicro_write(struct flash_bank *bank, const 
uint8_t *buffer,
 {
        struct target *target = bank->target;
        uint32_t timeout, status;
-       uint8_t *new_buffer = NULL;
        int retval = ERROR_OK;
 
        if (target->state != TARGET_HALTED) {
@@ -1566,20 +1565,8 @@ static int numicro_write(struct flash_bank *bank, const 
uint8_t *buffer,
        if (retval != ERROR_OK)
                return retval;
 
-       if (count & 0x3) {
-               uint32_t old_count = count;
-               count = (old_count | 3) + 1;
-               new_buffer = malloc(count);
-               if (new_buffer == NULL) {
-                       LOG_ERROR("odd number of bytes to write and no memory "
-                               "for padding buffer");
-                       return ERROR_FAIL;
-               }
-               LOG_INFO("odd number of bytes to write (%d), extending to %d "
-                       "and padding with 0xff", old_count, count);
-               memset(new_buffer, 0xff, count);
-               buffer = memcpy(new_buffer, buffer, old_count);
-       }
+       assert(offset % 4 == 0);
+       assert(count % 4 == 0);
 
        uint32_t words_remaining = count / 4;
 
@@ -1597,13 +1584,10 @@ static int numicro_write(struct flash_bank *bank, const 
uint8_t *buffer,
 
                        LOG_DEBUG("write longword @ %08X", offset + i);
 
-                       uint8_t padding[4] = {0xff, 0xff, 0xff, 0xff};
-                       memcpy(padding, buffer + i, MIN(4, count-i));
-
                        retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, 
bank->base + offset + i);
                        if (retval != ERROR_OK)
                                return retval;
-                       retval = target_write_memory(target, 
NUMICRO_FLASH_ISPDAT, 4, 1, padding);
+                       retval = target_write_memory(target, 
NUMICRO_FLASH_ISPDAT, 4, 1, buffer + i);
                        if (retval != ERROR_OK)
                                return retval;
                        retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, 
ISPTRG_ISPGO);
@@ -1754,6 +1738,7 @@ FLASH_BANK_COMMAND_HANDLER(numicro_flash_bank_command)
        memset(bank_info, 0, sizeof(struct numicro_flash_bank));
 
        bank->driver_priv = bank_info;
+       bank->write_start_alignment = bank->write_end_alignment = 4;
 
        return ERROR_OK;
 

-- 


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

Reply via email to