This is an automated email from Gerrit.

Jens Hoffmann ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/2018

-- gerrit

commit 60acf7221fab82a5efb8f4268aa4c87b4a4fcbd6
Author: Jens Hoffmann <[email protected]>
Date:   Fri Feb 21 15:51:58 2014 +0100

    stlink_usb.c: Add support stlink_v2-1 and nucleo devices.
    
    stlink V2-1 as used in new nucleo devices is using new
    endpoint numbers. This Patch will add support for st-link
    v2-1.
    
    Change-Id: Ib1c6975f0e1f95cc8e3c799953beafaf2a17745d
    Signed-off-by: Jens Hoffmann <[email protected]>

diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index e9d13d5..dd36354 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -46,14 +46,15 @@
 #define STLINK_READ_TIMEOUT 1000
 
 #define STLINK_NULL_EP     0
-#define STLINK_RX_EP       (1|ENDPOINT_IN)
-#define STLINK_TX_EP       (2|ENDPOINT_OUT)
-#define STLINK_TRACE_EP    (3|ENDPOINT_IN)
 #define STLINK_SG_SIZE     (31)
 #define STLINK_DATA_SIZE   (4096)
 #define STLINK_CMD_SIZE_V2 (16)
 #define STLINK_CMD_SIZE_V1 (10)
 
+static unsigned int stlink_read_ep = (1|ENDPOINT_IN);
+static unsigned int stlink_write_ep = (2|ENDPOINT_OUT);
+static unsigned int stlink_trace_ep = (3|ENDPOINT_IN);
+
 /* the current implementation of the stlink limits
  * 8bit read/writes to max 64 bytes. */
 #define STLINK_MAX_RW8         (64)
@@ -216,7 +217,7 @@ static int stlink_usb_xfer_v1_get_status(void *handle)
        /* read status */
        memset(h->cmdbuf, 0, STLINK_SG_SIZE);
 
