mbox series

[v3,0/3] arm64: add a software pagetable walker

Message ID 20240617-caleb-upstreaming-v3-0-1ba35dc9179d@linaro.org
Headers show
Series arm64: add a software pagetable walker | expand

Message

Caleb Connolly June 17, 2024, 8:03 a.m. UTC
MMU issues are some of the most frustrating to debug. To make this
slightly less unbearable, introduce a software pagetable walker for
ARMv8. This can be called to dump a pagetable with the default
formatter, or a custom callback can be provided to implement more
complicated parsing.

This can also be useful to dump the pagetable used by a previous
bootloader stage (by reading out the ttbr register).

Here is an example of the output when walking U-Boot's own memory map
on a Qualcomm RB3 board:

Walking pagetable at 000000017df90000, va_bits: 36. Using 3 levels
[0x17df91000]                   |  Table |               |
  [0x17df92000]                 |  Table |               |
    [0x000001000 - 0x000200000] |  Pages | Device-nGnRnE | Non-shareable
  [0x000200000 - 0x040000000]   |  Block | Device-nGnRnE | Non-shareable
[0x040000000 - 0x080000000]     |  Block | Device-nGnRnE | Non-shareable
[0x080000000 - 0x140000000]     |  Block | Normal        | Inner-shareable
[0x17df93000]                   |  Table |               |
  [0x140000000 - 0x17de00000]   |  Block | Normal        | Inner-shareable
  [0x17df94000]                 |  Table |               |
    [0x17de00000 - 0x17dfa0000] |  Pages | Normal        | Inner-shareable

---
Changes in v3:
- Add doc comments to __pagetable_walk()
- Include doc comments in documentation with kernel-doc::
- Link to v2: https://lore.kernel.org/r/20240607-caleb-upstreaming-v2-0-bae407f51f22@linaro.org

Changes in v2:
- Document the MMU debugging features in doc/arch/arm64.rst
- Mention that functions are stripped out when unused.
- Link to v1: https://lore.kernel.org/r/20240607-caleb-upstreaming-v1-0-99094dabb3d9@linaro.org

---
Caleb Connolly (3):
      arm64: mmu.h: fix PTE_TABLE_AP
      arm64: add software pagetable walker
      doc: arch: arm64: describe pagetable debugging

 arch/arm/cpu/armv8/cache_v8.c    | 245 +++++++++++++++++++++++++++++++++++++++
 arch/arm/include/asm/armv8/mmu.h |  58 ++++++++-
 doc/arch/arm64.rst               |  49 ++++++++
 3 files changed, 351 insertions(+), 1 deletion(-)
---
change-id: 20240607-caleb-upstreaming-82744a2786b3
base-commit: 5cff71259b26b73ed0e9e9acd12d16a4d8ede04b

// Caleb (they/them)

Comments

Tom Rini June 26, 2024, 1:37 p.m. UTC | #1
On Mon, 17 Jun 2024 10:03:46 +0200, Caleb Connolly wrote:

> MMU issues are some of the most frustrating to debug. To make this
> slightly less unbearable, introduce a software pagetable walker for
> ARMv8. This can be called to dump a pagetable with the default
> formatter, or a custom callback can be provided to implement more
> complicated parsing.
> 
> This can also be useful to dump the pagetable used by a previous
> bootloader stage (by reading out the ttbr register).
> 
> [...]

Applied to u-boot/next, thanks!