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