-       if (jtag_libusb_bulk_read(h->fd, STLINK_RX_EP, (char *)h->cmdbuf,
+       if (jtag_libusb_bulk_read(h->fd, stlink_read_ep, (char *)h->cmdbuf,
                        13, STLINK_READ_TIMEOUT) != 13)
                return ERROR_FAIL;
 
@@ -246,19 +247,19 @@ static int stlink_usb_xfer_rw(void *handle, int cmdsize, 
const uint8_t *buf, int
 
        assert(handle != NULL);
 
-       if (jtag_libusb_bulk_write(h->fd, STLINK_TX_EP, (char *)h->cmdbuf, 
cmdsize,
+       if (jtag_libusb_bulk_write(h->fd, stlink_write_ep, (char *)h->cmdbuf, 
cmdsize,
                        STLINK_WRITE_TIMEOUT) != cmdsize) {
                return ERROR_FAIL;
        }
 
-       if (h->direction == STLINK_TX_EP && size) {
-               if (jtag_libusb_bulk_write(h->fd, STLINK_TX_EP, (char *)buf,
+       if (h->direction == stlink_write_ep && size) {
+               if (jtag_libusb_bulk_write(h->fd, stlink_write_ep, (char *)buf,
                                size, STLINK_WRITE_TIMEOUT) != size) {
                        LOG_DEBUG("bulk write failed");
                        return ERROR_FAIL;
                }
-       } else if (h->direction == STLINK_RX_EP && size) {
-               if (jtag_libusb_bulk_read(h->fd, STLINK_RX_EP, (char *)buf,
+       } else if (h->direction == stlink_read_ep && size) {
+               if (jtag_libusb_bulk_read(h->fd, stlink_read_ep, (char *)buf,
                                size, STLINK_READ_TIMEOUT) != size) {
                        LOG_DEBUG("bulk read failed");
                        return ERROR_FAIL;
@@ -276,7 +277,7 @@ static int stlink_usb_xfer_v1_get_sense(void *handle)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 16);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 16);
 
        h->cmdbuf[h->cmdidx++] = REQUEST_SENSE;
        h->cmdbuf[h->cmdidx++] = 0;
@@ -335,7 +336,7 @@ static int stlink_usb_read_trace(void *handle, const 
uint8_t *buf, int size)
 
        assert(h->version.stlink >= 2);
 
-       if (jtag_libusb_bulk_read(h->fd, STLINK_TRACE_EP, (char *)buf,
+       if (jtag_libusb_bulk_read(h->fd, stlink_trace_ep, (char *)buf,
                        size, STLINK_READ_TIMEOUT) != size) {
                LOG_ERROR("bulk trace read failed");
                return ERROR_FAIL;
@@ -356,7 +357,7 @@ static void stlink_usb_xfer_v1_create_cmd(void *handle, 
uint8_t direction, uint3
        h->cmdidx += 4;
        buf_set_u32(h->cmdbuf+h->cmdidx, 0, 32, size);
        h->cmdidx += 4;
-       h->cmdbuf[h->cmdidx++] = (direction == STLINK_RX_EP ? ENDPOINT_IN : 
ENDPOINT_OUT);
+       h->cmdbuf[h->cmdidx++] = (direction == stlink_read_ep ? ENDPOINT_IN : 
ENDPOINT_OUT);
        h->cmdbuf[h->cmdidx++] = 0; /* lun */
        h->cmdbuf[h->cmdidx++] = STLINK_CMD_SIZE_V1;
 }
@@ -420,7 +421,7 @@ static int stlink_usb_version(void *handle)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 6);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 6);
 
        h->cmdbuf[h->cmdidx++] = STLINK_GET_VERSION;
 
@@ -465,7 +466,7 @@ static int stlink_usb_check_voltage(void *handle, float 
*target_voltage)
        if (h->version.stlink == 1 || h->version.jtag < 13)
                return ERROR_COMMAND_NOTFOUND;
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 8);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 8);
 
        h->cmdbuf[h->cmdidx++] = STLINK_GET_TARGET_VOLTAGE;
 
@@ -496,7 +497,7 @@ static int stlink_usb_current_mode(void *handle, uint8_t 
*mode)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_GET_CURRENT_MODE;
 
@@ -526,7 +527,7 @@ static int stlink_usb_mode_enter(void *handle, enum 
stlink_mode type)
        if (h->jtag_api == STLINK_JTAG_API_V2)
                rx_size = 2;
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, rx_size);
+       stlink_usb_init_buffer(handle, stlink_read_ep, rx_size);
 
        switch (type) {
                case STLINK_MODE_DEBUG_JTAG:
@@ -726,7 +727,7 @@ static int stlink_usb_idcode(void *handle, uint32_t *idcode)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 4);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 4);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_READCOREID;
@@ -750,7 +751,7 @@ static int stlink_usb_v2_read_debug_reg(void *handle, 
uint32_t addr, uint32_t *v
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 8);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 8);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_READDEBUGREG;
@@ -774,7 +775,7 @@ static int stlink_usb_write_debug_reg(void *handle, 
uint32_t addr, uint32_t val)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        if (h->jtag_api == STLINK_JTAG_API_V1)
@@ -804,7 +805,7 @@ static void stlink_usb_trace_read(void *handle)
        if (h->trace.enabled && h->version.jtag >= STLINK_TRACE_MIN_VERSION) {
                int res;
 
-               stlink_usb_init_buffer(handle, STLINK_RX_EP, 10);
+               stlink_usb_init_buffer(handle, stlink_read_ep, 10);
 
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_GET_TRACE_NB;
@@ -860,7 +861,7 @@ static enum target_state stlink_usb_state(void *handle)
        if (h->jtag_api == STLINK_JTAG_API_V2)
                return stlink_usb_v2_get_status(handle);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_GETSTATUS;
@@ -886,7 +887,7 @@ static int stlink_usb_reset(void *handle)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
 
@@ -919,7 +920,7 @@ static int stlink_usb_assert_srst(void *handle, int srst)
        if (h->jtag_api == STLINK_JTAG_API_V1)
                return ERROR_COMMAND_NOTFOUND;
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_DRIVE_NRST;
@@ -1001,7 +1002,7 @@ static void stlink_usb_trace_disable(void *handle)
 
        LOG_DEBUG("Tracing: disable\n");
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_STOP_TRACE_RX;
        res = stlink_usb_xfer(handle, h->databuf, 2);
@@ -1030,7 +1031,7 @@ static int stlink_usb_trace_enable(void *handle)
                        h->trace.source_hz / (h->trace.prescale + 1) :
                        h->trace.source_hz;
 
-               stlink_usb_init_buffer(handle, STLINK_RX_EP, 10);
+               stlink_usb_init_buffer(handle, stlink_read_ep, 10);
 
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
                h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_START_TRACE_RX;
@@ -1075,7 +1076,7 @@ static int stlink_usb_run(void *handle)
                return res;
        }
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_RUNCORE;
@@ -1105,7 +1106,7 @@ static int stlink_usb_halt(void *handle)
                return res;
        }
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_FORCEDEBUG;
@@ -1134,7 +1135,7 @@ static int stlink_usb_step(void *handle)
                return stlink_usb_write_debug_reg(handle, DCB_DHCSR, 
DBGKEY|C_HALT|C_DEBUGEN);
        }
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_STEPCORE;
@@ -1155,7 +1156,7 @@ static int stlink_usb_read_regs(void *handle)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 84);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 84);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        if (h->jtag_api == STLINK_JTAG_API_V1)
@@ -1179,7 +1180,7 @@ static int stlink_usb_read_reg(void *handle, int num, 
uint32_t *val)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, h->jtag_api == 
STLINK_JTAG_API_V1 ? 4 : 8);
+       stlink_usb_init_buffer(handle, stlink_read_ep, h->jtag_api == 
STLINK_JTAG_API_V1 ? 4 : 8);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        if (h->jtag_api == STLINK_JTAG_API_V1)
@@ -1211,7 +1212,7 @@ static int stlink_usb_write_reg(void *handle, int num, 
uint32_t val)
 
        assert(handle != NULL);
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        if (h->jtag_api == STLINK_JTAG_API_V1)
@@ -1240,7 +1241,7 @@ static int stlink_usb_get_rw_status(void *handle)
        if (h->jtag_api == STLINK_JTAG_API_V1)
                return ERROR_OK;
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);
+       stlink_usb_init_buffer(handle, stlink_read_ep, 2);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_GETLASTRWSTATUS;
@@ -1269,7 +1270,7 @@ static int stlink_usb_read_mem8(void *handle, uint32_t 
addr, uint16_t len,
                return ERROR_FAIL;
        }
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, read_len);
+       stlink_usb_init_buffer(handle, stlink_read_ep, read_len);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_READMEM_8BIT;
@@ -1307,7 +1308,7 @@ static int stlink_usb_write_mem8(void *handle, uint32_t 
addr, uint16_t len,
                return ERROR_FAIL;
        }
 
