Copy a nice-looking ASCII table from U-Boot's cache_v8.c to help with
understanding the function.

Signed-off-by: Ahmad Fatoum <a.fat...@pengutronix.de>
---
 arch/arm/cpu/mmu_64.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/arch/arm/cpu/mmu_64.c b/arch/arm/cpu/mmu_64.c
index bc1a44d0a7b8..d9b0b74d7314 100644
--- a/arch/arm/cpu/mmu_64.c
+++ b/arch/arm/cpu/mmu_64.c
@@ -176,6 +176,24 @@ static void create_sections(uint64_t virt, uint64_t phys, 
uint64_t size,
 
 static size_t granule_size(int level)
 {
+       /*
+        *  With 4k page granule, a virtual address is split into 4 lookup parts
+        *  spanning 9 bits each:
+        *
+        *    _______________________________________________
+        *   |       |       |       |       |       |       |
+        *   |   0   |  Lv0  |  Lv1  |  Lv2  |  Lv3  |  off  |
+        *   |_______|_______|_______|_______|_______|_______|
+        *     63-48   47-39   38-30   29-21   20-12   11-00
+        *
+        *             mask        page size
+        *
+        *    Lv0: FF8000000000       --
+        *    Lv1:   7FC0000000       1G
+        *    Lv2:     3FE00000       2M
+        *    Lv3:       1FF000       4K
+        *    off:          FFF
+        */
        switch (level) {
        default:
        case 0:
-- 
2.39.5


Reply via email to