David Brownell <david-b@pacbell.net>:
Tighten error handling on TAP enable/disable paths a bit: - Don't enable/disable unless it's necessary. Those event handlers could have nasty side effects... - Don't *succeed* enables/disables if there was no code which could have implemented that action. This prevents bugs like wrongly acting as if the scan chain changed. - Minor whitespace cleanup in enable/disable command code. The big problem is still the lack of code to verify scan chains were actually updated as requested; this adds a comment on that. I suspect the best we can do near term will be to verify IDCODE. git-svn-id: svn://svn.berlios.de/openocd/trunk@2250 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
0de478618a
commit
491083a248
|
@ -478,6 +478,12 @@ static void jtag_tap_handle_event( jtag_tap_t * tap, enum jtag_tap_event e)
|
||||||
Jim_GetString(jteap->body, NULL) );
|
Jim_GetString(jteap->body, NULL) );
|
||||||
if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
|
if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
|
||||||
Jim_PrintErrorMessage(interp);
|
Jim_PrintErrorMessage(interp);
|
||||||
|
} else {
|
||||||
|
/* NOTE: we currently assume the handlers
|
||||||
|
* can't fail. That presumes later code
|
||||||
|
* will be verifying the scan chains ...
|
||||||
|
*/
|
||||||
|
tap->enabled = (e == JTAG_TAP_EVENT_ENABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,25 +575,40 @@ static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv
|
||||||
|
|
||||||
{
|
{
|
||||||
jtag_tap_t *t;
|
jtag_tap_t *t;
|
||||||
|
|
||||||
t = jtag_tap_by_jim_obj(goi.interp, goi.argv[0]);
|
t = jtag_tap_by_jim_obj(goi.interp, goi.argv[0]);
|
||||||
if( t == NULL ){
|
if (t == NULL)
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
|
||||||
switch (n->value) {
|
switch (n->value) {
|
||||||
case JTAG_CMD_TAPISENABLED:
|
case JTAG_CMD_TAPISENABLED:
|
||||||
e = t->enabled;
|
|
||||||
break;
|
break;
|
||||||
case JTAG_CMD_TAPENABLE:
|
case JTAG_CMD_TAPENABLE:
|
||||||
|
if (t->enabled)
|
||||||
|
break;
|
||||||
jtag_tap_handle_event(t, JTAG_TAP_EVENT_ENABLE);
|
jtag_tap_handle_event(t, JTAG_TAP_EVENT_ENABLE);
|
||||||
e = 1;
|
if (!t->enabled)
|
||||||
t->enabled = e;
|
break;
|
||||||
|
|
||||||
|
/* FIXME add JTAG sanity checks, w/o TLR
|
||||||
|
* - scan chain length grew by one (this)
|
||||||
|
* - IDs and IR lengths are as expected
|
||||||
|
*/
|
||||||
break;
|
break;
|
||||||
case JTAG_CMD_TAPDISABLE:
|
case JTAG_CMD_TAPDISABLE:
|
||||||
|
if (!t->enabled)
|
||||||
|
break;
|
||||||
jtag_tap_handle_event(t, JTAG_TAP_EVENT_DISABLE);
|
jtag_tap_handle_event(t, JTAG_TAP_EVENT_DISABLE);
|
||||||
e = 0;
|
if (t->enabled)
|
||||||
t->enabled = e;
|
break;
|
||||||
|
|
||||||
|
/* FIXME add JTAG sanity checks, w/o TLR
|
||||||
|
* - scan chain length shrank by one (this)
|
||||||
|
* - IDs and IR lengths are as expected
|
||||||
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
e = t->enabled;
|
||||||
Jim_SetResult(goi.interp, Jim_NewIntObj(goi.interp, e));
|
Jim_SetResult(goi.interp, Jim_NewIntObj(goi.interp, e));
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue