target/arm_adi_v5: keep CSW and TAR cache updated
The call to dap_queue_ap_write() can fail and the value in CSW and TAR becomes unknown. Invalidate the OpenOCD cache if dap_queue_ap_write() fails. Change-Id: Id6ec370b4c5ad07e454464780c1a1c8ae34ac870 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4564 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
0057c71ab6
commit
1dc466f515
|
@ -102,8 +102,10 @@ static int mem_ap_setup_csw(struct adiv5_ap *ap, uint32_t csw)
|
||||||
if (csw != ap->csw_value) {
|
if (csw != ap->csw_value) {
|
||||||
/* LOG_DEBUG("DAP: Set CSW %x",csw); */
|
/* LOG_DEBUG("DAP: Set CSW %x",csw); */
|
||||||
int retval = dap_queue_ap_write(ap, MEM_AP_REG_CSW, csw);
|
int retval = dap_queue_ap_write(ap, MEM_AP_REG_CSW, csw);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK) {
|
||||||
|
ap->csw_value = 0;
|
||||||
return retval;
|
return retval;
|
||||||
|
}
|
||||||
ap->csw_value = csw;
|
ap->csw_value = csw;
|
||||||
}
|
}
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -114,8 +116,10 @@ static int mem_ap_setup_tar(struct adiv5_ap *ap, uint32_t tar)
|
||||||
if (!ap->tar_valid || tar != ap->tar_value) {
|
if (!ap->tar_valid || tar != ap->tar_value) {
|
||||||
/* LOG_DEBUG("DAP: Set TAR %x",tar); */
|
/* LOG_DEBUG("DAP: Set TAR %x",tar); */
|
||||||
int retval = dap_queue_ap_write(ap, MEM_AP_REG_TAR, tar);
|
int retval = dap_queue_ap_write(ap, MEM_AP_REG_TAR, tar);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK) {
|
||||||
|
ap->tar_valid = false;
|
||||||
return retval;
|
return retval;
|
||||||
|
}
|
||||||
ap->tar_value = tar;
|
ap->tar_value = tar;
|
||||||
ap->tar_valid = true;
|
ap->tar_valid = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue