jtag/drivers/ftdi: add option to declare signal aliases

This adds -alias|-nalias options to ftdi_layout_signal command that
allow to declare a new signal based on an already defined one.

Change-Id: I552578ebcd12ae21957a1c0d3b7e878adeff6df0
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2181
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
__archive__
Paul Fertser 2014-06-20 12:47:24 +04:00 committed by Andreas Fritiofson
parent 335bafbb25
commit a87e699edf
2 changed files with 19 additions and 2 deletions

View File

@ -2767,7 +2767,7 @@ minimal impact on the target system. Avoid floating inputs, conflicting outputs
and initially asserted reset signals. and initially asserted reset signals.
@end deffn @end deffn
@deffn {Config Command} {ftdi_layout_signal} name [@option{-data}|@option{-ndata} data_mask] [@option{-oe}|@option{-noe} oe_mask] @deffn {Config Command} {ftdi_layout_signal} name [@option{-data}|@option{-ndata} data_mask] [@option{-oe}|@option{-noe} oe_mask] [@option{-alias}|@option{-nalias} name]
Creates a signal with the specified @var{name}, controlled by one or more FTDI Creates a signal with the specified @var{name}, controlled by one or more FTDI
GPIO pins via a range of possible buffer connections. The masks are FTDI GPIO GPIO pins via a range of possible buffer connections. The masks are FTDI GPIO
register bitmasks to tell the driver the connection and type of the output register bitmasks to tell the driver the connection and type of the output
@ -2790,6 +2790,10 @@ target without any buffer. The FTDI pin is then switched between output and
input as necessary to provide the full set of low, high and Hi-Z input as necessary to provide the full set of low, high and Hi-Z
characteristics. In all other cases, the pins specified in a signal definition characteristics. In all other cases, the pins specified in a signal definition
are always driven by the FTDI. are always driven by the FTDI.
If @option{-alias} or @option{-nalias} is used, the signal is created
identical (or with data inverted) to an already specified signal
@var{name}.
@end deffn @end deffn
@deffn {Command} {ftdi_set_signal} name @option{0}|@option{1}|@option{z} @deffn {Command} {ftdi_set_signal} name @option{0}|@option{1}|@option{z}

View File

@ -740,6 +740,19 @@ COMMAND_HANDLER(ftdi_handle_layout_signal_command)
} else if (strcmp("-noe", CMD_ARGV[i]) == 0) { } else if (strcmp("-noe", CMD_ARGV[i]) == 0) {
invert_oe = true; invert_oe = true;
COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], oe_mask); COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], oe_mask);
} else if (!strcmp("-alias", CMD_ARGV[i]) ||
!strcmp("-nalias", CMD_ARGV[i])) {
if (!strcmp("-nalias", CMD_ARGV[i]))
invert_data = true;
struct signal *sig = find_signal_by_name(CMD_ARGV[i + 1]);
if (!sig) {
LOG_ERROR("signal %s is not defined", CMD_ARGV[i + 1]);
return ERROR_FAIL;
}
data_mask = sig->data_mask;
oe_mask = sig->oe_mask;
invert_oe = sig->invert_oe;
invert_data ^= sig->invert_data;
} else { } else {
LOG_ERROR("unknown option '%s'", CMD_ARGV[i]); LOG_ERROR("unknown option '%s'", CMD_ARGV[i]);
return ERROR_COMMAND_SYNTAX_ERROR; return ERROR_COMMAND_SYNTAX_ERROR;
@ -869,7 +882,7 @@ static const struct command_registration ftdi_command_handlers[] = {
.mode = COMMAND_ANY, .mode = COMMAND_ANY,
.help = "define a signal controlled by one or more FTDI GPIO as data " .help = "define a signal controlled by one or more FTDI GPIO as data "
"and/or output enable", "and/or output enable",
.usage = "name [-data mask|-ndata mask] [-oe mask|-noe mask]", .usage = "name [-data mask|-ndata mask] [-oe mask|-noe mask] [-alias|-nalias name]",
}, },
{ {
.name = "ftdi_set_signal", .name = "ftdi_set_signal",