diff options
author | Tomas Vanek <vanekt@fbl.cz> | 2023-03-15 13:58:52 +0100 |
---|---|---|
committer | Tomas Vanek <vanekt@fbl.cz> | 2023-12-29 14:34:50 +0000 |
commit | bfc12522395af86ba634aa8e085a8051ca6fd43c (patch) | |
tree | dff2f5bab3c7291348b951c9179f2f78996e070e /src/target | |
parent | ee3fb5a0eacb42e8e881239194485d79d128d246 (diff) | |
download | riscv-openocd-bfc12522395af86ba634aa8e085a8051ca6fd43c.zip riscv-openocd-bfc12522395af86ba634aa8e085a8051ca6fd43c.tar.gz riscv-openocd-bfc12522395af86ba634aa8e085a8051ca6fd43c.tar.bz2 |
target/arm_adi_v5,arm_dap: introduce pre_connect_init() dap operation
SWD multidrop requires some initialization once before connecting
all daps. Provide an optional pre-connect dap operation.
Change-Id: I778215c512c56423a425dda80ab19a739f22f285
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: https://review.openocd.org/c/openocd/+/7542
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/arm_adi_v5.h | 3 | ||||
-rw-r--r-- | src/target/arm_dap.c | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/target/arm_adi_v5.h b/src/target/arm_adi_v5.h index e07b577..fc7fdaf 100644 --- a/src/target/arm_adi_v5.h +++ b/src/target/arm_adi_v5.h @@ -420,6 +420,9 @@ struct adiv5_dap { * available until run(). */ struct dap_ops { + /** Optional; called once on the first enabled dap before connecting */ + int (*pre_connect_init)(struct adiv5_dap *dap); + /** connect operation for SWD */ int (*connect)(struct adiv5_dap *dap); diff --git a/src/target/arm_dap.c b/src/target/arm_dap.c index 84cc6c7..9f4afae 100644 --- a/src/target/arm_dap.c +++ b/src/target/arm_dap.c @@ -91,6 +91,7 @@ static int dap_init_all(void) { struct arm_dap_object *obj; int retval; + bool pre_connect = true; LOG_DEBUG("Initializing all DAPs ..."); @@ -123,6 +124,14 @@ static int dap_init_all(void) is_adiv6(dap) ? "ADIv6" : "ADIv5"); } + if (pre_connect && dap->ops->pre_connect_init) { + retval = dap->ops->pre_connect_init(dap); + if (retval != ERROR_OK) + return retval; + + pre_connect = false; + } + retval = dap->ops->connect(dap); if (retval != ERROR_OK) return retval; |