target: use one second timeout while halting target at gdb attach
[fw/openocd] / src / target / nds32_cmd.c
index 8970fd7eec70c2911dc3bfbc55c1b337a6a7d1c5..d7d040e4b963a0205a8257e9292ebd902f43cbde 100644 (file)
@@ -13,9 +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.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -48,7 +46,7 @@ COMMAND_HANDLER(handle_nds32_dssim_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -59,7 +57,7 @@ COMMAND_HANDLER(handle_nds32_dssim_command)
                        nds32->step_isr_enable = false;
        }
 
-       command_print(CMD_CTX, "%s: $INT_MASK.DSSIM: %d", target_name(target),
+       command_print(CMD, "%s: $INT_MASK.DSSIM: %d", target_name(target),
                        nds32->step_isr_enable);
 
        return ERROR_OK;
@@ -73,7 +71,7 @@ COMMAND_HANDLER(handle_nds32_memory_access_command)
        struct nds32_memory *memory = &(nds32->memory);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -90,7 +88,7 @@ COMMAND_HANDLER(handle_nds32_memory_access_command)
 
                aice_memory_access(aice, memory->access_channel);
        } else {
-               command_print(CMD_CTX, "%s: memory access channel: %s",
+               command_print(CMD, "%s: memory access channel: %s",
                                target_name(target),
                                NDS_MEMORY_ACCESS_NAME[memory->access_channel]);
        }
@@ -105,18 +103,18 @@ COMMAND_HANDLER(handle_nds32_memory_mode_command)
        struct aice_port_s *aice = target_to_aice(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
        if (CMD_ARGC > 0) {
 
                if (nds32->edm.access_control == false) {
-                       command_print(CMD_CTX, "%s does not support ACC_CTL. "
+                       command_print(CMD, "%s does not support ACC_CTL. "
                                        "Set memory mode to MEMORY", target_name(target));
                        nds32->memory.mode = NDS_MEMORY_SELECT_MEM;
                } else if (nds32->edm.direct_access_local_memory == false) {
-                       command_print(CMD_CTX, "%s does not support direct access "
+                       command_print(CMD, "%s does not support direct access "
                                        "local memory. Set memory mode to MEMORY",
                                        target_name(target));
                        nds32->memory.mode = NDS_MEMORY_SELECT_MEM;
@@ -130,13 +128,13 @@ COMMAND_HANDLER(handle_nds32_memory_mode_command)
                                nds32->memory.mode = NDS_MEMORY_SELECT_MEM;
                        } else if (strcmp(CMD_ARGV[0], "ilm") == 0) {
                                if (nds32->memory.ilm_base == 0)
-                                       command_print(CMD_CTX, "%s does not support ILM",
+                                       command_print(CMD, "%s does not support ILM",
                                                        target_name(target));
                                else
                                        nds32->memory.mode = NDS_MEMORY_SELECT_ILM;
                        } else if (strcmp(CMD_ARGV[0], "dlm") == 0) {
                                if (nds32->memory.dlm_base == 0)
-                                       command_print(CMD_CTX, "%s does not support DLM",
+                                       command_print(CMD, "%s does not support DLM",
                                                        target_name(target));
                                else
                                        nds32->memory.mode = NDS_MEMORY_SELECT_DLM;
@@ -147,7 +145,7 @@ COMMAND_HANDLER(handle_nds32_memory_mode_command)
                }
        }
 
-       command_print(CMD_CTX, "%s: memory mode: %s",
+       command_print(CMD, "%s: memory mode: %s",
                        target_name(target),
                        NDS_MEMORY_SELECT_NAME[nds32->memory.mode]);
 
@@ -164,7 +162,7 @@ COMMAND_HANDLER(handle_nds32_cache_command)
        int result;
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -175,30 +173,30 @@ COMMAND_HANDLER(handle_nds32_cache_command)
                                /* D$ write back */
                                result = aice_cache_ctl(aice, AICE_CACHE_CTL_L1D_WBALL, 0);
                                if (result != ERROR_OK) {
-                                       command_print(CMD_CTX, "%s: Write back data cache...failed",
+                                       command_print(CMD, "%s: Write back data cache...failed",
                                                        target_name(target));
                                        return result;
                                }
 
-                               command_print(CMD_CTX, "%s: Write back data cache...done",
+                               command_print(CMD, "%s: Write back data cache...done",
                                                target_name(target));
 
                                /* D$ invalidate */
                                result = aice_cache_ctl(aice, AICE_CACHE_CTL_L1D_INVALALL, 0);
                                if (result != ERROR_OK) {
-                                       command_print(CMD_CTX, "%s: Invalidate data cache...failed",
+                                       command_print(CMD, "%s: Invalidate data cache...failed",
                                                        target_name(target));
                                        return result;
                                }
 
-                               command_print(CMD_CTX, "%s: Invalidate data cache...done",
+                               command_print(CMD, "%s: Invalidate data cache...done",
                                                target_name(target));
                        } else {
                                if (dcache->line_size == 0)
-                                       command_print(CMD_CTX, "%s: No data cache",
+                                       command_print(CMD, "%s: No data cache",
                                                        target_name(target));
                                else
-                                       command_print(CMD_CTX, "%s: Data cache disabled",
+                                       command_print(CMD, "%s: Data cache disabled",
                                                        target_name(target));
                        }
 
@@ -206,23 +204,23 @@ COMMAND_HANDLER(handle_nds32_cache_command)
                                /* I$ invalidate */
                                result = aice_cache_ctl(aice, AICE_CACHE_CTL_L1I_INVALALL, 0);
                                if (result != ERROR_OK) {
-                                       command_print(CMD_CTX, "%s: Invalidate instruction cache...failed",
+                                       command_print(CMD, "%s: Invalidate instruction cache...failed",
                                                        target_name(target));
                                        return result;
                                }
 
-                               command_print(CMD_CTX, "%s: Invalidate instruction cache...done",
+                               command_print(CMD, "%s: Invalidate instruction cache...done",
                                                target_name(target));
                        } else {
                                if (icache->line_size == 0)
-                                       command_print(CMD_CTX, "%s: No instruction cache",
+                                       command_print(CMD, "%s: No instruction cache",
                                                        target_name(target));
                                else
-                                       command_print(CMD_CTX, "%s: Instruction cache disabled",
+                                       command_print(CMD, "%s: Instruction cache disabled",
                                                        target_name(target));
                        }
                } else
-                       command_print(CMD_CTX, "No valid parameter");
+                       command_print(CMD, "No valid parameter");
        }
 
        return ERROR_OK;
@@ -237,14 +235,14 @@ COMMAND_HANDLER(handle_nds32_icache_command)
        int result;
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
        if (CMD_ARGC > 0) {
 
                if (icache->line_size == 0) {
-                       command_print(CMD_CTX, "%s: No instruction cache",
+                       command_print(CMD, "%s: No instruction cache",
                                        target_name(target));
                        return ERROR_OK;
                }
@@ -254,15 +252,15 @@ COMMAND_HANDLER(handle_nds32_icache_command)
                                /* I$ invalidate */
                                result = aice_cache_ctl(aice, AICE_CACHE_CTL_L1I_INVALALL, 0);
                                if (result != ERROR_OK) {
-                                       command_print(CMD_CTX, "%s: Invalidate instruction cache...failed",
+                                       command_print(CMD, "%s: Invalidate instruction cache...failed",
                                                        target_name(target));
                                        return result;
                                }
 
-                               command_print(CMD_CTX, "%s: Invalidate instruction cache...done",
+                               command_print(CMD, "%s: Invalidate instruction cache...done",
                                                target_name(target));
                        } else {
-                               command_print(CMD_CTX, "%s: Instruction cache disabled",
+                               command_print(CMD, "%s: Instruction cache disabled",
                                                target_name(target));
                        }
                } else if (strcmp(CMD_ARGV[0], "enable") == 0) {
@@ -276,7 +274,7 @@ COMMAND_HANDLER(handle_nds32_icache_command)
                } else if (strcmp(CMD_ARGV[0], "dump") == 0) {
                        /* TODO: dump cache content */
                } else {
-                       command_print(CMD_CTX, "%s: No valid parameter", target_name(target));
+                       command_print(CMD, "%s: No valid parameter", target_name(target));
                }
        }
 
@@ -292,14 +290,14 @@ COMMAND_HANDLER(handle_nds32_dcache_command)
        int result;
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
        if (CMD_ARGC > 0) {
 
                if (dcache->line_size == 0) {
-                       command_print(CMD_CTX, "%s: No data cache", target_name(target));
+                       command_print(CMD, "%s: No data cache", target_name(target));
                        return ERROR_OK;
                }
 
@@ -308,26 +306,26 @@ COMMAND_HANDLER(handle_nds32_dcache_command)
                                /* D$ write back */
                                result = aice_cache_ctl(aice, AICE_CACHE_CTL_L1D_WBALL, 0);
                                if (result != ERROR_OK) {
-                                       command_print(CMD_CTX, "%s: Write back data cache...failed",
+                                       command_print(CMD, "%s: Write back data cache...failed",
                                                        target_name(target));
                                        return result;
                                }
 
-                               command_print(CMD_CTX, "%s: Write back data cache...done",
+                               command_print(CMD, "%s: Write back data cache...done",
                                                target_name(target));
 
                                /* D$ invalidate */
                                result = aice_cache_ctl(aice, AICE_CACHE_CTL_L1D_INVALALL, 0);
                                if (result != ERROR_OK) {
-                                       command_print(CMD_CTX, "%s: Invalidate data cache...failed",
+                                       command_print(CMD, "%s: Invalidate data cache...failed",
                                                        target_name(target));
                                        return result;
                                }
 
-                               command_print(CMD_CTX, "%s: Invalidate data cache...done",
+                               command_print(CMD, "%s: Invalidate data cache...done",
                                                target_name(target));
                        } else {
-                               command_print(CMD_CTX, "%s: Data cache disabled",
+                               command_print(CMD, "%s: Data cache disabled",
                                                target_name(target));
                        }
                } else if (strcmp(CMD_ARGV[0], "enable") == 0) {
@@ -341,7 +339,7 @@ COMMAND_HANDLER(handle_nds32_dcache_command)
                } else if (strcmp(CMD_ARGV[0], "dump") == 0) {
                        /* TODO: dump cache content */
                } else {
-                       command_print(CMD_CTX, "%s: No valid parameter", target_name(target));
+                       command_print(CMD, "%s: No valid parameter", target_name(target));
                }
        }
 
@@ -354,7 +352,7 @@ COMMAND_HANDLER(handle_nds32_auto_break_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -366,10 +364,10 @@ COMMAND_HANDLER(handle_nds32_auto_break_command)
        }
 
        if (nds32->auto_convert_hw_bp)
-               command_print(CMD_CTX, "%s: convert sw break to hw break on ROM: on",
+               command_print(CMD, "%s: convert sw break to hw break on ROM: on",
                                target_name(target));
        else
-               command_print(CMD_CTX, "%s: convert sw break to hw break on ROM: off",
+               command_print(CMD, "%s: convert sw break to hw break on ROM: off",
                                target_name(target));
 
        return ERROR_OK;
@@ -381,7 +379,7 @@ COMMAND_HANDLER(handle_nds32_virtual_hosting_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -393,9 +391,9 @@ COMMAND_HANDLER(handle_nds32_virtual_hosting_command)
        }
 
        if (nds32->virtual_hosting)
-               command_print(CMD_CTX, "%s: virtual hosting: on", target_name(target));
+               command_print(CMD, "%s: virtual hosting: on", target_name(target));
        else
-               command_print(CMD_CTX, "%s: virtual hosting: off", target_name(target));
+               command_print(CMD, "%s: virtual hosting: off", target_name(target));
 
        return ERROR_OK;
 }
@@ -406,7 +404,7 @@ COMMAND_HANDLER(handle_nds32_global_stop_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -431,7 +429,7 @@ COMMAND_HANDLER(handle_nds32_soft_reset_halt_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -456,7 +454,7 @@ COMMAND_HANDLER(handle_nds32_boot_time_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -472,7 +470,7 @@ COMMAND_HANDLER(handle_nds32_login_edm_passcode_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -487,7 +485,7 @@ COMMAND_HANDLER(handle_nds32_login_edm_operation_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -518,7 +516,7 @@ COMMAND_HANDLER(handle_nds32_reset_halt_as_init_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -538,7 +536,7 @@ COMMAND_HANDLER(handle_nds32_keep_target_edm_ctl_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -558,7 +556,7 @@ COMMAND_HANDLER(handle_nds32_decode_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -583,7 +581,7 @@ COMMAND_HANDLER(handle_nds32_decode_command)
                                                read_addr, &instruction))
                                return ERROR_FAIL;
 
-                       command_print(CMD_CTX, "%s", instruction.text);
+                       command_print(CMD, "%s", instruction.text);
 
                        read_addr += instruction.instruction_size;
                        i++;
@@ -601,7 +599,7 @@ COMMAND_HANDLER(handle_nds32_decode_command)
                if (ERROR_OK != nds32_evaluate_opcode(nds32, opcode, addr, &instruction))
                        return ERROR_FAIL;
 
-               command_print(CMD_CTX, "%s", instruction.text);
+               command_print(CMD, "%s", instruction.text);
        } else
                return ERROR_FAIL;
 
@@ -614,7 +612,7 @@ COMMAND_HANDLER(handle_nds32_word_access_mem_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -634,11 +632,11 @@ COMMAND_HANDLER(handle_nds32_query_target_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
-       command_print(CMD_CTX, "OCD");
+       command_print(CMD, "OCD");
 
        return ERROR_OK;
 }
@@ -649,7 +647,7 @@ COMMAND_HANDLER(handle_nds32_query_endian_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
@@ -657,9 +655,9 @@ COMMAND_HANDLER(handle_nds32_query_endian_command)
        nds32_get_mapped_reg(nds32, IR0, &value_psw);
 
        if (value_psw & 0x20)
-               command_print(CMD_CTX, "%s: BE", target_name(target));
+               command_print(CMD, "%s: BE", target_name(target));
        else
-               command_print(CMD_CTX, "%s: LE", target_name(target));
+               command_print(CMD, "%s: LE", target_name(target));
 
        return ERROR_OK;
 }
@@ -670,11 +668,11 @@ COMMAND_HANDLER(handle_nds32_query_cpuid_command)
        struct nds32 *nds32 = target_to_nds32(target);
 
        if (!is_nds32(nds32)) {
-               command_print(CMD_CTX, "current target isn't an Andes core");
+               command_print(CMD, "current target isn't an Andes core");
                return ERROR_FAIL;
        }
 
-       command_print(CMD_CTX, "CPUID: %s", target_name(target));
+       command_print(CMD, "CPUID: %s", target_name(target));
 
        return ERROR_OK;
 }
@@ -704,18 +702,25 @@ static int jim_nds32_bulk_write(Jim_Interp *interp, int argc, Jim_Obj * const *a
                return e;
 
        uint32_t *data = malloc(count * sizeof(uint32_t));
+       if (data == NULL)
+               return JIM_ERR;
+
        jim_wide i;
        for (i = 0; i < count; i++) {
                jim_wide tmp;
                e = Jim_GetOpt_Wide(&goi, &tmp);
-               if (e != JIM_OK)
+               if (e != JIM_OK) {
+                       free(data);
                        return e;
+               }
                data[i] = (uint32_t)tmp;
        }
 
        /* all args must be consumed */
-       if (goi.argc != 0)
+       if (goi.argc != 0) {
+               free(data);
                return JIM_ERR;
+       }
 
        struct target *target = Jim_CmdPrivData(goi.interp);
        int result;
@@ -811,7 +816,7 @@ static int jim_nds32_bulk_read(Jim_Interp *interp, int argc, Jim_Obj * const *ar
        uint32_t *data = malloc(count * sizeof(uint32_t));
        int result;
        result = target_read_buffer(target, address, count * 4, (uint8_t *)data);
-       char data_str[11];
+       char data_str[12];
 
        jim_wide i;
        Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
@@ -839,7 +844,7 @@ static int jim_nds32_read_edm_sr(Jim_Interp *interp, int argc, Jim_Obj * const *
        }
 
        int e;
-       char *edm_sr_name;
+       const char *edm_sr_name;
        int edm_sr_name_len;
        e = Jim_GetOpt_String(&goi, &edm_sr_name, &edm_sr_name_len);
        if (e != JIM_OK)
@@ -885,7 +890,7 @@ static int jim_nds32_write_edm_sr(Jim_Interp *interp, int argc, Jim_Obj * const
        }
 
        int e;
-       char *edm_sr_name;
+       const char *edm_sr_name;
        int edm_sr_name_len;
        e = Jim_GetOpt_String(&goi, &edm_sr_name, &edm_sr_name_len);
        if (e != JIM_OK)
@@ -1002,7 +1007,7 @@ static const struct command_registration nds32_exec_command_handlers[] = {
                .handler = handle_nds32_global_stop_command,
                .mode = COMMAND_ANY,
                .usage = "['on'|'off']",
-               .help = "turn on/off global stop. After turning on, every load/store" \
+               .help = "turn on/off global stop. After turning on, every load/store "
                         "instructions will be stopped to check memory access.",
        },
        {
@@ -1010,7 +1015,7 @@ static const struct command_registration nds32_exec_command_handlers[] = {
                .handler = handle_nds32_soft_reset_halt_command,
                .mode = COMMAND_ANY,
                .usage = "['on'|'off']",
-               .help = "as issuing rest-halt, to use soft-reset-halt or not." \
+               .help = "as issuing rest-halt, to use soft-reset-halt or not."
                         "the feature is for backward-compatible.",
        },
        {
@@ -1118,4 +1123,3 @@ const struct command_registration nds32_command_handlers[] = {
        },
        COMMAND_REGISTRATION_DONE
 };
-