This is an automated email from Gerrit.

Marek Vasut (marek.va...@gmail.com) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/5147

-- gerrit

commit acfb66c2af514b060b8478a355e8c9797f485e1a
Author: Marek Vasut <marek.va...@gmail.com>
Date:   Sat Apr 13 22:44:45 2019 +0200

    flash/nor: Allow CFI memory read/write functions be overriden
    
    Add possibility to supply custom CFI memory accessors via cfi_info
    and override the default memory-mapped ones.
    
    Change-Id: I1b6bc1db69fc33e8cdef96c41742c40e6d8917e9
    Signed-off-by: Marek Vasut <marek.va...@gmail.com>

diff --git a/src/flash/nor/cfi.c b/src/flash/nor/cfi.c
index 3e265dd..5806af1 100644
--- a/src/flash/nor/cfi.c
+++ b/src/flash/nor/cfi.c
@@ -131,18 +131,25 @@ static inline uint32_t flash_address(struct flash_bank 
*bank, int sector, uint32
        }
 }
 
-static int cfi_target_write_memory(struct flash_bank *bank, target_addr_t addr,
-                                  uint32_t size, uint32_t count,
-                                  const uint8_t *buffer)
+int cfi_target_write_memory(struct flash_bank *bank, target_addr_t addr,
+                           uint32_t size, uint32_t count,
+                           const uint8_t *buffer)
 {
-       return target_write_memory(bank->target, addr, size, count, buffer);
+       struct cfi_flash_bank *cfi_info = bank->driver_priv;
+       if (cfi_info->write_mem)
+               return cfi_info->write_mem(bank, addr, size, count, buffer);
+       else
+               return target_write_memory(bank->target, addr, size, count, 
buffer);
 }
 
-static int cfi_target_read_memory(struct flash_bank *bank, target_addr_t addr,
-                                 uint32_t size, uint32_t count,
-                                 uint8_t *buffer)
+int cfi_target_read_memory(struct flash_bank *bank, target_addr_t addr,
+                          uint32_t size, uint32_t count, uint8_t *buffer)
 {
-       return target_read_memory(bank->target, addr, size, count, buffer);
+       struct cfi_flash_bank *cfi_info = bank->driver_priv;
+       if (cfi_info->read_mem)
+               return cfi_info->read_mem(bank, addr, size, count, buffer);
+       else
+               return target_read_memory(bank->target, addr, size, count, 
buffer);
 }
 
 static void cfi_command(struct flash_bank *bank, uint8_t cmd, uint8_t *cmd_buf)
diff --git a/src/flash/nor/cfi.h b/src/flash/nor/cfi.h
index ed858a9..e0fece0 100644
--- a/src/flash/nor/cfi.h
+++ b/src/flash/nor/cfi.h
@@ -73,6 +73,13 @@ struct cfi_flash_bank {
        unsigned buf_write_timeout;
        unsigned block_erase_timeout;
        unsigned chip_erase_timeout;
+
+       /* memory accessors */
+       int (*write_mem)(struct flash_bank *bank, target_addr_t addr,
+                        uint32_t size, uint32_t count,
+                        const uint8_t *buffer);
+       int (*read_mem)(struct flash_bank *bank, target_addr_t addr,
+                       uint32_t size, uint32_t count, uint8_t *buffer);
 };
 
 /* Intel primary extended query table

-- 


_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to