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:
Hellosun Wu 2017-11-08 17:04:11 +08:00 committed by Tomas Vanek
parent 84b571f667
commit e36c2f2da4
2 changed files with 28 additions and 25 deletions

View File

@ -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)

View File

@ -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