This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7755

-- gerrit

commit c1be23fe10eb0af2ae4edade5708693f6e34c4bc
Author: Laurent LEMELE <laurent.lem...@st.com>
Date:   Tue Dec 13 16:12:08 2022 +0100

    jtag/stlink: add STLINK-V3PWR support
    
    STLINK-V3PWR is both a standalone debugger probe compatible with
    STLINK-V3 and a source measurement unit (SMU).
    Link: http://www.st.com/stlink-v3pwr
    
    This code adds support for the debugger probe functionality.
    
    Change-Id: Ib056e55722528f922c5574bb6fbf77e2f2b2b0c1
    Signed-off-by: Laurent LEMELE <laurent.lem...@st.com>
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/contrib/60-openocd.rules b/contrib/60-openocd.rules
index bb6f478a1e..fc35fb9b9e 100644
--- a/contrib/60-openocd.rules
+++ b/contrib/60-openocd.rules
@@ -99,6 +99,8 @@ ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", 
MODE="660", GROUP="plugdev",
 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="660", 
GROUP="plugdev", TAG+="uaccess"
 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="660", 
GROUP="plugdev", TAG+="uaccess"
 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3754", MODE="660", 
GROUP="plugdev", TAG+="uaccess"
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3755", MODE="660", 
GROUP="plugdev", TAG+="uaccess"
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3757", MODE="660", 
GROUP="plugdev", TAG+="uaccess"
 
 # Cypress SuperSpeed Explorer Kit
 ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="0007", MODE="660", 
