From: OpenOCD-Gerrit <ope...@us...> - 2021-07-31 09:09:09
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Main OpenOCD repository". The branch, master has been updated via dbb10a57d128073cece9ccfc7edc7bb45b220406 (commit) via 44d7cc31dac89d270541bca1c6b7e34d803cbaaf (commit) from c8f92ee73b7c1d2bb67bb7f8653a8ea1be873665 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit dbb10a57d128073cece9ccfc7edc7bb45b220406 Author: Matthew Mets <ma...@bl...> Date: Tue Jul 20 01:48:47 2021 +0200 interface/jtag_hat: Add interface configuration for the JTAG HAT This adds support for the Blinkinlabs JTAG Hat, a Raspberry Pi expansion board that provides JTAG and SWD connections via level- shifting buffers. Change-Id: I228bf6a18890b7c3d6679bbc63bfe39f726d8323 Signed-off-by: Matthew Mets <ma...@bl...> Reviewed-on: http://openocd.zylin.com/6372 Reviewed-by: Antonio Borneo <bor...@gm...> Tested-by: jenkins diff --git a/tcl/interface/jtag_hat_rpi2.cfg b/tcl/interface/jtag_hat_rpi2.cfg new file mode 100644 index 000000000..495ff0f04 --- /dev/null +++ b/tcl/interface/jtag_hat_rpi2.cfg @@ -0,0 +1,38 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Blinkinlabs JTAG_Hat +# +# https://github.com/blinkinlabs/jtag_hat +# + +adapter driver bcm2835gpio + +bcm2835gpio_peripheral_base 0x3F000000 + +# Transition delay calculation: SPEED_COEFF/khz - SPEED_OFFSET +# These depend on system clock, calibrated for stock 700MHz +# bcm2835gpio_speed SPEED_COEFF SPEED_OFFSET +bcm2835gpio_speed_coeffs 146203 36 + +# Each of the JTAG lines need a gpio number set: tck tms tdi tdo +# Header pin numbers: 23 22 19 21 +bcm2835gpio_jtag_nums 11 25 10 9 + +# Each of the SWD lines need a gpio number set: swclk swdio +# Header pin numbers: 23 22 +bcm2835gpio_swd_nums 11 25 + +# Direction pin for SWDIO level shifting buffer +bcm2835gpio_swdio_dir_num 6 + +# If you define trst or srst, use appropriate reset_config +# Header pin numbers: TRST - 26, SRST - 18 + +bcm2835gpio_trst_num 7 +#reset_config trst_only + +bcm2835gpio_srst_num 24 +#reset_config srst_only + +# or if you have both connected +#reset_config trst_and_srst commit 44d7cc31dac89d270541bca1c6b7e34d803cbaaf Author: Matthew Mets <ma...@bl...> Date: Tue Jul 20 01:28:05 2021 +0200 drivers/bcm2835: Add support for SWDIO direction control pin Adds a new, optional configuration "bcm2835gpio_swdio_dir_num" to the BCM2835 driver, to control the direction of an external buffer driver IC in SWD mode. For example, this is needed to use a level- shifting buffer, such as the SN74LVC2T45 used on the JTAG Hat Change-Id: If5c146f310ecf8ceae85443b3670936467d2786d Signed-off-by: Matthew Mets <ma...@bl...> Reviewed-on: http://openocd.zylin.com/6371 Reviewed-by: Antonio Borneo <bor...@gm...> Tested-by: jenkins diff --git a/src/jtag/drivers/bcm2835gpio.c b/src/jtag/drivers/bcm2835gpio.c index 40cb5aa0b..6db4340e8 100644 --- a/src/jtag/drivers/bcm2835gpio.c +++ b/src/jtag/drivers/bcm2835gpio.c @@ -86,6 +86,8 @@ static int swclk_gpio = -1; static int swclk_gpio_mode; static int swdio_gpio = -1; static int swdio_gpio_mode; +static int swdio_dir_gpio = -1; +static int swdio_dir_gpio_mode; /* Transition delay coefficients */ static int speed_coeff = 113714; @@ -149,10 +151,20 @@ static int bcm2835gpio_reset(int trst, int srst) static void bcm2835_swdio_drive(bool is_output) { - if (is_output) - OUT_GPIO(swdio_gpio); - else - INP_GPIO(swdio_gpio); + if (swdio_dir_gpio > 0) { + if (is_output) { + GPIO_SET = 1 << swdio_dir_gpio; + OUT_GPIO(swdio_gpio); + } else { + INP_GPIO(swdio_gpio); + GPIO_CLR = 1 << swdio_dir_gpio; + } + } else { + if (is_output) + OUT_GPIO(swdio_gpio); + else + INP_GPIO(swdio_gpio); + } } static int bcm2835_swdio_read(void) @@ -295,6 +307,15 @@ COMMAND_HANDLER(bcm2835gpio_handle_swd_gpionum_swdio) return ERROR_OK; } +COMMAND_HANDLER(bcm2835gpio_handle_swd_dir_gpionum_swdio) +{ + if (CMD_ARGC == 1) + COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], swdio_dir_gpio); + + command_print(CMD, "BCM2835 num: swdio_dir = %d", swdio_dir_gpio); + return ERROR_OK; +} + COMMAND_HANDLER(bcm2835gpio_handle_speed_coeffs) { if (CMD_ARGC == 2) { @@ -374,6 +395,13 @@ static const struct command_registration bcm2835gpio_command_handlers[] = { .help = "gpio number for swdio.", .usage = "[swdio]", }, + { + .name = "bcm2835gpio_swdio_dir_num", + .handler = &bcm2835gpio_handle_swd_dir_gpionum_swdio, + .mode = COMMAND_CONFIG, + .help = "gpio number for swdio direction control pin (set=output mode, clear=input mode)", + .usage = "[swdio_dir]", + }, { .name = "bcm2835gpio_srst_num", .handler = &bcm2835gpio_handle_jtag_gpionum_srst, @@ -541,6 +569,12 @@ static int bcm2835gpio_init(void) OUT_GPIO(srst_gpio); } + if (swdio_dir_gpio != -1) { + swdio_dir_gpio_mode = MODE_GPIO(swdio_dir_gpio); + GPIO_SET = 1 << swdio_dir_gpio; + OUT_GPIO(swdio_dir_gpio); + } + LOG_DEBUG("saved pinmux settings: tck %d tms %d tdi %d " "tdo %d trst %d srst %d", tck_gpio_mode, tms_gpio_mode, tdi_gpio_mode, tdo_gpio_mode, trst_gpio_mode, srst_gpio_mode); @@ -567,5 +601,8 @@ static int bcm2835gpio_quit(void) if (srst_gpio != -1) SET_MODE_GPIO(srst_gpio, srst_gpio_mode); + if (swdio_dir_gpio != -1) + SET_MODE_GPIO(swdio_dir_gpio, swdio_dir_gpio_mode); + return ERROR_OK; } ----------------------------------------------------------------------- Summary of changes: src/jtag/drivers/bcm2835gpio.c | 45 ++++++++++++++++++++-- .../{raspberrypi2-native.cfg => jtag_hat_rpi2.cfg} | 24 ++++++------ 2 files changed, 53 insertions(+), 16 deletions(-) copy tcl/interface/{raspberrypi2-native.cfg => jtag_hat_rpi2.cfg} (56%) hooks/post-receive -- Main OpenOCD repository |