Module Name:    src
Committed By:   skrll
Date:           Fri Apr  7 08:55:31 UTC 2023

Modified Files:
        src/sys/arch/aarch64/aarch64: aarch64_machdep.c
        src/sys/arch/arm/acpi: acpi_platform.c
        src/sys/arch/arm/altera: cycv_platform.c
        src/sys/arch/arm/amlogic: meson_platform.c
        src/sys/arch/arm/apple: apple_platform.c
        src/sys/arch/arm/arm32: arm32_machdep.c
        src/sys/arch/arm/broadcom: bcm283x_platform.c
        src/sys/arch/arm/fdt: arm_fdt.c arm_fdtvar.h arm_platform.c
        src/sys/arch/arm/nvidia: tegra_platform.c
        src/sys/arch/arm/nxp: imx6_platform.c
        src/sys/arch/arm/rockchip: rk_platform.c
        src/sys/arch/arm/samsung: exynos_platform.c
        src/sys/arch/arm/sunxi: sunxi_platform.c
        src/sys/arch/arm/ti: am3_platform.c omap3_platform.c
        src/sys/arch/arm/vexpress: vexpress_platform.c
        src/sys/arch/arm/xilinx: zynq_platform.c
        src/sys/arch/evbarm/fdt: fdt_bus_machdep.c fdt_machdep.c
        src/sys/dev/fdt: fdtvar.h files.fdt
Added Files:
        src/sys/dev/fdt: fdt_platform.c

Log Message:
Rename ARM_PLATFORM to FDT_PLATFORM and make it available outside arm.


To generate a diff of this commit:
cvs rdiff -u -r1.66 -r1.67 src/sys/arch/aarch64/aarch64/aarch64_machdep.c
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/arm/acpi/acpi_platform.c
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/altera/cycv_platform.c
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/amlogic/meson_platform.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/apple/apple_platform.c
cvs rdiff -u -r1.145 -r1.146 src/sys/arch/arm/arm32/arm32_machdep.c
cvs rdiff -u -r1.48 -r1.49 src/sys/arch/arm/broadcom/bcm283x_platform.c
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/fdt/arm_fdt.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/fdt/arm_fdtvar.h
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/fdt/arm_platform.c
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/nvidia/tegra_platform.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nxp/imx6_platform.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/rockchip/rk_platform.c
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/arm/samsung/exynos_platform.c
cvs rdiff -u -r1.46 -r1.47 src/sys/arch/arm/sunxi/sunxi_platform.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/ti/am3_platform.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/ti/omap3_platform.c
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/arm/vexpress/vexpress_platform.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/xilinx/zynq_platform.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/evbarm/fdt/fdt_bus_machdep.c
cvs rdiff -u -r1.101 -r1.102 src/sys/arch/evbarm/fdt/fdt_machdep.c
cvs rdiff -u -r0 -r1.1 src/sys/dev/fdt/fdt_platform.c
cvs rdiff -u -r1.77 -r1.78 src/sys/dev/fdt/fdtvar.h
cvs rdiff -u -r1.66 -r1.67 src/sys/dev/fdt/files.fdt

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/aarch64/aarch64/aarch64_machdep.c
diff -u src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.66 src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.67
--- src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.66	Fri Aug 19 08:17:32 2022
+++ src/sys/arch/aarch64/aarch64/aarch64_machdep.c	Fri Apr  7 08:55:29 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: aarch64_machdep.c,v 1.66 2022/08/19 08:17:32 ryo Exp $ */
+/* $NetBSD: aarch64_machdep.c,v 1.67 2023/04/07 08:55:29 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.66 2022/08/19 08:17:32 ryo Exp $");
+__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.67 2023/04/07 08:55:29 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_cpuoptions.h"
@@ -74,6 +74,7 @@ __KERNEL_RCSID(1, "$NetBSD: aarch64_mach
 #include <aarch64/kcore.h>
 
 #include <arm/fdt/arm_fdtvar.h>
+#include <dev/fdt/fdtvar.h>
 #include <dev/fdt/fdt_memory.h>
 
 #ifdef VERBOSE_INIT_ARM
@@ -677,9 +678,9 @@ cpu_startup(void)
 	consinit();
 
 #ifdef FDT
-	const struct arm_platform * const plat = arm_fdt_platform();
-	if (plat->ap_startup != NULL)
-		plat->ap_startup();
+	const struct fdt_platform * const plat = fdt_platform_find();
+	if (plat->fp_startup != NULL)
+		plat->fp_startup();
 #endif
 
 	/*

Index: src/sys/arch/arm/acpi/acpi_platform.c
diff -u src/sys/arch/arm/acpi/acpi_platform.c:1.35 src/sys/arch/arm/acpi/acpi_platform.c:1.36
--- src/sys/arch/arm/acpi/acpi_platform.c:1.35	Tue Jan 24 06:56:40 2023
+++ src/sys/arch/arm/acpi/acpi_platform.c	Fri Apr  7 08:55:29 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_platform.c,v 1.35 2023/01/24 06:56:40 mlelstv Exp $ */
+/* $NetBSD: acpi_platform.c,v 1.36 2023/04/07 08:55:29 skrll Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_platform.c,v 1.35 2023/01/24 06:56:40 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_platform.c,v 1.36 2023/04/07 08:55:29 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_platfor
 #include <sys/kprintf.h>
 
 #include <dev/fdt/fdtvar.h>
-#include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -408,15 +407,15 @@ acpi_platform_uart_freq(void)
 	return 0;
 }
 
-static const struct arm_platform acpi_platform = {
-	.ap_devmap = acpi_platform_devmap,
-	.ap_bootstrap = acpi_platform_bootstrap,
-	.ap_startup = acpi_platform_startup,
-	.ap_init_attach_args = acpi_platform_init_attach_args,
-	.ap_device_register = acpi_platform_device_register,
-	.ap_reset = acpi_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = acpi_platform_uart_freq,
+static const struct fdt_platform acpi_platform = {
+	.fp_devmap = acpi_platform_devmap,
+	.fp_bootstrap = acpi_platform_bootstrap,
+	.fp_startup = acpi_platform_startup,
+	.fp_init_attach_args = acpi_platform_init_attach_args,
+	.fp_device_register = acpi_platform_device_register,
+	.fp_reset = acpi_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = acpi_platform_uart_freq,
 };
 
-ARM_PLATFORM(acpi, "netbsd,generic-acpi", &acpi_platform);
+FDT_PLATFORM(acpi, "netbsd,generic-acpi", &acpi_platform);

Index: src/sys/arch/arm/altera/cycv_platform.c
diff -u src/sys/arch/arm/altera/cycv_platform.c:1.18 src/sys/arch/arm/altera/cycv_platform.c:1.19
--- src/sys/arch/arm/altera/cycv_platform.c:1.18	Sat Apr 24 23:36:25 2021
+++ src/sys/arch/arm/altera/cycv_platform.c	Fri Apr  7 08:55:29 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: cycv_platform.c,v 1.18 2021/04/24 23:36:25 thorpej Exp $ */
+/* $NetBSD: cycv_platform.c,v 1.19 2023/04/07 08:55:29 skrll Exp $ */
 
 /* This file is in the public domain. */
 
@@ -7,7 +7,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cycv_platform.c,v 1.18 2021/04/24 23:36:25 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cycv_platform.c,v 1.19 2023/04/07 08:55:29 skrll Exp $");
 
 #define	_ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -28,8 +28,9 @@ __KERNEL_RCSID(0, "$NetBSD: cycv_platfor
 #include <arm/bootconfig.h>
 #include <arm/cpufunc.h>
 
-#include <arm/fdt/arm_fdtvar.h>
 #include <dev/fdt/fdtvar.h>
+
+#include <arm/fdt/arm_fdtvar.h>
 #include <dev/ic/comreg.h>
 
 void cycv_platform_early_putchar(char);
@@ -164,15 +165,15 @@ cycv_platform_uart_freq(void) {
 	return cycv_clkmgr_early_get_l4_sp_clk();
 }
 
