adiv5: introduce optional dap_sync() function
dap_sync() executes all commands in the JTAG queue and then checks if a WAIT condition happened inside the last batch. If yes, a recovery is invoked. If not, processing continues without checking for errors. This function should be called in long AP read or writes, e.g. while uploading a new application binary, at intermediate points within the transfer where the cost of flushing the JTAG queue and checking the journal doesn't affect performance too much. Change-Id: I99eeaf47cdf951e15e589a04e74b90b5ce911386 Signed-off-by: Matthias Welwarsky <matthias@welwarsky.de> Reviewed-on: http://openocd.zylin.com/3181 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>__archive__
parent
a185eaad9d
commit
5373085b4d
|
@ -679,6 +679,11 @@ static int jtag_dp_run(struct adiv5_dap *dap)
|
|||
return (retval2 != ERROR_OK) ? retval2 : retval;
|
||||
}
|
||||
|
||||
static int jtag_dp_sync(struct adiv5_dap *dap)
|
||||
{
|
||||
return jtagdp_overrun_check(dap);
|
||||
}
|
||||
|
||||
/* FIXME don't export ... just initialize as
|
||||
* part of DAP setup
|
||||
*/
|
||||
|
@ -689,6 +694,7 @@ const struct dap_ops jtag_dp_ops = {
|
|||
.queue_ap_write = jtag_ap_q_write,
|
||||
.queue_ap_abort = jtag_ap_q_abort,
|
||||
.run = jtag_dp_run,
|
||||
.sync = jtag_dp_sync,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -274,6 +274,10 @@ struct dap_ops {
|
|||
|
||||
/** Executes all queued DAP operations. */
|
||||
int (*run)(struct adiv5_dap *dap);
|
||||
|
||||
/** Executes all queued DAP operations but doesn't check
|
||||
* sticky error conditions */
|
||||
int (*sync)(struct adiv5_dap *dap);
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -397,6 +401,14 @@ static inline int dap_run(struct adiv5_dap *dap)
|
|||
return dap->ops->run(dap);
|
||||
}
|
||||
|
||||
static inline int dap_sync(struct adiv5_dap *dap)
|
||||
{
|
||||
assert(dap->ops != NULL);
|
||||
if (dap->ops->sync)
|
||||
return dap->ops->sync(dap);
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
static inline int dap_dp_read_atomic(struct adiv5_dap *dap, unsigned reg,
|
||||
uint32_t *value)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue