nds32: Avoid detected JTAG clock
AICE2 doesn't support scan for the maximum clock frequency of JTAG chain. It will cause USB command timeout. Change-Id: I41d1e3be387b6ed5a4dd0be663385a5f053fbcf9 Signed-off-by: Hellosun Wu <wujiheng.tw@gmail.com> Reviewed-on: http://openocd.zylin.com/4292 Tested-by: jenkins Reviewed-by: Hsiangkai Wang <hsiangkai@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
84b571f667
commit
e36c2f2da4
|
@ -2289,37 +2289,39 @@ get_delay:
|
||||||
|
|
||||||
static int aice_usb_set_clock(int set_clock)
|
static int aice_usb_set_clock(int set_clock)
|
||||||
{
|
{
|
||||||
if (aice_write_ctrl(AICE_WRITE_CTRL_TCK_CONTROL,
|
if (set_clock & AICE_TCK_CONTROL_TCK_SCAN) {
|
||||||
AICE_TCK_CONTROL_TCK_SCAN) != ERROR_OK)
|
if (aice_write_ctrl(AICE_WRITE_CTRL_TCK_CONTROL,
|
||||||
return ERROR_FAIL;
|
AICE_TCK_CONTROL_TCK_SCAN) != ERROR_OK)
|
||||||
|
return ERROR_FAIL;
|
||||||
|
|
||||||
/* Read out TCK_SCAN clock value */
|
/* Read out TCK_SCAN clock value */
|
||||||
uint32_t scan_clock;
|
uint32_t scan_clock;
|
||||||
if (aice_read_ctrl(AICE_READ_CTRL_GET_ICE_STATE, &scan_clock) != ERROR_OK)
|
if (aice_read_ctrl(AICE_READ_CTRL_GET_ICE_STATE, &scan_clock) != ERROR_OK)
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
|
||||||
scan_clock &= 0x0F;
|
scan_clock &= 0x0F;
|
||||||
|
|
||||||
uint32_t scan_base_freq;
|
uint32_t scan_base_freq;
|
||||||
if (scan_clock & 0x8)
|
if (scan_clock & 0x8)
|
||||||
scan_base_freq = 48000; /* 48 MHz */
|
scan_base_freq = 48000; /* 48 MHz */
|
||||||
else
|
else
|
||||||
scan_base_freq = 30000; /* 30 MHz */
|
scan_base_freq = 30000; /* 30 MHz */
|
||||||
|
|
||||||
uint32_t set_base_freq;
|
uint32_t set_base_freq;
|
||||||
if (set_clock & 0x8)
|
if (set_clock & 0x8)
|
||||||
set_base_freq = 48000;
|
set_base_freq = 48000;
|
||||||
else
|
else
|
||||||
set_base_freq = 30000;
|
set_base_freq = 30000;
|
||||||
|
|
||||||
uint32_t set_freq;
|
uint32_t set_freq;
|
||||||
uint32_t scan_freq;
|
uint32_t scan_freq;
|
||||||
set_freq = set_base_freq >> (set_clock & 0x7);
|
set_freq = set_base_freq >> (set_clock & 0x7);
|
||||||
scan_freq = scan_base_freq >> (scan_clock & 0x7);
|
scan_freq = scan_base_freq >> (scan_clock & 0x7);
|
||||||
|
|
||||||
if (scan_freq < set_freq) {
|
if (scan_freq < set_freq) {
|
||||||
LOG_ERROR("User specifies higher jtag clock than TCK_SCAN clock");
|
LOG_ERROR("User specifies higher jtag clock than TCK_SCAN clock");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aice_write_ctrl(AICE_WRITE_CTRL_TCK_CONTROL, set_clock) != ERROR_OK)
|
if (aice_write_ctrl(AICE_WRITE_CTRL_TCK_CONTROL, set_clock) != ERROR_OK)
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
|
|
||||||
/* Constants for AICE command WRITE_CTRL:TCK_CONTROL */
|
/* Constants for AICE command WRITE_CTRL:TCK_CONTROL */
|
||||||
#define AICE_TCK_CONTROL_TCK3048 0x08
|
#define AICE_TCK_CONTROL_TCK3048 0x08
|
||||||
|
#define AICE_TCK_CONTROL_TCK_SCAN 0x10
|
||||||
|
|
||||||
/* Constants for AICE command WRITE_CTRL:JTAG_PIN_CONTROL */
|
/* Constants for AICE command WRITE_CTRL:JTAG_PIN_CONTROL */
|
||||||
#define AICE_JTAG_PIN_CONTROL_SRST 0x01
|
#define AICE_JTAG_PIN_CONTROL_SRST 0x01
|
||||||
|
|
Loading…
Reference in New Issue