This is an automated email from Gerrit.

"Tomas Vanek <van...@fbl.cz>" just uploaded a new patch set to Gerrit, which 
you can find at https://review.openocd.org/c/openocd/+/7542

-- gerrit

commit e21c578e06d15a82e34cacfc6e1cea09682b532d
Author: Tomas Vanek <van...@fbl.cz>
Date:   Wed Mar 15 13:58:52 2023 +0100

    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 <van...@fbl.cz>

diff --git a/src/target/arm_adi_v5.h b/src/target/arm_adi_v5.h
index 0b3e49f163..cdcb0d48d2 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 e21136dd69..1d2d85a28b 100644
--- a/src/target/arm_dap.c
+++ b/src/target/arm_dap.c
@@ -93,6 +93,7 @@ static int dap_init_all(void)
 {
        struct arm_dap_object *obj;
        int retval;
+       bool pre_connect = true;
 
        LOG_DEBUG("Initializing all DAPs ...");
 
@@ -125,6 +126,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;

-- 

Reply via email to