-static const struct arm_platform cycv_platform = {
-	.ap_devmap = cycv_platform_devmap,
-	.ap_bootstrap = cycv_platform_bootstrap,
-	.ap_init_attach_args = cycv_platform_init_attach_args,
-	.ap_device_register = cycv_platform_device_register,
-	.ap_reset = cycv_platform_reset,
-	.ap_delay = a9tmr_delay,
-	.ap_uart_freq = cycv_platform_uart_freq,
-	.ap_mpstart = cycv_mpstart,
+static const struct fdt_platform cycv_platform = {
+	.fp_devmap = cycv_platform_devmap,
+	.fp_bootstrap = cycv_platform_bootstrap,
+	.fp_init_attach_args = cycv_platform_init_attach_args,
+	.fp_device_register = cycv_platform_device_register,
+	.fp_reset = cycv_platform_reset,
+	.fp_delay = a9tmr_delay,
+	.fp_uart_freq = cycv_platform_uart_freq,
+	.fp_mpstart = cycv_mpstart,
 };
 
-ARM_PLATFORM(cycv, "altr,socfpga-cyclone5", &cycv_platform);
+FDT_PLATFORM(cycv, "altr,socfpga-cyclone5", &cycv_platform);

Index: src/sys/arch/arm/amlogic/meson_platform.c
diff -u src/sys/arch/arm/amlogic/meson_platform.c:1.20 src/sys/arch/arm/amlogic/meson_platform.c:1.21
--- src/sys/arch/arm/amlogic/meson_platform.c:1.20	Sat Apr 24 23:36:26 2021
+++ src/sys/arch/arm/amlogic/meson_platform.c	Fri Apr  7 08:55:29 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: meson_platform.c,v 1.20 2021/04/24 23:36:26 thorpej Exp $ */
+/* $NetBSD: meson_platform.c,v 1.21 2023/04/07 08:55:29 skrll Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared McNeill <jmcne...@invisible.ca>
@@ -33,7 +33,7 @@
 #include "arml2cc.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: meson_platform.c,v 1.20 2021/04/24 23:36:26 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: meson_platform.c,v 1.21 2023/04/07 08:55:29 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -42,6 +42,7 @@ __KERNEL_RCSID(0, "$NetBSD: meson_platfo
 #include <sys/termios.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -440,18 +441,18 @@ meson8b_mpstart(void)
 	return ret;
 }
 
-static const struct arm_platform meson8b_platform = {
-	.ap_devmap = meson_platform_devmap,
-	.ap_bootstrap = meson8b_platform_bootstrap,
-	.ap_init_attach_args = meson_platform_init_attach_args,
-	.ap_device_register = meson8b_platform_device_register,
-	.ap_reset = meson8b_platform_reset,
-	.ap_delay = a9ptmr_delay,
-	.ap_uart_freq = meson_platform_uart_freq,
-	.ap_mpstart = meson8b_mpstart,
+static const struct fdt_platform meson8b_platform = {
+	.fp_devmap = meson_platform_devmap,
+	.fp_bootstrap = meson8b_platform_bootstrap,
+	.fp_init_attach_args = meson_platform_init_attach_args,
+	.fp_device_register = meson8b_platform_device_register,
+	.fp_reset = meson8b_platform_reset,
+	.fp_delay = a9ptmr_delay,
+	.fp_uart_freq = meson_platform_uart_freq,
+	.fp_mpstart = meson8b_mpstart,
 };
 
-ARM_PLATFORM(meson8b, "amlogic,meson8b", &meson8b_platform);
+FDT_PLATFORM(meson8b, "amlogic,meson8b", &meson8b_platform);
 #endif	/* SOC_MESON8B */
 
 #if defined(SOC_MESONGX)
@@ -478,21 +479,21 @@ mesongx_platform_reset(void)
 	}
 }
 
