This is an automated email from Gerrit.

"Florian Fainelli <[email protected]>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6949

-- gerrit

commit 5b3c455b831d85c6f8b943108c7e8ca719a44aed
Author: Florian Fainelli <[email protected]>
Date:   Wed Apr 27 14:22:19 2022 -0700

    armv8: Added page table attribute pretty printing
    
    Enhance the decoding of virtual address by decoding the ATTR field of
    the PAR_ELn instruction to help with debugging.
    
    Change-Id: I302d05170569d9c490d8800c45b33490ba46af3c
    Signed-off-by: Florian Fainelli <[email protected]>

diff --git a/src/target/armv8.c b/src/target/armv8.c
index 2de1157129..1983260bb2 100644
--- a/src/target/armv8.c
+++ b/src/target/armv8.c
@@ -936,6 +936,77 @@ int armv8_mmu_translate_va(struct target *target,  
target_addr_t va, target_addr
        return ERROR_OK;
 }
 
+static const char *armv8_mair_to_str(uint8_t mair)
+{
+       uint8_t u = mair >> 4;
+       uint8_t l = mair & 0xf;
+
+       if (u == 0) {
+               switch (l) {
+               case 0:
+                       return u ? "UNPREDICTABLE" : "Device-nGnRnE memory";
+               case 1:
+               case 2:
+               case 3:
+                       return u ? "Normal memory, Inner Write-Through 
Transient" :
+                                  "UNPREDICTABLE";
+               case 4:
+                       return u ? "Normal memory, Inner Non-cacheable" :
+                                  "Device-nGnRE memory";
+               case 5:
+               case 6:
+               case 7:
+                       return u ? "Normal memory, Inner Write-Back Transient" :
+                                  "UNPREDICTABLE";
+               case 8:
+                       return u ? "Normal memory, Inner Write-Through 
Non-transient" :
+                                  "Device-nGRE memory";
+               case 9:
+               case 10:
+               case 11:
+                       return u ? "Normal memory, Inner Write-Through 
Non-transient" :
+                                  "UNPREDICTABLE";
+               case 12:
+                       return u ? "Normal memory, Inner Write-Back 
Non-transient" :
+                                  "Device-GRE memory";
+               case 13:
+               case 14:
+               case 15:
+                       return u ? "Normal memory, Inner Write-Back 
Non-transient" :
+                                  "UNPREDICTABLE";
+               default:
+                       break;
+               }
+       } else {
+               switch (u) {
+               case 1:
+               case 2:
+               case 3:
+                       return "Normal memory, Outer Write-Through Transient";
+               case 4:
+                       return "Normal memory, Outer Non-cacheable";
+               case 5:
+               case 6:
+               case 7:
+                       return "Normal memory, Outer Write-Back Transient";
+               case 8:
+               case 9:
+               case 10:
+               case 11:
+                       return "Normal memory, Outer Write-Through 
Non-transient";
+               case 12:
+               case 13:
+               case 14:
+               case 15:
+                       return "Normal memory, Outer Write-Back Non-transient";
+               default:
+                       break;
+               }
+       }
+
+       return "UNKNOWN";
+}
+
 /*  V8 method VA TO PA  */
 int armv8_mmu_translate_va_pa(struct target *target, target_addr_t va,
        target_addr_t *val, int meminfo)
@@ -1018,11 +1089,9 @@ int armv8_mmu_translate_va_pa(struct target *target, 
target_addr_t va,
                        int NS = (par >> 9) & 1;
                        int ATTR = (par >> 56) & 0xFF;
 
-                       char *memtype = (ATTR & 0xF0) == 0 ? "Device Memory" : 
"Normal Memory";
-
                        LOG_USER("%sshareable, %s",
                                        shared_name[SH], secure_name[NS]);
-                       LOG_USER("%s", memtype);
+                       LOG_USER("%s (0x%02x)", armv8_mair_to_str(ATTR), ATTR);
                }
        }
 

-- 

Reply via email to