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 http://openocd.zylin.com/5529

-- gerrit

commit d7e12e2df3c5433bb05fb7d215ce88de1e2200be
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Tue Feb 4 11:07:01 2020 +0100

    swim: fix adapter speed handling
    
    SWIM transport only supports two adapter speeds:
    - "low speed"  equal to 363 kHz (8 MHz / 22)
    - "high speed" equal to 800 kHz (8 MHz / 10)
    
    Replace the previous convention that use "0" or "1" for "low" or
    "high" speed with the effective speed in kHz.
    Rework the implementation of stlink_speed_swim().
    Set low speed in the stm8 config files, because only low speed is
    permitted at debug connection; the previous code ignores the
    initial value.
    
    Change-Id: I2484c9419a2c554c59eb6b9216339393ab0b54f3
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index 23c29ce..07687ef 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -36,6 +36,7 @@
 #include <jtag/hla/hla_layout.h>
 #include <jtag/hla/hla_transport.h>
 #include <jtag/hla/hla_interface.h>
+#include <jtag/swim.h>
 #include <target/target.h>
 #include <transport/transport.h>
 
@@ -2478,17 +2479,20 @@ static int stlink_usb_override_target(const char 
*targetname)
 
 static int stlink_speed_swim(void *handle, int khz, bool query)
 {
+       int retval;
+
        /*
-                       we dont care what the khz rate is
                        we only have low and high speed...
                        before changing speed the SWIM_CSR HS bit
                        must be updated
         */
-       if (khz == 0)
-               stlink_swim_speed(handle, 0);
-       else
-               stlink_swim_speed(handle, 1);
-       return khz;
+       if (!query) {
+               retval = stlink_swim_speed(handle, (khz < SWIM_FREQ_HIGH) ? 0 : 
1);
+               if (retval != ERROR_OK)
+                       LOG_ERROR("Unable to set adapter speed");
+       }
+
+       return (khz < SWIM_FREQ_HIGH) ? SWIM_FREQ_LOW : SWIM_FREQ_HIGH;
 }
 
 static int stlink_match_speed_map(const struct speed_map *map, unsigned int 
map_size, int khz, bool query)
diff --git a/src/jtag/swim.h b/src/jtag/swim.h
index d20b4c0..67ec08e 100644
--- a/src/jtag/swim.h
+++ b/src/jtag/swim.h
@@ -13,6 +13,9 @@
 #ifndef OPENOCD_JTAG_SWIM_H
 #define OPENOCD_JTAG_SWIM_H
 
+#define SWIM_FREQ_LOW   363
+#define SWIM_FREQ_HIGH  800
+
 struct swim_driver {
        /**
         * Send SRST (system reset) command to target.
diff --git a/src/target/stm8.c b/src/target/stm8.c
index ad05b54..c06e0fa 100644
--- a/src/target/stm8.c
+++ b/src/target/stm8.c
@@ -1670,7 +1670,7 @@ static int stm8_examine(struct target *target)
                        retval = stm8_write_u8(target, SWIM_CSR, SAFE_MASK + 
SWIM_DM + HS);
                        if (retval != ERROR_OK)
                                return retval;
-                       jtag_config_khz(1);
+                       jtag_config_khz(SWIM_FREQ_HIGH);
                        stm8->swim_configured = true;
                        /*
                                Now is the time to deassert reset if 
connect_under_reset.
diff --git a/tcl/target/stm8l.cfg b/tcl/target/stm8l.cfg
index 386f371..f3c9428 100644
--- a/tcl/target/stm8l.cfg
+++ b/tcl/target/stm8l.cfg
@@ -78,8 +78,8 @@ $_TARGETNAME configure -optionstart $_OPTIONSTART -optionend 
$_OPTIONEND -blocks
 # Set stm8l type
 $_TARGETNAME configure -enable_stm8l
 
-# The khz rate does not apply here, only slow <0> and fast <1>
-adapter speed 1
+# Set low speed at debug entry
+adapter speed 363
 
 reset_config srst_only
 
diff --git a/tcl/target/stm8s.cfg b/tcl/target/stm8s.cfg
index 4768068..5d52aea 100644
--- a/tcl/target/stm8s.cfg
+++ b/tcl/target/stm8s.cfg
@@ -75,8 +75,8 @@ $_TARGETNAME configure -optionstart $_OPTIONSTART -optionend 
$_OPTIONEND -blocks
 # Uncomment this line to enable interrupts while instruction step
 #$_TARGETNAME configure -enable_step_irq
 
-# The khz rate does not apply here, only slow <0> and fast <1>
-adapter speed 1
+# Set low speed at debug entry
+adapter speed 363
 
 reset_config srst_only
 

-- 


_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to