stlink: dequeue CSW write only if it doesn't change csw_default
[openocd.git] / src / jtag / drivers / ulink.c
index ccc023fb81e488365255d73f425be34b555c0b7d..3ae5cac620ee72b4a9cbab23ca048f4395f20e09 100644 (file)
@@ -21,6 +21,7 @@
 #endif
 
 #include <math.h>
+#include "helper/system.h"
 #include <jtag/interface.h>
 #include <jtag/commands.h>
 #include <target/image.h>
@@ -266,7 +267,7 @@ static int ulink_usb_open(struct ulink **device)
 {
        ssize_t num_devices, i;
        bool found;
-       libusb_device **usb_devices;
+       struct libusb_device **usb_devices;
        struct libusb_device_descriptor usb_desc;
        struct libusb_device_handle *usb_device_handle;
 
@@ -530,14 +531,14 @@ static int ulink_allocate_payload(struct ulink_cmd *ulink_cmd, int size,
 
        payload = calloc(size, sizeof(uint8_t));
 
-       if (payload == NULL) {
+       if (!payload) {
                LOG_ERROR("Could not allocate OpenULINK command payload: out of memory");
                return ERROR_FAIL;
        }
 
        switch (direction) {
            case PAYLOAD_DIRECTION_OUT:
-                   if (ulink_cmd->payload_out != NULL) {
+                   if (ulink_cmd->payload_out) {
                            LOG_ERROR("BUG: Duplicate payload allocation for OpenULINK command");
                            free(payload);
                            return ERROR_FAIL;
@@ -547,7 +548,7 @@ static int ulink_allocate_payload(struct ulink_cmd *ulink_cmd, int size,
                    }
                    break;
            case PAYLOAD_DIRECTION_IN:
-                   if (ulink_cmd->payload_in_start != NULL) {
+                   if (ulink_cmd->payload_in_start) {
                            LOG_ERROR("BUG: Duplicate payload allocation for OpenULINK command");
                            free(payload);
                            return ERROR_FAIL;
@@ -583,7 +584,7 @@ static int ulink_get_queue_size(struct ulink *device,
        struct ulink_cmd *current = device->queue_start;
        int sum = 0;
 
-       while (current != NULL) {
+       while (current) {
                switch (direction) {
                    case PAYLOAD_DIRECTION_OUT:
                            sum += current->payload_out_size + 1;       /* + 1 byte for Command ID */
@@ -611,7 +612,7 @@ static void ulink_clear_queue(struct ulink *device)
        struct ulink_cmd *current = device->queue_start;
        struct ulink_cmd *next = NULL;
 
-       while (current != NULL) {
+       while (current) {
                /* Save pointer to next element */
                next = current->next;
 
@@ -672,7 +673,7 @@ static int ulink_append_queue(struct ulink *device, struct ulink_cmd *ulink_cmd)
                        ulink_clear_queue(device);
        }
 
-       if (device->queue_start == NULL) {
+       if (!device->queue_start) {
                /* Queue was empty */
                device->commands_in_queue = 1;
 
@@ -876,7 +877,7 @@ static int ulink_append_scan_cmd(struct ulink *device, enum scan_type scan_type,
        int ret, i, scan_size_bytes;
        uint8_t bits_last_byte;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        /* Check size of command. USB buffer can hold 64 bytes, 1 byte is command ID,
@@ -974,7 +975,7 @@ static int ulink_append_clock_tms_cmd(struct ulink *device, uint8_t count,
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        if (device->delay_clock_tms < 0)
@@ -1010,7 +1011,7 @@ static int ulink_append_clock_tck_cmd(struct ulink *device, uint16_t count)
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        if (device->delay_clock_tck < 0)
@@ -1043,7 +1044,7 @@ static int ulink_append_get_signals_cmd(struct ulink *device)
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        cmd->id = CMD_GET_SIGNALS;
@@ -1083,7 +1084,7 @@ static int ulink_append_set_signals_cmd(struct ulink *device, uint8_t low,
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        cmd->id = CMD_SET_SIGNALS;
@@ -1115,7 +1116,7 @@ static int ulink_append_sleep_cmd(struct ulink *device, uint32_t us)
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        cmd->id = CMD_SLEEP_US;
@@ -1152,7 +1153,7 @@ static int ulink_append_configure_tck_cmd(struct ulink *device, int delay_scan_i
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        cmd->id = CMD_CONFIGURE_TCK_FREQ;
@@ -1213,7 +1214,7 @@ static int ulink_append_led_cmd(struct ulink *device, uint8_t led_state)
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        cmd->id = CMD_SET_LEDS;
@@ -1243,7 +1244,7 @@ static int ulink_append_test_cmd(struct ulink *device)
        struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
        int ret;
 
-       if (cmd == NULL)
+       if (!cmd)
                return ERROR_FAIL;
 
        cmd->id = CMD_TEST;
@@ -1490,7 +1491,7 @@ static int ulink_queue_scan(struct ulink *device, struct jtag_command *cmd)
        if ((type == SCAN_IN) || (type == SCAN_IO)) {
                tdo_buffer_start = calloc(sizeof(uint8_t), scan_size_bytes);
 
-               if (tdo_buffer_start == NULL)
+               if (!tdo_buffer_start)
                        return ERROR_FAIL;
 
                tdo_buffer = tdo_buffer_start;
@@ -1568,9 +1569,9 @@ static int ulink_queue_scan(struct ulink *device, struct jtag_command *cmd)
                        bytecount -= 58;
 
                        /* Update TDI and TDO buffer pointers */
-                       if (tdi_buffer_start != NULL)
+                       if (tdi_buffer_start)
                                tdi_buffer += 58;
-                       if (tdo_buffer_start != NULL)
+                       if (tdo_buffer_start)
                                tdo_buffer += 58;
                } else if (bytecount == 58) {   /* Full scan, no further scans */
                        tms_count_end = last_tms_count;
@@ -1870,12 +1871,12 @@ static int ulink_post_process_queue(struct ulink *device)
 
        current = device->queue_start;
 
-       while (current != NULL) {
+       while (current) {
                openocd_cmd = current->cmd_origin;
 
                /* Check if a corresponding OpenOCD command is stored for this
                 * OpenULINK command */
-               if ((current->needs_postprocessing == true) && (openocd_cmd != NULL)) {
+               if ((current->needs_postprocessing == true) && (openocd_cmd)) {
                        switch (openocd_cmd->type) {
                            case JTAG_SCAN:
                                    ret = ulink_post_process_scan(current);
@@ -2121,7 +2122,7 @@ static int ulink_init(void)
        uint8_t input_signals, output_signals;
 
        ulink_handle = calloc(1, sizeof(struct ulink));
-       if (ulink_handle == NULL)
+       if (!ulink_handle)
                return ERROR_FAIL;
 
        libusb_init(&ulink_handle->libusb_ctx);
@@ -2257,9 +2258,9 @@ COMMAND_HANDLER(ulink_download_firmware_handler)
 
 /*************************** Command Registration **************************/
 
-static const struct command_registration ulink_command_handlers[] = {
+static const struct command_registration ulink_subcommand_handlers[] = {
        {
-               .name = "ulink_download_firmware",
+               .name = "download_firmware",
                .handler = &ulink_download_firmware_handler,
                .mode = COMMAND_EXEC,
                .help = "download firmware image to ULINK device",
@@ -2268,6 +2269,17 @@ static const struct command_registration ulink_command_handlers[] = {
        COMMAND_REGISTRATION_DONE,
 };
 
+static const struct command_registration ulink_command_handlers[] = {
+       {
+               .name = "ulink",
+               .mode = COMMAND_ANY,
+               .help = "perform ulink management",
+               .chain = ulink_subcommand_handlers,
+               .usage = "",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+
 static struct jtag_interface ulink_interface = {
        .execute_queue = ulink_execute_queue,
 };

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)