summaryrefslogtreecommitdiffstats
path: root/sys/arm/mv/mv_machdep.c
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2012-06-14 04:09:20 +0000
committerimp <imp@FreeBSD.org>2012-06-14 04:09:20 +0000
commit50adcf0cadce9a48327062c3de3311784fa95b97 (patch)
treea5e2b47ccc65e33c3f11031630c7bda56dec4642 /sys/arm/mv/mv_machdep.c
parentf85277a1639293c1ceac5f964b9d8796b602cd17 (diff)
downloadFreeBSD-src-50adcf0cadce9a48327062c3de3311784fa95b97.zip
FreeBSD-src-50adcf0cadce9a48327062c3de3311784fa95b97.tar.gz
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
Diffstat (limited to 'sys/arm/mv/mv_machdep.c')
-rw-r--r--sys/arm/mv/mv_machdep.c41
1 files changed, 8 insertions, 33 deletions
diff --git a/sys/arm/mv/mv_machdep.c b/sys/arm/mv/mv_machdep.c
index cf055a2..0008f65 100644
--- a/sys/arm/mv/mv_machdep.c
+++ b/sys/arm/mv/mv_machdep.c
@@ -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.
+ * Find the dtb passed in by the boot loader.
*/
- 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);
- }
+ 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)
/*
OpenPOWER on IntegriCloud