diff --git a/sys/arch/aarch64/aarch64/locore.S b/sys/arch/aarch64/aarch64/locore.S index 3fd34e30693e..946aad85fed3 100644 --- a/sys/arch/aarch64/aarch64/locore.S +++ b/sys/arch/aarch64/aarch64/locore.S @@ -590,7 +590,7 @@ arm_boot_l0pt_init: cmp x0, x1 b.lo 1b - VERBOSE("Creating VA=PA tables\r\n") + VERBOSE("Creating VA=PA kernel tables\r\n") /* VA=PA table, link L0->L1 */ ADDR x0, ttbr0_l0table @@ -598,7 +598,8 @@ arm_boot_l0pt_init: ADDR x2, ttbr0_l1table bl l0_settable - /* VA=PA L1 blocks */ + + /* Device VA=PA (aka identity mapping) L1 blocks */ ADDR x0, ttbr0_l1table mov x1, #0 /* VA */ mov x2, #0 /* PA */ @@ -606,6 +607,27 @@ arm_boot_l0pt_init: mov x4, #4 /* 4GB = whole 32bit */ bl l1_setblocks + /* Kernel VA=PA (aka identity mapping) L1 blocks */ + ADDR x0, ttbr0_l1table + ADDR x1, aarch64_start /* VA */ + ldr x2, =(L1_SIZE-1) + bic x1, x2 + mov x2, x1 /* PA */ + mov x3, #L2_BLKPAG_ATTR_NORMAL_NC + mov x4, #4 /* 4GB = whole 32bit */ + bl l1_setblocks + + /* FDT VA=PA (aka identity mapping) L1 blocks */ + ADDR x0, ttbr0_l1table + ADDR x8, fdt_addr_r + ldr x1, [x8] + ldr x2, =(L1_SIZE-1) + bic x1, x2 + mov x2, x1 + mov x3, #L2_BLKPAG_ATTR_NORMAL_NC + mov x4, #1 /* 1GB is enough */ + bl l1_setblocks + VERBOSE("Creating KSEG tables\r\n") /* KSEG table, link L0->L1 */