Make the backends propagate errors
[fw/stlink] / src / stlink-common.h
index 76f977e9bdd2eedf8ecbdddb01e9d3ea5854d067..467b9b90ac39575bd7a03feeefe5449df84618be 100644 (file)
@@ -124,6 +124,9 @@ extern "C" {
 
 #define STM32_CHIPID_F37x           0x432
 #define STM32_CHIPID_F4_DE          0x433
+#define STM32_CHIPID_F4_DE          0x433
+
+#define STM32_CHIPID_F4_DSI         0x434
 
 #define STM32_CHIPID_L1_HIGH        0x436
 #define STM32_CHIPID_L152_RE        0x437
@@ -222,6 +225,15 @@ extern "C" {
             .bootrom_base = 0x1fff0000,
             .bootrom_size = 0x7800
         },
+        {
+            .chip_id = STM32_CHIPID_F4_DSI,
+            .description = "F46x and F47x device",
+            .flash_size_reg = 0x1FFF7A22,  /* As in rm0090 since Rev 2*/
+            .flash_pagesize = 0x4000,
+            .sram_size = 0x40000,
+            .bootrom_base = 0x1fff0000,
+            .bootrom_size = 0x7800
+        },
         {
             .chip_id = STM32_CHIPID_F4_HD,
             .description = "F42x and F43x device",
@@ -544,30 +556,30 @@ extern "C" {
 
     typedef struct _stlink_backend {
         void (*close) (stlink_t * sl);
-        void (*exit_debug_mode) (stlink_t * sl);
-        void (*enter_swd_mode) (stlink_t * sl);
-        void (*enter_jtag_mode) (stlink_t * stl);
-        void (*exit_dfu_mode) (stlink_t * stl);
-        void (*core_id) (stlink_t * stl);
-        void (*reset) (stlink_t * stl);
-        void (*jtag_reset) (stlink_t * stl, int value);
-        void (*run) (stlink_t * stl);
-        void (*status) (stlink_t * stl);
-        void (*version) (stlink_t *sl);
-        uint32_t (*read_debug32) (stlink_t *sl, uint32_t addr);
-        void (*read_mem32) (stlink_t *sl, uint32_t addr, uint16_t len);
-        void (*write_debug32) (stlink_t *sl, uint32_t addr, uint32_t data);
-        void (*write_mem32) (stlink_t *sl, uint32_t addr, uint16_t len);
-        void (*write_mem8) (stlink_t *sl, uint32_t addr, uint16_t len);
-        void (*read_all_regs) (stlink_t *sl, reg * regp);
-        void (*read_reg) (stlink_t *sl, int r_idx, reg * regp);
-        void (*read_all_unsupported_regs) (stlink_t *sl, reg *regp);
-        void (*read_unsupported_reg) (stlink_t *sl, int r_idx, reg *regp);
-        void (*write_unsupported_reg) (stlink_t *sl, uint32_t value, int idx, reg *regp);
-        void (*write_reg) (stlink_t *sl, uint32_t reg, int idx);
-        void (*step) (stlink_t * stl);
+        int (*exit_debug_mode) (stlink_t * sl);
+        int (*enter_swd_mode) (stlink_t * sl);
+        int (*enter_jtag_mode) (stlink_t * stl);
+        int (*exit_dfu_mode) (stlink_t * stl);
+        int (*core_id) (stlink_t * stl);
+        int (*reset) (stlink_t * stl);
+        int (*jtag_reset) (stlink_t * stl, int value);
+        int (*run) (stlink_t * stl);
+        int (*status) (stlink_t * stl);
+        int (*version) (stlink_t *sl);
+        int (*read_debug32) (stlink_t *sl, uint32_t addr, uint32_t *data);
+        int (*read_mem32) (stlink_t *sl, uint32_t addr, uint16_t len);
+        int (*write_debug32) (stlink_t *sl, uint32_t addr, uint32_t data);
+        int (*write_mem32) (stlink_t *sl, uint32_t addr, uint16_t len);
+        int (*write_mem8) (stlink_t *sl, uint32_t addr, uint16_t len);
+        int (*read_all_regs) (stlink_t *sl, reg * regp);
+        int (*read_reg) (stlink_t *sl, int r_idx, reg * regp);
+        int (*read_all_unsupported_regs) (stlink_t *sl, reg *regp);
+        int (*read_unsupported_reg) (stlink_t *sl, int r_idx, reg *regp);
+        int (*write_unsupported_reg) (stlink_t *sl, uint32_t value, int idx, reg *regp);
+        int (*write_reg) (stlink_t *sl, uint32_t reg, int idx);
+        int (*step) (stlink_t * stl);
         int (*current_mode) (stlink_t * stl);
-        void (*force_debug) (stlink_t *sl);
+        int (*force_debug) (stlink_t *sl);
         int32_t (*target_voltage) (stlink_t *sl);
     } stlink_backend_t;
 
@@ -618,13 +630,13 @@ extern "C" {
     void stlink_exit_debug_mode(stlink_t *sl);
     void stlink_exit_dfu_mode(stlink_t *sl);
     void stlink_close(stlink_t *sl);
-    uint32_t stlink_core_id(stlink_t *sl);
+    void stlink_core_id(stlink_t *sl);
     void stlink_reset(stlink_t *sl);
     void stlink_jtag_reset(stlink_t *sl, int value);
     void stlink_run(stlink_t *sl);
     void stlink_status(stlink_t *sl);
     void stlink_version(stlink_t *sl);
-    uint32_t stlink_read_debug32(stlink_t *sl, uint32_t addr);
+    void stlink_read_debug32(stlink_t *sl, uint32_t addr, uint32_t *data);
     void stlink_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len);
     void stlink_write_debug32(stlink_t *sl, uint32_t addr, uint32_t data);
     void stlink_write_mem32(stlink_t *sl, uint32_t addr, uint16_t len);
@@ -643,7 +655,7 @@ extern "C" {
 
     // unprocessed
     int stlink_erase_flash_mass(stlink_t* sl);
-    int stlink_write_flash(stlink_t* sl, stm32_addr_t address, uint8_t* data, uint32_t length);
+    int stlink_write_flash(stlink_t* sl, stm32_addr_t address, uint8_t* data, uint32_t length, uint8_t eraseonly);
     int stlink_fwrite_flash(stlink_t *sl, const char* path, stm32_addr_t addr);
     int stlink_fwrite_sram(stlink_t *sl, const char* path, stm32_addr_t addr);
     int stlink_verify_write_flash(stlink_t *sl, stm32_addr_t address, uint8_t *data, uint32_t length);