-static const struct arm_platform mesongx_platform = {
-	.ap_devmap = meson_platform_devmap,
-	.ap_bootstrap = meson_platform_bootstrap,
-	.ap_init_attach_args = meson_platform_init_attach_args,
-	.ap_device_register = meson_platform_device_register,
-	.ap_reset = mesongx_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = meson_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform mesongx_platform = {
+	.fp_devmap = meson_platform_devmap,
+	.fp_bootstrap = meson_platform_bootstrap,
+	.fp_init_attach_args = meson_platform_init_attach_args,
+	.fp_device_register = meson_platform_device_register,
+	.fp_reset = mesongx_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = meson_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
 #if defined(SOC_MESONGXBB)
-ARM_PLATFORM(mesongxbb, "amlogic,meson-gxbb", &mesongx_platform);
+FDT_PLATFORM(mesongxbb, "amlogic,meson-gxbb", &mesongx_platform);
 #endif	/* SOC_MESONGXBB */
 #if defined(SOC_MESONGXL)
-ARM_PLATFORM(mesongxl, "amlogic,meson-gxl", &mesongx_platform);
+FDT_PLATFORM(mesongxl, "amlogic,meson-gxl", &mesongx_platform);
 #endif	/* SOC_MESONGXL */
 #endif	/* SOC_MESONGX */

Index: src/sys/arch/arm/apple/apple_platform.c
diff -u src/sys/arch/arm/apple/apple_platform.c:1.5 src/sys/arch/arm/apple/apple_platform.c:1.6
--- src/sys/arch/arm/apple/apple_platform.c:1.5	Sat Oct 15 11:07:38 2022
+++ src/sys/arch/arm/apple/apple_platform.c	Fri Apr  7 08:55:29 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: apple_platform.c,v 1.5 2022/10/15 11:07:38 jmcneill Exp $ */
+/* $NetBSD: apple_platform.c,v 1.6 2023/04/07 08:55:29 skrll Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: apple_platform.c,v 1.5 2022/10/15 11:07:38 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: apple_platform.c,v 1.6 2023/04/07 08:55:29 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -36,6 +36,7 @@ __KERNEL_RCSID(0, "$NetBSD: apple_platfo
 #include <sys/termios.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -150,7 +151,7 @@ apple_platform_devmap(void)
 }
 
 static u_int
-arm_platform_uart_freq(void)
+apple_platform_uart_freq(void)
 {
 	return 0;
 }
@@ -235,15 +236,15 @@ apple_platform_device_register(device_t 
 	}
 }
 
-static const struct arm_platform apple_arm_platform = {
-	.ap_devmap = apple_platform_devmap,
-	.ap_bootstrap = apple_platform_bootstrap,
-	.ap_init_attach_args = apple_platform_init_attach_args,
-	.ap_reset = psci_fdt_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = arm_platform_uart_freq,
-	.ap_device_register = apple_platform_device_register,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform apple_fdt_platform = {
+	.fp_devmap = apple_platform_devmap,
+	.fp_bootstrap = apple_platform_bootstrap,
+	.fp_init_attach_args = apple_platform_init_attach_args,
+	.fp_reset = psci_fdt_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = apple_platform_uart_freq,
+	.fp_device_register = apple_platform_device_register,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(apple_arm, "apple,arm-platform", &apple_arm_platform);
+FDT_PLATFORM(apple_arm, "apple,arm-platform", &apple_fdt_platform);

Index: src/sys/arch/arm/arm32/arm32_machdep.c
diff -u src/sys/arch/arm/arm32/arm32_machdep.c:1.145 src/sys/arch/arm/arm32/arm32_machdep.c:1.146
--- src/sys/arch/arm/arm32/arm32_machdep.c:1.145	Thu Jan 19 08:03:51 2023
+++ src/sys/arch/arm/arm32/arm32_machdep.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: arm32_machdep.c,v 1.145 2023/01/19 08:03:51 mlelstv Exp $	*/
+/*	$NetBSD: arm32_machdep.c,v 1.146 2023/04/07 08:55:30 skrll Exp $	*/
 
 /*
  * Copyright (c) 1994-1998 Mark Brinicombe.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm32_machdep.c,v 1.145 2023/01/19 08:03:51 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm32_machdep.c,v 1.146 2023/04/07 08:55:30 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_arm_start.h"
@@ -85,6 +85,8 @@ __KERNEL_RCSID(0, "$NetBSD: arm32_machde
 #include <machine/pcb.h>
 
 #if defined(FDT)
+#include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 #include <arch/evbarm/fdt/platform.h>
 #endif
@@ -301,9 +303,9 @@ cpu_startup(void)
 	pmap_postinit();
 
 #ifdef FDT
-	const struct arm_platform * const plat = arm_fdt_platform();
-	if (plat->ap_startup != NULL)
-		plat->ap_startup();
+	const struct fdt_platform * const plat = fdt_platform_find();
+	if (plat->fp_startup != NULL)
+		plat->fp_startup();
 #endif
 
 	/*
@@ -893,7 +895,7 @@ extern char KERNEL_BASE_phys[];
 void
 cpu_kernel_vm_init(paddr_t memory_start, psize_t memory_size)
 {
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 
 #ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS
 	const bool mapallmem_p = true;
@@ -914,7 +916,7 @@ cpu_kernel_vm_init(paddr_t memory_start,
 
 	arm32_bootmem_init(memory_start, memory_size, KERNEL_BASE_PHYS);
 	arm32_kernel_vm_init(KERNEL_VM_BASE, ARM_VECTORS_HIGH, 0,
-	    plat->ap_devmap(), mapallmem_p);
+	    plat->fp_devmap(), mapallmem_p);
 }
 #endif
 

Index: src/sys/arch/arm/broadcom/bcm283x_platform.c
diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.48 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.49
--- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.48	Sat Apr 24 23:36:26 2021
+++ src/sys/arch/arm/broadcom/bcm283x_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm283x_platform.c,v 1.48 2021/04/24 23:36:26 thorpej Exp $	*/
+/*	$NetBSD: bcm283x_platform.c,v 1.49 2023/04/07 08:55:30 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.48 2021/04/24 23:36:26 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.49 2023/04/07 08:55:30 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_bcm283x.h"
@@ -1481,7 +1481,7 @@ bcm283x_platform_uart_freq(void)
 
 	/*
 	 * We are safe to access stdout phandle - consinit did before
-	 * calling ap_uart_freq
+	 * calling fp_uart_freq
 	 */
 	const int phandle = fdtbus_get_stdout_phandle();
 
@@ -1497,55 +1497,55 @@ bcm283x_platform_uart_freq(void)
 }
 
 #if defined(SOC_BCM2835)
-static const struct arm_platform bcm2835_platform = {
-	.ap_devmap = bcm2835_platform_devmap,
-	.ap_bootstrap = bcm2835_platform_bootstrap,
-	.ap_init_attach_args = bcm2835_platform_init_attach_args,
-	.ap_device_register = bcm283x_platform_device_register,
-	.ap_reset = bcm2835_system_reset,
-	.ap_delay = bcm2835_tmr_delay,
-	.ap_uart_freq = bcm283x_platform_uart_freq,
+static const struct fdt_platform bcm2835_platform = {
+	.fp_devmap = bcm2835_platform_devmap,
+	.fp_bootstrap = bcm2835_platform_bootstrap,
+	.fp_init_attach_args = bcm2835_platform_init_attach_args,
+	.fp_device_register = bcm283x_platform_device_register,
+	.fp_reset = bcm2835_system_reset,
+	.fp_delay = bcm2835_tmr_delay,
+	.fp_uart_freq = bcm283x_platform_uart_freq,
 };
 
-ARM_PLATFORM(bcm2835, "brcm,bcm2835", &bcm2835_platform);
+FDT_PLATFORM(bcm2835, "brcm,bcm2835", &bcm2835_platform);
 #endif
 
 #if defined(SOC_BCM2836)
 
-static const struct arm_platform bcm2836_platform = {
-	.ap_devmap = bcm2836_platform_devmap,
-	.ap_bootstrap = bcm2836_platform_bootstrap,
-	.ap_init_attach_args = bcm2836_platform_init_attach_args,
-	.ap_device_register = bcm283x_platform_device_register,
-	.ap_reset = bcm2835_system_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = bcm283x_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform bcm2836_platform = {
+	.fp_devmap = bcm2836_platform_devmap,
+	.fp_bootstrap = bcm2836_platform_bootstrap,
+	.fp_init_attach_args = bcm2836_platform_init_attach_args,
+	.fp_device_register = bcm283x_platform_device_register,
+	.fp_reset = bcm2835_system_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = bcm283x_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-static const struct arm_platform bcm2837_platform = {
-	.ap_devmap = bcm2836_platform_devmap,
-	.ap_bootstrap = bcm2836_platform_bootstrap,
-	.ap_init_attach_args = bcm2836_platform_init_attach_args,
-	.ap_device_register = bcm283x_platform_device_register,
-	.ap_reset = bcm2835_system_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = bcm283x_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform bcm2837_platform = {
+	.fp_devmap = bcm2836_platform_devmap,
+	.fp_bootstrap = bcm2836_platform_bootstrap,
+	.fp_init_attach_args = bcm2836_platform_init_attach_args,
+	.fp_device_register = bcm283x_platform_device_register,
+	.fp_reset = bcm2835_system_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = bcm283x_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-static const struct arm_platform bcm2711_platform = {
-	.ap_devmap = bcm2711_platform_devmap,
-	.ap_bootstrap = bcm2711_platform_bootstrap,
-	.ap_init_attach_args = bcm2711_platform_init_attach_args,
-	.ap_device_register = bcm283x_platform_device_register,
-	.ap_reset = bcm2835_system_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = bcm283x_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform bcm2711_platform = {
+	.fp_devmap = bcm2711_platform_devmap,
+	.fp_bootstrap = bcm2711_platform_bootstrap,
+	.fp_init_attach_args = bcm2711_platform_init_attach_args,
+	.fp_device_register = bcm283x_platform_device_register,
+	.fp_reset = bcm2835_system_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = bcm283x_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(bcm2836, "brcm,bcm2836", &bcm2836_platform);
-ARM_PLATFORM(bcm2837, "brcm,bcm2837", &bcm2837_platform);
-ARM_PLATFORM(bcm2711, "brcm,bcm2711", &bcm2711_platform);
+FDT_PLATFORM(bcm2836, "brcm,bcm2836", &bcm2836_platform);
+FDT_PLATFORM(bcm2837, "brcm,bcm2837", &bcm2837_platform);
+FDT_PLATFORM(bcm2711, "brcm,bcm2711", &bcm2711_platform);
 #endif

Index: src/sys/arch/arm/fdt/arm_fdt.c
diff -u src/sys/arch/arm/fdt/arm_fdt.c:1.20 src/sys/arch/arm/fdt/arm_fdt.c:1.21
--- src/sys/arch/arm/fdt/arm_fdt.c:1.20	Sun Oct 10 13:03:09 2021
+++ src/sys/arch/arm/fdt/arm_fdt.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: arm_fdt.c,v 1.20 2021/10/10 13:03:09 jmcneill Exp $ */
+/* $NetBSD: arm_fdt.c,v 1.21 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcne...@invisible.ca>
@@ -31,7 +31,7 @@
 #include "opt_modular.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm_fdt.c,v 1.20 2021/10/10 13:03:09 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm_fdt.c,v 1.21 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -44,6 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: arm_fdt.c,v 
 #include <uvm/uvm_extern.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <dev/ofw/openfirm.h>
 
 #include <arm/fdt/arm_fdtvar.h>
@@ -94,7 +95,7 @@ arm_fdt_match(device_t parent, cfdata_t 
 void
 arm_fdt_attach(device_t parent, device_t self, void *aux)
 {
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 	struct fdt_attach_args faa;
 
 	aprint_naive("\n");
@@ -106,57 +107,12 @@ arm_fdt_attach(device_t parent, device_t
 	arm_fdt_efi_init(self);
 #endif
 
-	plat->ap_init_attach_args(&faa);
+	plat->fp_init_attach_args(&faa);
 	faa.faa_name = "";
 	faa.faa_phandle = OF_peer(0);
 
 	config_found(self, &faa, NULL, CFARGS_NONE);
 }
-
-const struct arm_platform *
-arm_fdt_platform(void)
-{
-	static const struct arm_platform_info *booted_platform = NULL;
-	__link_set_decl(arm_platforms, struct arm_platform_info);
-	struct arm_platform_info * const *info;
-
-	if (booted_platform == NULL) {
-		const struct arm_platform_info *best_info = NULL;
-		const int phandle = OF_peer(0);
-		int match, best_match = 0;
-
-		__link_set_foreach(info, arm_platforms) {
-			const struct device_compatible_entry compat_data[] = {
-				{ .compat = (*info)->api_compat },
-				DEVICE_COMPAT_EOL
-			};
-
-			match = of_compatible_match(phandle, compat_data);
-			if (match > best_match) {
-				best_match = match;
-				best_info = *info;
-			}
-		}
-
-		booted_platform = best_info;
-	}
-
-	/*
-	 * No SoC specific platform was found. Try to find a generic
-	 * platform definition and use that if available.
-	 */
-	if (booted_platform == NULL) {
-		__link_set_foreach(info, arm_platforms) {
-			if (strcmp((*info)->api_compat, ARM_PLATFORM_DEFAULT) == 0) {
-				booted_platform = *info;
-				break;
-			}
-		}
-	}
-
-	return booted_platform == NULL ? NULL : booted_platform->api_ops;
-}
-
 void
 arm_fdt_cpu_hatch_register(void *priv, void (*cb)(void *, struct cpu_info *))
 {

Index: src/sys/arch/arm/fdt/arm_fdtvar.h
diff -u src/sys/arch/arm/fdt/arm_fdtvar.h:1.19 src/sys/arch/arm/fdt/arm_fdtvar.h:1.20
--- src/sys/arch/arm/fdt/arm_fdtvar.h:1.19	Sun Sep  5 13:20:34 2021
+++ src/sys/arch/arm/fdt/arm_fdtvar.h	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: arm_fdtvar.h,v 1.19 2021/09/05 13:20:34 jmcneill Exp $ */
+/* $NetBSD: arm_fdtvar.h,v 1.20 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcne...@invisible.ca>
@@ -29,50 +29,13 @@
 #ifndef _ARM_ARM_FDTVAR_H
 #define _ARM_ARM_FDTVAR_H
 
-struct fdt_attach_args;
-
-/*
- * Platform-specific data
- */
-
-struct arm_platform {
-	const struct pmap_devmap * (*ap_devmap)(void);
-	void			(*ap_bootstrap)(void);
-	int			(*ap_mpstart)(void);
-	void			(*ap_startup)(void);
-	void			(*ap_init_attach_args)(struct fdt_attach_args *);
-	void			(*ap_device_register)(device_t, void *);
-	void			(*ap_reset)(void);
-	void			(*ap_delay)(u_int);
-	u_int			(*ap_uart_freq)(void);
-};
-
-struct arm_platform_info {
-	const char *			api_compat;
-	const struct arm_platform *	api_ops;
-};
-
-#define ARM_PLATFORM_DEFAULT		""
-
-#define _ARM_PLATFORM_REGISTER(name)	\
-	__link_set_add_rodata(arm_platforms, __CONCAT(name,_platinfo));
-
-#define ARM_PLATFORM(_name, _compat, _ops)				\
-static const struct arm_platform_info __CONCAT(_name,_platinfo) = {	\
-	.api_compat = (_compat),					\
-	.api_ops = (_ops)						\
-};									\
-_ARM_PLATFORM_REGISTER(_name)
-
-const struct arm_platform *	arm_fdt_platform(void);
-
 /*
  * CPU enable methods
  */
 
 struct arm_cpu_method {
-	const char *		acm_compat;
-	int			(*acm_enable)(int);
+	const char *	acm_compat;
+	int		(*acm_enable)(int);
 };
 
 #define	_ARM_CPU_METHOD_REGISTER(_name)	\

Index: src/sys/arch/arm/fdt/arm_platform.c
diff -u src/sys/arch/arm/fdt/arm_platform.c:1.6 src/sys/arch/arm/fdt/arm_platform.c:1.7
--- src/sys/arch/arm/fdt/arm_platform.c:1.6	Sat Feb 25 08:19:35 2023
+++ src/sys/arch/arm/fdt/arm_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: arm_platform.c,v 1.6 2023/02/25 08:19:35 skrll Exp $ */
+/* $NetBSD: arm_platform.c,v 1.7 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2020 Jared McNeill <jmcne...@invisible.ca>
@@ -38,7 +38,7 @@
 #include "opt_console.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm_platform.c,v 1.6 2023/02/25 08:19:35 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm_platform.c,v 1.7 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -47,7 +47,6 @@ __KERNEL_RCSID(0, "$NetBSD: arm_platform
 #include <sys/termios.h>
 
 #include <dev/fdt/fdtvar.h>
-#include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -58,6 +57,8 @@ __KERNEL_RCSID(0, "$NetBSD: arm_platform
 #include <arm/cortex/gtmr_var.h>
 
 #include <arm/arm/psci.h>
+
+#include <arm/fdt/arm_fdtvar.h>
 #include <arm/fdt/psci_fdtvar.h>
 
 #include <evbarm/dev/plcomreg.h>
@@ -137,15 +138,15 @@ arm_platform_uart_freq(void)
 	return 0;
 }
 
-static const struct arm_platform arm_platform = {
-	.ap_devmap = arm_platform_devmap,
-	.ap_bootstrap = arm_fdt_cpu_bootstrap,
-	.ap_init_attach_args = arm_platform_init_attach_args,
-	.ap_device_register = arm_platform_device_register,
-	.ap_reset = psci_fdt_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = arm_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform arm_platform = {
+	.fp_devmap = arm_platform_devmap,
+	.fp_bootstrap = arm_fdt_cpu_bootstrap,
+	.fp_init_attach_args = arm_platform_init_attach_args,
+	.fp_device_register = arm_platform_device_register,
+	.fp_reset = psci_fdt_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = arm_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(arm, ARM_PLATFORM_DEFAULT, &arm_platform);
+FDT_PLATFORM(arm, FDT_PLATFORM_DEFAULT, &arm_platform);

Index: src/sys/arch/arm/nvidia/tegra_platform.c
diff -u src/sys/arch/arm/nvidia/tegra_platform.c:1.27 src/sys/arch/arm/nvidia/tegra_platform.c:1.28
--- src/sys/arch/arm/nvidia/tegra_platform.c:1.27	Sat Apr 24 23:36:27 2021
+++ src/sys/arch/arm/nvidia/tegra_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_platform.c,v 1.27 2021/04/24 23:36:27 thorpej Exp $ */
+/* $NetBSD: tegra_platform.c,v 1.28 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcne...@invisible.ca>
@@ -34,7 +34,7 @@
 #include "ukbd.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_platform.c,v 1.27 2021/04/24 23:36:27 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_platform.c,v 1.28 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -217,31 +217,31 @@ tegra_platform_uart_freq(void)
 #endif	/* SOC_TEGRA124 || SOC_TEGRA210 */
 
 #if defined(SOC_TEGRA124)
-static const struct arm_platform tegra124_platform = {
-	.ap_devmap = tegra_platform_devmap,
-	.ap_bootstrap = tegra124_platform_bootstrap,
-	.ap_init_attach_args = tegra_platform_init_attach_args,
-	.ap_device_register = tegra_platform_device_register,
-	.ap_reset = tegra_platform_reset,
-	.ap_delay = tegra_platform_delay,
-	.ap_uart_freq = tegra_platform_uart_freq,
-	.ap_mpstart = tegra124_mpstart,
+static const struct fdt_platform tegra124_platform = {
+	.fp_devmap = tegra_platform_devmap,
+	.fp_bootstrap = tegra124_platform_bootstrap,
+	.fp_init_attach_args = tegra_platform_init_attach_args,
+	.fp_device_register = tegra_platform_device_register,
+	.fp_reset = tegra_platform_reset,
+	.fp_delay = tegra_platform_delay,
+	.fp_uart_freq = tegra_platform_uart_freq,
+	.fp_mpstart = tegra124_mpstart,
 };
 
-ARM_PLATFORM(tegra124, "nvidia,tegra124", &tegra124_platform);
+FDT_PLATFORM(tegra124, "nvidia,tegra124", &tegra124_platform);
 #endif
 
 #if defined(SOC_TEGRA210)
-static const struct arm_platform tegra210_platform = {
-	.ap_devmap = tegra_platform_devmap,
-	.ap_bootstrap = tegra210_platform_bootstrap,
-	.ap_init_attach_args = tegra_platform_init_attach_args,
-	.ap_device_register = tegra_platform_device_register,
-	.ap_reset = tegra_platform_reset,
-	.ap_delay = tegra_platform_delay,
-	.ap_uart_freq = tegra_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform tegra210_platform = {
+	.fp_devmap = tegra_platform_devmap,
+	.fp_bootstrap = tegra210_platform_bootstrap,
+	.fp_init_attach_args = tegra_platform_init_attach_args,
+	.fp_device_register = tegra_platform_device_register,
+	.fp_reset = tegra_platform_reset,
+	.fp_delay = tegra_platform_delay,
+	.fp_uart_freq = tegra_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(tegra210, "nvidia,tegra210", &tegra210_platform);
+FDT_PLATFORM(tegra210, "nvidia,tegra210", &tegra210_platform);
 #endif

Index: src/sys/arch/arm/nxp/imx6_platform.c
diff -u src/sys/arch/arm/nxp/imx6_platform.c:1.6 src/sys/arch/arm/nxp/imx6_platform.c:1.7
--- src/sys/arch/arm/nxp/imx6_platform.c:1.6	Sat Apr 24 23:36:28 2021
+++ src/sys/arch/arm/nxp/imx6_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: imx6_platform.c,v 1.6 2021/04/24 23:36:28 thorpej Exp $	*/
+/*	$NetBSD: imx6_platform.c,v 1.7 2023/04/07 08:55:30 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2019 Genetec Corporation.  All rights reserved.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imx6_platform.c,v 1.6 2021/04/24 23:36:28 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imx6_platform.c,v 1.7 2023/04/07 08:55:30 skrll Exp $");
 
 #include "arml2cc.h"
 #include "opt_console.h"
@@ -42,6 +42,7 @@ __KERNEL_RCSID(0, "$NetBSD: imx6_platfor
 #include <sys/termios.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -222,17 +223,17 @@ imx6_platform_reset(void)
 		__asm("wfi");
 }
 
-const struct arm_platform imx6_platform = {
-	.ap_devmap = imx_platform_devmap,
-	.ap_bootstrap = imx_platform_bootstrap,
-	.ap_init_attach_args = imx_platform_init_attach_args,
-	.ap_device_register = imx_platform_device_register,
-	.ap_reset = imx6_platform_reset,
-	.ap_delay = a9ptmr_delay,
-	.ap_uart_freq = imx_platform_uart_freq,
-	.ap_mpstart = imx_platform_mpstart,
+static const struct fdt_platform imx6_platform = {
+	.fp_devmap = imx_platform_devmap,
+	.fp_bootstrap = imx_platform_bootstrap,
+	.fp_init_attach_args = imx_platform_init_attach_args,
+	.fp_device_register = imx_platform_device_register,
+	.fp_reset = imx6_platform_reset,
+	.fp_delay = a9ptmr_delay,
+	.fp_uart_freq = imx_platform_uart_freq,
+	.fp_mpstart = imx_platform_mpstart,
 };
 
-ARM_PLATFORM(imx6dl, "fsl,imx6dl", &imx6_platform);
-ARM_PLATFORM(imx6q, "fsl,imx6q", &imx6_platform);
-ARM_PLATFORM(imx6qp, "fsl,imx6qp", &imx6_platform);
+FDT_PLATFORM(imx6dl, "fsl,imx6dl", &imx6_platform);
+FDT_PLATFORM(imx6q, "fsl,imx6q", &imx6_platform);
+FDT_PLATFORM(imx6qp, "fsl,imx6qp", &imx6_platform);

Index: src/sys/arch/arm/rockchip/rk_platform.c
diff -u src/sys/arch/arm/rockchip/rk_platform.c:1.16 src/sys/arch/arm/rockchip/rk_platform.c:1.17
--- src/sys/arch/arm/rockchip/rk_platform.c:1.16	Tue Aug 23 05:39:06 2022
+++ src/sys/arch/arm/rockchip/rk_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_platform.c,v 1.16 2022/08/23 05:39:06 ryo Exp $ */
+/* $NetBSD: rk_platform.c,v 1.17 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2018,2021 Jared McNeill <jmcne...@invisible.ca>
@@ -31,7 +31,7 @@
 #include "opt_console.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk_platform.c,v 1.16 2022/08/23 05:39:06 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_platform.c,v 1.17 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -39,8 +39,8 @@ __KERNEL_RCSID(0, "$NetBSD: rk_platform.
 #include <sys/device.h>
 #include <sys/termios.h>
 
-
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -175,18 +175,18 @@ rk3288_platform_uart_freq(void)
 	return RK3288_UART_FREQ;
 }
 
-static const struct arm_platform rk3288_platform = {
-	.ap_devmap = rk3288_platform_devmap,
-	.ap_bootstrap = rk3288_platform_bootstrap,
-	.ap_init_attach_args = rk_platform_init_attach_args,
-	.ap_device_register = rk_platform_device_register,
-	.ap_reset = rk3288_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = rk3288_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform rk3288_platform = {
+	.fp_devmap = rk3288_platform_devmap,
+	.fp_bootstrap = rk3288_platform_bootstrap,
+	.fp_init_attach_args = rk_platform_init_attach_args,
+	.fp_device_register = rk_platform_device_register,
+	.fp_reset = rk3288_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = rk3288_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(rk3288, "rockchip,rk3288", &rk3288_platform);
+FDT_PLATFORM(rk3288, "rockchip,rk3288", &rk3288_platform);
 #endif /* SOC_RK3288 */
 
 
@@ -232,18 +232,18 @@ rk3328_platform_uart_freq(void)
 	return RK3328_UART_FREQ;
 }
 
-static const struct arm_platform rk3328_platform = {
-	.ap_devmap = rk3328_platform_devmap,
-	.ap_bootstrap = rk_platform_bootstrap,
-	.ap_init_attach_args = rk_platform_init_attach_args,
-	.ap_device_register = rk_platform_device_register,
-	.ap_reset = psci_fdt_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = rk3328_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform rk3328_platform = {
+	.fp_devmap = rk3328_platform_devmap,
+	.fp_bootstrap = rk_platform_bootstrap,
+	.fp_init_attach_args = rk_platform_init_attach_args,
+	.fp_device_register = rk_platform_device_register,
+	.fp_reset = psci_fdt_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = rk3328_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(rk3328, "rockchip,rk3328", &rk3328_platform);
+FDT_PLATFORM(rk3328, "rockchip,rk3328", &rk3328_platform);
 
 #endif /* SOC_RK3328 */
 
@@ -290,18 +290,18 @@ rk3399_platform_uart_freq(void)
 	return RK3399_UART_FREQ;
 }
 
-static const struct arm_platform rk3399_platform = {
-	.ap_devmap = rk3399_platform_devmap,
-	.ap_bootstrap = rk_platform_bootstrap,
-	.ap_init_attach_args = rk_platform_init_attach_args,
-	.ap_device_register = rk_platform_device_register,
-	.ap_reset = psci_fdt_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = rk3399_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform rk3399_platform = {
+	.fp_devmap = rk3399_platform_devmap,
+	.fp_bootstrap = rk_platform_bootstrap,
+	.fp_init_attach_args = rk_platform_init_attach_args,
+	.fp_device_register = rk_platform_device_register,
+	.fp_reset = psci_fdt_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = rk3399_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(rk3399, "rockchip,rk3399", &rk3399_platform);
+FDT_PLATFORM(rk3399, "rockchip,rk3399", &rk3399_platform);
 
 #endif /* SOC_RK3399 */
 
@@ -349,18 +349,18 @@ rk3588_platform_uart_freq(void)
 	return RK3588_UART_FREQ;
 }
 
-static const struct arm_platform rk3588_platform = {
-	.ap_devmap = rk3588_platform_devmap,
-	.ap_bootstrap = rk_platform_bootstrap,
-	.ap_init_attach_args = rk_platform_init_attach_args,
-	.ap_device_register = rk_platform_device_register,
-	.ap_reset = psci_fdt_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = rk3588_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform rk3588_platform = {
+	.fp_devmap = rk3588_platform_devmap,
+	.fp_bootstrap = rk_platform_bootstrap,
+	.fp_init_attach_args = rk_platform_init_attach_args,
+	.fp_device_register = rk_platform_device_register,
+	.fp_reset = psci_fdt_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = rk3588_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(rk3588, "rockchip,rk3588", &rk3588_platform);
+FDT_PLATFORM(rk3588, "rockchip,rk3588", &rk3588_platform);
 
 #endif /* SOC_RK3588 */
 

Index: src/sys/arch/arm/samsung/exynos_platform.c
diff -u src/sys/arch/arm/samsung/exynos_platform.c:1.39 src/sys/arch/arm/samsung/exynos_platform.c:1.40
--- src/sys/arch/arm/samsung/exynos_platform.c:1.39	Sat Oct 29 13:29:46 2022
+++ src/sys/arch/arm/samsung/exynos_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_platform.c,v 1.39 2022/10/29 13:29:46 jmcneill Exp $ */
+/* $NetBSD: exynos_platform.c,v 1.40 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcne...@invisible.ca>
@@ -35,7 +35,7 @@
 #include "ukbd.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.39 2022/10/29 13:29:46 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.40 2023/04/07 08:55:30 skrll Exp $");
 
 #define	EXYNOS_CORE_VBASE	KERNEL_IO_VBASE
 
@@ -296,18 +296,18 @@ exynos4_platform_bootstrap(void)
 #endif
 }
 
-static const struct arm_platform exynos4_platform = {
-	.ap_devmap = exynos4_platform_devmap,
-//	.ap_mpstart = exynos4_mpstart,
-	.ap_bootstrap = exynos4_platform_bootstrap,
-	.ap_init_attach_args = exynos_platform_init_attach_args,
-	.ap_device_register = exynos_platform_device_register,
-	.ap_reset = exynos5_platform_reset,
-	.ap_delay = mct_delay,
-	.ap_uart_freq = exynos_platform_uart_freq,
+static const struct fdt_platform exynos4_platform = {
+	.fp_devmap = exynos4_platform_devmap,
+//	.fp_mpstart = exynos4_mpstart,
+	.fp_bootstrap = exynos4_platform_bootstrap,
+	.fp_init_attach_args = exynos_platform_init_attach_args,
+	.fp_device_register = exynos_platform_device_register,
+	.fp_reset = exynos5_platform_reset,
+	.fp_delay = mct_delay,
+	.fp_uart_freq = exynos_platform_uart_freq,
 };
 
-ARM_PLATFORM(exynos4, "samsung,exynos4", &exynos4_platform);
+FDT_PLATFORM(exynos4, "samsung,exynos4", &exynos4_platform);
 #endif
 
 
@@ -362,16 +362,16 @@ exynos5_platform_bootstrap(void)
 	arm_fdt_cpu_bootstrap();
 }
 
-static const struct arm_platform exynos5_platform = {
-	.ap_devmap = exynos5_platform_devmap,
-	.ap_bootstrap = exynos5_platform_bootstrap,
-	.ap_mpstart = exynos_platform_mpstart,
-	.ap_init_attach_args = exynos_platform_init_attach_args,
-	.ap_device_register = exynos_platform_device_register,
-	.ap_reset = exynos5_platform_reset,
-	.ap_delay = mct_delay,
-	.ap_uart_freq = exynos_platform_uart_freq,
+static const struct fdt_platform exynos5_platform = {
+	.fp_devmap = exynos5_platform_devmap,
+	.fp_bootstrap = exynos5_platform_bootstrap,
+	.fp_mpstart = exynos_platform_mpstart,
+	.fp_init_attach_args = exynos_platform_init_attach_args,
+	.fp_device_register = exynos_platform_device_register,
+	.fp_reset = exynos5_platform_reset,
+	.fp_delay = mct_delay,
+	.fp_uart_freq = exynos_platform_uart_freq,
 };
 
-ARM_PLATFORM(exynos5, "samsung,exynos5", &exynos5_platform);
+FDT_PLATFORM(exynos5, "samsung,exynos5", &exynos5_platform);
 #endif

Index: src/sys/arch/arm/sunxi/sunxi_platform.c
diff -u src/sys/arch/arm/sunxi/sunxi_platform.c:1.46 src/sys/arch/arm/sunxi/sunxi_platform.c:1.47
--- src/sys/arch/arm/sunxi/sunxi_platform.c:1.46	Tue Jun 28 05:19:03 2022
+++ src/sys/arch/arm/sunxi/sunxi_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_platform.c,v 1.46 2022/06/28 05:19:03 skrll Exp $ */
+/* $NetBSD: sunxi_platform.c,v 1.47 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -31,7 +31,7 @@
 #include "opt_console.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_platform.c,v 1.46 2022/06/28 05:19:03 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_platform.c,v 1.47 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -40,6 +40,7 @@ __KERNEL_RCSID(0, "$NetBSD: sunxi_platfo
 #include <sys/termios.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -426,121 +427,121 @@ sun50i_h6_platform_reset(void)
 	bus_space_write_4(bst, reset_bsh, SUN50I_H6_WDT_MODE, SUN50I_H6_WDT_MODE_EN);
 }
 
-static const struct arm_platform sun4i_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun4i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun4i_platform_reset,
-	.ap_delay = sun4i_platform_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
+static const struct fdt_platform sun4i_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun4i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun4i_platform_reset,
+	.fp_delay = sun4i_platform_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
 };
 
-ARM_PLATFORM(sun4i_a10, "allwinner,sun4i-a10", &sun4i_platform);
+FDT_PLATFORM(sun4i_a10, "allwinner,sun4i-a10", &sun4i_platform);
 
-static const struct arm_platform sun5i_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun4i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun4i_platform_reset,
-	.ap_delay = sun4i_platform_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
+static const struct fdt_platform sun5i_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun4i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun4i_platform_reset,
+	.fp_delay = sun4i_platform_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
 };
 
-ARM_PLATFORM(sun5i_a13, "allwinner,sun5i-a13", &sun5i_platform);
-ARM_PLATFORM(sun5i_gr8, "nextthing,gr8", &sun5i_platform);
+FDT_PLATFORM(sun5i_a13, "allwinner,sun5i-a13", &sun5i_platform);
+FDT_PLATFORM(sun5i_gr8, "nextthing,gr8", &sun5i_platform);
 
-static const struct arm_platform sun6i_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun6i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun6i_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform sun6i_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun6i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun6i_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun6i_a31, "allwinner,sun6i-a31", &sun6i_platform);
+FDT_PLATFORM(sun6i_a31, "allwinner,sun6i-a31", &sun6i_platform);
 
-static const struct arm_platform sun7i_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun4i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun4i_platform_reset,
-	.ap_delay = sun4i_platform_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform sun7i_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun4i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun4i_platform_reset,
+	.fp_delay = sun4i_platform_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun7i_a20, "allwinner,sun7i-a20", &sun7i_platform);
+FDT_PLATFORM(sun7i_a20, "allwinner,sun7i-a20", &sun7i_platform);
 
-static const struct arm_platform sun8i_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun6i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun6i_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform sun8i_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun6i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun6i_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun8i_h2plus, "allwinner,sun8i-h2-plus", &sun8i_platform);
-ARM_PLATFORM(sun8i_h3, "allwinner,sun8i-h3", &sun8i_platform);
-ARM_PLATFORM(sun8i_v3s, "allwinner,sun8i-v3s", &sun8i_platform);
-
-static const struct arm_platform sun8i_a83t_platform = {
-	.ap_devmap = sun8i_a83t_platform_devmap,
-	.ap_bootstrap = sun6i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun6i_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+FDT_PLATFORM(sun8i_h2plus, "allwinner,sun8i-h2-plus", &sun8i_platform);
+FDT_PLATFORM(sun8i_h3, "allwinner,sun8i-h3", &sun8i_platform);
+FDT_PLATFORM(sun8i_v3s, "allwinner,sun8i-v3s", &sun8i_platform);
+
+static const struct fdt_platform sun8i_a83t_platform = {
+	.fp_devmap = sun8i_a83t_platform_devmap,
+	.fp_bootstrap = sun6i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun6i_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun8i_a83t, "allwinner,sun8i-a83t", &sun8i_a83t_platform);
+FDT_PLATFORM(sun8i_a83t, "allwinner,sun8i-a83t", &sun8i_a83t_platform);
 
-static const struct arm_platform sun9i_platform = {
-	.ap_devmap = sun9i_a80_platform_devmap,
-	.ap_bootstrap = sun9i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun9i_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform sun9i_platform = {
+	.fp_devmap = sun9i_a80_platform_devmap,
+	.fp_bootstrap = sun9i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun9i_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun9i_a80, "allwinner,sun9i-a80", &sun9i_platform);
+FDT_PLATFORM(sun9i_a80, "allwinner,sun9i-a80", &sun9i_platform);
 
-static const struct arm_platform sun50i_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun6i_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun6i_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform sun50i_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun6i_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun6i_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun50i_a64, "allwinner,sun50i-a64", &sun50i_platform);
-ARM_PLATFORM(sun50i_h5, "allwinner,sun50i-h5", &sun50i_platform);
+FDT_PLATFORM(sun50i_a64, "allwinner,sun50i-a64", &sun50i_platform);
+FDT_PLATFORM(sun50i_h5, "allwinner,sun50i-h5", &sun50i_platform);
 
-static const struct arm_platform sun50i_h6_platform = {
-	.ap_devmap = sunxi_platform_devmap,
-	.ap_bootstrap = sun50i_h6_platform_bootstrap,
-	.ap_init_attach_args = sunxi_platform_init_attach_args,
-	.ap_device_register = sunxi_platform_device_register,
-	.ap_reset = sun50i_h6_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = sunxi_platform_uart_freq,
-	.ap_mpstart = arm_fdt_cpu_mpstart,
+static const struct fdt_platform sun50i_h6_platform = {
+	.fp_devmap = sunxi_platform_devmap,
+	.fp_bootstrap = sun50i_h6_platform_bootstrap,
+	.fp_init_attach_args = sunxi_platform_init_attach_args,
+	.fp_device_register = sunxi_platform_device_register,
+	.fp_reset = sun50i_h6_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = sunxi_platform_uart_freq,
+	.fp_mpstart = arm_fdt_cpu_mpstart,
 };
 
-ARM_PLATFORM(sun50i_h6, "allwinner,sun50i-h6", &sun50i_h6_platform);
+FDT_PLATFORM(sun50i_h6, "allwinner,sun50i-h6", &sun50i_h6_platform);

Index: src/sys/arch/arm/ti/am3_platform.c
diff -u src/sys/arch/arm/ti/am3_platform.c:1.3 src/sys/arch/arm/ti/am3_platform.c:1.4
--- src/sys/arch/arm/ti/am3_platform.c:1.3	Mon Sep 28 11:54:23 2020
+++ src/sys/arch/arm/ti/am3_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,13 +1,14 @@
-/* $NetBSD: am3_platform.c,v 1.3 2020/09/28 11:54:23 jmcneill Exp $ */
+/* $NetBSD: am3_platform.c,v 1.4 2023/04/07 08:55:30 skrll Exp $ */
 
 #include "opt_console.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am3_platform.c,v 1.3 2020/09/28 11:54:23 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am3_platform.c,v 1.4 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -137,13 +138,13 @@ am33xx_platform_reset(void)
 	*resetaddr = 1;
 }
 
-static const struct arm_platform am33xx_platform = {
-	.ap_devmap = am33xx_platform_devmap,
-	.ap_init_attach_args = am33xx_platform_init_attach_args,
-	.ap_bootstrap = am33xx_platform_bootstrap,
-	.ap_uart_freq = am33xx_platform_uart_freq,
-	.ap_delay = am33xx_platform_delay,
-	.ap_reset = am33xx_platform_reset,
+static const struct fdt_platform am33xx_platform = {
+	.fp_devmap = am33xx_platform_devmap,
+	.fp_init_attach_args = am33xx_platform_init_attach_args,
+	.fp_bootstrap = am33xx_platform_bootstrap,
+	.fp_uart_freq = am33xx_platform_uart_freq,
+	.fp_delay = am33xx_platform_delay,
+	.fp_reset = am33xx_platform_reset,
 };
 
-ARM_PLATFORM(am33xx, "ti,am33xx", &am33xx_platform);
+FDT_PLATFORM(am33xx, "ti,am33xx", &am33xx_platform);

Index: src/sys/arch/arm/ti/omap3_platform.c
diff -u src/sys/arch/arm/ti/omap3_platform.c:1.7 src/sys/arch/arm/ti/omap3_platform.c:1.8
--- src/sys/arch/arm/ti/omap3_platform.c:1.7	Sat Apr 24 23:36:29 2021
+++ src/sys/arch/arm/ti/omap3_platform.c	Fri Apr  7 08:55:30 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: omap3_platform.c,v 1.7 2021/04/24 23:36:29 thorpej Exp $ */
+/* $NetBSD: omap3_platform.c,v 1.8 2023/04/07 08:55:30 skrll Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared McNeill <jmcne...@invisible.ca>
@@ -30,7 +30,7 @@
 #include "opt_console.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: omap3_platform.c,v 1.7 2021/04/24 23:36:29 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: omap3_platform.c,v 1.8 2023/04/07 08:55:30 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -39,6 +39,7 @@ __KERNEL_RCSID(0, "$NetBSD: omap3_platfo
 #include <sys/termios.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 #include <uvm/uvm_extern.h>
@@ -185,14 +186,14 @@ omap3_platform_delay(u_int n)
 	}
 }
 
-static const struct arm_platform omap3_platform = {
-	.ap_devmap = omap3_platform_devmap,
-	.ap_bootstrap = arm_fdt_cpu_bootstrap,
-	.ap_init_attach_args = omap3_platform_init_attach_args,
-	.ap_device_register = omap3_platform_device_register,
-	.ap_reset = omap3_platform_reset,
-	.ap_delay = omap3_platform_delay,
-	.ap_uart_freq = omap3_platform_uart_freq,
+static const struct fdt_platform omap3_platform = {
+	.fp_devmap = omap3_platform_devmap,
+	.fp_bootstrap = arm_fdt_cpu_bootstrap,
+	.fp_init_attach_args = omap3_platform_init_attach_args,
+	.fp_device_register = omap3_platform_device_register,
+	.fp_reset = omap3_platform_reset,
+	.fp_delay = omap3_platform_delay,
+	.fp_uart_freq = omap3_platform_uart_freq,
 };
 
-ARM_PLATFORM(omap3, "ti,omap3", &omap3_platform);
+FDT_PLATFORM(omap3, "ti,omap3", &omap3_platform);

Index: src/sys/arch/arm/vexpress/vexpress_platform.c
diff -u src/sys/arch/arm/vexpress/vexpress_platform.c:1.22 src/sys/arch/arm/vexpress/vexpress_platform.c:1.23
--- src/sys/arch/arm/vexpress/vexpress_platform.c:1.22	Sat Apr 24 23:36:29 2021
+++ src/sys/arch/arm/vexpress/vexpress_platform.c	Fri Apr  7 08:55:31 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: vexpress_platform.c,v 1.22 2021/04/24 23:36:29 thorpej Exp $ */
+/* $NetBSD: vexpress_platform.c,v 1.23 2023/04/07 08:55:31 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -30,7 +30,7 @@
 #include "opt_console.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vexpress_platform.c,v 1.22 2021/04/24 23:36:29 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vexpress_platform.c,v 1.23 2023/04/07 08:55:31 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -215,15 +215,15 @@ vexpress_platform_uart_freq(void)
 	return VEXPRESS_REF_FREQ;
 }
 
-static const struct arm_platform vexpress_platform = {
-	.ap_devmap = vexpress_platform_devmap,
-	.ap_bootstrap = vexpress_platform_bootstrap,
-	.ap_mpstart = vexpress_a15_smp_init,
-	.ap_init_attach_args = vexpress_platform_init_attach_args,
-	.ap_device_register = vexpress_platform_device_register,
-	.ap_reset = vexpress_platform_reset,
-	.ap_delay = gtmr_delay,
-	.ap_uart_freq = vexpress_platform_uart_freq,
+static const struct fdt_platform vexpress_platform = {
+	.fp_devmap = vexpress_platform_devmap,
+	.fp_bootstrap = vexpress_platform_bootstrap,
+	.fp_mpstart = vexpress_a15_smp_init,
+	.fp_init_attach_args = vexpress_platform_init_attach_args,
+	.fp_device_register = vexpress_platform_device_register,
+	.fp_reset = vexpress_platform_reset,
+	.fp_delay = gtmr_delay,
+	.fp_uart_freq = vexpress_platform_uart_freq,
 };
 
-ARM_PLATFORM(vexpress, "arm,vexpress", &vexpress_platform);
+FDT_PLATFORM(vexpress, "arm,vexpress", &vexpress_platform);

Index: src/sys/arch/arm/xilinx/zynq_platform.c
diff -u src/sys/arch/arm/xilinx/zynq_platform.c:1.10 src/sys/arch/arm/xilinx/zynq_platform.c:1.11
--- src/sys/arch/arm/xilinx/zynq_platform.c:1.10	Mon Oct 31 22:23:38 2022
+++ src/sys/arch/arm/xilinx/zynq_platform.c	Fri Apr  7 08:55:31 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: zynq_platform.c,v 1.10 2022/10/31 22:23:38 jmcneill Exp $	*/
+/*	$NetBSD: zynq_platform.c,v 1.11 2023/04/07 08:55:31 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #include "arml2cc.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zynq_platform.c,v 1.10 2022/10/31 22:23:38 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zynq_platform.c,v 1.11 2023/04/07 08:55:31 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -252,18 +252,18 @@ zynq_platform_reset(void)
 	bus_space_write_4(bst, bsh, PSS_RST_CTRL, SOFT_RST);
 }
 
-static const struct arm_platform zynq_platform = {
-	.ap_devmap = zynq_platform_devmap,
-	.ap_bootstrap = zynq_platform_bootstrap,
-	.ap_init_attach_args = zynq_platform_init_attach_args,
-	.ap_device_register = zynq_platform_device_register,
-	.ap_reset = zynq_platform_reset,
-	.ap_delay = a9tmr_delay,
-	.ap_uart_freq = zynq_platform_uart_freq,
+static const struct fdt_platform zynq_platform = {
+	.fp_devmap = zynq_platform_devmap,
+	.fp_bootstrap = zynq_platform_bootstrap,
+	.fp_init_attach_args = zynq_platform_init_attach_args,
+	.fp_device_register = zynq_platform_device_register,
+	.fp_reset = zynq_platform_reset,
+	.fp_delay = a9tmr_delay,
+	.fp_uart_freq = zynq_platform_uart_freq,
 #ifdef MULTIPROCESSOR
-	.ap_mpstart = zynq_platform_mpstart,
+	.fp_mpstart = zynq_platform_mpstart,
 #endif
 };
 
 
-ARM_PLATFORM(zynq, "xlnx,zynq-7000", &zynq_platform);
+FDT_PLATFORM(zynq, "xlnx,zynq-7000", &zynq_platform);

Index: src/sys/arch/evbarm/fdt/fdt_bus_machdep.c
diff -u src/sys/arch/evbarm/fdt/fdt_bus_machdep.c:1.2 src/sys/arch/evbarm/fdt/fdt_bus_machdep.c:1.3
--- src/sys/arch/evbarm/fdt/fdt_bus_machdep.c:1.2	Sat Oct 15 11:07:39 2022
+++ src/sys/arch/evbarm/fdt/fdt_bus_machdep.c	Fri Apr  7 08:55:31 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_bus_machdep.c,v 1.2 2022/10/15 11:07:39 jmcneill Exp $ */
+/* $NetBSD: fdt_bus_machdep.c,v 1.3 2023/04/07 08:55:31 skrll Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca>
@@ -27,13 +27,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_bus_machdep.c,v 1.2 2022/10/15 11:07:39 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_bus_machdep.c,v 1.3 2023/04/07 08:55:31 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
 #include <sys/kmem.h>
 
 #include <dev/fdt/fdtvar.h>
+
 #include <arm/fdt/arm_fdtvar.h>
 
 extern struct bus_space arm_generic_bs_tag;
@@ -52,11 +53,11 @@ nonposted_mmio_bs_map(void *t, bus_addr_
 bus_space_tag_t
 fdtbus_bus_tag_create(int phandle, uint32_t flags)
 {
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 	struct bus_space *tagp;
 	struct fdt_attach_args faa;
 
-	plat->ap_init_attach_args(&faa);
+	plat->fp_init_attach_args(&faa);
 
 	tagp = kmem_alloc(sizeof(*tagp), KM_SLEEP);
 	*tagp = *faa.faa_bst;

Index: src/sys/arch/evbarm/fdt/fdt_machdep.c
diff -u src/sys/arch/evbarm/fdt/fdt_machdep.c:1.101 src/sys/arch/evbarm/fdt/fdt_machdep.c:1.102
--- src/sys/arch/evbarm/fdt/fdt_machdep.c:1.101	Sun Mar  5 22:04:54 2023
+++ src/sys/arch/evbarm/fdt/fdt_machdep.c	Fri Apr  7 08:55:31 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_machdep.c,v 1.101 2023/03/05 22:04:54 mlelstv Exp $ */
+/* $NetBSD: fdt_machdep.c,v 1.102 2023/04/07 08:55:31 skrll Exp $ */
 
 /*-
  * Copyright (c) 2015-2017 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_machdep.c,v 1.101 2023/03/05 22:04:54 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_machdep.c,v 1.102 2023/04/07 08:55:31 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_bootconfig.h"
@@ -92,6 +92,8 @@ __KERNEL_RCSID(0, "$NetBSD: fdt_machdep.
 #include <evbarm/fdt/platform.h>
 
 #include <arm/fdt/arm_fdtvar.h>
+
+#include <dev/fdt/fdtvar.h>
 #include <dev/fdt/fdt_private.h>
 #include <dev/fdt/fdt_memory.h>
 
@@ -489,7 +491,7 @@ fdt_map_efi_runtime(const char *prop, en
 vaddr_t
 initarm(void *arg)
 {
-	const struct arm_platform *plat;
+	const struct fdt_platform *plat;
 	uint64_t memory_start, memory_end;
 
 	/* set temporally to work printf()/panic() even before consinit() */
@@ -511,7 +513,7 @@ initarm(void *arg)
 	fdtbus_init(fdt_data);
 
 	/* Lookup platform specific backend */
-	plat = arm_fdt_platform();
+	plat = fdt_platform_find();
 	if (plat == NULL)
 		panic("Kernel does not support this device");
 
@@ -533,12 +535,12 @@ initarm(void *arg)
 	 * l1pt VA is fine
 	 */
 
-	VPRINTF("devmap %p\n", plat->ap_devmap());
+	VPRINTF("devmap %p\n", plat->fp_devmap());
 	extern char ARM_BOOTSTRAP_LxPT[];
-	pmap_devmap_bootstrap((vaddr_t)ARM_BOOTSTRAP_LxPT, plat->ap_devmap());
+	pmap_devmap_bootstrap((vaddr_t)ARM_BOOTSTRAP_LxPT, plat->fp_devmap());
 
 	VPRINTF("bootstrap\n");
-	plat->ap_bootstrap();
+	plat->fp_bootstrap();
 
 	/*
 	 * If stdout-path is specified on the command line, override the
@@ -637,8 +639,8 @@ initarm(void *arg)
 	error = 0;
 	if ((boothowto & RB_MD1) == 0) {
 		VPRINTF("mpstart\n");
-		if (plat->ap_mpstart)
-			error = plat->ap_mpstart();
+		if (plat->fp_mpstart)
+			error = plat->fp_mpstart();
 	}
 
 	if (error)
@@ -696,7 +698,7 @@ void
 consinit(void)
 {
 	static bool initialized = false;
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 	const struct fdt_console *cons = fdtbus_get_console();
 	struct fdt_attach_args faa;
 	u_int uart_freq = 0;
@@ -704,11 +706,11 @@ consinit(void)
 	if (initialized || cons == NULL)
 		return;
 
-	plat->ap_init_attach_args(&faa);
+	plat->fp_init_attach_args(&faa);
 	faa.faa_phandle = fdtbus_get_stdout_phandle();
 
-	if (plat->ap_uart_freq != NULL)
-		uart_freq = plat->ap_uart_freq();
+	if (plat->fp_uart_freq != NULL)
+		uart_freq = plat->fp_uart_freq();
 
 	cons->consinit(&faa, uart_freq);
 
@@ -733,9 +735,9 @@ cpu_startup_hook(void)
 void
 delay(u_int us)
 {
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 
-	plat->ap_delay(us);
+	plat->fp_delay(us);
 }
 
 static void
@@ -849,7 +851,7 @@ fdt_detect_root_device(device_t dev)
 static void
 fdt_device_register(device_t self, void *aux)
 {
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 
 	if (device_is_a(self, "armfdt")) {
 		fdt_setup_initrd();
@@ -870,8 +872,8 @@ fdt_device_register(device_t self, void 
 	}
 #endif
 
-	if (plat && plat->ap_device_register)
-		plat->ap_device_register(self, aux);
+	if (plat && plat->fp_device_register)
+		plat->fp_device_register(self, aux);
 }
 
 static void
@@ -910,12 +912,12 @@ fdt_cpu_rootconf(void)
 static void
 fdt_reset(void)
 {
-	const struct arm_platform *plat = arm_fdt_platform();
+	const struct fdt_platform *plat = fdt_platform_find();
 
 	fdtbus_power_reset();
 
-	if (plat && plat->ap_reset)
-		plat->ap_reset();
+	if (plat && plat->fp_reset)
+		plat->fp_reset();
 }
 
 static void

Index: src/sys/dev/fdt/fdtvar.h
diff -u src/sys/dev/fdt/fdtvar.h:1.77 src/sys/dev/fdt/fdtvar.h:1.78
--- src/sys/dev/fdt/fdtvar.h:1.77	Fri Mar  4 08:19:06 2022
+++ src/sys/dev/fdt/fdtvar.h	Fri Apr  7 08:55:31 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: fdtvar.h,v 1.77 2022/03/04 08:19:06 skrll Exp $ */
+/* $NetBSD: fdtvar.h,v 1.78 2023/04/07 08:55:31 skrll Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -306,6 +306,44 @@ _FDT_OPP_REGISTER(_name)
 
 TAILQ_HEAD(fdt_conslist, fdt_console_info);
 
+/*
+ * Platform-specific data
+ */
+
+struct fdt_platform {
+	const struct pmap_devmap *
+				(*fp_devmap)(void);
+	void			(*fp_bootstrap)(void);
+	int			(*fp_mpstart)(void);
+	void			(*fp_startup)(void);
+	void			(*fp_init_attach_args)(struct fdt_attach_args *);
+	void			(*fp_device_register)(device_t, void *);
+	void			(*fp_reset)(void);
+	void			(*fp_delay)(u_int);
+	u_int			(*fp_uart_freq)(void);
+};
+
+struct fdt_platform_info {
+	const char *			fpi_compat;
+	const struct fdt_platform *	fpi_ops;
+};
+
+#define FDT_PLATFORM_DEFAULT		""
+
+#define _FDT_PLATFORM_REGISTER(name)	\
+	__link_set_add_rodata(fdt_platforms, __CONCAT(name,_platinfo));
+
+#define FDT_PLATFORM(_name, _compat, _ops)				\
+static const struct fdt_platform_info __CONCAT(_name,_platinfo) = {	\
+	.fpi_compat = (_compat),					\
+	.fpi_ops = (_ops)						\
+};									\
+_FDT_PLATFORM_REGISTER(_name)
+
+const struct fdt_platform *
+		fdt_platform_find(void);
+
+
 struct fdt_dma_range {
 	paddr_t		dr_sysbase;
 	bus_addr_t	dr_busbase;

Index: src/sys/dev/fdt/files.fdt
diff -u src/sys/dev/fdt/files.fdt:1.66 src/sys/dev/fdt/files.fdt:1.67
--- src/sys/dev/fdt/files.fdt:1.66	Sat Nov  5 17:31:37 2022
+++ src/sys/dev/fdt/files.fdt	Fri Apr  7 08:55:31 2023
@@ -1,4 +1,4 @@
-# $NetBSD: files.fdt,v 1.66 2022/11/05 17:31:37 jmcneill Exp $
+# $NetBSD: files.fdt,v 1.67 2023/04/07 08:55:31 skrll Exp $
 
 include	"external/bsd/libfdt/conf/files.libfdt"
 
@@ -68,6 +68,7 @@ file	dev/fdt/i2cmux_fdt.c			iicmux_fdt
 
 file	dev/fdt/fdt_memory.c			fdtbase
 file	dev/fdt/fdt_openfirm.c			fdtbase
+file	dev/fdt/fdt_platform.c			fdtbase
 file	dev/fdt/fdt_subr.c			fdtbase
 
 file	dev/fdt/fdt_clock.c			fdt

Added files:

Index: src/sys/dev/fdt/fdt_platform.c
diff -u /dev/null src/sys/dev/fdt/fdt_platform.c:1.1
--- /dev/null	Fri Apr  7 08:55:31 2023
+++ src/sys/dev/fdt/fdt_platform.c	Fri Apr  7 08:55:31 2023
@@ -0,0 +1,83 @@
+/* $NetBSD: fdt_platform.c,v 1.1 2023/04/07 08:55:31 skrll Exp $ */
+
+/*-
+ * Copyright (c) 2017 Jared D. McNeill <jmcne...@invisible.ca>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: fdt_platform.c,v 1.1 2023/04/07 08:55:31 skrll Exp $");
+
+#include <sys/param.h>
+
+#include <dev/ofw/openfirm.h>
+
+#include <dev/fdt/fdtvar.h>
+
+const struct fdt_platform *
+fdt_platform_find(void)
+{
+	static const struct fdt_platform_info *booted_platform = NULL;
+	__link_set_decl(fdt_platforms, struct fdt_platform_info);
+	struct fdt_platform_info * const *info;
+
+	if (booted_platform == NULL) {
+		const struct fdt_platform_info *best_info = NULL;
+		const int phandle = OF_peer(0);
+		int match, best_match = 0;
+
+		__link_set_foreach(info, fdt_platforms) {
+			const struct device_compatible_entry compat_data[] = {
+				{ .compat = (*info)->fpi_compat },
+				DEVICE_COMPAT_EOL
+			};
+
+			match = of_compatible_match(phandle, compat_data);
+			if (match > best_match) {
+				best_match = match;
+				best_info = *info;
+			}
+		}
+
+		booted_platform = best_info;
+	}
+
+	/*
+	 * No SoC specific platform was found. Try to find a generic
+	 * platform definition and use that if available.
+	 */
+	if (booted_platform == NULL) {
+		__link_set_foreach(info, fdt_platforms) {
+			if (strcmp((*info)->fpi_compat, FDT_PLATFORM_DEFAULT) == 0) {
+				booted_platform = *info;
+				break;
+			}
+		}
+	}
+
+	return booted_platform == NULL ? NULL : booted_platform->fpi_ops;
+}
+
+// XXXNH remove this and rely on a default
+FDT_PLATFORM(dummy, NULL, NULL);

Reply via email to