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.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5529 Tested-by: jenkins
This commit is contained in:
parent
ac18e960ce
commit
ac05f929ed
|
@ -36,6 +36,7 @@
|
||||||
#include <jtag/hla/hla_layout.h>
|
#include <jtag/hla/hla_layout.h>
|
||||||
#include <jtag/hla/hla_transport.h>
|
#include <jtag/hla/hla_transport.h>
|
||||||
#include <jtag/hla/hla_interface.h>
|
#include <jtag/hla/hla_interface.h>
|
||||||
|
#include <jtag/swim.h>
|
||||||
#include <target/target.h>
|
#include <target/target.h>
|
||||||
#include <transport/transport.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)
|
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...
|
we only have low and high speed...
|
||||||
before changing speed the SWIM_CSR HS bit
|
before changing speed the SWIM_CSR HS bit
|
||||||
must be updated
|
must be updated
|
||||||
*/
|
*/
|
||||||
if (khz == 0)
|
if (!query) {
|
||||||
stlink_swim_speed(handle, 0);
|
retval = stlink_swim_speed(handle, (khz < SWIM_FREQ_HIGH) ? 0 : 1);
|
||||||
else
|
if (retval != ERROR_OK)
|
||||||
stlink_swim_speed(handle, 1);
|
LOG_ERROR("Unable to set adapter speed");
|
||||||
return khz;
|
}
|
||||||
|
|
||||||
|
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)
|
static int stlink_match_speed_map(const struct speed_map *map, unsigned int map_size, int khz, bool query)
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
#ifndef OPENOCD_JTAG_SWIM_H
|
#ifndef OPENOCD_JTAG_SWIM_H
|
||||||
#define OPENOCD_JTAG_SWIM_H
|
#define OPENOCD_JTAG_SWIM_H
|
||||||
|
|
||||||
|
#define SWIM_FREQ_LOW 363
|
||||||
|
#define SWIM_FREQ_HIGH 800
|
||||||
|
|
||||||
struct swim_driver {
|
struct swim_driver {
|
||||||
/**
|
/**
|
||||||
* Send SRST (system reset) command to target.
|
* Send SRST (system reset) command to target.
|
||||||
|
|
|
@ -1670,7 +1670,7 @@ static int stm8_examine(struct target *target)
|
||||||
retval = stm8_write_u8(target, SWIM_CSR, SAFE_MASK + SWIM_DM + HS);
|
retval = stm8_write_u8(target, SWIM_CSR, SAFE_MASK + SWIM_DM + HS);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
jtag_config_khz(1);
|
jtag_config_khz(SWIM_FREQ_HIGH);
|
||||||
stm8->swim_configured = true;
|
stm8->swim_configured = true;
|
||||||
/*
|
/*
|
||||||
Now is the time to deassert reset if connect_under_reset.
|
Now is the time to deassert reset if connect_under_reset.
|
||||||
|
|
|
@ -78,8 +78,8 @@ $_TARGETNAME configure -optionstart $_OPTIONSTART -optionend $_OPTIONEND -blocks
|
||||||
# Set stm8l type
|
# Set stm8l type
|
||||||
$_TARGETNAME configure -enable_stm8l
|
$_TARGETNAME configure -enable_stm8l
|
||||||
|
|
||||||
# The khz rate does not apply here, only slow <0> and fast <1>
|
# Set low speed at debug entry
|
||||||
adapter speed 1
|
adapter speed 363
|
||||||
|
|
||||||
reset_config srst_only
|
reset_config srst_only
|
||||||
|
|
||||||
|
|
|
@ -75,8 +75,8 @@ $_TARGETNAME configure -optionstart $_OPTIONSTART -optionend $_OPTIONEND -blocks
|
||||||
# Uncomment this line to enable interrupts while instruction step
|
# Uncomment this line to enable interrupts while instruction step
|
||||||
#$_TARGETNAME configure -enable_step_irq
|
#$_TARGETNAME configure -enable_step_irq
|
||||||
|
|
||||||
# The khz rate does not apply here, only slow <0> and fast <1>
|
# Set low speed at debug entry
|
||||||
adapter speed 1
|
adapter speed 363
|
||||||
|
|
||||||
reset_config srst_only
|
reset_config srst_only
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue