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>