Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Jun 2012 04:09:21 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r237042 - in head/sys: arm/arm arm/include arm/mv conf
Message-ID:  <201206140409.q5E49LuR068450@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Thu Jun 14 04:09:20 2012
New Revision: 237042
URL: http://svn.freebsd.org/changeset/base/237042

Log:
  Create default_parse_boot_param which, if FreeBSD /boot/loader support
  is enabled, sets values based on the metadata passed in.  Otherwise
  fake_preload_metadata is called.  Change the default parse_boot_param
  to default_parse_boot_param.  Enable this functionality only on the mv
  platform, which is where most of the code is from.
  
  Reviewed by:	cognet, Ian Lapore

Modified:
  head/sys/arm/arm/machdep.c
  head/sys/arm/include/machdep.h
  head/sys/arm/mv/mv_machdep.c
  head/sys/arm/mv/std.mv
  head/sys/conf/options.arm

Modified: head/sys/arm/arm/machdep.c
==============================================================================
--- head/sys/arm/arm/machdep.c	Thu Jun 14 04:01:25 2012	(r237041)
+++ head/sys/arm/arm/machdep.c	Thu Jun 14 04:09:20 2012	(r237042)
@@ -712,6 +712,47 @@ fake_preload_metadata(struct arm_boot_pa
 	return (lastaddr);
 }
 
+vm_offset_t
+default_parse_boot_param(struct arm_boot_params *abp)
+{
+	vm_offset_t lastaddr;
+#if defined(FREEBSD_BOOT_LOADER)
+	void *mdp;
+	void *kmdp;
+
+	/*
+	 * Mask metadata pointer: it is supposed to be on page boundary. If
+	 * the first argument (mdp) doesn't point to a valid address the
+	 * bootloader must have passed us something else than the metadata
+	 * ptr... In this case we want to fall back to some built-in settings.
+	 */
+	mdp = (void *)(abp->abp_r0 & ~PAGE_MASK);
+
+	kmdp = NULL;
+	/* Parse metadata and fetch parameters (move to common machdep.c?) */
+	if (mdp != NULL) {
+		preload_metadata = mdp;
+		kmdp = preload_search_by_type("elf kernel");
+		if (kmdp != NULL) {
+			boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int);
+			kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *);
+			lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND,
+			    vm_offset_t);
+#ifdef DDB
+			ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t);
+			ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t);
+#endif
+		} else
+			lastaddr = fake_preload_metadata(abp);
+
+		preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR;
+	} else
+#endif
+		/* Fall back to hardcoded metadata. */
+		lastaddr = fake_preload_metadata(abp);
+	return lastaddr;
+}
+
 /*
  * Stub version of the boot parameter parsing routine.  We are
  * called early in initarm, before even VM has been initialized.
@@ -727,7 +768,7 @@ fake_preload_metadata(struct arm_boot_pa
  * kernels/boards can override this weak function with one of their
  * own.  We just fake metadata...
  */
-__weak_reference(fake_preload_metadata, parse_boot_param);
+__weak_reference(default_parse_boot_param, parse_boot_param);
 
 /*
  * Initialize proc0

Modified: head/sys/arm/include/machdep.h
==============================================================================
--- head/sys/arm/include/machdep.h	Thu Jun 14 04:01:25 2012	(r237041)
+++ head/sys/arm/include/machdep.h	Thu Jun 14 04:09:20 2012	(r237042)
@@ -11,9 +11,9 @@ void halt(void);
 void data_abort_handler(trapframe_t *);
 void prefetch_abort_handler(trapframe_t *);
 void undefinedinstruction_bounce(trapframe_t *);
-
 struct arm_boot_params;
-vm_offset_t fake_preload_metadata(struct arm_boot_params *);
-vm_offset_t parse_boot_param(struct arm_boot_params *);
+vm_offset_t default_parse_boot_param(struct arm_boot_params *abp);
+vm_offset_t fake_preload_metadata(struct arm_boot_params *abp);
+vm_offset_t parse_boot_param(struct arm_boot_params *abp);
 
 #endif /* !_MACHINE_MACHDEP_H_ */

Modified: head/sys/arm/mv/mv_machdep.c
==============================================================================
--- head/sys/arm/mv/mv_machdep.c	Thu Jun 14 04:01:25 2012	(r237041)
+++ head/sys/arm/mv/mv_machdep.c	Thu Jun 14 04:09:20 2012	(r237042)
@@ -311,47 +311,22 @@ initarm(struct arm_boot_params *abp)
 	vm_offset_t dtbp, freemempos, l2_start, lastaddr;
 	uint32_t memsize, l2size;
 	void *kmdp;
-	void *mdp;
 	u_int l1pagetable;
 	int i = 0, j = 0, err_devmap = 0;
 
-	mdp = (void *)abp->abp_r0;
-	kmdp = NULL;
-	lastaddr = 0;
+        lastaddr = parse_boot_param(abp);
 	memsize = 0;
-	dtbp = (vm_offset_t)NULL;
-
 	set_cpufuncs();
 
 	/*
-	 * Mask metadata pointer: it is supposed to be on page boundary. If
-	 * the first argument (mdp) doesn't point to a valid address the
-	 * bootloader must have passed us something else than the metadata
-	 * ptr... In this case we want to fall back to some built-in settings.
-	 */
-	mdp = (void *)((uint32_t)mdp & ~PAGE_MASK);
-
-	/* Parse metadata and fetch parameters (move to common machdep.c?) */
-	if (mdp != NULL) {
-		preload_metadata = mdp;
-		kmdp = preload_search_by_type("elf kernel");
-		if (kmdp != NULL) {
-			boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int);
-			kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *);
-			dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
-			lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND,
-			    vm_offset_t);
-#ifdef DDB
-			ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t);
-			ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t);
-#endif
-		}
-
-		preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR;
-	} else {
-		/* Fall back to hardcoded metadata. */
-		lastaddr = fake_preload_metadata(abp);
-	}
+	 * Find the dtb passed in by the boot loader.
+	 */
+        kmdp = preload_search_by_type("elf kernel");
+        if (kmdp != NULL)
+		dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
+	else
+		dtbp = (vm_offset_t)NULL;
+		
 
 #if defined(FDT_DTB_STATIC)
 	/*

Modified: head/sys/arm/mv/std.mv
==============================================================================
--- head/sys/arm/mv/std.mv	Thu Jun 14 04:01:25 2012	(r237041)
+++ head/sys/arm/mv/std.mv	Thu Jun 14 04:09:20 2012	(r237042)
@@ -3,3 +3,4 @@
 files		"../mv/files.mv"
 cpu		CPU_ARM9E
 makeoptions	CONF_CFLAGS="-march=armv5te"
+options		FREEBSD_BOOT_LOADER

Modified: head/sys/conf/options.arm
==============================================================================
--- head/sys/conf/options.arm	Thu Jun 14 04:01:25 2012	(r237041)
+++ head/sys/conf/options.arm	Thu Jun 14 04:09:20 2012	(r237042)
@@ -16,6 +16,7 @@ CPU_XSCALE_IXP425	opt_global.h
 CPU_XSCALE_IXP435	opt_global.h
 CPU_XSCALE_PXA2X0	opt_global.h
 FLASHADDR		opt_global.h
+FREEBSD_BOOT_LOADER	opt_global.h
 IXP4XX_FLASH_SIZE	opt_global.h
 KERNPHYSADDR		opt_global.h
 KERNVIRTADDR		opt_global.h



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