hla: use the new system_reset API
HLA uses its own internal driver's API to control the adapter's system reset, but at the same time it calls jtag_add_reset() to avoid breaking the internal logic of OpenOCD. This implicitly forces HLA to rely on jtag queue mechanism, even if HLA has no link with JTAG state machine. It requires HLA to implement an empty execute_queue() to comply with the JTAG queue. Modify the HLA framework and the HLA targets to use the new adapter API for system_reset and decouple HLA from JTAG queue. Rename the HLA static functions adapter_assert_reset() and adapter_deassert_reset() to avoid overlap with the global functions with same name. While there, fix a minor typo in a comment s/incase/in case/. Do not remove from HLA the JTAG specific API execute_queue(), even if not required anymore, because OpenOCD code still has calls to jtag_execute_queue() in case of non JTAG transport. Change-Id: I0e65e3e557bd665bd3d3aeaa84ea609b55a05e48 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4896 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
committed by
Tomas Vanek
parent
9daec098a9
commit
0f24549ce9
+8
-16
@@ -25,6 +25,7 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "jtag/interface.h"
|
||||
#include "jtag/jtag.h"
|
||||
#include "jtag/hla/hla_transport.h"
|
||||
#include "jtag/hla/hla_interface.h"
|
||||
@@ -499,7 +500,7 @@ static int adapter_poll(struct target *target)
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
static int adapter_assert_reset(struct target *target)
|
||||
static int hl_assert_reset(struct target *target)
|
||||
{
|
||||
int res = ERROR_OK;
|
||||
struct hl_interface_s *adapter = target_to_adapter(target);
|
||||
@@ -514,8 +515,7 @@ static int adapter_assert_reset(struct target *target)
|
||||
|
||||
if ((jtag_reset_config & RESET_HAS_SRST) &&
|
||||
(jtag_reset_config & RESET_SRST_NO_GATING)) {
|
||||
jtag_add_reset(0, 1);
|
||||
res = adapter->layout->api->assert_srst(adapter->handle, 0);
|
||||
res = adapter_assert_reset();
|
||||
srst_asserted = true;
|
||||
}
|
||||
|
||||
@@ -529,8 +529,7 @@ static int adapter_assert_reset(struct target *target)
|
||||
|
||||
if (jtag_reset_config & RESET_HAS_SRST) {
|
||||
if (!srst_asserted) {
|
||||
jtag_add_reset(0, 1);
|
||||
res = adapter->layout->api->assert_srst(adapter->handle, 0);
|
||||
res = adapter_assert_reset();
|
||||
}
|
||||
if (res == ERROR_COMMAND_NOTFOUND)
|
||||
LOG_ERROR("Hardware srst not supported, falling back to software reset");
|
||||
@@ -563,21 +562,14 @@ static int adapter_assert_reset(struct target *target)
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
static int adapter_deassert_reset(struct target *target)
|
||||
static int hl_deassert_reset(struct target *target)
|
||||
{
|
||||
struct hl_interface_s *adapter = target_to_adapter(target);
|
||||
|
||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
if (jtag_reset_config & RESET_HAS_SRST)
|
||||
adapter->layout->api->assert_srst(adapter->handle, 1);
|
||||
|
||||
/* virtual deassert reset, we need it for the internal
|
||||
* jtag state machine
|
||||
*/
|
||||
jtag_add_reset(0, 0);
|
||||
adapter_deassert_reset();
|
||||
|
||||
target->savedDCRDR = 0; /* clear both DCC busy bits on initial resume */
|
||||
|
||||
@@ -819,8 +811,8 @@ struct target_type hla_target = {
|
||||
.arch_state = armv7m_arch_state,
|
||||
|
||||
.target_request_data = hl_target_request_data,
|
||||
.assert_reset = adapter_assert_reset,
|
||||
.deassert_reset = adapter_deassert_reset,
|
||||
.assert_reset = hl_assert_reset,
|
||||
.deassert_reset = hl_deassert_reset,
|
||||
|
||||
.halt = adapter_halt,
|
||||
.resume = adapter_resume,
|
||||
|
||||
+3
-11
@@ -25,6 +25,7 @@
|
||||
#include "target.h"
|
||||
#include "target_type.h"
|
||||
#include "hello.h"
|
||||
#include "jtag/interface.h"
|
||||
#include "jtag/jtag.h"
|
||||
#include "jtag/hla/hla_transport.h"
|
||||
#include "jtag/hla/hla_interface.h"
|
||||
@@ -930,9 +931,7 @@ static int stm8_reset_assert(struct target *target)
|
||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||
|
||||
if (jtag_reset_config & RESET_HAS_SRST) {
|
||||
jtag_add_reset(0, 1);
|
||||
res = adapter->layout->api->assert_srst(adapter->handle, 0);
|
||||
|
||||
res = adapter_assert_reset();
|
||||
if (res == ERROR_OK)
|
||||
/* hardware srst supported */
|
||||
use_srst_fallback = false;
|
||||
@@ -966,21 +965,14 @@ static int stm8_reset_assert(struct target *target)
|
||||
static int stm8_reset_deassert(struct target *target)
|
||||
{
|
||||
int res;
|
||||
struct hl_interface_s *adapter = target_to_adapter(target);
|
||||
|
||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||
|
||||
if (jtag_reset_config & RESET_HAS_SRST) {
|
||||
res = adapter->layout->api->assert_srst(adapter->handle, 1);
|
||||
res = adapter_deassert_reset();
|
||||
if ((res != ERROR_OK) && (res != ERROR_COMMAND_NOTFOUND))
|
||||
return res;
|
||||
}
|
||||
|
||||
/* virtual deassert reset, we need it for the internal
|
||||
* jtag state machine
|
||||
*/
|
||||
jtag_add_reset(0, 0);
|
||||
|
||||
/* The cpu should now be stalled. If halt was requested
|
||||
let poll detect the stall */
|
||||
if (target->reset_halt)
|
||||
|
||||
Reference in New Issue
Block a user