From: Spencer Oliver <[email protected]>

Some flash's do not support buffer writes, so we now check
they are supported before trying to use them.

Signed-off-by: Spencer Oliver <[email protected]>
---
 src/flash/common.h  |    5 +++--
 src/flash/nor/cfi.c |    9 +++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/flash/common.h b/src/flash/common.h
index c78f24c..528b9cf 100644
--- a/src/flash/common.h
+++ b/src/flash/common.h
@@ -25,9 +25,9 @@
  * Parses the optional '.index' portion of a flash bank identifier.
  * @param name The desired driver name, passed by the user.
  * @returns The parsed index request, or 0 if not present.  If the
- * name provides a suffix but it does not parse as an unsigned integer, 
+ * name provides a suffix but it does not parse as an unsigned integer,
  * the routine returns ~0U.  This will prevent further matching.
- */ 
+ */
 unsigned get_flash_name_index(const char *name);
 /**
  * Attempt to match the @c expected name with the @c name of a driver.
@@ -44,5 +44,6 @@ bool flash_driver_name_matches(const char *name, const char 
*expected);
 #define ERROR_FLASH_BUSY                 (-905)
 #define ERROR_FLASH_SECTOR_NOT_ERASED    (-906)
 #define ERROR_FLASH_BANK_NOT_PROBED      (-907)
+#define ERROR_FLASH_OPER_UNSUPPORTED     (-908)
 
 #endif // FLASH_COMMON_H
diff --git a/src/flash/nor/cfi.c b/src/flash/nor/cfi.c
index 7f2d0a5..09caa2e 100644
--- a/src/flash/nor/cfi.c
+++ b/src/flash/nor/cfi.c
@@ -2051,6 +2051,13 @@ static int cfi_write_words(struct flash_bank *bank, 
uint8_t *word,
 {
        struct cfi_flash_bank *cfi_info = bank->driver_priv;
 
+       if (cfi_info->buf_write_timeout_typ == 0)
+       {
+               /* buffer writes are not supported */
+               LOG_DEBUG("Buffer Writes Not Supported");
+               return ERROR_FLASH_OPER_UNSUPPORTED;
+       }
+
        switch (cfi_info->pri_id)
        {
                case 1:
@@ -2241,6 +2248,8 @@ static int cfi_write(struct flash_bank *bank, uint8_t 
*buffer, uint32_t offset,
                                                count -= buffersize;
                                                fallback = 0;
                                        }
+                                       else if (retval != 
ERROR_FLASH_OPER_UNSUPPORTED)
+                                               return retval;
                                }
                                /* try the slow way? */
                                if (fallback)
-- 
1.7.1
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to