OK, I find it's even not easy to add swd_reset.

Here is what I do:
In arm_adi_v5.c, seems simple:
void adi_v5_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())
        swd_add_reset(1);
}

void adi_v5_deassert_reset(void)
{
    if (transport_is_jtag())
        jtag_add_reset(0, 0);
    else if (transport_is_swd())
        swd_add_reset(0);
}

In core.c:
void swd_add_reset(int req_srst)
{
    int new_srst = 0;

    if (req_srst) {
        if (!(jtag_reset_config & RESET_HAS_SRST)) {
            LOG_ERROR("BUG: can't assert SRST");
            jtag_set_error(ERROR_FAIL);
            return;
        }
        new_srst = 1;
    }

    /* Maybe change TRST and/or SRST signal state */
    if (jtag_srst != new_srst) {
        int retval;

        retval = interface_swd_add_reset(new_srst);
        if (retval != ERROR_OK)
            jtag_set_error(retval);
        else
            retval = jtag_execute_queue();

        if (retval != ERROR_OK) {
            LOG_ERROR("TRST/SRST error");
            return;
        }
    }

    /* SRST resets everything hooked up to that signal */
    if (jtag_srst != new_srst) {
        jtag_srst = new_srst;
        if (jtag_srst) {
            LOG_DEBUG("SRST line asserted");
            if (adapter_nsrst_assert_width)
                jtag_add_sleep(adapter_nsrst_assert_width * 1000);
        } else {
            LOG_DEBUG("SRST line released");
            if (adapter_nsrst_delay)
                jtag_add_sleep(adapter_nsrst_delay * 1000);
        }
    }
}

I didn't change the name of jtag_reset_config, jtag_set_error, 
jtag_execute_queue, and even jtag_add_sleep.
Despite the jtag_ prefix, I can make things working.
Should I add a set of same functions with swd_ prefix?




simonqian.openocd
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to