svn commit: r336519 - in head/sys: arm64/arm64 arm64/include kern
Emmanuel Vadot
manu at FreeBSD.org
Thu Jul 19 21:58:08 UTC 2018
Author: manu
Date: Thu Jul 19 21:58:06 2018
New Revision: 336519
URL: https://svnweb.freebsd.org/changeset/base/336519
Log:
Raise the size of L3 table for early devmap on arm64
Some driver (like efifb) needs to map more than the current L2_SIZE
Raise the size so we can map the framebuffer setup by the bootloader.
Reviewed by: cognet
Modified:
head/sys/arm64/arm64/pmap.c
head/sys/arm64/include/pte.h
head/sys/kern/subr_devmap.c
Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c Thu Jul 19 21:07:39 2018 (r336518)
+++ head/sys/arm64/arm64/pmap.c Thu Jul 19 21:58:06 2018 (r336519)
@@ -836,7 +836,7 @@ pmap_bootstrap(vm_offset_t l0pt, vm_offset_t l1pt, vm_
freemempos = pmap_bootstrap_l2(l1pt, va, freemempos);
/* And the l3 tables for the early devmap */
freemempos = pmap_bootstrap_l3(l1pt,
- VM_MAX_KERNEL_ADDRESS - L2_SIZE, freemempos);
+ VM_MAX_KERNEL_ADDRESS - (PMAP_MAPDEV_EARLY_SIZE), freemempos);
cpu_tlb_flushID();
@@ -858,7 +858,7 @@ pmap_bootstrap(vm_offset_t l0pt, vm_offset_t l1pt, vm_
virtual_avail = preinit_map_va + PMAP_PREINIT_MAPPING_SIZE;
virtual_avail = roundup2(virtual_avail, L1_SIZE);
- virtual_end = VM_MAX_KERNEL_ADDRESS - L2_SIZE;
+ virtual_end = VM_MAX_KERNEL_ADDRESS - (PMAP_MAPDEV_EARLY_SIZE);
kernel_vm_end = virtual_avail;
pa = pmap_early_vtophys(l1pt, freemempos);
Modified: head/sys/arm64/include/pte.h
==============================================================================
--- head/sys/arm64/include/pte.h Thu Jul 19 21:07:39 2018 (r336518)
+++ head/sys/arm64/include/pte.h Thu Jul 19 21:58:06 2018 (r336519)
@@ -109,6 +109,8 @@ typedef uint64_t pt_entry_t; /* page table entry */
/* 0x2 also marks an invalid address */
#define L3_PAGE 0x3
+#define PMAP_MAPDEV_EARLY_SIZE (L2_SIZE * 4)
+
#define L0_ENTRIES_SHIFT 9
#define L0_ENTRIES (1 << L0_ENTRIES_SHIFT)
#define L0_ADDR_MASK (L0_ENTRIES - 1)
Modified: head/sys/kern/subr_devmap.c
==============================================================================
--- head/sys/kern/subr_devmap.c Thu Jul 19 21:07:39 2018 (r336518)
+++ head/sys/kern/subr_devmap.c Thu Jul 19 21:58:06 2018 (r336519)
@@ -305,8 +305,8 @@ pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_me
if (early_boot) {
akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size);
va = akva_devmap_vaddr;
- KASSERT(va >= VM_MAX_KERNEL_ADDRESS - L2_SIZE,
- ("Too many early devmap mappings"));
+ KASSERT(va >= (VM_MAX_KERNEL_ADDRESS - (PMAP_MAPDEV_EARLY_SIZE)),
+ ("Too many early devmap mappings 2"));
} else
va = kva_alloc(size);
if (!va)
More information about the svn-src-all
mailing list