Index: sys/arm/amlogic/aml8726/aml8726_machdep.c =================================================================== --- sys/arm/amlogic/aml8726/aml8726_machdep.c +++ sys/arm/amlogic/aml8726/aml8726_machdep.c @@ -144,6 +144,11 @@ { } +void +platform_cpu_init(void) +{ +} + /* * Construct static devmap entries to map out the core * peripherals using 1mb section mappings. Index: sys/arm/annapurna/alpine/alpine_machdep.c =================================================================== --- sys/arm/annapurna/alpine/alpine_machdep.c +++ sys/arm/annapurna/alpine/alpine_machdep.c @@ -79,6 +79,11 @@ } +void +platform_cpu_init(void) +{ + +} /* * Construct devmap table with DT-derived config data. */ Index: sys/arm/arm/machdep.c =================================================================== --- sys/arm/arm/machdep.c +++ sys/arm/arm/machdep.c @@ -765,6 +765,7 @@ cpuinfo_init(); set_cpufuncs(); + platform_cpu_init(); /* * Find the dtb passed in by the boot loader. @@ -1035,6 +1036,7 @@ set_cpufuncs(); cpuinfo_init(); + platform_cpu_init(); /* * Find the dtb passed in by the boot loader. Index: sys/arm/arm/mp_machdep.c =================================================================== --- sys/arm/arm/mp_machdep.c +++ sys/arm/arm/mp_machdep.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #ifdef VFP @@ -156,6 +157,7 @@ #endif uint32_t actlr_mask, actlr_set; + platform_cpu_init(); pmap_set_tex(); cpuinfo_get_actlr_modifier(&actlr_mask, &actlr_set); reinit_mmu(pmap_kern_ttb, actlr_mask, actlr_set); Index: sys/arm/arm/platform.c =================================================================== --- sys/arm/arm/platform.c +++ sys/arm/arm/platform.c @@ -189,6 +189,13 @@ } void +platform_cpu_init(void) +{ + + PLATFORM_CPU_INIT(plat_obj); +} + +void cpu_reset(void) { Index: sys/arm/arm/platform_if.m =================================================================== --- sys/arm/arm/platform_if.m +++ sys/arm/arm/platform_if.m @@ -146,3 +146,10 @@ METHOD void cpu_reset { platform_t _plat; }; + +/** + * @brief Called by initarm, init_secondary to apply platform configurations. + */ +METHOD void cpu_init { + platform_t _plat; +}; Index: sys/arm/at91/at91_common.c =================================================================== --- sys/arm/at91/at91_common.c +++ sys/arm/at91/at91_common.c @@ -119,3 +119,8 @@ platform_late_init(void) { } + +void +platform_cpu_init(void) +{ +} Index: sys/arm/freescale/vybrid/vf_machdep.c =================================================================== --- sys/arm/freescale/vybrid/vf_machdep.c +++ sys/arm/freescale/vybrid/vf_machdep.c @@ -67,6 +67,12 @@ } +void +platform_cpu_init(void) +{ + +} + int platform_devmap_init(void) { Index: sys/arm/include/platform.h =================================================================== --- sys/arm/include/platform.h +++ sys/arm/include/platform.h @@ -56,11 +56,16 @@ * the init routines that can use printf() and expect the output to appear on * a standard console. * + * - platform_cpu_init() is called before reinit_mmu(), cpu_setup(), etc. + * This routine is used to set up any platform-specific CPU/MMU quirks, + * errata or unusual configuration. + * */ void platform_probe_and_attach(void); int platform_devmap_init(void); vm_offset_t platform_lastaddr(void); void platform_gpio_init(void); void platform_late_init(void); +void platform_cpu_init(void); #endif /* _MACHINE_PLATFORM_H_ */ Index: sys/arm/lpc/lpc_machdep.c =================================================================== --- sys/arm/lpc/lpc_machdep.c +++ sys/arm/lpc/lpc_machdep.c @@ -85,6 +85,11 @@ { } +void +platform_cpu_init(void) +{ +} + /* * Add a single static device mapping. * The values used were taken from the ranges property of the SoC node in the Index: sys/arm/mv/mv_machdep.c =================================================================== --- sys/arm/mv/mv_machdep.c +++ sys/arm/mv/mv_machdep.c @@ -240,6 +240,12 @@ } void +platform_cpu_init(void) +{ + +} + +void platform_late_init(void) { /* Index: sys/arm/ralink/rt1310_machdep.c =================================================================== --- sys/arm/ralink/rt1310_machdep.c +++ sys/arm/ralink/rt1310_machdep.c @@ -96,6 +96,11 @@ bootverbose = 1; } +void +platform_cpu_init(void) +{ +} + /* * Add a single static device mapping. * The values used were taken from the ranges property of the SoC node in the Index: sys/arm/samsung/exynos/exynos5_machdep.c =================================================================== --- sys/arm/samsung/exynos/exynos5_machdep.c +++ sys/arm/samsung/exynos/exynos5_machdep.c @@ -67,6 +67,12 @@ } +void +platform_cpu_init(void) +{ + +} + int platform_devmap_init(void) { Index: sys/arm/versatile/versatile_machdep.c =================================================================== --- sys/arm/versatile/versatile_machdep.c +++ sys/arm/versatile/versatile_machdep.c @@ -77,6 +77,11 @@ { } +void +platform_cpu_init(void) +{ +} + #define FDT_DEVMAP_MAX (2) /* FIXME */ static struct devmap_entry fdt_devmap[FDT_DEVMAP_MAX] = { { 0, 0, 0, }, Index: sys/arm/xilinx/zy7_machdep.c =================================================================== --- sys/arm/xilinx/zy7_machdep.c +++ sys/arm/xilinx/zy7_machdep.c @@ -75,6 +75,11 @@ { } +void +platform_cpu_init(void) +{ +} + /* * Set up static device mappings. Not strictly necessary -- simplebus will * dynamically establish mappings as needed -- but doing it this way gets us