mw_debug: pass target parameters to urjtag

An example

./mw_debug -d -t 'ft2232 vid=0x0403 pid=0x6014'

Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
pull/346/head
Matt Johnston 3 years ago
parent cef3660e74
commit e05ae0c8cb

@ -214,19 +214,33 @@ static int jtag_init(const char *target)
{ {
const char *sep; const char *sep;
const char *cable; const char *cable;
char *params[] = { NULL, }; const int max_params = 20;
char *params[max_params+1];
urj_part_t *p; urj_part_t *p;
uint32_t id; uint32_t id;
int rc, part; int rc, part;



if (!target) if (!target)
target = "probe"; target = "probe";
sep = strchr(target, ':'); memset(params, 0x0, sizeof(params));
sep = strchr(target, ' ');
cable = strndup(target, sep - target); cable = strndup(target, sep - target);
if (sep && *sep) { if (sep && *sep) {
fprintf(stderr, "jtag cable params not supported yet\n"); char *param_str = strdup(sep);
char *s = param_str;
for (int i = 0; *s; s++) {
if (*s == ' ') {
if (i >= max_params) {
fprintf(stderr, "Too many jtag cable params\n");
return -1; return -1;
} }
*s = '\0';
params[i] = s+1;
i++;
}
}
}
if (debug) if (debug)
printf("Opening jtag backend cable '%s'\n", cable); printf("Opening jtag backend cable '%s'\n", cable);


@ -241,25 +255,25 @@ static int jtag_init(const char *target)
char *cparams[] = { NULL, NULL,}; char *cparams[] = { NULL, NULL,};
rc = urj_tap_cable_usb_probe(cparams); rc = urj_tap_cable_usb_probe(cparams);
if (rc != URJ_STATUS_OK) { if (rc != URJ_STATUS_OK) {
fprintf(stderr, "JTAG cable probe failed\n"); fprintf(stderr, "JTAG cable probe failed: %s\n", urj_error_describe());
return -1; return -1;
} }
cable = strdup(cparams[1]); cable = strdup(cparams[1]);
} }
rc = urj_tap_chain_connect(jc, cable, params); rc = urj_tap_chain_connect(jc, cable, params);
if (rc != URJ_STATUS_OK) { if (rc != URJ_STATUS_OK) {
fprintf(stderr, "JTAG cable detect failed\n"); fprintf(stderr, "JTAG cable detect failed: %s\n", urj_error_describe());
return -1; return -1;
} }


/* XXX Hard wire part 0, that might need to change (use params and detect !) */ /* XXX Hard wire part 0, that might need to change (use params and detect !) */
rc = urj_tap_manual_add(jc, 6); rc = urj_tap_manual_add(jc, 6);
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "JTAG failed to add part !\n"); fprintf(stderr, "JTAG failed to add part! : %s\n", urj_error_describe());
return -1; return -1;
} }
if (jc->parts == NULL || jc->parts->len == 0) { if (jc->parts == NULL || jc->parts->len == 0) {
fprintf(stderr, "JTAG Something's wrong after adding part !\n"); fprintf(stderr, "JTAG Something's wrong after adding part! : %s\n", urj_error_describe());
return -1; return -1;
} }
urj_part_parts_set_instruction(jc->parts, "BYPASS"); urj_part_parts_set_instruction(jc->parts, "BYPASS");

Loading…
Cancel
Save