#include "interface.h"
#include <transport/transport.h>
#include <helper/jep106.h>
-#include <jtag/hla/hla_transport.h>
-#include <jtag/hla/hla_interface.h>
#ifdef HAVE_STRINGS_H
#include <strings.h>
/* adapters without trst signal will eventually use tlr sequence */
jtag_add_reset(trst, srst);
return ERROR_OK;
- } else if (transport_is_swd()) {
- if (trst == TRST_ASSERT) {
- LOG_ERROR("transport swd has no trst signal");
- return ERROR_FAIL;
- }
-
- if (srst == SRST_ASSERT && !(jtag_reset_config & RESET_HAS_SRST)) {
- LOG_ERROR("adapter has no srst signal");
- return ERROR_FAIL;
- }
- adapter_system_reset(srst);
- return ERROR_OK;
- } else if (transport_is_hla()) {
+ } else if (transport_is_swd() || transport_is_hla()) {
if (trst == TRST_ASSERT) {
LOG_ERROR("transport %s has no trst signal",
get_current_transport()->name);
LOG_ERROR("adapter has no srst signal");
return ERROR_FAIL;
}
- return hl_interface_reset(srst);
+ adapter_system_reset(srst);
+ return ERROR_OK;
}
if (trst == TRST_DEASSERT && srst == SRST_DEASSERT)
return ERROR_FAIL;
}
-void adapter_assert_reset(void)
+int adapter_assert_reset(void)
{
if (transport_is_jtag()) {
if (jtag_reset_config & RESET_SRST_PULLS_TRST)
jtag_add_reset(1, 1);
else
jtag_add_reset(0, 1);
- } else if (transport_is_swd())
- adapter_system_reset(1);
+ return ERROR_OK;
+ } else if (transport_is_swd() || transport_is_hla())
+ return adapter_system_reset(1);
else if (get_current_transport() != NULL)
LOG_ERROR("reset is not supported on %s",
get_current_transport()->name);
else
LOG_ERROR("transport is not selected");
+ return ERROR_FAIL;
}
-void adapter_deassert_reset(void)
+int adapter_deassert_reset(void)
{
- if (transport_is_jtag())
+ if (transport_is_jtag()) {
jtag_add_reset(0, 0);
- else if (transport_is_swd())
- adapter_system_reset(0);
+ return ERROR_OK;
+ } else if (transport_is_swd() || transport_is_hla())
+ return adapter_system_reset(0);
else if (get_current_transport() != NULL)
LOG_ERROR("reset is not supported on %s",
get_current_transport()->name);
else
LOG_ERROR("transport is not selected");
+ return ERROR_FAIL;
}
int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
return ERROR_OK;
}
+static int hl_interface_reset(int req_trst, int req_srst)
+{
+ return hl_if.layout->api->assert_srst(hl_if.handle, req_srst ? 0 : 1);
+}
+
static int hl_interface_execute_queue(void)
{
LOG_DEBUG("hl_interface_execute_queue: ignored");
int hl_interface_init_reset(void)
{
- /* incase the adapter has not already handled asserting srst
+ /* in case the adapter has not already handled asserting srst
* we will attempt it again */
if (hl_if.param.connect_under_reset) {
- jtag_add_reset(0, 1);
- hl_if.layout->api->assert_srst(hl_if.handle, 0);
+ adapter_assert_reset();
} else {
- jtag_add_reset(0, 0);
+ adapter_deassert_reset();
}
return ERROR_OK;
}
-/* FIXME: hla abuses of jtag_add_reset() to track srst status and for timings */
-int hl_interface_reset(int srst)
-{
- int result;
-
- if (srst == 1) {
- jtag_add_reset(0, 1);
- result = hl_if.layout->api->assert_srst(hl_if.handle, 0);
- } else {
- result = hl_if.layout->api->assert_srst(hl_if.handle, 1);
- jtag_add_reset(0, 0);
- }
- return result;
-}
-
static int hl_interface_khz(int khz, int *jtag_speed)
{
if (hl_if.layout->api->speed == NULL)
.transports = hl_transports,
.init = hl_interface_init,
.quit = hl_interface_quit,
+ .reset = hl_interface_reset,
.execute_queue = hl_interface_execute_queue,
.speed = &hl_interface_speed,
.khz = &hl_interface_khz,
int hl_interface_init_reset(void);
int hl_interface_override_target(const char **targetname);
-#if BUILD_HLADAPTER == 1
-int hl_interface_reset(int srst);
-#else
-static inline int hl_interface_reset(int srst)
-{
- return ERROR_OK;
-}
-#endif
-
#endif /* OPENOCD_JTAG_HLA_HLA_INTERFACE_H */
extern const char * const jtag_only[];
int adapter_resets(int assert_trst, int assert_srst);
-void adapter_assert_reset(void);
-void adapter_deassert_reset(void);
+int adapter_assert_reset(void);
+int adapter_deassert_reset(void);
int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
uint32_t port_size, unsigned int *trace_freq,
unsigned int traceclkin_freq, uint16_t *prescaler);
#include "config.h"
#endif
+#include "jtag/interface.h"
#include "jtag/jtag.h"
#include "jtag/hla/hla_transport.h"
#include "jtag/hla/hla_interface.h"
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);
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;
}
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");
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 */
.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,
#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"
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;
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)