This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6826

-- gerrit

commit 63f3b6f37ccb58aab8b16efd3d723bc8a5060816
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sun Jan 23 01:25:45 2022 +0100

    adiv6: stay in same AP during dap_lookup_cs_component()
    
    Configuration file can specify, as target's debug AP, an AP that
    contains a ROM table that points, in turn, to other APs.
    Current code in cortex_a and aarch64 is not able to handle a
    return from dap_lookup_cs_component() that points to another AP.
    
    While it could be interesting to specify 'root' as target's debug
    AP, drop any found value if it's not in the starting AP.
    
    Change-Id: Id206e4fa7a29e9402c8e2393026817b410bbb8bd
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
index 26bc3da6c..fbfb28c99 100644
--- a/src/target/arm_adi_v5.c
+++ b/src/target/arm_adi_v5.c
@@ -2136,6 +2136,7 @@ struct dap_lookup_data {
        unsigned int type;
        /* output */
        uint64_t component_base;
+       uint64_t ap_num;
 };
 
 static int dap_lookup_cs_component_cs_component(int retval,
@@ -2164,6 +2165,7 @@ static int dap_lookup_cs_component_cs_component(int 
retval,
 
        /* Found! */
        lookup->component_base = v->component_base;
+       lookup->ap_num = v->ap->ap_num;
        return CORESIGHT_COMPONENT_FOUND;
 }
 
@@ -2184,6 +2186,11 @@ int dap_lookup_cs_component(struct adiv5_ap *ap, uint8_t 
type,
 
        int retval = rtp_ap(&dap_lookup_cs_component_ops, ap, 0);
        if (retval == CORESIGHT_COMPONENT_FOUND) {
+               if (lookup.ap_num != ap->ap_num) {
+                       /* TODO: handle search from root ROM table */
+                       LOG_DEBUG("CS lookup ended in AP # 0x%" PRIx64 ". 
Ignore it", lookup.ap_num);
+                       return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
+               }
                LOG_DEBUG("CS lookup found at 0x%" PRIx64, 
lookup.component_base);
                *addr = lookup.component_base;
                return ERROR_OK;

-- 

Reply via email to