svn commit: r239163 - projects/armv6/sys/arm/ti
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Fri Aug 10 01:33:59 UTC 2012
Author: gonzo
Date: Fri Aug 10 01:33:59 2012
New Revision: 239163
URL: http://svn.freebsd.org/changeset/base/239163
Log:
Adopt new style of ARM CPU initialization for TI boards
Modified:
projects/armv6/sys/arm/ti/ti_machdep.c
Modified: projects/armv6/sys/arm/ti/ti_machdep.c
==============================================================================
--- projects/armv6/sys/arm/ti/ti_machdep.c Thu Aug 9 23:08:22 2012 (r239162)
+++ projects/armv6/sys/arm/ti/ti_machdep.c Fri Aug 10 01:33:59 2012 (r239163)
@@ -148,8 +148,6 @@ struct pv_addr kernelstack;
void set_stackptrs(int cpu);
-static struct trapframe proc0_tf;
-
static struct mem_region availmem_regions[FDT_MEM_REGIONS];
static int availmem_regions_sz;
@@ -300,7 +298,7 @@ physmap_init(void)
}
void *
-initarm(void *mdp, void *unused __unused)
+initarm(struct arm_boot_params *abp)
{
struct pv_addr kernel_l1pt;
struct pv_addr dpcpu;
@@ -308,45 +306,19 @@ initarm(void *mdp, void *unused __unused
uint32_t memsize, l2size;
void *kmdp;
u_int l1pagetable;
- int i = 0, j = 0;
+ int i = 0, j = 0, err_devmap = 0;
- 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 */
- 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();
- }
+ 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)
/*
* In case the device tree blob was not retrieved (from metadata) try
@@ -489,8 +461,7 @@ initarm(void *mdp, void *unused __unused
VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, PTE_CACHE);
/* Map pmap_devmap[] entries */
- if (platform_devmap_init() != 0)
- while (1);
+ err_devmap = platform_devmap_init();
pmap_devmap_bootstrap(l1pagetable, pmap_devmap_bootstrap_table);
cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2)) |
@@ -511,12 +482,16 @@ initarm(void *mdp, void *unused __unused
physmem = memsize / PAGE_SIZE;
debugf("initarm: console initialized\n");
- debugf(" arg1 mdp = 0x%08x\n", (uint32_t)mdp);
+ debugf(" arg1 kmdp = 0x%08x\n", (uint32_t)kmdp);
debugf(" boothowto = 0x%08x\n", boothowto);
debugf(" dtbp = 0x%08x\n", (uint32_t)dtbp);
print_kernel_section_addr();
print_kenv();
+ if (err_devmap != 0)
+ printf("WARNING: could not fully configure devmap, error=%d\n",
+ err_devmap);
+
/*
* Pages were allocated during the secondary bootstrap for the
* stacks for different CPU modes.
@@ -547,22 +522,10 @@ initarm(void *mdp, void *unused __unused
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_kstack_pages = KSTACK_PAGES;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
-
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
- dump_avail[0] = 0;
- dump_avail[1] = memsize;
- dump_avail[2] = 0;
- dump_avail[3] = 0;
-
+ arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0]));
pmap_bootstrap(freemempos, pmap_bootstrap_lastaddr, &kernel_l1pt);
msgbufp = (void *)msgbufpv.pv_va;
msgbufinit(msgbufp, msgbufsize);
More information about the svn-src-projects
mailing list