flash/nor/stm32h7x: fix option bytes handling to work with both banks
[fw/openocd] / src / flash / nor / niietcm4.c
index c8dd1bc70fce72a2f475725e7d1046a9b3faefc1..7b67bb8ad24d719e321c3b6b7a87a735bd5f5340 100644 (file)
@@ -13,8 +13,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.                                        *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -231,7 +230,8 @@ static int niietcm4_uopstatus_check(struct flash_bank *bank)
 static int niietcm4_dump_uflash_page(struct flash_bank *bank, uint32_t *dump, int page_num, int mem_type)
 {
        struct target *target = bank->target;
-       int i, retval;
+       int i;
+       int retval = ERROR_OK;
 
        uint32_t uflash_cmd;
        if (mem_type == INFO_MEM_TYPE)
@@ -266,7 +266,8 @@ static int niietcm4_dump_uflash_page(struct flash_bank *bank, uint32_t *dump, in
 static int niietcm4_load_uflash_page(struct flash_bank *bank, uint32_t *dump, int page_num, int mem_type)
 {
        struct target *target = bank->target;
-       int i, retval;
+       int i;
+       int retval = ERROR_OK;
 
        uint32_t uflash_cmd;
        if (mem_type == INFO_MEM_TYPE)
@@ -424,9 +425,9 @@ COMMAND_HANDLER(niietcm4_handle_uflash_read_byte_command)
        retval = target_read_u32(target, UFMD, &uflash_data);
        if (retval != ERROR_OK)
                return retval;
-       command_print(CMD_CTX,  "Read userflash %s region:\n"
-                                                       "address = 0x%04x,\n"
-                                                       "value   = 0x%02x.", CMD_ARGV[0], uflash_addr, uflash_data);
+       command_print(CMD,  "Read userflash %s region:\n"
+                                               "address = 0x%04x,\n"
+                                               "value   = 0x%02x.", CMD_ARGV[0], uflash_addr, uflash_data);
        return retval;
 }
 
@@ -466,10 +467,10 @@ COMMAND_HANDLER(niietcm4_handle_uflash_write_byte_command)
 
        int page_num = uflash_addr/USERFLASH_PAGE_SIZE;
 
-       command_print(CMD_CTX, "Write userflash %s region:\n"
-                                                  "address = 0x%04x,\n"
-                                                  "value   = 0x%02x.\n"
-                                                  "Please wait ... ", CMD_ARGV[0], uflash_addr, uflash_data);
+       command_print(CMD, "Write userflash %s region:\n"
+                                          "address = 0x%04x,\n"
+                                          "value   = 0x%02x.\n"
+                                          "Please wait ... ", CMD_ARGV[0], uflash_addr, uflash_data);
        /* dump */
        uint32_t uflash_dump[USERFLASH_PAGE_SIZE];
        niietcm4_dump_uflash_page(bank, uflash_dump, page_num, mem_type);
@@ -482,7 +483,7 @@ COMMAND_HANDLER(niietcm4_handle_uflash_write_byte_command)
 
        /* write dump to userflash */
        niietcm4_load_uflash_page(bank, uflash_dump, page_num, mem_type);
-       command_print(CMD_CTX, "done!");
+       command_print(CMD, "done!");
        return retval;
 }
 
@@ -519,7 +520,7 @@ COMMAND_HANDLER(niietcm4_handle_uflash_full_erase_command)
        retval = niietcm4_uopstatus_check(bank);
        if (retval != ERROR_OK)
                return retval;
-       command_print(CMD_CTX, "Userflash full erase done!");
+       command_print(CMD, "Userflash full erase done!");
 
        return retval;
 }
@@ -562,7 +563,7 @@ COMMAND_HANDLER(niietcm4_handle_uflash_erase_command)
                        return retval;
        }
 
-       command_print(CMD_CTX, "Erase %s userflash pages %d through %d done!", CMD_ARGV[0], first, last);
+       command_print(CMD, "Erase %s userflash pages %d through %d done!", CMD_ARGV[0], first, last);
 
        return retval;
 }
@@ -620,9 +621,9 @@ COMMAND_HANDLER(niietcm4_handle_uflash_protect_check_command)
                        return retval;
 
                if (uflash_data & INFOWORD3_LOCK_IFB_UF)
-                       command_print(CMD_CTX, "All sectors of info userflash are not protected!");
+                       command_print(CMD, "All sectors of info userflash are not protected!");
                else
