diff options
Diffstat (limited to 'sys/arm')
-rw-r--r-- | sys/arm/allwinner/a10_machdep.c | 8 | ||||
-rw-r--r-- | sys/arm/arm/machdep.c | 7 | ||||
-rw-r--r-- | sys/arm/broadcom/bcm2835/bcm2835_machdep.c | 8 | ||||
-rw-r--r-- | sys/arm/freescale/imx/imx_machdep.c | 27 | ||||
-rw-r--r-- | sys/arm/include/machdep.h | 32 | ||||
-rw-r--r-- | sys/arm/lpc/lpc_machdep.c | 12 | ||||
-rw-r--r-- | sys/arm/mv/mv_machdep.c | 12 | ||||
-rw-r--r-- | sys/arm/rockchip/rk30xx_machdep.c | 8 | ||||
-rw-r--r-- | sys/arm/samsung/exynos/exynos5_machdep.c | 8 | ||||
-rw-r--r-- | sys/arm/tegra/tegra2_machdep.c | 11 | ||||
-rw-r--r-- | sys/arm/ti/ti_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/versatile/versatile_machdep.c | 8 | ||||
-rw-r--r-- | sys/arm/xilinx/zy7_machdep.c | 8 |
13 files changed, 118 insertions, 41 deletions
diff --git a/sys/arm/allwinner/a10_machdep.c b/sys/arm/allwinner/a10_machdep.c index e9f93e8..c77a2a5 100644 --- a/sys/arm/allwinner/a10_machdep.c +++ b/sys/arm/allwinner/a10_machdep.c @@ -62,6 +62,12 @@ initarm_lastaddr(void) } void +initarm_early_init(void) +{ + +} + +void initarm_gpio_init(void) { } @@ -80,7 +86,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index ec6fa9c..c935a82 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -1303,7 +1303,7 @@ initarm(struct arm_boot_params *abp) availmem_regions_sz = curr; /* Platform-specific initialisation */ - vm_max_kernel_address = initarm_lastaddr(); + initarm_early_init(); pcpu0_init(); @@ -1419,9 +1419,10 @@ initarm(struct arm_boot_params *abp) pmap_map_entry(l1pagetable, ARM_VECTORS_HIGH, systempage.pv_pa, VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, PTE_CACHE); - /* Map pmap_devmap[] entries */ - err_devmap = platform_devmap_init(); + /* Establish static device mappings. */ + err_devmap = initarm_devmap_init(); arm_devmap_bootstrap(l1pagetable, NULL); + vm_max_kernel_address = initarm_lastaddr(); cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2)) | DOMAIN_CLIENT); pmap_pa = kernel_l1pt.pv_pa; diff --git a/sys/arm/broadcom/bcm2835/bcm2835_machdep.c b/sys/arm/broadcom/bcm2835/bcm2835_machdep.c index dcf8178..a203e12 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_machdep.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_machdep.c @@ -70,6 +70,12 @@ initarm_lastaddr(void) } void +initarm_early_init(void) +{ + +} + +void initarm_gpio_init(void) { } @@ -103,7 +109,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; diff --git a/sys/arm/freescale/imx/imx_machdep.c b/sys/arm/freescale/imx/imx_machdep.c index de0eb68..3f52206 100644 --- a/sys/arm/freescale/imx/imx_machdep.c +++ b/sys/arm/freescale/imx/imx_machdep.c @@ -88,31 +88,24 @@ vm_offset_t initarm_lastaddr(void) { + return (devmap_vaddr); +} + +void +initarm_early_init(void) +{ + /* XXX - Get rid of this stuff soon. */ boothowto |= RB_VERBOSE|RB_MULTIPLE; bootverbose = 1; - - /* - * Normally initarm() calls platform_devmap_init() much later in the - * init process to set up static device mappings. To calculate the - * highest available kva address we have to do that setup first. It - * maps downwards from ARM_VECTORS_HIGH and the last usable kva address - * is the point right before the virtual address of the first static - * mapping. So go set up the static mapping table now, then we can - * return the lowest static devmap vaddr as the end of usable kva. - */ - imx_devmap_init(); - - arm_devmap_register_table(devmap_entries); - - return (devmap_vaddr); } int -platform_devmap_init(void) +initarm_devmap_init(void) { - /* On imx this work is done during initarm_lastaddr(). */ + imx_devmap_init(); + arm_devmap_register_table(devmap_entries); return (0); } diff --git a/sys/arm/include/machdep.h b/sys/arm/include/machdep.h index 08e9e21..46d7e66 100644 --- a/sys/arm/include/machdep.h +++ b/sys/arm/include/machdep.h @@ -33,11 +33,39 @@ vm_offset_t linux_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); -/* Called by initarm */ +/* + * Initialization functions called by the common initarm() function in + * arm/machdep.c (but not necessarily from the custom initarm() functions of + * older code). + * + * - initarm_early_init() is called very early, after parsing the boot params + * and after physical memory has been located and sized. + * + * - platform_devmap_init() is called as one of the last steps of early virtual + * memory initialization, shortly before the new page tables are installed. + * + * - initarm_lastaddr() is called after platform_devmap_init(), and must return + * the address of the first byte of unusable KVA space. This allows a + * platform to carve out of the top of the KVA space whatever reserves it + * needs for things like static device mapping, and this is called to get the + * value before calling pmap_bootstrap() which uses the value to size the + * available KVA. + * + * - initarm_gpio_init() is called after the static device mappings are + * established and just before cninit(). The intention is that the routine + * can do any hardware setup (such as gpio or pinmux) necessary to make the + * console functional. + * + * - initarm_late_init() is called just after cninit(). This is the first of + * the init routines that can use printf() and expect the output to appear on + * a standard console. + * + */ +void initarm_early_init(void); +int initarm_devmap_init(void); vm_offset_t initarm_lastaddr(void); void initarm_gpio_init(void); void initarm_late_init(void); -int platform_devmap_init(void); /* Board-specific attributes */ void board_set_serial(uint64_t); diff --git a/sys/arm/lpc/lpc_machdep.c b/sys/arm/lpc/lpc_machdep.c index 576eda4..a900997 100644 --- a/sys/arm/lpc/lpc_machdep.c +++ b/sys/arm/lpc/lpc_machdep.c @@ -63,11 +63,15 @@ vm_offset_t initarm_lastaddr(void) { + return (fdt_immr_va); +} + +void +initarm_early_init(void) +{ + if (fdt_immr_addr(LPC_DEV_BASE) != 0) while (1); - - /* Platform-specific initialisation */ - return (fdt_immr_va); } void @@ -94,7 +98,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { /* diff --git a/sys/arm/mv/mv_machdep.c b/sys/arm/mv/mv_machdep.c index ace8dde..9758cfb 100644 --- a/sys/arm/mv/mv_machdep.c +++ b/sys/arm/mv/mv_machdep.c @@ -203,11 +203,15 @@ vm_offset_t initarm_lastaddr(void) { + return (fdt_immr_va); +} + +void +initarm_early_init(void) +{ + if (fdt_immr_addr(MV_BASE) != 0) while (1); - - /* Platform-specific initialisation */ - return (fdt_immr_va); } void @@ -316,7 +320,7 @@ __weak_reference(mv_default_fdt_pci_devmap, fdt_pci_devmap); * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { phandle_t root, child; pcell_t bank_count; diff --git a/sys/arm/rockchip/rk30xx_machdep.c b/sys/arm/rockchip/rk30xx_machdep.c index e4eb162..daba99f 100644 --- a/sys/arm/rockchip/rk30xx_machdep.c +++ b/sys/arm/rockchip/rk30xx_machdep.c @@ -60,6 +60,12 @@ initarm_lastaddr(void) } void +initarm_early_init(void) +{ + +} + +void initarm_gpio_init(void) { } @@ -82,7 +88,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; diff --git a/sys/arm/samsung/exynos/exynos5_machdep.c b/sys/arm/samsung/exynos/exynos5_machdep.c index 1c5a879..742d63d 100644 --- a/sys/arm/samsung/exynos/exynos5_machdep.c +++ b/sys/arm/samsung/exynos/exynos5_machdep.c @@ -54,6 +54,12 @@ initarm_lastaddr(void) } void +initarm_early_init(void) +{ + +} + +void initarm_gpio_init(void) { } @@ -72,7 +78,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i; diff --git a/sys/arm/tegra/tegra2_machdep.c b/sys/arm/tegra/tegra2_machdep.c index 92ca04a..8904250 100644 --- a/sys/arm/tegra/tegra2_machdep.c +++ b/sys/arm/tegra/tegra2_machdep.c @@ -107,10 +107,15 @@ vm_offset_t initarm_lastaddr(void) { + return (fdt_immr_va); +} + +void +initarm_early_init(void) +{ + if (fdt_immr_addr(TEGRA2_BASE) != 0) /* FIXME ???? */ while (1); - - return (fdt_immr_va); } void @@ -132,7 +137,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; fdt_devmap[i].pd_va = 0xe0000000; diff --git a/sys/arm/ti/ti_machdep.c b/sys/arm/ti/ti_machdep.c index 8a3184a..2f78a48 100644 --- a/sys/arm/ti/ti_machdep.c +++ b/sys/arm/ti/ti_machdep.c @@ -63,11 +63,17 @@ vm_offset_t initarm_lastaddr(void) { - ti_cpu_reset = NULL; return (DEVMAP_BOOTSTRAP_MAP_START); } void +initarm_early_init(void) +{ + + ti_cpu_reset = NULL; +} + +void initarm_gpio_init(void) { } @@ -87,7 +93,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; #if defined(SOC_OMAP4) diff --git a/sys/arm/versatile/versatile_machdep.c b/sys/arm/versatile/versatile_machdep.c index 08ce039..0be0ad5 100644 --- a/sys/arm/versatile/versatile_machdep.c +++ b/sys/arm/versatile/versatile_machdep.c @@ -65,6 +65,12 @@ initarm_lastaddr(void) } void +initarm_early_init(void) +{ + +} + +void initarm_gpio_init(void) { } @@ -85,7 +91,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; fdt_devmap[i].pd_va = 0xf0100000; diff --git a/sys/arm/xilinx/zy7_machdep.c b/sys/arm/xilinx/zy7_machdep.c index a2b01b5..8461fca 100644 --- a/sys/arm/xilinx/zy7_machdep.c +++ b/sys/arm/xilinx/zy7_machdep.c @@ -64,6 +64,12 @@ initarm_lastaddr(void) } void +initarm_early_init(void) +{ + +} + +void initarm_gpio_init(void) { } @@ -80,7 +86,7 @@ static struct arm_devmap_entry fdt_devmap[FDT_DEVMAP_SIZE]; * Construct pmap_devmap[] with DT-derived config data. */ int -platform_devmap_init(void) +initarm_devmap_init(void) { int i = 0; |