-       stlink_usb_init_buffer(handle, STLINK_TX_EP, len);
+       stlink_usb_init_buffer(handle, stlink_write_ep, len);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_WRITEMEM_8BIT;
@@ -1339,7 +1340,7 @@ static int stlink_usb_read_mem32(void *handle, uint32_t 
addr, uint16_t len,
                return ERROR_TARGET_UNALIGNED_ACCESS;
        }
 
-       stlink_usb_init_buffer(handle, STLINK_RX_EP, len);
+       stlink_usb_init_buffer(handle, stlink_read_ep, len);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_READMEM_32BIT;
@@ -1373,7 +1374,7 @@ static int stlink_usb_write_mem32(void *handle, uint32_t 
addr, uint16_t len,
                return ERROR_TARGET_UNALIGNED_ACCESS;
        }
 
-       stlink_usb_init_buffer(handle, STLINK_TX_EP, len);
+       stlink_usb_init_buffer(handle, stlink_write_ep, len);
 
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
        h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_WRITEMEM_32BIT;
@@ -1584,11 +1585,28 @@ static int stlink_usb_open(struct hl_interface_param_s 
*param, void **fd)
                case 0x3744:
                        h->version.stlink = 1;
                        break;
+               case 0x374B:
                default:
                        h->version.stlink = 2;
                        break;
                }
 
+               /* set enpoints depending on pid */
+               switch (param->pid) {
+               case 0x374B:
+                       stlink_read_ep = 0x1|ENDPOINT_IN;
+                       stlink_write_ep = 0x1|ENDPOINT_OUT;
+                       stlink_trace_ep = 0x2|ENDPOINT_IN;
+                       break;
+               case 0x3748:
+               case 0x3744:
+               default:
+                       stlink_read_ep = 0x1|ENDPOINT_IN;
+                       stlink_write_ep = 0x2|ENDPOINT_OUT;
+                       stlink_trace_ep = 0x3|ENDPOINT_IN;
+                       break;
+               }
+
                /* get the device version */
                err = stlink_usb_version(h);
 
diff --git a/tcl/board/stm32f0nucleo.cfg b/tcl/board/stm32f0nucleo.cfg
new file mode 100644
index 0000000..7142d23
--- /dev/null
+++ b/tcl/board/stm32f0nucleo.cfg
@@ -0,0 +1,10 @@
+# This is an STM32F0 discovery board with a single STM32F030R8T6 chip.
+# http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF259997
+
+source [find interface/stlink-v2-1.cfg]
+
+set WORKAREASIZE 0x2000
+source [find target/stm32f0x_stlink.cfg]
+
+# use hardware reset, connect under reset
+reset_config srst_only srst_nogate
diff --git a/tcl/board/stm32f4nucleo.cfg b/tcl/board/stm32f4nucleo.cfg
new file mode 100644
index 0000000..18c3e88
--- /dev/null
+++ b/tcl/board/stm32f4nucleo.cfg
@@ -0,0 +1,9 @@
+# This is an STM32F0 discovery board with a single STM32F401RET6 chip.
+# http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF26000
+
+source [find interface/stlink-v2-1.cfg]
+
+source [find target/stm32f4x_stlink.cfg]
+
+# use hardware reset, connect under reset
+reset_config srst_only srst_nogate
diff --git a/tcl/interface/stlink-v2-1.cfg b/tcl/interface/stlink-v2-1.cfg
new file mode 100644
index 0000000..2dfb826
--- /dev/null
+++ b/tcl/interface/stlink-v2-1.cfg
@@ -0,0 +1,9 @@
+#
+# STMicroelectronics ST-LINK/V2- in-circuit debugger/programmer
+#
+
+interface hla
+hla_layout stlink
+hla_device_desc "ST-LINK/V2-1"
+hla_vid_pid 0x0483 0x374b
+

-- 

------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to