-                       command_print(CMD_CTX, "All sectors of info userflash are protected!");
+                       command_print(CMD, "All sectors of info userflash are protected!");
        } else {
                uflash_addr = UF_LOCK_ADDR;
                uflash_cmd = UFMC_MAGIC_KEY | UFMC_READ_IFB;
@@ -644,10 +645,10 @@ COMMAND_HANDLER(niietcm4_handle_uflash_protect_check_command)
 
                        for (j = 0; j < 8; j++) {
                                if (uflash_data & 0x1)
-                                       command_print(CMD_CTX, "Userflash sector #%03d: 0x%04x (0x100) is not protected!",
+                                       command_print(CMD, "Userflash sector #%03d: 0x%04x (0x100) is not protected!",
                                                                                        i*8+j, (i*8+j)*USERFLASH_PAGE_SIZE);
                                else
-                                       command_print(CMD_CTX, "Userflash sector #%03d: 0x%04x (0x100) is protected!",
+                                       command_print(CMD, "Userflash sector #%03d: 0x%04x (0x100) is protected!",
                                                                                        i*8+j, (i*8+j)*USERFLASH_PAGE_SIZE);
                                uflash_data = uflash_data >> 1;
                        }
@@ -692,11 +693,11 @@ COMMAND_HANDLER(niietcm4_handle_uflash_protect_command)
 
        int set;
        if (strcmp("on", CMD_ARGV[3]) == 0) {
-               command_print(CMD_CTX, "Try to enable %s userflash sectors %d through %d protection. Please wait ... ",
+               command_print(CMD, "Try to enable %s userflash sectors %d through %d protection. Please wait ... ",
                                                                CMD_ARGV[0], first, last);
                set = 1;
        } else if (strcmp("off", CMD_ARGV[3]) == 0) {
-               command_print(CMD_CTX, "Try to disable %s userflash sectors %d through %d protection. Please wait ... ",
+               command_print(CMD, "Try to disable %s userflash sectors %d through %d protection. Please wait ... ",
                                                                CMD_ARGV[0], first, last);
                set = 0;
        } else
@@ -706,7 +707,7 @@ COMMAND_HANDLER(niietcm4_handle_uflash_protect_command)
                if (retval != ERROR_OK)
                        return retval;
 
-       command_print(CMD_CTX, "done!");
+       command_print(CMD, "done!");
        return retval;
 }
 
@@ -732,10 +733,10 @@ COMMAND_HANDLER(niietcm4_handle_bflash_info_remap_command)
 
        int set;
        if (strcmp("on", CMD_ARGV[0]) == 0) {
-               command_print(CMD_CTX, "Try to enable bootflash info region remap. Please wait ...");
+               command_print(CMD, "Try to enable bootflash info region remap. Please wait ...");
                set = 1;
        } else if (strcmp("off", CMD_ARGV[0]) == 0) {
-               command_print(CMD_CTX, "Try to disable bootflash info region remap. Please wait ...");
+               command_print(CMD, "Try to disable bootflash info region remap. Please wait ...");
                set = 0;
        } else
                return ERROR_COMMAND_SYNTAX_ERROR;
@@ -755,7 +756,7 @@ COMMAND_HANDLER(niietcm4_handle_bflash_info_remap_command)
 
        /* write dump to userflash */
        niietcm4_load_uflash_page(bank, uflash_dump, 0, 1);
-       command_print(CMD_CTX, "done!");
+       command_print(CMD, "done!");
 
        return retval;
 }
@@ -813,11 +814,11 @@ COMMAND_HANDLER(niietcm4_handle_extmem_cfg_command)
        else
                return ERROR_COMMAND_SYNTAX_ERROR;
 
-       command_print(CMD_CTX,  "Try to configure external memory boot interface:\n"
-                                                       "port = %s\n"
-                                                       "pin  = %s\n"
-                                                       "func = %s\n"
-                                                       "Please wait ...", CMD_ARGV[0], CMD_ARGV[1], CMD_ARGV[2]);
+       command_print(CMD,  "Try to configure external memory boot interface:\n"
+                                               "port = %s\n"
+                                               "pin  = %s\n"
+                                               "func = %s\n"
+                                               "Please wait ...", CMD_ARGV[0], CMD_ARGV[1], CMD_ARGV[2]);
        /* dump */
        uint32_t uflash_dump[USERFLASH_PAGE_SIZE];
        niietcm4_dump_uflash_page(bank, uflash_dump, 0, 1);
@@ -832,7 +833,7 @@ COMMAND_HANDLER(niietcm4_handle_extmem_cfg_command)
 
        /* write dump to userflash */
        niietcm4_load_uflash_page(bank, uflash_dump, 0, 1);
-       command_print(CMD_CTX, "done!");
+       command_print(CMD, "done!");
 
        return retval;
 }
@@ -860,10 +861,10 @@ COMMAND_HANDLER(niietcm4_handle_extmem_boot_command)
        int set;
 
        if (strcmp("on", CMD_ARGV[0]) == 0) {
-               command_print(CMD_CTX, "Try to enable boot from external memory. Please wait ...");
+               command_print(CMD, "Try to enable boot from external memory. Please wait ...");
                set = 1;
        } else if (strcmp("off", CMD_ARGV[0]) == 0) {
-               command_print(CMD_CTX, "Try to disable boot from external memory. Please wait ...");
+               command_print(CMD, "Try to disable boot from external memory. Please wait ...");
                set = 0;
        } else
                return ERROR_COMMAND_SYNTAX_ERROR;
@@ -883,7 +884,7 @@ COMMAND_HANDLER(niietcm4_handle_extmem_boot_command)
 
        /* write dump to userflash */
        niietcm4_load_uflash_page(bank, uflash_dump, 0, 1);
-       command_print(CMD_CTX, "done!");
+       command_print(CMD, "done!");
 
        return retval;
 }
@@ -899,7 +900,7 @@ COMMAND_HANDLER(niietcm4_handle_service_mode_erase_command)
                return retval;
        struct target *target = bank->target;
 
-       command_print(CMD_CTX, "Try to perform service mode erase. Please wait ...");
+       command_print(CMD, "Try to perform service mode erase. Please wait ...");
 
        retval = target_write_u32(target, SERVICE_MODE_ERASE_ADDR, 1);
        if (retval != ERROR_OK)
@@ -922,7 +923,7 @@ COMMAND_HANDLER(niietcm4_handle_service_mode_erase_command)
                        }
                busy_sleep(1);  /* can use busy sleep for short times. */
        }
