]> 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 1bfe1ab977641828a47efe0f9869833e17ceb776..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.
@@ -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