Consolidate target selection code into single get_target() that handles both names and numbers. Provided by David Brownell <david-b@pacbell.net>
git-svn-id: svn://svn.berlios.de/openocd/trunk@1804 b42882b7-edfa-0310-969c-e2dbd0fdcd60__archive__
parent
cafad4969c
commit
c977616cda
|
@ -881,6 +881,8 @@ If the chip has 2 targets, use the names @b{_TARGETNAME0},
|
||||||
At no time should the name ``target0'' (the default target name if
|
At no time should the name ``target0'' (the default target name if
|
||||||
none was specified) be used. The name ``target0'' is a hard coded name
|
none was specified) be used. The name ``target0'' is a hard coded name
|
||||||
- the next target on the board will be some other number.
|
- the next target on the board will be some other number.
|
||||||
|
In the same way, avoid using target numbers even when they are
|
||||||
|
permitted; use the right target name(s) for your board.
|
||||||
|
|
||||||
The user (or board file) should reasonably be able to:
|
The user (or board file) should reasonably be able to:
|
||||||
|
|
||||||
|
@ -1702,7 +1704,8 @@ tap which then connects to the TDI pin.
|
||||||
@item @b{Note: Deprecated} - Index Numbers
|
@item @b{Note: Deprecated} - Index Numbers
|
||||||
@* Prior to 28/nov/2008, JTAG taps where numbered from 0..N this
|
@* Prior to 28/nov/2008, JTAG taps where numbered from 0..N this
|
||||||
feature is still present, however its use is highly discouraged and
|
feature is still present, however its use is highly discouraged and
|
||||||
should not be counted upon.
|
should not be counted upon. Update all of your scripts to use
|
||||||
|
TAP names rather than numbers.
|
||||||
@item @b{Multiple chips}
|
@item @b{Multiple chips}
|
||||||
@* If your board has multiple chips, you should be
|
@* If your board has multiple chips, you should be
|
||||||
able to @b{source} two configuration files, in the proper order, and
|
able to @b{source} two configuration files, in the proper order, and
|
||||||
|
@ -2045,8 +2048,8 @@ jtag configure DOTTED.NAME -event tap-disable @{
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item @b{NAME}
|
@item @b{NAME}
|
||||||
@* Is the name of the debug target. By convention it should be the tap
|
@* Is the name of the debug target. By convention it should be the tap
|
||||||
DOTTED.NAME, this name is also used to create the target object
|
DOTTED.NAME. This name is also used to create the target object
|
||||||
command.
|
command, and in other places the target needs to be identified.
|
||||||
@item @b{TYPE}
|
@item @b{TYPE}
|
||||||
@* Specifies the target type, i.e.: ARM7TDMI, or Cortex-M3. Currently supported targets are:
|
@* Specifies the target type, i.e.: ARM7TDMI, or Cortex-M3. Currently supported targets are:
|
||||||
@comment START types
|
@comment START types
|
||||||
|
@ -2254,7 +2257,7 @@ The @b{flash bank} command is used to configure one or more flash chips (or bank
|
||||||
|
|
||||||
@example
|
@example
|
||||||
@b{flash bank} <@var{driver}> <@var{base}> <@var{size}> <@var{chip_width}>
|
@b{flash bank} <@var{driver}> <@var{base}> <@var{size}> <@var{chip_width}>
|
||||||
<@var{bus_width}> <@var{target#}> [@var{driver_options ...}]
|
<@var{bus_width}> <@var{target}> [@var{driver_options ...}]
|
||||||
@end example
|
@end example
|
||||||
@cindex flash bank
|
@cindex flash bank
|
||||||
@*Configures a flash bank at <@var{base}> of <@var{size}> bytes and <@var{chip_width}>
|
@*Configures a flash bank at <@var{base}> of <@var{size}> bytes and <@var{chip_width}>
|
||||||
|
@ -2274,8 +2277,9 @@ perhaps configure a GPIO pin that controls the ``write protect'' pin
|
||||||
on the flash chip.
|
on the flash chip.
|
||||||
|
|
||||||
@b{flash bank cfi} <@var{base}> <@var{size}> <@var{chip_width}> <@var{bus_width}>
|
@b{flash bank cfi} <@var{base}> <@var{size}> <@var{chip_width}> <@var{bus_width}>
|
||||||
<@var{target#}> [@var{jedec_probe}|@var{x16_as_x8}]
|
<@var{target}> [@var{jedec_probe}|@var{x16_as_x8}]
|
||||||
@*CFI flashes require the number of the target they're connected to as an additional
|
@*CFI flashes require the name or number of the target they're connected to
|
||||||
|
as an additional
|
||||||
argument. The CFI driver makes use of a working area (specified for the target)
|
argument. The CFI driver makes use of a working area (specified for the target)
|
||||||
to significantly speed up operation.
|
to significantly speed up operation.
|
||||||
|
|
||||||
|
@ -2289,12 +2293,13 @@ The @var{jedec_probe} option is used to detect certain non-CFI flash ROMs, like
|
||||||
@subsubsection lpc2000 options
|
@subsubsection lpc2000 options
|
||||||
@cindex lpc2000 options
|
@cindex lpc2000 options
|
||||||
|
|
||||||
@b{flash bank lpc2000} <@var{base}> <@var{size}> 0 0 <@var{target#}> <@var{variant}>
|
@b{flash bank lpc2000} <@var{base}> <@var{size}> 0 0 <@var{target}> <@var{variant}>
|
||||||
<@var{clock}> [@var{calc_checksum}]
|
<@var{clock}> [@var{calc_checksum}]
|
||||||
@*LPC flashes don't require the chip and bus width to be specified. Additional
|
@*LPC flashes don't require the chip and bus width to be specified. Additional
|
||||||
parameters are the <@var{variant}>, which may be @var{lpc2000_v1} (older LPC21xx and LPC22xx)
|
parameters are the <@var{variant}>, which may be @var{lpc2000_v1} (older LPC21xx and LPC22xx)
|
||||||
or @var{lpc2000_v2} (LPC213x, LPC214x, LPC210[123], LPC23xx and LPC24xx), the number
|
or @var{lpc2000_v2} (LPC213x, LPC214x, LPC210[123], LPC23xx and LPC24xx),
|
||||||
of the target this flash belongs to (first is 0), the frequency at which the core
|
the name or number of the target this flash belongs to (first is 0),
|
||||||
|
the frequency at which the core
|
||||||
is currently running (in kHz - must be an integral number), and the optional keyword
|
is currently running (in kHz - must be an integral number), and the optional keyword
|
||||||
@var{calc_checksum}, telling the driver to calculate a valid checksum for the exception
|
@var{calc_checksum}, telling the driver to calculate a valid checksum for the exception
|
||||||
vector table.
|
vector table.
|
||||||
|
@ -2303,20 +2308,20 @@ vector table.
|
||||||
@subsubsection at91sam7 options
|
@subsubsection at91sam7 options
|
||||||
@cindex at91sam7 options
|
@cindex at91sam7 options
|
||||||
|
|
||||||
@b{flash bank at91sam7} 0 0 0 0 <@var{target#}>
|
@b{flash bank at91sam7} 0 0 0 0 <@var{target}>
|
||||||
@*AT91SAM7 flashes only require the @var{target#}, all other values are looked up after
|
@*AT91SAM7 flashes only require the @var{target}, all other values are looked up after
|
||||||
reading the chip-id and type.
|
reading the chip-id and type.
|
||||||
|
|
||||||
@subsubsection str7 options
|
@subsubsection str7 options
|
||||||
@cindex str7 options
|
@cindex str7 options
|
||||||
|
|
||||||
@b{flash bank str7x} <@var{base}> <@var{size}> 0 0 <@var{target#}> <@var{variant}>
|
@b{flash bank str7x} <@var{base}> <@var{size}> 0 0 <@var{target}> <@var{variant}>
|
||||||
@*variant can be either STR71x, STR73x or STR75x.
|
@*variant can be either STR71x, STR73x or STR75x.
|
||||||
|
|
||||||
@subsubsection str9 options
|
@subsubsection str9 options
|
||||||
@cindex str9 options
|
@cindex str9 options
|
||||||
|
|
||||||
@b{flash bank str9x} <@var{base}> <@var{size}> 0 0 <@var{target#}>
|
@b{flash bank str9x} <@var{base}> <@var{size}> 0 0 <@var{target}>
|
||||||
@*The str9 needs the flash controller to be configured prior to Flash programming, e.g.
|
@*The str9 needs the flash controller to be configured prior to Flash programming, e.g.
|
||||||
@example
|
@example
|
||||||
str9x flash_config 0 4 2 0 0x80000
|
str9x flash_config 0 4 2 0 0x80000
|
||||||
|
@ -2325,7 +2330,7 @@ This will setup the BBSR, NBBSR, BBADR and NBBADR registers respectively.
|
||||||
|
|
||||||
@subsubsection str9 options (str9xpec driver)
|
@subsubsection str9 options (str9xpec driver)
|
||||||
|
|
||||||
@b{flash bank str9xpec} <@var{base}> <@var{size}> 0 0 <@var{target#}>
|
@b{flash bank str9xpec} <@var{base}> <@var{size}> 0 0 <@var{target}>
|
||||||
@*Before using the flash commands the turbo mode must be enabled using str9xpec
|
@*Before using the flash commands the turbo mode must be enabled using str9xpec
|
||||||
@option{enable_turbo} <@var{num>.}
|
@option{enable_turbo} <@var{num>.}
|
||||||
|
|
||||||
|
@ -2335,25 +2340,25 @@ Use the standard str9 driver for programming. @xref{STR9 specific commands}.
|
||||||
@subsubsection Stellaris (LM3Sxxx) options
|
@subsubsection Stellaris (LM3Sxxx) options
|
||||||
@cindex Stellaris (LM3Sxxx) options
|
@cindex Stellaris (LM3Sxxx) options
|
||||||
|
|
||||||
@b{flash bank stellaris} <@var{base}> <@var{size}> 0 0 <@var{target#}>
|
@b{flash bank stellaris} <@var{base}> <@var{size}> 0 0 <@var{target}>
|
||||||
@*Stellaris flash plugin only require the @var{target#}.
|
@*Stellaris flash plugin only require the @var{target}.
|
||||||
|
|
||||||
@subsubsection stm32x options
|
@subsubsection stm32x options
|
||||||
@cindex stm32x options
|
@cindex stm32x options
|
||||||
|
|
||||||
@b{flash bank stm32x} <@var{base}> <@var{size}> 0 0 <@var{target#}>
|
@b{flash bank stm32x} <@var{base}> <@var{size}> 0 0 <@var{target}>
|
||||||
@*stm32x flash plugin only require the @var{target#}.
|
@*stm32x flash plugin only require the @var{target}.
|
||||||
|
|
||||||
@subsubsection aduc702x options
|
@subsubsection aduc702x options
|
||||||
@cindex aduc702x options
|
@cindex aduc702x options
|
||||||
|
|
||||||
@b{flash bank aduc702x} 0 0 0 0 <@var{target#}>
|
@b{flash bank aduc702x} 0 0 0 0 <@var{target}>
|
||||||
@*The aduc702x flash plugin works with Analog Devices model numbers ADUC7019 through ADUC7028. The setup command only requires the @var{target#} argument (all devices in this family have the same memory layout).
|
@*The aduc702x flash plugin works with Analog Devices model numbers ADUC7019 through ADUC7028. The setup command only requires the @var{target} argument (all devices in this family have the same memory layout).
|
||||||
|
|
||||||
@subsection mFlash Configuration
|
@subsection mFlash Configuration
|
||||||
@cindex mFlash Configuration
|
@cindex mFlash Configuration
|
||||||
@b{mflash bank} <@var{soc}> <@var{base}> <@var{chip_width}> <@var{bus_width}>
|
@b{mflash bank} <@var{soc}> <@var{base}> <@var{chip_width}> <@var{bus_width}>
|
||||||
<@var{RST pin}> <@var{WP pin}> <@var{DPD pin}> <@var{target #}>
|
<@var{RST pin}> <@var{WP pin}> <@var{DPD pin}> <@var{target}>
|
||||||
@cindex mflash bank
|
@cindex mflash bank
|
||||||
@*Configures a mflash for <@var{soc}> host bank at
|
@*Configures a mflash for <@var{soc}> host bank at
|
||||||
<@var{base}>. <@var{chip_width}> and <@var{bus_width}> are bytes
|
<@var{base}>. <@var{chip_width}> and <@var{bus_width}> are bytes
|
||||||
|
|
|
@ -164,10 +164,10 @@ static int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char
|
||||||
bank->sectors[i].is_protected = 0;
|
bank->sectors[i].is_protected = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->target = get_target_by_num(strtoul(args[5], NULL, 0));
|
info->target = get_target(args[5]);
|
||||||
if (info->target == NULL)
|
if (info->target == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("no target '%i' configured", (int)strtoul(args[5], NULL, 0));
|
LOG_ERROR("target '%s' not defined", args[5]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
|
@ -261,9 +261,9 @@ static int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((target = get_target_by_num(strtoul(args[5], NULL, 0))) == NULL)
|
if ((target = get_target(args[5])) == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("target %lu not defined", strtoul(args[5], NULL, 0));
|
LOG_ERROR("target '%s' not defined", args[5]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,10 +71,10 @@ static int lpc3180_nand_device_command(struct command_context_s *cmd_ctx, char *
|
||||||
lpc3180_info = malloc(sizeof(lpc3180_nand_controller_t));
|
lpc3180_info = malloc(sizeof(lpc3180_nand_controller_t));
|
||||||
device->controller_priv = lpc3180_info;
|
device->controller_priv = lpc3180_info;
|
||||||
|
|
||||||
lpc3180_info->target = get_target_by_num(strtoul(args[1], NULL, 0));
|
lpc3180_info->target = get_target(args[1]);
|
||||||
if (!lpc3180_info->target)
|
if (!lpc3180_info->target)
|
||||||
{
|
{
|
||||||
LOG_ERROR("no target '%s' configured", args[1]);
|
LOG_ERROR("target '%s' not defined", args[1]);
|
||||||
return ERROR_NAND_DEVICE_INVALID;
|
return ERROR_NAND_DEVICE_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -795,9 +795,9 @@ static int mflash_bank_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((target = get_target_by_num(strtoul(args[7], NULL, 0))) == NULL)
|
if ((target = get_target(args[7])) == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("target %lu not defined", strtoul(args[7], NULL, 0));
|
LOG_ERROR("target '%s' not defined", args[7]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,9 +210,9 @@ int orion_nand_device_command(struct command_context_s *cmd_ctx, char *cmd,
|
||||||
}
|
}
|
||||||
|
|
||||||
device->controller_priv = hw;
|
device->controller_priv = hw;
|
||||||
hw->target = get_target_by_num(strtoul(args[1], NULL, 0));
|
hw->target = get_target(args[1]);
|
||||||
if (!hw->target) {
|
if (!hw->target) {
|
||||||
LOG_ERROR("no target '%s' configured", args[1]);
|
LOG_ERROR("target '%s' not defined", args[1]);
|
||||||
free(hw);
|
free(hw);
|
||||||
return ERROR_NAND_DEVICE_INVALID;
|
return ERROR_NAND_DEVICE_INVALID;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,9 @@ s3c24xx_nand_device_command(struct command_context_s *cmd_ctx, char *cmd,
|
||||||
|
|
||||||
device->controller_priv = s3c24xx_info;
|
device->controller_priv = s3c24xx_info;
|
||||||
|
|
||||||
s3c24xx_info->target = get_target_by_num(strtoul(args[1], NULL, 0));
|
s3c24xx_info->target = get_target(args[1]);
|
||||||
if (s3c24xx_info->target == NULL) {
|
if (s3c24xx_info->target == NULL) {
|
||||||
LOG_ERROR("no target '%s' configured", args[1]);
|
LOG_ERROR("target '%s' not defined", args[1]);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -372,11 +372,11 @@ static int handle_etb_config_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
target = get_target_by_num(strtoul(args[0], NULL, 0));
|
target = get_target(args[0]);
|
||||||
|
|
||||||
if (!target)
|
if (!target)
|
||||||
{
|
{
|
||||||
LOG_ERROR("target number '%s' not defined", args[0]);
|
LOG_ERROR("target '%s' not defined", args[0]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1205,11 +1205,10 @@ static int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
target = get_target_by_num(strtoul(args[0], NULL, 0));
|
target = get_target(args[0]);
|
||||||
|
|
||||||
if (!target)
|
if (!target)
|
||||||
{
|
{
|
||||||
LOG_ERROR("target number '%s' not defined", args[0]);
|
LOG_ERROR("target '%s' not defined", args[0]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,11 @@ static int handle_etm_dummy_config_command(struct command_context_s *cmd_ctx, ch
|
||||||
armv4_5_common_t *armv4_5;
|
armv4_5_common_t *armv4_5;
|
||||||
arm7_9_common_t *arm7_9;
|
arm7_9_common_t *arm7_9;
|
||||||
|
|
||||||
target = get_target_by_num(strtoul(args[0], NULL, 0));
|
target = get_target(args[0]);
|
||||||
|
|
||||||
if (!target)
|
if (!target)
|
||||||
{
|
{
|
||||||
LOG_ERROR("target number '%s' not defined", args[0]);
|
LOG_ERROR("target '%s' not defined", args[0]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -711,10 +711,11 @@ int image_open(image_t *image, char *url, char *type_string)
|
||||||
}
|
}
|
||||||
else if (image->type == IMAGE_MEMORY)
|
else if (image->type == IMAGE_MEMORY)
|
||||||
{
|
{
|
||||||
target_t *target = get_target_by_num(strtoul(url, NULL, 0));
|
target_t *target = get_target(url);
|
||||||
if (target==NULL)
|
|
||||||
|
if (target == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Target '%s' does not exist", url);
|
LOG_ERROR("target '%s' not defined", url);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -320,8 +320,36 @@ void target_buffer_set_u8(target_t *target, u8 *buffer, u8 value)
|
||||||
*buffer = value;
|
*buffer = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return a pointer to a configured target; id is name or number */
|
||||||
|
target_t *get_target(const char *id)
|
||||||
|
{
|
||||||
|
target_t *target;
|
||||||
|
char *endptr;
|
||||||
|
int num;
|
||||||
|
|
||||||
|
/* try as tcltarget name */
|
||||||
|
for (target = all_targets; target; target = target->next) {
|
||||||
|
if (target->cmd_name == NULL)
|
||||||
|
continue;
|
||||||
|
if (strcmp(id, target->cmd_name) == 0)
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* no match, try as number */
|
||||||
|
num = strtoul(id, &endptr, 0);
|
||||||
|
if (*endptr != 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (target = all_targets; target; target = target->next) {
|
||||||
|
if (target->target_number == num)
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* returns a pointer to the n-th configured target */
|
/* returns a pointer to the n-th configured target */
|
||||||
target_t* get_target_by_num(int num)
|
static target_t *get_target_by_num(int num)
|
||||||
{
|
{
|
||||||
target_t *target = all_targets;
|
target_t *target = all_targets;
|
||||||
|
|
||||||
|
@ -1333,35 +1361,16 @@ int target_register_user_commands(struct command_context_s *cmd_ctx)
|
||||||
|
|
||||||
static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
|
static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
|
||||||
{
|
{
|
||||||
char *cp;
|
|
||||||
target_t *target = all_targets;
|
target_t *target = all_targets;
|
||||||
|
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
/* try as tcltarget name */
|
target = get_target(args[0]);
|
||||||
for( target = all_targets ; target ; target = target->next ){
|
if (target == NULL) {
|
||||||
if( target->cmd_name ){
|
|
||||||
if( 0 == strcmp( args[0], target->cmd_name ) ){
|
|
||||||
/* MATCH */
|
|
||||||
goto Match;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* no match, try as number */
|
|
||||||
|
|
||||||
int num = strtoul(args[0], &cp, 0 );
|
|
||||||
if( *cp != 0 ){
|
|
||||||
/* then it was not a number */
|
|
||||||
command_print( cmd_ctx, "Target: %s unknown, try one of:\n", args[0] );
|
|
||||||
goto DumpTargets;
|
|
||||||
}
|
|
||||||
|
|
||||||
target = get_target_by_num( num );
|
|
||||||
if( target == NULL ){
|
|
||||||
command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] );
|
command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] );
|
||||||
goto DumpTargets;
|
goto DumpTargets;
|
||||||
}
|
}
|
||||||
Match:
|
|
||||||
cmd_ctx->current_target = target->target_number;
|
cmd_ctx->current_target = target->target_number;
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -371,7 +371,7 @@ extern int target_call_timer_callbacks_now(void);
|
||||||
|
|
||||||
extern target_t* get_current_target(struct command_context_s *cmd_ctx);
|
extern target_t* get_current_target(struct command_context_s *cmd_ctx);
|
||||||
extern int get_num_by_target(target_t *query_target);
|
extern int get_num_by_target(target_t *query_target);
|
||||||
extern target_t* get_target_by_num(int num);
|
extern target_t *get_target(const char *id);
|
||||||
|
|
||||||
extern int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer);
|
extern int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer);
|
||||||
extern int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer);
|
extern int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer);
|
||||||
|
|
|
@ -56,8 +56,5 @@ arm7_9 fast_memory_access enable
|
||||||
arm7_9 dcc_downloads enable
|
arm7_9 dcc_downloads enable
|
||||||
|
|
||||||
# trace setup
|
# trace setup
|
||||||
# FIXME we ought to be able to say "... config $_TARGETNAME ..."
|
etm config $_TARGETNAME 16 normal full etb
|
||||||
# (not "config 0") facilitating additional targets (e.g. other chips)
|
etb config $_TARGETNAME $_CHIPNAME.etb
|
||||||
etm config 0 16 normal full etb
|
|
||||||
etb config 0 $_CHIPNAME.etb
|
|
||||||
|
|
||||||
|
|
|
@ -3147,9 +3147,9 @@ int xscale_handle_debug_handler_command(struct command_context_s *cmd_ctx, char
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((target = get_target_by_num(strtoul(args[0], NULL, 0))) == NULL)
|
if ((target = get_target(args[0])) == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("no target '%s' configured", args[0]);
|
LOG_ERROR("target '%s' not defined", args[0]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3187,9 +3187,10 @@ int xscale_handle_cache_clean_address_command(struct command_context_s *cmd_ctx,
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((target = get_target_by_num(strtoul(args[0], NULL, 0))) == NULL)
|
target = get_target(args[0]);
|
||||||
|
if (target == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("no target '%s' configured", args[0]);
|
LOG_ERROR("target '%s' not defined", args[0]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue