dap_dp_init: remove loop

current loop sounds to me like 'we don't know what we do, let's do it ten times, maybe we will have luck'.
should be enough to 'ping' debug port using reading CRTL_STAT.

tested on cortex-a8, snapdragon, jetson k1, cortex-r5, cortex-r4

Change-Id: Ibc62ac1eca06c141f4fccd5de7b11350ca1f35fd
Signed-off-by: Jiri Kastner <cz172638@gmail.com>
Tested-by: Jiri Kastner <cz172638@gmail.com>
Reviewed-on: http://openocd.zylin.com/3193
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Liviu Dudau <liviu@dudau.co.uk>
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
This commit is contained in:
Jiri Kastner 2016-11-11 10:50:13 +01:00 committed by Paul Fertser
parent 0a2f1b29e6
commit cac446ca6b
1 changed files with 49 additions and 51 deletions

View File

@ -612,25 +612,26 @@ int dap_dp_init(struct adiv5_dap *dap)
dap->select = DP_SELECT_INVALID; dap->select = DP_SELECT_INVALID;
dap->last_read = NULL; dap->last_read = NULL;
for (size_t i = 0; i < 10; i++) { for (size_t i = 0; i < 30; i++) {
/* DP initialization */ /* DP initialization */
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL); retval = dap_dp_read_atomic(dap, DP_CTRL_STAT, NULL);
if (retval != ERROR_OK) if (retval == ERROR_OK)
continue; break;
}
retval = dap_queue_dp_write(dap, DP_CTRL_STAT, SSTICKYERR); retval = dap_queue_dp_write(dap, DP_CTRL_STAT, SSTICKYERR);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL); retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
dap->dp_ctrl_stat = CDBGPWRUPREQ | CSYSPWRUPREQ; dap->dp_ctrl_stat = CDBGPWRUPREQ | CSYSPWRUPREQ;
retval = dap_queue_dp_write(dap, DP_CTRL_STAT, dap->dp_ctrl_stat); retval = dap_queue_dp_write(dap, DP_CTRL_STAT, dap->dp_ctrl_stat);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
/* Check that we have debug power domains activated */ /* Check that we have debug power domains activated */
LOG_DEBUG("DAP: wait CDBGPWRUPACK"); LOG_DEBUG("DAP: wait CDBGPWRUPACK");
@ -638,34 +639,31 @@ int dap_dp_init(struct adiv5_dap *dap)
CDBGPWRUPACK, CDBGPWRUPACK, CDBGPWRUPACK, CDBGPWRUPACK,
DAP_POWER_DOMAIN_TIMEOUT); DAP_POWER_DOMAIN_TIMEOUT);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
LOG_DEBUG("DAP: wait CSYSPWRUPACK"); LOG_DEBUG("DAP: wait CSYSPWRUPACK");
retval = dap_dp_poll_register(dap, DP_CTRL_STAT, retval = dap_dp_poll_register(dap, DP_CTRL_STAT,
CSYSPWRUPACK, CSYSPWRUPACK, CSYSPWRUPACK, CSYSPWRUPACK,
DAP_POWER_DOMAIN_TIMEOUT); DAP_POWER_DOMAIN_TIMEOUT);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL); retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
/* With debug power on we can activate OVERRUN checking */ /* With debug power on we can activate OVERRUN checking */
dap->dp_ctrl_stat = CDBGPWRUPREQ | CSYSPWRUPREQ | CORUNDETECT; dap->dp_ctrl_stat = CDBGPWRUPREQ | CSYSPWRUPREQ | CORUNDETECT;
retval = dap_queue_dp_write(dap, DP_CTRL_STAT, dap->dp_ctrl_stat); retval = dap_queue_dp_write(dap, DP_CTRL_STAT, dap->dp_ctrl_stat);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL); retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
retval = dap_run(dap); retval = dap_run(dap);
if (retval != ERROR_OK) if (retval != ERROR_OK)
continue; return retval;
break;
}
return retval; return retval;
} }