pld/virtex2: add program/refresh command
Change-Id: If6d237a6f27c4232849f73d08e7ca74276e6d464 Signed-off-by: Daniel Anselmi <danselmi@gmx.ch> Reviewed-on: https://review.openocd.org/c/openocd/+/7714 Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com> Tested-by: jenkins
This commit is contained in:
parent
e95f8e2b25
commit
373d7eaa70
|
@ -8638,6 +8638,10 @@ SSI devices are using different values.
|
||||||
Change values for boundary scan instructions selecting the registers USER1 to USER4.
|
Change values for boundary scan instructions selecting the registers USER1 to USER4.
|
||||||
Description of the arguments can be found at command @command{virtex2 set_instr_codes}.
|
Description of the arguments can be found at command @command{virtex2 set_instr_codes}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Command} {virtex2 program} pld_name
|
||||||
|
Load the bitstream from external memory for FPGA @var{pld_name}. A.k.a. refresh.
|
||||||
|
@end deffn
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,35 @@ static int virtex2_read_stat(struct pld_device *pld_device, uint32_t *status)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int virtex2_program(struct pld_device *pld_device)
|
||||||
|
{
|
||||||
|
struct virtex2_pld_device *virtex2_info = pld_device->driver_priv;
|
||||||
|
if (!virtex2_info)
|
||||||
|
return ERROR_FAIL;
|
||||||
|
|
||||||
|
int retval = virtex2_set_instr(virtex2_info->tap, virtex2_info->command_set.jshutdown);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
retval = virtex2_set_instr(virtex2_info->tap, virtex2_info->command_set.jprog_b);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
jtag_add_runtest(62000, TAP_IDLE);
|
||||||
|
if (!(virtex2_info->no_jstart)) {
|
||||||
|
retval = virtex2_set_instr(virtex2_info->tap, virtex2_info->command_set.jstart);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = virtex2_set_instr(virtex2_info->tap, virtex2_info->command_set.bypass);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
jtag_add_runtest(2000, TAP_IDLE);
|
||||||
|
|
||||||
|
return jtag_execute_queue();
|
||||||
|
}
|
||||||
|
|
||||||
static int virtex2_load_prepare(struct pld_device *pld_device)
|
static int virtex2_load_prepare(struct pld_device *pld_device)
|
||||||
{
|
{
|
||||||
struct virtex2_pld_device *virtex2_info = pld_device->driver_priv;
|
struct virtex2_pld_device *virtex2_info = pld_device->driver_priv;
|
||||||
|
@ -236,6 +265,22 @@ static int virtex2_load(struct pld_device *pld_device, const char *filename)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
COMMAND_HANDLER(virtex2_handle_program_command)
|
||||||
|
{
|
||||||
|
struct pld_device *device;
|
||||||
|
|
||||||
|
if (CMD_ARGC != 1)
|
||||||
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
|
device = get_pld_device_by_name_or_numstr(CMD_ARGV[0]);
|
||||||
|
if (!device) {
|
||||||
|
command_print(CMD, "pld device '#%s' is out of bounds or unknown", CMD_ARGV[0]);
|
||||||
|
return ERROR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return virtex2_program(device);
|
||||||
|
}
|
||||||
|
|
||||||
COMMAND_HANDLER(virtex2_handle_read_stat_command)
|
COMMAND_HANDLER(virtex2_handle_read_stat_command)
|
||||||
{
|
{
|
||||||
struct pld_device *device;
|
struct pld_device *device;
|
||||||
|
@ -368,6 +413,12 @@ static const struct command_registration virtex2_exec_command_handlers[] = {
|
||||||
.handler = virtex2_handle_set_user_codes_command,
|
.handler = virtex2_handle_set_user_codes_command,
|
||||||
.help = "set instructions codes used for jtag-hub",
|
.help = "set instructions codes used for jtag-hub",
|
||||||
.usage = "pld_name user1 [user2 [user3 [user4]]]",
|
.usage = "pld_name user1 [user2 [user3 [user4]]]",
|
||||||
|
}, {
|
||||||
|
.name = "program",
|
||||||
|
.mode = COMMAND_EXEC,
|
||||||
|
.handler = virtex2_handle_program_command,
|
||||||
|
.help = "start loading of configuration (refresh)",
|
||||||
|
.usage = "pld_name",
|
||||||
},
|
},
|
||||||
COMMAND_REGISTRATION_DONE
|
COMMAND_REGISTRATION_DONE
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,6 +35,7 @@ set XC6S_JSTART 0x0c
|
||||||
set XC6S_BYPASS 0x3f
|
set XC6S_BYPASS 0x3f
|
||||||
|
|
||||||
proc xc6s_program {tap} {
|
proc xc6s_program {tap} {
|
||||||
|
echo "DEPRECATED! use 'virtex2 program ...' not 'xc6s_program'"
|
||||||
global XC6S_JSHUTDOWN XC6S_JPROGRAM XC6S_JSTART XC6S_BYPASS
|
global XC6S_JSHUTDOWN XC6S_JPROGRAM XC6S_JSTART XC6S_BYPASS
|
||||||
irscan $tap $XC6S_JSHUTDOWN
|
irscan $tap $XC6S_JSHUTDOWN
|
||||||
irscan $tap $XC6S_JPROGRAM
|
irscan $tap $XC6S_JPROGRAM
|
||||||
|
@ -44,6 +45,7 @@ proc xc6s_program {tap} {
|
||||||
|
|
||||||
#xtp038 and xc3sprog approach
|
#xtp038 and xc3sprog approach
|
||||||
proc xc6s_program_iprog {tap} {
|
proc xc6s_program_iprog {tap} {
|
||||||
|
echo "DEPRECATED! use 'virtex2 program ...' not 'xc6s_program_iprog'"
|
||||||
global XC6S_JSHUTDOWN XC6S_JSTART XC6S_BYPASS XC6S_CFG_IN
|
global XC6S_JSHUTDOWN XC6S_JSTART XC6S_BYPASS XC6S_CFG_IN
|
||||||
irscan $tap $XC6S_JSHUTDOWN
|
irscan $tap $XC6S_JSHUTDOWN
|
||||||
runtest 16
|
runtest 16
|
||||||
|
|
|
@ -58,6 +58,7 @@ set XC7_JSTART 0x0c
|
||||||
set XC7_BYPASS 0x3f
|
set XC7_BYPASS 0x3f
|
||||||
|
|
||||||
proc xc7_program {tap} {
|
proc xc7_program {tap} {
|
||||||
|
echo "DEPRECATED! use 'virtex2 program ...' not 'xc7_program'"
|
||||||
global XC7_JSHUTDOWN XC7_JPROGRAM XC7_JSTART XC7_BYPASS
|
global XC7_JSHUTDOWN XC7_JPROGRAM XC7_JSTART XC7_BYPASS
|
||||||
irscan $tap $XC7_JSHUTDOWN
|
irscan $tap $XC7_JSHUTDOWN
|
||||||
irscan $tap $XC7_JPROGRAM
|
irscan $tap $XC7_JPROGRAM
|
||||||
|
|
|
@ -62,6 +62,7 @@ set XCU_JSTART 0x0c
|
||||||
set XCU_BYPASS 0x3f
|
set XCU_BYPASS 0x3f
|
||||||
|
|
||||||
proc xcu_program {tap} {
|
proc xcu_program {tap} {
|
||||||
|
echo "DEPRECATED! use 'virtex2 program ...' not 'xcu_program'"
|
||||||
global XCU_JSHUTDOWN XCU_JPROGRAM XCU_JSTART XCU_BYPASS
|
global XCU_JSHUTDOWN XCU_JPROGRAM XCU_JSTART XCU_BYPASS
|
||||||
irscan $tap $XCU_JSHUTDOWN
|
irscan $tap $XCU_JSHUTDOWN
|
||||||
irscan $tap $XCU_JPROGRAM
|
irscan $tap $XCU_JPROGRAM
|
||||||
|
|
|
@ -55,6 +55,7 @@ set XC7_JSTART 0x0c
|
||||||
set XC7_BYPASS 0x3f
|
set XC7_BYPASS 0x3f
|
||||||
|
|
||||||
proc zynqpl_program {tap} {
|
proc zynqpl_program {tap} {
|
||||||
|
echo "DEPRECATED! use 'virtex2 program ...' not 'zynqpl_program'"
|
||||||
global XC7_JSHUTDOWN XC7_JPROGRAM XC7_JSTART XC7_BYPASS
|
global XC7_JSHUTDOWN XC7_JPROGRAM XC7_JSTART XC7_BYPASS
|
||||||
irscan $tap $XC7_JSHUTDOWN
|
irscan $tap $XC7_JSHUTDOWN
|
||||||
irscan $tap $XC7_JPROGRAM
|
irscan $tap $XC7_JPROGRAM
|
||||||
|
|
Loading…
Reference in New Issue