Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Nov 2013 21:49:00 +0000 (UTC)
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r257559 - in projects/specific_leg/sys/arm: arm include
Message-ID:  <201311022149.rA2Ln0CN057722@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andrew
Date: Sat Nov  2 21:48:59 2013
New Revision: 257559
URL: http://svnweb.freebsd.org/changeset/base/257559

Log:
  Remove KERNPHYSADDR from machdep by passing it into initarm.

Modified:
  projects/specific_leg/sys/arm/arm/locore.S
  projects/specific_leg/sys/arm/arm/machdep.c
  projects/specific_leg/sys/arm/include/cpu.h

Modified: projects/specific_leg/sys/arm/arm/locore.S
==============================================================================
--- projects/specific_leg/sys/arm/arm/locore.S	Sat Nov  2 21:25:31 2013	(r257558)
+++ projects/specific_leg/sys/arm/arm/locore.S	Sat Nov  2 21:48:59 2013	(r257559)
@@ -240,6 +240,7 @@ virt_done:
 	str	r8, [r0, #8]		/* Store r1 from boot loader */
 	str	ip, [r0, #12]		/* store r2 from boot loader */
 	str	fp, [r0, #16]		/* store r3 from boot loader */
+	str	r5, [r0, #20]		/* store the physical address */
 	mov	fp, #0			/* trace back starts here */
 	bl	_C_LABEL(initarm)	/* Off we go */
 

Modified: projects/specific_leg/sys/arm/arm/machdep.c
==============================================================================
--- projects/specific_leg/sys/arm/arm/machdep.c	Sat Nov  2 21:25:31 2013	(r257558)
+++ projects/specific_leg/sys/arm/arm/machdep.c	Sat Nov  2 21:48:59 2013	(r257559)
@@ -898,7 +898,7 @@ linux_parse_boot_param(struct arm_boot_p
 
 	board_id = abp->abp_r1;
 	walker = (struct arm_lbabi_tag *)
-	    (abp->abp_r2 + KERNVIRTADDR - KERNPHYSADDR);
+	    (abp->abp_r2 + KERNVIRTADDR - abp->apb_physaddr);
 
 	/* xxx - Need to also look for binary device tree */
 	if (ATAG_TAG(walker) != ATAG_CORE)
@@ -976,7 +976,7 @@ freebsd_parse_boot_param(struct arm_boot
 	ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t);
 	ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t);
 #endif
-	preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR;
+	preload_addr_relocate = KERNVIRTADDR - abp->apb_physaddr;
 	return lastaddr;
 }
 #endif
@@ -986,6 +986,7 @@ default_parse_boot_param(struct arm_boot
 {
 	vm_offset_t lastaddr;
 
+#if 0
 #if defined(LINUX_BOOT_ABI)
 	if ((lastaddr = linux_parse_boot_param(abp)) != 0)
 		return lastaddr;
@@ -994,6 +995,7 @@ default_parse_boot_param(struct arm_boot
 	if ((lastaddr = freebsd_parse_boot_param(abp)) != 0)
 		return lastaddr;
 #endif
+#endif
 	/* Fall back to hardcoded metadata. */
 	lastaddr = fake_preload_metadata(abp);
 
@@ -1078,15 +1080,15 @@ print_kenv(void)
 }
 
 static void
-physmap_init(struct mem_region *availmem_regions, int availmem_regions_sz)
+physmap_init(struct mem_region *availmem_regions, int availmem_regions_sz,
+    vm_offset_t kernload)
 {
 	int i, j, cnt;
-	vm_offset_t phys_kernelend, kernload;
+	vm_offset_t phys_kernelend;
 	uint32_t s, e, sz;
 	struct mem_region *mp, *mp1;
 
-	phys_kernelend = KERNPHYSADDR + (virtual_avail - KERNVIRTADDR);
-	kernload = KERNPHYSADDR;
+	phys_kernelend = kernload + (virtual_avail - KERNVIRTADDR);
 
 	/*
 	 * Remove kernel physical address range from avail
@@ -1328,7 +1330,7 @@ initarm(struct arm_boot_params *abp)
 	/* Define a macro to simplify memory allocation */
 #define valloc_pages(var, np)						\
 	alloc_pages((var).pv_va, (np));					\
-	(var).pv_pa = (var).pv_va + (KERNPHYSADDR - KERNVIRTADDR);
+	(var).pv_pa = (var).pv_va + (abp->apb_physaddr - KERNVIRTADDR);
 
 #define alloc_pages(var, np)						\
 	(var) = freemempos;						\
@@ -1349,7 +1351,7 @@ initarm(struct arm_boot_params *abp)
 			    L2_TABLE_SIZE_REAL * (i - j);
 			kernel_pt_table[i].pv_pa =
 			    kernel_pt_table[i].pv_va - KERNVIRTADDR +
-			    KERNPHYSADDR;
+			    abp->apb_physaddr;
 
 		}
 	}
@@ -1394,7 +1396,7 @@ initarm(struct arm_boot_params *abp)
 	pmap_curmaxkvaddr = l2_start + (l2size - 1) * L1_S_SIZE;
 
 	/* Map kernel code and data */
-	pmap_map_chunk(l1pagetable, KERNVIRTADDR, KERNPHYSADDR,
+	pmap_map_chunk(l1pagetable, KERNVIRTADDR, abp->apb_physaddr,
 	   (((uint32_t)(lastaddr) - KERNVIRTADDR) + PAGE_MASK) & ~PAGE_MASK,
 	    VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
 
@@ -1500,7 +1502,7 @@ initarm(struct arm_boot_params *abp)
 	/*
 	 * Prepare map of physical memory regions available to vm subsystem.
 	 */
-	physmap_init(availmem_regions, availmem_regions_sz);
+	physmap_init(availmem_regions, availmem_regions_sz, abp->apb_physaddr);
 
 	init_param2(physmem);
 	kdb_init();

Modified: projects/specific_leg/sys/arm/include/cpu.h
==============================================================================
--- projects/specific_leg/sys/arm/include/cpu.h	Sat Nov  2 21:25:31 2013	(r257558)
+++ projects/specific_leg/sys/arm/include/cpu.h	Sat Nov  2 21:48:59 2013	(r257559)
@@ -41,6 +41,7 @@ struct arm_boot_params {
 	register_t	abp_r1;		/* r1 from the boot loader */
 	register_t	abp_r2;		/* r2 from the boot loader */
 	register_t	abp_r3;		/* r3 from the boot loader */
+	register_t	apb_physaddr;	/* The kernel physical address */
 };
 
 void	arm_vector_init(vm_offset_t, int);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311022149.rA2Ln0CN057722>