1 // SPDX-License-Identifier: GPL-2.0-or-later
3 /***************************************************************************
4 * Copyright (C) 2013-2015,2019-2020 Synopsys, Inc. *
5 * Frank Dols <frank.dols@synopsys.com> *
6 * Mischa Jonker <mischa.jonker@synopsys.com> *
7 * Anton Kolesov <anton.kolesov@synopsys.com> *
8 * Evgeniy Didin <didin@synopsys.com> *
9 ***************************************************************************/
16 #include <helper/nvp.h>
18 /* --------------------------------------------------------------------------
20 * ARC targets expose command interface.
21 * It can be accessed via GDB through the (gdb) monitor command.
23 * ------------------------------------------------------------------------- */
27 CFG_ADD_REG_TYPE_FLAG
,
28 CFG_ADD_REG_TYPE_STRUCT
,
30 /* Add flags register data type */
31 enum add_reg_type_flags
{
32 CFG_ADD_REG_TYPE_FLAGS_NAME
,
33 CFG_ADD_REG_TYPE_FLAGS_FLAG
,
36 static const struct nvp nvp_add_reg_type_flags_opts
[] = {
37 { .name
= "-name", .value
= CFG_ADD_REG_TYPE_FLAGS_NAME
},
38 { .name
= "-flag", .value
= CFG_ADD_REG_TYPE_FLAGS_FLAG
},
39 { .name
= NULL
, .value
= -1 }
42 /* Helper function to check if all field required for register
44 static const char *validate_register(const struct arc_reg_desc
* const reg
, bool arch_num_set
)
46 /* Check that required fields are set */
48 return "-name option is required";
49 if (!reg
->gdb_xml_feature
)
50 return "-feature option is required";
52 return "-num option is required";
53 if (reg
->is_bcr
&& reg
->is_core
)
54 return "Register cannot be both -core and -bcr.";
58 /* Helper function to read the name of register type or register from
60 static int jim_arc_read_reg_name_field(struct jim_getopt_info
*goi
,
61 const char **name
, int *name_len
)
66 Jim_WrongNumArgs(goi
->interp
, goi
->argc
, goi
->argv
, "-name <name> ...");
69 e
= jim_getopt_string(goi
, name
, name_len
);
73 /* Helper function to read bitfields/flags of register type. */
74 static int jim_arc_read_reg_type_field(struct jim_getopt_info
*goi
, const char **field_name
, int *field_name_len
,
75 struct arc_reg_bitfield
*bitfields
, int cur_field
, int type
)
77 jim_wide start_pos
, end_pos
;
80 if ((type
== CFG_ADD_REG_TYPE_STRUCT
&& goi
->argc
< 3) ||
81 (type
== CFG_ADD_REG_TYPE_FLAG
&& goi
->argc
< 2)) {
82 Jim_SetResultFormatted(goi
->interp
, "Not enough arguments after -flag/-bitfield");
86 e
= jim_getopt_string(goi
, field_name
, field_name_len
);
90 /* read start position of bitfield/flag */
91 e
= jim_getopt_wide(goi
, &start_pos
);
97 /* Check if any arguments remain,
98 * set bitfields[cur_field].end if flag is multibit */
100 /* Check current argv[0], if it is equal to "-flag",
101 * than bitfields[cur_field].end remains start */
102 if ((strcmp(Jim_String(goi
->argv
[0]), "-flag") && type
== CFG_ADD_REG_TYPE_FLAG
)
103 || (type
== CFG_ADD_REG_TYPE_STRUCT
)) {
104 e
= jim_getopt_wide(goi
, &end_pos
);
106 Jim_SetResultFormatted(goi
->interp
, "Error reading end position");
111 bitfields
[cur_field
].bitfield
.start
= start_pos
;
112 bitfields
[cur_field
].bitfield
.end
= end_pos
;
113 if ((end_pos
!= start_pos
) || (type
== CFG_ADD_REG_TYPE_STRUCT
))
114 bitfields
[cur_field
].bitfield
.type
= REG_TYPE_INT
;
118 static COMMAND_HELPER(arc_handle_add_reg_type_flags_ops
, struct arc_reg_data_type
*type
)
120 struct reg_data_type_flags_field
*fields
= type
->reg_type_flags_field
;
121 struct arc_reg_bitfield
*bitfields
= type
->bitfields
;
122 struct reg_data_type_flags
*flags
= &type
->data_type_flags
;
123 unsigned int cur_field
= 0;
126 const struct nvp
*n
= nvp_name2value(nvp_add_reg_type_flags_opts
, CMD_ARGV
[0]);
130 case CFG_ADD_REG_TYPE_FLAGS_NAME
:
132 return ERROR_COMMAND_ARGUMENT_INVALID
;
134 const char *name
= CMD_ARGV
[0];
138 if (strlen(name
) >= REG_TYPE_MAX_NAME_LENGTH
) {
139 command_print(CMD
, "Reg type name is too big.");
140 return ERROR_COMMAND_ARGUMENT_INVALID
;
143 strcpy((void *)type
->data_type
.id
, name
);
146 case CFG_ADD_REG_TYPE_FLAGS_FLAG
:
148 return ERROR_COMMAND_ARGUMENT_INVALID
;
151 const char *field_name
= CMD_ARGV
[0];
152 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], val
);
155 bitfields
[cur_field
].bitfield
.start
= val
;
156 bitfields
[cur_field
].bitfield
.end
= val
;
158 if (strlen(field_name
) >= REG_TYPE_MAX_NAME_LENGTH
) {
159 command_print(CMD
, "Reg type field_name is too big.");
160 return ERROR_COMMAND_ARGUMENT_INVALID
;
163 fields
[cur_field
].name
= bitfields
[cur_field
].name
;
164 strcpy(bitfields
[cur_field
].name
, field_name
);
166 fields
[cur_field
].bitfield
= &bitfields
[cur_field
].bitfield
;
168 fields
[cur_field
- 1].next
= &fields
[cur_field
];
170 flags
->fields
= fields
;
176 nvp_unknown_command_print(CMD
, nvp_add_reg_type_flags_opts
, NULL
, CMD_ARGV
[-1]);
177 return ERROR_COMMAND_ARGUMENT_INVALID
;
181 if (!type
->data_type
.id
) {
182 command_print(CMD
, "-name is a required option");
183 return ERROR_COMMAND_ARGUMENT_INVALID
;
189 COMMAND_HANDLER(arc_handle_add_reg_type_flags
)
195 struct target
*target
= get_current_target(CMD_CTX
);
197 command_print(CMD
, "No current target");
201 /* Check if the amount of arguments is not zero */
203 return ERROR_COMMAND_SYNTAX_ERROR
;
205 /* Estimate number of registers as (argc - 2)/3 as each -flag option has 2
206 * arguments while -name is required. */
207 unsigned int fields_sz
= (CMD_ARGC
- 2) / 3;
209 /* The maximum amount of bitfields is 32 */
210 if (fields_sz
> 32) {
211 command_print(CMD
, "The amount of bitfields exceed 32");
212 return ERROR_COMMAND_ARGUMENT_INVALID
;
215 struct arc_reg_data_type
*type
= calloc(1, sizeof(*type
));
216 struct reg_data_type_flags_field
*fields
= calloc(fields_sz
, sizeof(*fields
));
217 struct arc_reg_bitfield
*bitfields
= calloc(fields_sz
, sizeof(*bitfields
));
218 if (!type
|| !fields
|| !bitfields
) {
219 LOG_ERROR("Out of memory");
223 struct reg_data_type_flags
*flags
= &type
->data_type_flags
;
224 type
->reg_type_flags_field
= fields
;
226 /* Initialize type */
227 type
->bitfields
= bitfields
;
228 type
->data_type
.id
= type
->data_type_id
;
229 type
->data_type
.type
= REG_TYPE_ARCH_DEFINED
;
230 type
->data_type
.type_class
= REG_TYPE_CLASS_FLAGS
;
231 type
->data_type
.reg_type_flags
= flags
;
232 flags
->size
= 4; /* For now ARC has only 32-bit registers */
234 retval
= CALL_COMMAND_HANDLER(arc_handle_add_reg_type_flags_ops
, type
);
235 if (retval
!= ERROR_OK
)
238 arc_reg_data_type_add(target
, type
);
240 LOG_DEBUG("added flags type {name=%s}", type
->data_type
.id
);
252 /* Add struct register data type */
253 enum add_reg_type_struct
{
254 CFG_ADD_REG_TYPE_STRUCT_NAME
,
255 CFG_ADD_REG_TYPE_STRUCT_BITFIELD
,
258 static struct jim_nvp nvp_add_reg_type_struct_opts
[] = {
259 { .name
= "-name", .value
= CFG_ADD_REG_TYPE_STRUCT_NAME
},
260 { .name
= "-bitfield", .value
= CFG_ADD_REG_TYPE_STRUCT_BITFIELD
},
261 { .name
= NULL
, .value
= -1 }
264 COMMAND_HANDLER(arc_handle_set_aux_reg
)
267 return ERROR_COMMAND_SYNTAX_ERROR
;
269 struct target
*target
= get_current_target(CMD_CTX
);
271 command_print(CMD
, "No current target");
275 /* Register number */
277 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
281 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
283 struct arc_common
*arc
= target_to_arc(target
);
286 CHECK_RETVAL(arc_jtag_write_aux_reg_one(&arc
->jtag_info
, regnum
, value
));
291 COMMAND_HANDLER(arc_handle_get_aux_reg
)
294 return ERROR_COMMAND_SYNTAX_ERROR
;
296 struct target
*target
= get_current_target(CMD_CTX
);
298 command_print(CMD
, "No current target");
302 /* Register number */
304 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
306 struct arc_common
*arc
= target_to_arc(target
);
310 CHECK_RETVAL(arc_jtag_read_aux_reg_one(&arc
->jtag_info
, regnum
, &value
));
312 command_print(CMD
, "0x%" PRIx32
, value
);
317 COMMAND_HANDLER(arc_handle_get_core_reg
)
320 return ERROR_COMMAND_SYNTAX_ERROR
;
322 struct target
*target
= get_current_target(CMD_CTX
);
324 command_print(CMD
, "No current target");
328 /* Register number */
330 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
331 if (regnum
> CORE_REG_MAX_NUMBER
|| regnum
== ARC_R61
|| regnum
== ARC_R62
) {
332 command_print(CMD
, "Core register number %i "
333 "is invalid. Must less then 64 and not 61 and 62.", regnum
);
334 return ERROR_COMMAND_ARGUMENT_INVALID
;
337 struct arc_common
*arc
= target_to_arc(target
);
342 CHECK_RETVAL(arc_jtag_read_core_reg_one(&arc
->jtag_info
, regnum
, &value
));
344 command_print(CMD
, "0x%" PRIx32
, value
);
349 COMMAND_HANDLER(arc_handle_set_core_reg
)
352 return ERROR_COMMAND_SYNTAX_ERROR
;
354 struct target
*target
= get_current_target(CMD_CTX
);
356 command_print(CMD
, "No current target");
360 /* Register number */
362 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
363 if (regnum
> CORE_REG_MAX_NUMBER
|| regnum
== ARC_R61
|| regnum
== ARC_R62
) {
364 command_print(CMD
, "Core register number %i "
365 "is invalid. Must less then 64 and not 61 and 62.", regnum
);
366 return ERROR_COMMAND_ARGUMENT_INVALID
;
371 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
373 struct arc_common
*arc
= target_to_arc(target
);
376 CHECK_RETVAL(arc_jtag_write_core_reg_one(&arc
->jtag_info
, regnum
, value
));
381 static const struct command_registration arc_jtag_command_group
[] = {
383 .name
= "get-aux-reg",
384 .handler
= arc_handle_get_aux_reg
,
385 .mode
= COMMAND_EXEC
,
386 .help
= "Get AUX register by number. This command does a "
387 "raw JTAG request that bypasses OpenOCD register cache "
388 "and thus is unsafe and can have unexpected consequences. "
389 "Use at your own risk.",
393 .name
= "set-aux-reg",
394 .handler
= arc_handle_set_aux_reg
,
395 .mode
= COMMAND_EXEC
,
396 .help
= "Set AUX register by number. This command does a "
397 "raw JTAG request that bypasses OpenOCD register cache "
398 "and thus is unsafe and can have unexpected consequences. "
399 "Use at your own risk.",
400 .usage
= "<regnum> <value>"
403 .name
= "get-core-reg",
404 .handler
= arc_handle_get_core_reg
,
405 .mode
= COMMAND_EXEC
,
406 .help
= "Get/Set core register by number. This command does a "
407 "raw JTAG request that bypasses OpenOCD register cache "
408 "and thus is unsafe and can have unexpected consequences. "
409 "Use at your own risk.",
410 .usage
= "<regnum> [<value>]"
413 .name
= "set-core-reg",
414 .handler
= arc_handle_set_core_reg
,
415 .mode
= COMMAND_EXEC
,
416 .help
= "Get/Set core register by number. This command does a "
417 "raw JTAG request that bypasses OpenOCD register cache "
418 "and thus is unsafe and can have unexpected consequences. "
419 "Use at your own risk.",
420 .usage
= "<regnum> [<value>]"
422 COMMAND_REGISTRATION_DONE
426 /* This function supports only bitfields. */
427 static int jim_arc_add_reg_type_struct(Jim_Interp
*interp
, int argc
,
428 Jim_Obj
* const *argv
)
430 struct jim_getopt_info goi
;
431 JIM_CHECK_RETVAL(jim_getopt_setup(&goi
, interp
, argc
-1, argv
+1));
435 struct command_context
*ctx
;
436 struct target
*target
;
438 ctx
= current_command_context(interp
);
440 target
= get_current_target(ctx
);
442 Jim_SetResultFormatted(goi
.interp
, "No current target");
448 /* Check if the amount of arguments is not zero */
450 Jim_SetResultFormatted(goi
.interp
, "The command has no arguments");
454 /* Estimate number of registers as (argc - 2)/4 as each -bitfield option has 3
455 * arguments while -name is required. */
456 unsigned int fields_sz
= (goi
.argc
- 2) / 4;
457 unsigned int cur_field
= 0;
459 /* The maximum amount of bitfields is 32 */
460 if (fields_sz
> 32) {
461 Jim_SetResultFormatted(goi
.interp
, "The amount of bitfields exceed 32");
465 struct arc_reg_data_type
*type
= calloc(1, sizeof(*type
));
466 struct reg_data_type_struct
*struct_type
= &type
->data_type_struct
;
467 struct reg_data_type_struct_field
*fields
= calloc(fields_sz
, sizeof(*fields
));
468 type
->reg_type_struct_field
= fields
;
469 struct arc_reg_bitfield
*bitfields
= calloc(fields_sz
, sizeof(*bitfields
));
470 if (!(type
&& fields
&& bitfields
)) {
471 Jim_SetResultFormatted(goi
.interp
, "Failed to allocate memory.");
475 /* Initialize type */
476 type
->data_type
.id
= type
->data_type_id
;
477 type
->bitfields
= bitfields
;
478 type
->data_type
.type
= REG_TYPE_ARCH_DEFINED
;
479 type
->data_type
.type_class
= REG_TYPE_CLASS_STRUCT
;
480 type
->data_type
.reg_type_struct
= struct_type
;
481 struct_type
->size
= 4; /* For now ARC has only 32-bit registers */
483 while (goi
.argc
> 0 && e
== JIM_OK
) {
485 e
= jim_getopt_nvp(&goi
, nvp_add_reg_type_struct_opts
, &n
);
487 jim_getopt_nvp_unknown(&goi
, nvp_add_reg_type_struct_opts
, 0);
492 case CFG_ADD_REG_TYPE_STRUCT_NAME
:
494 const char *name
= NULL
;
497 e
= jim_arc_read_reg_name_field(&goi
, &name
, &name_len
);
499 Jim_SetResultFormatted(goi
.interp
, "Unable to read reg name.");
503 if (name_len
> REG_TYPE_MAX_NAME_LENGTH
) {
504 Jim_SetResultFormatted(goi
.interp
, "Reg type name is too big.");
508 strncpy((void *)type
->data_type
.id
, name
, name_len
);
509 if (!type
->data_type
.id
) {
510 Jim_SetResultFormatted(goi
.interp
, "Unable to setup reg type name.");
516 case CFG_ADD_REG_TYPE_STRUCT_BITFIELD
:
518 const char *field_name
= NULL
;
519 int field_name_len
= 0;
520 e
= jim_arc_read_reg_type_field(&goi
, &field_name
, &field_name_len
, bitfields
,
521 cur_field
, CFG_ADD_REG_TYPE_STRUCT
);
523 Jim_SetResultFormatted(goi
.interp
, "Unable to add reg_type_struct field.");
527 if (field_name_len
> REG_TYPE_MAX_NAME_LENGTH
) {
528 Jim_SetResultFormatted(goi
.interp
, "Reg type field_name_len is too big.");
532 fields
[cur_field
].name
= bitfields
[cur_field
].name
;
533 strncpy(bitfields
[cur_field
].name
, field_name
, field_name_len
);
534 if (!fields
[cur_field
].name
) {
535 Jim_SetResultFormatted(goi
.interp
, "Unable to setup field name. ");
539 fields
[cur_field
].bitfield
= &(bitfields
[cur_field
].bitfield
);
540 fields
[cur_field
].use_bitfields
= true;
542 fields
[cur_field
- 1].next
= &(fields
[cur_field
]);
544 struct_type
->fields
= fields
;
553 if (!type
->data_type
.id
) {
554 Jim_SetResultFormatted(goi
.interp
, "-name is a required option");
558 arc_reg_data_type_add(target
, type
);
559 LOG_DEBUG("added struct type {name=%s}", type
->data_type
.id
);
573 CFG_ADD_REG_ARCH_NUM
,
576 CFG_ADD_REG_GDB_FEATURE
,
581 static struct jim_nvp opts_nvp_add_reg
[] = {
582 { .name
= "-name", .value
= CFG_ADD_REG_NAME
},
583 { .name
= "-num", .value
= CFG_ADD_REG_ARCH_NUM
},
584 { .name
= "-core", .value
= CFG_ADD_REG_IS_CORE
},
585 { .name
= "-bcr", .value
= CFG_ADD_REG_IS_BCR
},
586 { .name
= "-feature", .value
= CFG_ADD_REG_GDB_FEATURE
},
587 { .name
= "-type", .value
= CFG_ADD_REG_TYPE
},
588 { .name
= "-g", .value
= CFG_ADD_REG_GENERAL
},
589 { .name
= NULL
, .value
= -1 }
592 void free_reg_desc(struct arc_reg_desc
*r
)
595 free(r
->gdb_xml_feature
);
599 static int jim_arc_add_reg(Jim_Interp
*interp
, int argc
, Jim_Obj
* const *argv
)
601 struct jim_getopt_info goi
;
602 JIM_CHECK_RETVAL(jim_getopt_setup(&goi
, interp
, argc
-1, argv
+1));
604 struct arc_reg_desc
*reg
= calloc(1, sizeof(*reg
));
606 Jim_SetResultFormatted(goi
.interp
, "Failed to allocate memory.");
610 /* There is no architecture number that we could treat as invalid, so
611 * separate variable required to ensure that arch num has been set. */
612 bool arch_num_set
= false;
613 const char *type_name
= "int"; /* Default type */
614 int type_name_len
= strlen(type_name
);
617 /* At least we need to specify 4 parameters: name, number and gdb_feature,
618 * which means there should be 6 arguments. Also there can be additional parameters
619 * "-type <type>", "-g" and "-core" or "-bcr" which makes maximum 10 parameters. */
620 if (goi
.argc
< 6 || goi
.argc
> 10) {
622 Jim_SetResultFormatted(goi
.interp
,
623 "Should be at least 6 arguments and not greater than 10: "
624 " -name <name> -num <num> -feature <gdb_feature> "
625 " [-type <type_name>] [-core|-bcr] [-g].");
630 while (goi
.argc
> 0) {
632 e
= jim_getopt_nvp(&goi
, opts_nvp_add_reg
, &n
);
634 jim_getopt_nvp_unknown(&goi
, opts_nvp_add_reg
, 0);
640 case CFG_ADD_REG_NAME
:
642 const char *reg_name
= NULL
;
643 int reg_name_len
= 0;
645 e
= jim_arc_read_reg_name_field(&goi
, ®_name
, ®_name_len
);
647 Jim_SetResultFormatted(goi
.interp
, "Unable to read register name.");
652 reg
->name
= strndup(reg_name
, reg_name_len
);
655 case CFG_ADD_REG_IS_CORE
:
658 case CFG_ADD_REG_IS_BCR
:
661 case CFG_ADD_REG_ARCH_NUM
:
667 Jim_WrongNumArgs(interp
, goi
.argc
, goi
.argv
, "-num <int> ...");
671 e
= jim_getopt_wide(&goi
, &archnum
);
677 reg
->arch_num
= archnum
;
681 case CFG_ADD_REG_GDB_FEATURE
:
683 const char *feature
= NULL
;
686 e
= jim_arc_read_reg_name_field(&goi
, &feature
, &feature_len
);
688 Jim_SetResultFormatted(goi
.interp
, "Unable to read gdb_feature.");
693 reg
->gdb_xml_feature
= strndup(feature
, feature_len
);
696 case CFG_ADD_REG_TYPE
:
697 e
= jim_arc_read_reg_name_field(&goi
, &type_name
, &type_name_len
);
699 Jim_SetResultFormatted(goi
.interp
, "Unable to read register type.");
705 case CFG_ADD_REG_GENERAL
:
706 reg
->is_general
= true;
709 LOG_DEBUG("Error: Unknown parameter");
715 /* Check that required fields are set */
716 const char * const errmsg
= validate_register(reg
, arch_num_set
);
718 Jim_SetResultFormatted(goi
.interp
, errmsg
);
723 /* Add new register */
724 struct command_context
*ctx
;
725 struct target
*target
;
727 ctx
= current_command_context(interp
);
729 target
= get_current_target(ctx
);
731 Jim_SetResultFormatted(goi
.interp
, "No current target");
736 reg
->target
= target
;
738 e
= arc_reg_add(target
, reg
, type_name
, type_name_len
);
739 if (e
== ERROR_ARC_REGTYPE_NOT_FOUND
) {
740 Jim_SetResultFormatted(goi
.interp
,
741 "Cannot find type `%s' for register `%s'.",
742 type_name
, reg
->name
);
750 /* arc set-reg-exists ($reg_name)+
751 * Accepts any amount of register names - will set them as existing in a loop.*/
752 COMMAND_HANDLER(arc_set_reg_exists
)
754 struct target
* const target
= get_current_target(CMD_CTX
);
756 command_print(CMD
, "Unable to get current target.");
761 command_print(CMD
, "At least one register name must be specified.");
762 return ERROR_COMMAND_SYNTAX_ERROR
;
765 for (unsigned int i
= 0; i
< CMD_ARGC
; i
++) {
766 const char * const reg_name
= CMD_ARGV
[i
];
767 struct reg
* const r
= arc_reg_get_by_name(target
->reg_cache
, reg_name
, true);
770 command_print(CMD
, "Register `%s' is not found.", reg_name
);
771 return ERROR_COMMAND_ARGUMENT_INVALID
;
780 /* arc reg-field ($reg_name) ($reg_field)
781 * Reads struct type register field */
782 COMMAND_HANDLER(arc_handle_get_reg_field
)
785 return ERROR_COMMAND_SYNTAX_ERROR
;
787 struct target
*target
= get_current_target(CMD_CTX
);
789 command_print(CMD
, "No current target");
793 const char *reg_name
= CMD_ARGV
[0];
794 const char *field_name
= CMD_ARGV
[1];
796 int retval
= arc_reg_get_field(target
, reg_name
, field_name
, &value
);
801 case ERROR_ARC_REGISTER_NOT_FOUND
:
803 "Register `%s' has not been found.", reg_name
);
804 return ERROR_COMMAND_ARGUMENT_INVALID
;
805 case ERROR_ARC_REGISTER_IS_NOT_STRUCT
:
807 "Register `%s' must have 'struct' type.", reg_name
);
808 return ERROR_COMMAND_ARGUMENT_INVALID
;
809 case ERROR_ARC_REGISTER_FIELD_NOT_FOUND
:
811 "Field `%s' has not been found in register `%s'.",
812 field_name
, reg_name
);
813 return ERROR_COMMAND_ARGUMENT_INVALID
;
814 case ERROR_ARC_FIELD_IS_NOT_BITFIELD
:
816 "Field `%s' is not a 'bitfield' field in a structure.",
818 return ERROR_COMMAND_ARGUMENT_INVALID
;
820 /* Pass through other errors. */
824 command_print(CMD
, "0x%" PRIx32
, value
);
829 COMMAND_HANDLER(arc_l1_cache_disable_auto_cmd
)
833 struct arc_common
*arc
= target_to_arc(get_current_target(CMD_CTX
));
834 retval
= CALL_COMMAND_HANDLER(handle_command_parse_bool
,
835 &value
, "target has caches enabled");
836 arc
->has_l2cache
= value
;
837 arc
->has_dcache
= value
;
838 arc
->has_icache
= value
;
842 COMMAND_HANDLER(arc_l2_cache_disable_auto_cmd
)
844 struct arc_common
*arc
= target_to_arc(get_current_target(CMD_CTX
));
845 return CALL_COMMAND_HANDLER(handle_command_parse_bool
,
846 &arc
->has_l2cache
, "target has l2 cache enabled");
849 COMMAND_HANDLER(arc_handle_actionpoints_num
)
854 return ERROR_COMMAND_SYNTAX_ERROR
;
856 struct target
*target
= get_current_target(CMD_CTX
);
858 command_print(CMD
, "No current target");
862 struct arc_common
*arc
= target_to_arc(target
);
863 /* It is not possible to pass &arc->actionpoints_num directly to
864 * handle_command_parse_uint, because this value should be valid during
865 * "actionpoint reset, initiated by arc_set_actionpoints_num. */
866 uint32_t ap_num
= arc
->actionpoints_num
;
869 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], ap_num
);
870 int e
= arc_set_actionpoints_num(target
, ap_num
);
873 "Failed to set number of actionpoints");
878 command_print(CMD
, "%" PRIu32
, ap_num
);
883 /* ----- Exported target commands ------------------------------------------ */
885 static const struct command_registration arc_l2_cache_group_handlers
[] = {
888 .handler
= arc_l2_cache_disable_auto_cmd
,
891 .help
= "Disable or enable L2",
893 COMMAND_REGISTRATION_DONE
896 static const struct command_registration arc_cache_group_handlers
[] = {
899 .handler
= arc_l1_cache_disable_auto_cmd
,
901 .help
= "Disable or enable L1",
907 .help
= "L2 cache command group",
909 .chain
= arc_l2_cache_group_handlers
,
911 COMMAND_REGISTRATION_DONE
915 static const struct command_registration arc_core_command_handlers
[] = {
917 .name
= "add-reg-type-flags",
918 .handler
= arc_handle_add_reg_type_flags
,
919 .mode
= COMMAND_CONFIG
,
920 .usage
= "-name <string> -flag <name> <position> "
921 "[-flag <name> <position>]...",
922 .help
= "Add new 'flags' register data type. Only single bit flags "
923 "are supported. Type name is global. Bitsize of register is fixed "
927 .name
= "add-reg-type-struct",
928 .jim_handler
= jim_arc_add_reg_type_struct
,
929 .mode
= COMMAND_CONFIG
,
930 .usage
= "-name <string> -bitfield <name> <start> <end> "
931 "[-bitfield <name> <start> <end>]...",
932 .help
= "Add new 'struct' register data type. Only bit-fields are "
933 "supported so far, which means that for each bitfield start and end "
934 "position bits must be specified. GDB also support type-fields, "
935 "where common type can be used instead. Type name is global. Bitsize of "
936 "register is fixed at 32 bits.",
940 .jim_handler
= jim_arc_add_reg
,
941 .mode
= COMMAND_CONFIG
,
942 .usage
= "-name <string> -num <int> -feature <string> [-gdbnum <int>] "
943 "[-core|-bcr] [-type <type_name>] [-g]",
944 .help
= "Add new register. Name, architectural number and feature name "
945 "are required options. GDB regnum will default to previous register "
946 "(gdbnum + 1) and shouldn't be specified in most cases. Type "
947 "defaults to default GDB 'int'.",
950 .name
= "set-reg-exists",
951 .handler
= arc_set_reg_exists
,
953 .usage
= "<register-name> [<register-name>]...",
954 .help
= "Set that register exists. Accepts multiple register names as "
958 .name
= "get-reg-field",
959 .handler
= arc_handle_get_reg_field
,
961 .usage
= "<regname> <field_name>",
962 .help
= "Returns value of field in a register with 'struct' type.",
967 .help
= "ARC JTAG specific commands",
969 .chain
= arc_jtag_command_group
,
974 .help
= "cache command group",
976 .chain
= arc_cache_group_handlers
,
979 .name
= "num-actionpoints",
980 .handler
= arc_handle_actionpoints_num
,
982 .usage
= "[<unsigned integer>]",
983 .help
= "Prints or sets amount of actionpoints in the processor.",
985 COMMAND_REGISTRATION_DONE
988 const struct command_registration arc_monitor_command_handlers
[] = {
992 .help
= "ARC monitor command group",
994 .chain
= arc_core_command_handlers
,
996 COMMAND_REGISTRATION_DONE