GROUP="plugdev", TAG+="uaccess"
diff --git a/doc/openocd.texi b/doc/openocd.texi
index 832047f0ea..04b8929a75 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -463,6 +463,12 @@ They only work with STMicroelectronics chips, notably 
STM32 and STM8.
 @item @b{STLINK-V3}
 @* This is available standalone and as part of some kits.
 @* Link: @url{http://www.st.com/stlink-v3}
+@item @b{STLINK-V3PWR}
+@* This is available standalone.
+Beside the debugger functionality, the probe includes a SMU (source
+measurement unit) aimed at analyzing power consumption during code
+execution. The SMU is not supported by OpenOCD.
+@* Link: @url{http://www.st.com/stlink-v3pwr}
 @end itemize
 
 For info the original ST-LINK enumerates using the mass storage usb class; 
however,
@@ -3184,7 +3190,7 @@ passed as is to the underlying adapter layout handler.
 @anchor{st_link_dap_interface}
 @deffn {Interface Driver} {st-link}
 This is a driver that supports STMicroelectronics adapters ST-LINK/V2
-(from firmware V2J24) and STLINK-V3, thanks to a new API that provides
+(from firmware V2J24), STLINK-V3 and STLINK-V3PWR, thanks to a new API that 
provides
 directly access the arm ADIv5 DAP.
 
 The new API provide access to multiple AP on the same DAP, but the
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index ee629542ba..2c5b63dd6e 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -84,6 +84,8 @@
 #define STLINK_V3S_PID          (0x374F)
 #define STLINK_V3_2VCP_PID      (0x3753)
 #define STLINK_V3E_NO_MSD_PID   (0x3754)
+#define STLINK_V3P_USBLOADER_PID (0x3755)
+#define STLINK_V3P_PID           (0x3757)
 
 /*
  * ST-Link/V1, ST-Link/V2 and ST-Link/V2.1 are full-speed USB devices and
@@ -1297,8 +1299,8 @@ static int stlink_usb_version(void *handle)
                break;
        }
 
-       /* STLINK-V3 requires a specific command */
-       if (v == 3 && x == 0 && y == 0) {
+       /* STLINK-V3 & STLINK-V3P require a specific command */
+       if (v >= 3 && x == 0 && y == 0) {
                stlink_usb_init_buffer(handle, h->rx_ep, 16);
 
                h->cmdbuf[h->cmdidx++] = STLINK_APIV3_GET_VERSION_EX;
@@ -1414,6 +1416,41 @@ static int stlink_usb_version(void *handle)
                if (h->version.jtag >= 6)
                        flags |= STLINK_F_HAS_RW8_512BYTES;
 
+               break;
+       case 4:
+               /* STLINK-V3P use api-v3 */
+               h->version.jtag_api = STLINK_JTAG_API_V3;
+
+               /* STLINK-V3P is a superset of ST-LINK/V3 */
+
+               /* API for trace */
+               /* API for target voltage */
+               flags |= STLINK_F_HAS_TRACE;
+
+               /* preferred API to get last R/W status */
+               flags |= STLINK_F_HAS_GETLASTRWSTATUS2;
+
+               /* API to access DAP registers */
+               flags |= STLINK_F_HAS_DAP_REG;
+
+               /* API to read/write memory at 16 bit */
+               /* API to write memory without address increment */
+               flags |= STLINK_F_HAS_MEM_16BIT;
+
+               /* API required to init AP before any AP access */
+               flags |= STLINK_F_HAS_AP_INIT;
+
+               /* API required to return proper error code on close AP */
+               flags |= STLINK_F_FIX_CLOSE_AP;
+
+               /* Banked regs (DPv1 & DPv2) support */
+               /* API to read memory without address increment */
+               /* Memory R/W supports CSW */
+               flags |= STLINK_F_HAS_DPBANKSEL;
+
+               /* 8bit read/write max packet size 512 bytes */
+               flags |= STLINK_F_HAS_RW8_512BYTES;
+
                break;
        default:
                break;
@@ -3402,6 +3439,8 @@ static int stlink_usb_usb_open(void *handle, struct 
hl_interface_param_s *param)
                        case STLINK_V3S_PID:
                        case STLINK_V3_2VCP_PID:
                        case STLINK_V3E_NO_MSD_PID:
+                       case STLINK_V3P_USBLOADER_PID:
+                       case STLINK_V3P_PID:
                                h->version.stlink = 3;
                                h->tx_ep = STLINK_V2_1_TX_EP;
                                h->trace_ep = STLINK_V2_1_TRACE_EP;
@@ -3820,7 +3859,7 @@ static int stlink_config_trace(void *handle, bool enabled,
                return ERROR_FAIL;
        }
 
-       unsigned int max_trace_freq = (h->version.stlink == 3) ?
+       unsigned int max_trace_freq = (h->version.stlink >= 3) ?
                        STLINK_V3_TRACE_MAX_HZ : STLINK_TRACE_MAX_HZ;
 
        /* Only concern ourselves with the frequency if the STlink is 
processing it. */
diff --git a/tcl/interface/stlink-dap.cfg b/tcl/interface/stlink-dap.cfg
index 5c24cbdab7..99c81c180c 100644
--- a/tcl/interface/stlink-dap.cfg
+++ b/tcl/interface/stlink-dap.cfg
@@ -11,7 +11,7 @@
 #
 
 adapter driver st-link
-st-link vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 
0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754
+st-link vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 
0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754 0x0483 0x3755 
0x0483 0x3757
 
 # transport select dapdirect_jtag
 # transport select dapdirect_swd
diff --git a/tcl/interface/stlink.cfg b/tcl/interface/stlink.cfg
index e4906b74ed..8578bf2199 100644
--- a/tcl/interface/stlink.cfg
+++ b/tcl/interface/stlink.cfg
@@ -8,7 +8,7 @@
 adapter driver hla
 hla_layout stlink
 hla_device_desc "ST-LINK"
-hla_vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 
0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754
+hla_vid_pid 0x0483 0x3744 0x0483 0x3748 0x0483 0x374b 0x0483 0x374d 0x0483 
0x374e 0x0483 0x374f 0x0483 0x3752 0x0483 0x3753 0x0483 0x3754 0x0483 0x3755 
0x0483 0x3757
 
 # Optionally specify the serial number of ST-LINK/V2 usb device.  ST-LINK/V2
 # devices seem to have serial numbers with unreadable characters.  ST-LINK/V2

-- 

Reply via email to