flash/nor: Allow CFI memory read/write functions be overriden 47/5147/17
authorMarek Vasut <marek.vasut@gmail.com>
Sat, 13 Apr 2019 20:44:45 +0000 (22:44 +0200)
committerTomas Vanek <vanekt@fbl.cz>
Thu, 16 Jan 2020 12:26:03 +0000 (12:26 +0000)
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.vasut@gmail.com>
Reviewed-on: http://openocd.zylin.com/5147
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/flash/nor/cfi.c
src/flash/nor/cfi.h

index 14f9b113040d1305051eba4129d2f9cc89f39480..0437930b25483514a4a45c5a42b4a5c6d047bdc7 100644 (file)
@@ -134,15 +134,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 count, const uint8_t *buffer)
 {
-       return target_write_memory(bank->target, addr, bank->bus_width,
-                                  count, buffer);
+       struct cfi_flash_bank *cfi_info = bank->driver_priv;
+       if (cfi_info->write_mem) {
+               return cfi_info->write_mem(bank, addr, count, buffer);
+       } else {
+               return target_write_memory(bank->target, addr, bank->bus_width,
+                                          count, buffer);
+       }
 }
 
 static int cfi_target_read_memory(struct flash_bank *bank, target_addr_t addr,
                                  uint32_t count, uint8_t *buffer)
 {
-       return target_read_memory(bank->target, addr, bank->bus_width,
-                                 count, buffer);
+       struct cfi_flash_bank *cfi_info = bank->driver_priv;
+       if (cfi_info->read_mem) {
+               return cfi_info->read_mem(bank, addr, count, buffer);
+       } else {
+               return target_read_memory(bank->target, addr, bank->bus_width,
+                                         count, buffer);
+       }
 }
 
 static void cfi_command(struct flash_bank *bank, uint8_t cmd, uint8_t *cmd_buf)
index ed858a9de5772eb2bddbca74a37d6e192dc64976..9451faae640a97052a22b45190b1111a5d928c94 100644 (file)
@@ -73,6 +73,12 @@ 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 count, const uint8_t *buffer);
+       int (*read_mem)(struct flash_bank *bank, target_addr_t addr,
+                       uint32_t count, uint8_t *buffer);
 };
 
 /* Intel primary extended query table

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)