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); } } --