-       command_print(CMD_CTX, "done! All data erased.");
+       command_print(CMD, "done! All data erased.");
 
        return retval;
 }
@@ -937,7 +938,7 @@ COMMAND_HANDLER(niietcm4_handle_driver_info_command)
        if (retval != ERROR_OK)
                return retval;
 
-       command_print(CMD_CTX, "niietcm4 flash driver\n"
+       command_print(CMD, "niietcm4 flash driver\n"
                                                   "version: %d.%d\n"
                                                   "author: Bogdan Kolbov\n"
                                                   "mail: kolbov@niiet.ru",
@@ -1299,7 +1300,7 @@ static int niietcm4_write_block(struct flash_bank *bank, const uint8_t *buffer,
                        &write_algorithm) != ERROR_OK) {
                LOG_WARNING("no working area available, can't do block memory writes");
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
-       };
+       }
 
        retval = target_write_buffer(target, write_algorithm->address,
                        sizeof(niietcm4_flash_write_code), niietcm4_flash_write_code);
@@ -1319,7 +1320,7 @@ static int niietcm4_write_block(struct flash_bank *bank, const uint8_t *buffer,
                        LOG_WARNING("no large enough working area available, can't do block memory writes");
                        return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
                }
-       };
+       }
 
        init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT); /* write_cmd base (in), status (out) */
        init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);    /* count (128bit) */
@@ -1583,9 +1584,11 @@ static int niietcm4_probe_k1921vk01t(struct flash_bank *bank)
 
                char info_bootflash_addr_str[64];
                if (niietcm4_info->bflash_info_remap)
-                       snprintf(info_bootflash_addr_str, sizeof(info_bootflash_addr_str), "0x%08x base adress", bank->base);
+                       snprintf(info_bootflash_addr_str, sizeof(info_bootflash_addr_str),
+                                       TARGET_ADDR_FMT " base adress", bank->base);
                else
-                       snprintf(info_bootflash_addr_str, sizeof(info_bootflash_addr_str), "not maped to global adress space");
+                       snprintf(info_bootflash_addr_str, sizeof(info_bootflash_addr_str),
+                                       "not mapped to global adress space");
 
                snprintf(niietcm4_info->chip_brief,
                                sizeof(niietcm4_info->chip_brief),
@@ -1719,14 +1722,14 @@ static int niietcm4_auto_probe(struct flash_bank *bank)
 static int get_niietcm4_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        struct niietcm4_flash_bank *niietcm4_info = bank->driver_priv;
-       LOG_INFO("\nNIIET Cortex M4F %s\n%s", niietcm4_info->chip_name, niietcm4_info->chip_brief);
+       LOG_INFO("\nNIIET Cortex-M4F %s\n%s", niietcm4_info->chip_name, niietcm4_info->chip_brief);
        snprintf(buf, buf_size, " ");
 
        return ERROR_OK;
 }
 
 
-struct flash_driver niietcm4_flash = {
+const struct flash_driver niietcm4_flash = {
        .name = "niietcm4",
        .usage = "flash bank <name> niietcm4 <base> <size> 0 0 <target#>",
        .commands = niietcm4_command_handlers,
@@ -1740,4 +1743,5 @@ struct flash_driver niietcm4_flash = {
        .erase_check = default_flash_blank_check,
        .protect_check = niietcm4_protect_check,
        .info = get_niietcm4_info,
+       .free_driver_priv = default_flash_free_driver_priv,
 };