]> git.sur5r.net Git - openocd/blobdiff - src/flash/nor/core.h
target|board: Add Intel (Altera) Arria 10 target and related board
[openocd] / src / flash / nor / core.h
index 338363e2acad9713bfeccb1b786ab686e84cb529..67de94e702c6645f480def797207d55c971e2b0c 100644 (file)
@@ -65,6 +65,13 @@ struct flash_sector {
        int is_protected;
 };
 
+/** Special value for write_start_alignment and write_end_alignment field */
+#define FLASH_WRITE_ALIGN_SECTOR       UINT32_MAX
+
+/** Special values for minimal_write_gap field */
+#define FLASH_WRITE_CONTINUOUS         0
+#define FLASH_WRITE_GAP_SECTOR         UINT32_MAX
+
 /**
  * Provides details of a flash bank, available either on-chip or through
  * a major interface.
@@ -76,7 +83,7 @@ struct flash_sector {
  * per-bank basis, if required.
  */
 struct flash_bank {
-       const char *name;
+       char *name;
 
        struct target *target; /**< Target to which this bank belongs. */
 
@@ -97,6 +104,18 @@ struct flash_bank {
         * erased value. Defaults to 0xFF. */
        uint8_t default_padded_value;
 
+       /** Required alignment of flash write start address.
+        * Default 0, no alignment. Can be any power of two or FLASH_WRITE_ALIGN_SECTOR */
+       uint32_t write_start_alignment;
+       /** Required alignment of flash write end address.
+        * Default 0, no alignment. Can be any power of two or FLASH_WRITE_ALIGN_SECTOR */
+       uint32_t write_end_alignment;
+       /** Minimal gap between sections to discontinue flash write
+        * Default FLASH_WRITE_GAP_SECTOR splits the write if one or more untouched
+        * sectors in between.
+     * Can be size in bytes or FLASH_WRITE_CONTINUOUS */
+       uint32_t minimal_write_gap;
+
        /**
         * The number of sectors on this chip.  This value will
         * be set intially to 0, and the flash driver must set this to
@@ -135,6 +154,22 @@ int flash_erase_address_range(struct target *target,
 int flash_unlock_address_range(struct target *target, uint32_t addr,
                uint32_t length);
 
+/**
+ * Align start address of a flash write region according to bank requirements.
+ * @param bank Pointer to bank descriptor structure
+ * @param addr Address to align
+ * @returns Aligned address
+*/
+target_addr_t flash_write_align_start(struct flash_bank *bank, target_addr_t addr);
+/**
+ * Align end address of a flash write region according to bank requirements.
+ * Note: Use address of the last byte to write, not the next after the region.
+ * @param bank Pointer to bank descriptor structure
+ * @param addr Address to align (address of the last byte to write)
+ * @returns Aligned address (address of the last byte of padded region)
+*/
+target_addr_t flash_write_align_end(struct flash_bank *bank, target_addr_t addr);
+
 /**
  * Writes @a image into the @a target flash.  The @a written parameter
  * will contain the
@@ -153,8 +188,15 @@ int flash_write(struct target *target,
  * This routine must be called when the system may modify the status.
  */
 void flash_set_dirty(void);
+
 /** @returns The number of flash banks currently defined. */
 int flash_get_bank_count(void);
+
+/** Deallocates bank->driver_priv */
+void default_flash_free_driver_priv(struct flash_bank *bank);
+
+/** Deallocates all flash banks */
+void flash_free_all_banks(void);
 /**
  * Provides default read implementation for flash memory.
  * @param bank The bank to read.