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/+/6947

-- gerrit

commit fd18c96c2ca012d62734703cec8bd759178e7631
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Mon Apr 25 22:25:08 2022 +0200

    aarch64: don't wait for smp targets halted in deassert reset
    
    The function target_type::deassert_reset() is called for every
    target after reset is deasserted. If the target fails to get
    halted, we log a warning and issue a halt request for the target
    itself.
    
    Current code calls the generic target_halt() that:
    - extends the halt to all the targets in the SMP node;
    - waits for targets to halt.
    This breaks the logic of running target_type::deassert_reset()
    per target. Plus, waiting for targets to halt delays the call of
    target_type::deassert_reset() for the next targets.
    
    Replace the call to target_halt() with the aarch64 specific
    function to halt the single target. Pass the parameter HALT_LAZY
    to prevent the wait for target halted.
    Similar solution is already implemented for cortex_a.
    
    Change-Id: I446dc03cb91524c6d388db485bc2388177af77b6
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/target/aarch64.c b/src/target/aarch64.c
index 8838da9273..f2adb5ae12 100644
--- a/src/target/aarch64.c
+++ b/src/target/aarch64.c
@@ -2026,9 +2026,13 @@ static int aarch64_deassert_reset(struct target *target)
                if (target->state != TARGET_HALTED) {
                        LOG_WARNING("%s: ran after reset and before halt ...",
                                target_name(target));
-                       retval = target_halt(target);
-                       if (retval != ERROR_OK)
-                               return retval;
+                       if (target_was_examined(target)) {
+                               retval = aarch64_halt_one(target, HALT_LAZY);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                       } else {
+                               target->state = TARGET_UNKNOWN;
+                       }
                }
        }
 

-- 

Reply via email to