drivers/am335xgpio: Migrate to adapter gpio commands
[fw/openocd] / src / jtag / drivers / nulink_usb.c
index 5fdbed3fc4e0346bc4d10b75ec3a30557d15b041..0bb5ec4443541ee65c80e5bc196ba3340a898778 100644 (file)
@@ -1,19 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2016-2017 by Nuvoton                                    *
  *   Zale Yu <cyyu@nuvoton.com>                                            *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -22,6 +11,7 @@
 
 /* project specific includes */
 #include <helper/binarybuffer.h>
+#include <jtag/adapter.h>
 #include <jtag/interface.h>
 #include <jtag/hla/hla_layout.h>
 #include <jtag/hla/hla_transport.h>
@@ -32,7 +22,9 @@
 
 #include <hidapi.h>
 
-#define NULINK_READ_TIMEOUT  1000
+#include "libusb_helper.h"
+
+#define NULINK_READ_TIMEOUT  LIBUSB_TIMEOUT_MS
 
 #define NULINK_HID_MAX_SIZE   (64)
 #define NULINK2_HID_MAX_SIZE   (1024)
@@ -253,7 +245,7 @@ static int nulink_usb_write_debug_reg(void *handle, uint32_t addr, uint32_t val)
 {
        struct nulink_usb_handle_s *h = handle;
 
-       LOG_DEBUG("nulink_usb_write_debug_reg 0x%08" PRIX32 "0x%08" PRIX32, addr, val);
+       LOG_DEBUG("nulink_usb_write_debug_reg 0x%08" PRIX32 " 0x%08" PRIX32, addr, val);
 
        nulink_usb_init_buffer(handle, 8 + 12 * 1);
        /* set command ID */
@@ -411,7 +403,7 @@ static int nulink_usb_step(void *handle)
        return res;
 }
 
-static int nulink_usb_read_reg(void *handle, int num, uint32_t *val)
+static int nulink_usb_read_reg(void *handle, unsigned int regsel, uint32_t *val)
 {
        struct nulink_usb_handle_s *h = handle;
 
@@ -434,7 +426,7 @@ static int nulink_usb_read_reg(void *handle, int num, uint32_t *val)
        h->cmdbuf[h->cmdidx] = 0;
        h->cmdidx += 1;
        /* u32Addr */
-       h_u32_to_le(h->cmdbuf + h->cmdidx, num);
+       h_u32_to_le(h->cmdbuf + h->cmdidx, regsel);
        h->cmdidx += 4;
        /* u32Data */
        h_u32_to_le(h->cmdbuf + h->cmdidx, 0);
@@ -450,7 +442,7 @@ static int nulink_usb_read_reg(void *handle, int num, uint32_t *val)
        return res;
 }
 
-static int nulink_usb_write_reg(void *handle, int num, uint32_t val)
+static int nulink_usb_write_reg(void *handle, unsigned int regsel, uint32_t val)
 {
        struct nulink_usb_handle_s *h = handle;
 
@@ -473,7 +465,7 @@ static int nulink_usb_write_reg(void *handle, int num, uint32_t val)
        h->cmdbuf[h->cmdidx] = 0;
        h->cmdidx += 1;
        /* u32Addr */
-       h_u32_to_le(h->cmdbuf + h->cmdidx, num);
+       h_u32_to_le(h->cmdbuf + h->cmdidx, regsel);
        h->cmdidx += 4;
        /* u32Data */
        h_u32_to_le(h->cmdbuf + h->cmdidx, val);
@@ -503,7 +495,7 @@ static int nulink_usb_read_mem8(void *handle, uint32_t addr, uint16_t len,
                aligned_addr = aligned_addr * 4;
                offset = addr - aligned_addr;
                LOG_DEBUG("nulink_usb_read_mem8: unaligned address addr 0x%08" PRIx32
-                               "/aligned addr 0x%08" PRIx32 "offset %" PRIu32,
+                               "/aligned addr 0x%08" PRIx32 " offset %" PRIu32,
                                addr, aligned_addr, offset);
 
                addr = aligned_addr;
@@ -844,11 +836,11 @@ static int nulink_usb_read_mem(void *handle, uint32_t addr, uint32_t size,
                /* the nulink only supports 8/32bit memory read/writes
                 * honour 32bit, all others will be handled as 8bit access */
                if (size == 4) {
-                       /* When in jtag mode the nulink uses the auto-increment functinality.
+                       /* When in jtag mode the nulink uses the auto-increment functionality.
                         * However it expects us to pass the data correctly, this includes
                         * alignment and any page boundaries. We already do this as part of the
                         * adi_v5 implementation, but the nulink is a hla adapter and so this
-                        * needs implementiong manually.
+                        * needs implementing manually.
                         * currently this only affects jtag mode, they do single
                         * access in SWD mode - but this may change and so we do it for both modes */
 
@@ -909,11 +901,11 @@ static int nulink_usb_write_mem(void *handle, uint32_t addr, uint32_t size,
                /* the nulink only supports 8/32bit memory read/writes
                 * honour 32bit, all others will be handled as 8bit access */
                if (size == 4) {
-                       /* When in jtag mode the nulink uses the auto-increment functinality.
+                       /* When in jtag mode the nulink uses the auto-increment functionality.
                         * However it expects us to pass the data correctly, this includes
                         * alignment and any page boundaries. We already do this as part of the
                         * adi_v5 implementation, but the nulink is a hla adapter and so this
-                        * needs implementiong manually.
+                        * needs implementing manually.
                         * currently this only affects jtag mode, do single
                         * access in SWD mode - but this may change and so we do it for both modes */
 
@@ -1054,8 +1046,9 @@ static int nulink_usb_open(struct hl_interface_param_s *param, void **fd)
                goto error_open;
        }
 
-       if (param->serial) {
-               size_t len = mbstowcs(NULL, param->serial, 0);
+       const char *serial = adapter_get_required_serial();
+       if (serial) {
+               size_t len = mbstowcs(NULL, serial, 0);
 
                target_serial = calloc(len + 1, sizeof(wchar_t));
                if (!target_serial) {
@@ -1063,7 +1056,7 @@ static int nulink_usb_open(struct hl_interface_param_s *param, void **fd)
                        goto error_open;
                }
 
-               if (mbstowcs(target_serial, param->serial, len + 1) == (size_t)(-1)) {
+               if (mbstowcs(target_serial, serial, len + 1) == (size_t)(-1)) {
                        LOG_WARNING("unable to convert serial");
                        free(target_serial);
                        target_serial = NULL;