This is an automated email from Gerrit.

"Peter Collingbourne <p...@google.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7916

-- gerrit

commit 1f1d5a40676ee7a12ba962e1dc774988e9b5b4d0
Author: Peter Collingbourne <p...@google.com>
Date:   Wed Sep 27 17:02:03 2023 -0700

    openocd: src/target: Correctly handle CCSIDR_EL1.Associativity=0
    
    Associativity=0 means that only one CMO is needed for all ways.
    It could also mean that the cache is 1-way, but this is less likely.
    
    Currently Associativity=0 causes us to hang in the while loop in
    decode_cache_reg. Fix it by skipping the loop in this case. We can let
    way_shift be set to the arbitrary value of 0 because in the case where
    Associativity=0 we only ever shift 0 by it before ORing it into the
    CMO operand.
    
    Change-Id: I7c1de68d33f6b3ed627cbb1e2401d43185e4c1e3
    Signed-off-by: Peter Collingbourne <p...@google.com>

diff --git a/src/target/armv8_cache.c b/src/target/armv8_cache.c
index cf7111950d..98f4b3f04c 100644
--- a/src/target/armv8_cache.c
+++ b/src/target/armv8_cache.c
@@ -286,8 +286,9 @@ static struct armv8_cachesize decode_cache_reg(uint32_t 
cache_reg)
        size.index = (cache_reg >> 13) & 0x7fff;
        size.way = ((cache_reg >> 3) & 0x3ff);
 
-       while (((size.way << i) & 0x80000000) == 0)
-               i++;
+       if (size.way != 0)
+               while (((size.way << i) & 0x80000000) == 0)
+                       i++;
        size.way_shift = i;
 
        return size;

-- 

Reply via email to