diff --git a/sys/arm/freescale/vybrid/files.vybrid b/sys/arm/freescale/vybrid/files.vybrid
index b39cbbfd83cf..dff5892e9931 100644
--- a/sys/arm/freescale/vybrid/files.vybrid
+++ b/sys/arm/freescale/vybrid/files.vybrid
@@ -1,21 +1,22 @@
arm/freescale/vybrid/vf_machdep.c standard
arm/freescale/vybrid/vf_ccm.c standard
arm/freescale/vybrid/vf_anadig.c standard
arm/freescale/vybrid/vf_iomuxc.c standard
arm/freescale/vybrid/vf_mscm.c standard
arm/freescale/vybrid/vf_src.c standard
arm/freescale/vybrid/vf_edma.c standard
arm/freescale/vybrid/vf_dmamux.c standard
arm/freescale/vybrid/vf_port.c standard
arm/freescale/vybrid/vf_adc.c standard
-arm/freescale/vybrid/vf_i2c.c optional iicbus
+dev/iicbus/controller/vybrid/vf_i2c.c optional iicbus
+dev/iicbus/controller/vybrid/vf_i2c_fdt.c optional iicbus fdt
arm/freescale/vybrid/vf_tcon.c optional vt
arm/freescale/vybrid/vf_dcu4.c optional vt
arm/freescale/vybrid/vf_nfc.c optional nand
arm/freescale/vybrid/vf_ehci.c optional ehci
arm/freescale/vybrid/vf_gpio.c optional gpio
arm/freescale/vybrid/vf_uart.c optional uart
arm/freescale/vybrid/vf_sai.c optional sound
arm/freescale/vybrid/vf_spi.c optional vf_spi
dev/ffec/if_ffec.c optional ffec
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
index 679d442f672b..293a0ae1c0f9 100644
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -1,745 +1,747 @@
##
## Kernel
##
kern/msi_if.m optional intrng
kern/pic_if.m optional intrng
kern/subr_devmap.c standard
kern/subr_intr.c optional intrng
kern/subr_physmem.c standard
libkern/strlen.c standard
libkern/arm64/crc32c_armv8.S standard
arm/arm/generic_timer.c standard
arm/arm/gic.c standard
arm/arm/gic_acpi.c optional acpi
arm/arm/gic_fdt.c optional fdt
arm/arm/gic_if.m standard
arm/arm/pmu.c standard
arm/arm/pmu_acpi.c optional acpi
arm/arm/pmu_fdt.c optional fdt
arm64/acpica/acpi_iort.c optional acpi
arm64/acpica/acpi_machdep.c optional acpi
arm64/acpica/OsdEnvironment.c optional acpi
arm64/acpica/acpi_wakeup.c optional acpi
arm64/acpica/pci_cfgreg.c optional acpi pci
arm64/arm64/autoconf.c standard
arm64/arm64/bus_machdep.c standard
arm64/arm64/bus_space_asm.S standard
arm64/arm64/busdma_bounce.c standard
arm64/arm64/busdma_machdep.c standard
arm64/arm64/clock.c standard
arm64/arm64/copyinout.S standard
arm64/arm64/cpu_errata.c standard
arm64/arm64/cpufunc_asm.S standard
arm64/arm64/db_disasm.c optional ddb
arm64/arm64/db_interface.c optional ddb
arm64/arm64/db_trace.c optional ddb
arm64/arm64/debug_monitor.c standard
arm64/arm64/disassem.c optional ddb
arm64/arm64/dump_machdep.c standard
arm64/arm64/efirt_machdep.c optional efirt
arm64/arm64/elf32_machdep.c optional compat_freebsd32
arm64/arm64/elf_machdep.c standard
arm64/arm64/exception.S standard
arm64/arm64/exec_machdep.c standard
arm64/arm64/freebsd32_machdep.c optional compat_freebsd32
arm64/arm64/gdb_machdep.c optional gdb
arm64/arm64/gicv3_its.c optional intrng fdt
arm64/arm64/gic_v3.c standard
arm64/arm64/gic_v3_acpi.c optional acpi
arm64/arm64/gic_v3_fdt.c optional fdt
arm64/arm64/hyp_stub.S standard
arm64/arm64/identcpu.c standard
arm64/arm64/locore.S standard no-obj
arm64/arm64/machdep.c standard
arm64/arm64/machdep_boot.c standard
arm64/arm64/mem.c standard
arm64/arm64/memcmp.S standard
arm64/arm64/memcpy.S standard
arm64/arm64/memset.S standard
arm64/arm64/minidump_machdep.c standard
arm64/arm64/mp_machdep.c optional smp
arm64/arm64/nexus.c standard
arm64/arm64/ofw_machdep.c optional fdt
arm64/arm64/pl031_rtc.c optional fdt pl031
arm64/arm64/ptrauth.c standard \
compile-with "${NORMAL_C:N-mbranch-protection*}"
arm64/arm64/pmap.c standard
arm64/arm64/ptrace_machdep.c standard
arm64/arm64/sigtramp.S standard
arm64/arm64/stack_machdep.c optional ddb | stack
arm64/arm64/strcmp.S standard
arm64/arm64/strncmp.S standard
arm64/arm64/support_ifunc.c standard
arm64/arm64/support.S standard
arm64/arm64/swtch.S standard
arm64/arm64/sys_machdep.c standard
arm64/arm64/trap.c standard
arm64/arm64/uio_machdep.c standard
arm64/arm64/uma_machdep.c standard
arm64/arm64/undefined.c standard
arm64/arm64/unwind.c optional ddb | kdtrace_hooks | stack \
compile-with "${NORMAL_C:N-fsanitize*:N-fno-sanitize*}"
arm64/arm64/vfp.c standard
arm64/arm64/vm_machdep.c standard
arm64/coresight/coresight.c standard
arm64/coresight/coresight_acpi.c optional acpi
arm64/coresight/coresight_fdt.c optional fdt
arm64/coresight/coresight_if.m standard
arm64/coresight/coresight_cmd.c standard
arm64/coresight/coresight_cpu_debug.c optional fdt
arm64/coresight/coresight_etm4x.c standard
arm64/coresight/coresight_etm4x_acpi.c optional acpi
arm64/coresight/coresight_etm4x_fdt.c optional fdt
arm64/coresight/coresight_funnel.c standard
arm64/coresight/coresight_funnel_acpi.c optional acpi
arm64/coresight/coresight_funnel_fdt.c optional fdt
arm64/coresight/coresight_replicator.c standard
arm64/coresight/coresight_replicator_acpi.c optional acpi
arm64/coresight/coresight_replicator_fdt.c optional fdt
arm64/coresight/coresight_tmc.c standard
arm64/coresight/coresight_tmc_acpi.c optional acpi
arm64/coresight/coresight_tmc_fdt.c optional fdt
dev/smbios/smbios_subr.c standard
arm64/iommu/iommu.c optional iommu
arm64/iommu/iommu_if.m optional iommu
arm64/iommu/iommu_pmap.c optional iommu
arm64/iommu/smmu.c optional iommu
arm64/iommu/smmu_acpi.c optional iommu acpi
arm64/iommu/smmu_fdt.c optional iommu fdt
arm64/iommu/smmu_quirks.c optional iommu
dev/iommu/busdma_iommu.c optional iommu
dev/iommu/iommu_gas.c optional iommu
arm64/vmm/vmm.c optional vmm
arm64/vmm/vmm_dev.c optional vmm
arm64/vmm/vmm_instruction_emul.c optional vmm
arm64/vmm/vmm_stat.c optional vmm
arm64/vmm/vmm_arm64.c optional vmm
arm64/vmm/vmm_reset.c optional vmm
arm64/vmm/vmm_call.S optional vmm
arm64/vmm/vmm_hyp_exception.S optional vmm \
compile-with "${NORMAL_C:N-fsanitize*:N-fno-sanitize*:N-mbranch-protection*} -fpie" \
no-obj
arm64/vmm/vmm_hyp.c optional vmm \
compile-with "${NORMAL_C:N-fsanitize*:N-fno-sanitize*:N-mbranch-protection*} -fpie" \
no-obj
vmm_hyp_blob.elf.full optional vmm \
dependency "vmm_hyp.o vmm_hyp_exception.o" \
compile-with "${SYSTEM_LD_BASECMD} -o ${.TARGET} ${.ALLSRC} --defsym=text_start='0x0'" \
no-obj no-implicit-rule
vmm_hyp_blob.elf optional vmm \
dependency "vmm_hyp_blob.elf.full" \
compile-with "${OBJCOPY} --strip-debug ${.ALLSRC} ${.TARGET}" \
no-obj no-implicit-rule
vmm_hyp_blob.bin optional vmm \
dependency vmm_hyp_blob.elf \
compile-with "${OBJCOPY} --output-target=binary ${.ALLSRC} ${.TARGET}" \
no-obj no-implicit-rule
arm64/vmm/vmm_hyp_el2.S optional vmm \
dependency vmm_hyp_blob.bin
arm64/vmm/vmm_mmu.c optional vmm
arm64/vmm/io/vgic.c optional vmm
arm64/vmm/io/vgic_v3.c optional vmm
arm64/vmm/io/vgic_if.m optional vmm
arm64/vmm/io/vtimer.c optional vmm
crypto/armv8/armv8_crypto.c optional armv8crypto
armv8_crypto_wrap.o optional armv8crypto \
dependency "$S/crypto/armv8/armv8_crypto_wrap.c" \
compile-with "${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc:N-mgeneral-regs-only} -I$S/crypto/armv8 ${WERROR} ${NO_WCAST_QUAL} ${CFLAGS:M-march=*:S/^$/-march=armv8-a/}+crypto ${.IMPSRC}" \
no-implicit-rule \
clean "armv8_crypto_wrap.o"
aesv8-armx.o optional armv8crypto | ossl \
dependency "$S/crypto/openssl/aarch64/aesv8-armx.S" \
compile-with "${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc:N-mgeneral-regs-only} -I$S/crypto/armv8 -I$S/crypto/openssl ${WERROR} ${NO_WCAST_QUAL} ${CFLAGS:M-march=*:S/^$/-march=armv8-a/}+crypto ${.IMPSRC}" \
no-implicit-rule \
clean "aesv8-armx.o"
ghashv8-armx.o optional armv8crypto \
dependency "$S/crypto/openssl/aarch64/ghashv8-armx.S" \
compile-with "${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc:N-mgeneral-regs-only} -I$S/crypto/armv8 -I$S/crypto/openssl ${WERROR} ${NO_WCAST_QUAL} ${CFLAGS:M-march=*:S/^$/-march=armv8-a/}+crypto ${.IMPSRC}" \
no-implicit-rule \
clean "ghashv8-armx.o"
crypto/des/des_enc.c optional netsmb
crypto/openssl/ossl_aarch64.c optional ossl
crypto/openssl/aarch64/chacha-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} -I$S/crypto/openssl ${WERROR} ${.IMPSRC}"
crypto/openssl/aarch64/poly1305-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} -I$S/crypto/openssl ${WERROR} ${.IMPSRC}"
crypto/openssl/aarch64/sha1-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} -I$S/crypto/openssl ${WERROR} ${.IMPSRC}"
crypto/openssl/aarch64/sha256-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} -I$S/crypto/openssl ${WERROR} ${.IMPSRC}"
crypto/openssl/aarch64/sha512-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} -I$S/crypto/openssl ${WERROR} ${.IMPSRC}"
crypto/openssl/aarch64/vpaes-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} -I$S/crypto/openssl ${WERROR} ${.IMPSRC}"
dev/acpica/acpi_bus_if.m optional acpi
dev/acpica/acpi_if.m optional acpi
dev/acpica/acpi_pci_link.c optional acpi pci
dev/acpica/acpi_pcib.c optional acpi pci
dev/acpica/acpi_pxm.c optional acpi
dev/ahci/ahci_generic.c optional ahci
cddl/dev/dtrace/aarch64/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
cddl/dev/dtrace/aarch64/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
cddl/dev/fbt/aarch64/fbt_isa.c optional dtrace_fbt | dtraceall compile-with "${FBT_C}"
# zfs blake3 hash support
contrib/openzfs/module/icp/asm-aarch64/blake3/b3_aarch64_sse2.S optional zfs compile-with "${ZFS_S:N-mgeneral-regs-only}"
contrib/openzfs/module/icp/asm-aarch64/blake3/b3_aarch64_sse41.S optional zfs compile-with "${ZFS_S:N-mgeneral-regs-only}"
# zfs sha2 hash support
zfs-sha256-armv8.o optional zfs \
dependency "$S/contrib/openzfs/module/icp/asm-aarch64/sha2/sha256-armv8.S" \
compile-with "${CC} -c ${ZFS_ASM_CFLAGS:N-mgeneral-regs-only} -o ${.TARGET} ${WERROR} $S/contrib/openzfs/module/icp/asm-aarch64/sha2/sha256-armv8.S" \
no-implicit-rule \
clean "zfs-sha256-armv8.o"
zfs-sha512-armv8.o optional zfs \
dependency "$S/contrib/openzfs/module/icp/asm-aarch64/sha2/sha512-armv8.S" \
compile-with "${CC} -c ${ZFS_ASM_CFLAGS:N-mgeneral-regs-only} -o ${.TARGET} ${WERROR} $S/contrib/openzfs/module/icp/asm-aarch64/sha2/sha512-armv8.S" \
no-implicit-rule \
clean "zfs-sha512-armv8.o"
##
## ASoC support
##
dev/sound/fdt/audio_dai_if.m optional sound fdt
dev/sound/fdt/audio_soc.c optional sound fdt
dev/sound/fdt/dummy_codec.c optional sound fdt
dev/sound/fdt/simple_amplifier.c optional sound fdt
##
## Device drivers
##
dev/axgbe/if_axgbe.c optional axa fdt
dev/axgbe/xgbe-desc.c optional axa fdt
dev/axgbe/xgbe-dev.c optional axa fdt
dev/axgbe/xgbe-drv.c optional axa fdt
dev/axgbe/xgbe-mdio.c optional axa fdt
dev/axgbe/xgbe-sysctl.c optional axa fdt
dev/axgbe/xgbe-txrx.c optional axa fdt
dev/axgbe/xgbe_osdep.c optional axa fdt
dev/axgbe/xgbe-phy-v1.c optional axa fdt
dev/cpufreq/cpufreq_dt.c optional cpufreq fdt
dev/dpaa2/dpaa2_bp.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_buf.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_channel.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_cmd_if.m optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_con.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_console.c optional soc_nxp_ls dpaa2 fdt
dev/dpaa2/dpaa2_io.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_mac.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_mc.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_mc_acpi.c optional soc_nxp_ls dpaa2 acpi
dev/dpaa2/dpaa2_mc_fdt.c optional soc_nxp_ls dpaa2 fdt
dev/dpaa2/dpaa2_mc_if.m optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_mcp.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_ni.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_rc.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_swp.c optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_swp_if.m optional soc_nxp_ls dpaa2
dev/dpaa2/dpaa2_types.c optional soc_nxp_ls dpaa2
dev/dpaa2/memac_mdio_acpi.c optional soc_nxp_ls dpaa2 acpi
dev/dpaa2/memac_mdio_common.c optional soc_nxp_ls dpaa2 acpi | soc_nxp_ls dpaa2 fdt
dev/dpaa2/memac_mdio_fdt.c optional soc_nxp_ls dpaa2 fdt
dev/dpaa2/memac_mdio_if.m optional soc_nxp_ls dpaa2 acpi | soc_nxp_ls dpaa2 fdt
# Synopsys DesignWare Ethernet Controller
dev/dwc/if_dwc_rk.c optional fdt dwc_rk soc_rockchip_rk3328 | fdt dwc_rk soc_rockchip_rk3399
dev/dwc/if_dwc_socfpga.c optional fdt dwc_socfpga
dev/enetc/enetc_mdio.c optional enetc soc_nxp_ls
dev/enetc/if_enetc.c optional enetc iflib pci fdt soc_nxp_ls
dev/eqos/if_eqos.c optional eqos
dev/eqos/if_eqos_if.m optional eqos
dev/eqos/if_eqos_fdt.c optional eqos fdt
dev/etherswitch/felix/felix.c optional enetc etherswitch fdt felix pci soc_nxp_ls
dev/firmware/arm/scmi.c optional fdt scmi
dev/firmware/arm/scmi_clk.c optional fdt scmi
dev/firmware/arm/scmi_shmem.c optional fdt scmi
dev/gpio/pl061.c optional pl061 gpio
dev/gpio/pl061_acpi.c optional pl061 gpio acpi
dev/gpio/pl061_fdt.c optional pl061 gpio fdt
dev/gpio/qoriq_gpio.c optional soc_nxp_ls gpio fdt
dev/hwpmc/hwpmc_arm64.c optional hwpmc
dev/hwpmc/hwpmc_arm64_md.c optional hwpmc
dev/hwpmc/hwpmc_cmn600.c optional hwpmc acpi
arm64/arm64/cmn600.c optional hwpmc acpi
dev/hwpmc/hwpmc_dmc620.c optional hwpmc acpi
dev/hwpmc/pmu_dmc620.c optional hwpmc acpi
# Microsoft Hyper-V
dev/hyperv/vmbus/hyperv.c optional hyperv acpi
dev/hyperv/vmbus/aarch64/hyperv_aarch64.c optional hyperv acpi
dev/hyperv/vmbus/vmbus.c optional hyperv acpi pci
dev/hyperv/vmbus/aarch64/vmbus_aarch64.c optional hyperv acpi
dev/hyperv/vmbus/vmbus_if.m optional hyperv acpi
dev/hyperv/vmbus/vmbus_res.c optional hyperv acpi
dev/hyperv/vmbus/vmbus_xact.c optional hyperv acpi
dev/hyperv/vmbus/aarch64/hyperv_machdep.c optional hyperv acpi
dev/hyperv/vmbus/vmbus_chan.c optional hyperv acpi
dev/hyperv/vmbus/hyperv_busdma.c optional hyperv acpi
dev/hyperv/vmbus/vmbus_br.c optional hyperv acpi
dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c optional hyperv acpi
dev/hyperv/utilities/vmbus_timesync.c optional hyperv acpi
dev/hyperv/utilities/vmbus_heartbeat.c optional hyperv acpi
dev/hyperv/utilities/vmbus_ic.c optional hyperv acpi
dev/hyperv/utilities/vmbus_shutdown.c optional hyperv acpi
dev/hyperv/utilities/hv_kvp.c optional hyperv acpi
dev/hyperv/input/hv_kbd.c optional hyperv acpi
dev/hyperv/input/hv_kbdc.c optional hyperv acpi
dev/hyperv/netvsc/hn_nvs.c optional hyperv acpi
dev/hyperv/netvsc/hn_rndis.c optional hyperv acpi
dev/hyperv/netvsc/if_hn.c optional hyperv acpi
dev/hyperv/pcib/vmbus_pcib.c optional hyperv pci acpi
dev/ice/if_ice_iflib.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_lib.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_osdep.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_resmgr.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_strings.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_iflib_recovery_txrx.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_iflib_txrx.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_common.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_controlq.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_dcb.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_flex_pipe.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_flow.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_nvm.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_sched.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_switch.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_vlan_mode.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_fw_logging.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_fwlog.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/ice_rdma.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
dev/ice/irdma_if.m optional ice pci \
compile-with "${NORMAL_M} -I$S/dev/ice"
dev/ice/irdma_di_if.m optional ice pci \
compile-with "${NORMAL_M} -I$S/dev/ice"
dev/ice/ice_ddp_common.c optional ice pci \
compile-with "${NORMAL_C} -I$S/dev/ice"
ice_ddp.c optional ice_ddp \
compile-with "${AWK} -f $S/tools/fw_stub.awk ice_ddp.fw:ice_ddp:0x01032400 -mice_ddp -c${.TARGET}" \
no-ctfconvert no-implicit-rule before-depend local \
clean "ice_ddp.c"
ice_ddp.fwo optional ice_ddp \
dependency "ice_ddp.fw" \
compile-with "${NORMAL_FWO}" \
no-implicit-rule \
clean "ice_ddp.fwo"
ice_ddp.fw optional ice_ddp \
dependency "$S/contrib/dev/ice/ice-1.3.36.0.pkg" \
compile-with "${CP} $S/contrib/dev/ice/ice-1.3.36.0.pkg ice_ddp.fw" \
no-obj no-implicit-rule \
clean "ice_ddp.fw"
dev/iicbus/controller/twsi/mv_twsi.c optional twsi fdt
dev/iicbus/controller/twsi/a10_twsi.c optional twsi fdt
dev/iicbus/controller/twsi/twsi.c optional twsi fdt
dev/iicbus/controller/rockchip/rk_i2c.c optional rk_i2c fdt
dev/ipmi/ipmi.c optional ipmi
dev/ipmi/ipmi_acpi.c optional ipmi acpi
dev/ipmi/ipmi_bt.c optional ipmi
dev/ipmi/ipmi_kcs.c optional ipmi
dev/ipmi/ipmi_smic.c optional ipmi
dev/mailbox/arm/arm_doorbell.c optional fdt arm_doorbell
dev/mbox/mbox_if.m optional soc_brcm_bcm2837
dev/mmc/host/dwmmc_altera.c optional dwmmc dwmmc_altera fdt
dev/mmc/host/dwmmc_hisi.c optional dwmmc dwmmc_hisi fdt
dev/mmc/host/dwmmc_rockchip.c optional dwmmc rk_dwmmc fdt
dev/neta/if_mvneta_fdt.c optional neta fdt
dev/neta/if_mvneta.c optional neta mdio mii fdt
dev/ofw/ofw_cpu.c optional fdt
dev/ofw/ofw_pci.c optional fdt pci
dev/ofw/ofw_pcib.c optional fdt pci
dev/pci/controller/pci_n1sdp.c optional pci_n1sdp acpi
dev/pci/pci_host_generic.c optional pci
dev/pci/pci_host_generic_acpi.c optional pci acpi
dev/pci/pci_host_generic_den0115.c optional pci acpi
dev/pci/pci_host_generic_fdt.c optional pci fdt
dev/pci/pci_dw_mv.c optional pci fdt
dev/pci/pci_dw.c optional pci fdt
dev/pci/pci_dw_if.m optional pci fdt
dev/psci/psci.c standard
dev/psci/smccc_arm64.S standard
dev/psci/smccc.c standard
dev/pwm/controller/allwinner/aw_pwm.c optional fdt aw_pwm
dev/pwm/controller//rockchip/rk_pwm.c optional fdt rk_pwm
dev/random/armv8rng.c optional armv8_rng !random_loadable
dev/safexcel/safexcel.c optional safexcel fdt
dev/sdhci/sdhci_xenon.c optional sdhci_xenon sdhci
dev/sdhci/sdhci_xenon_acpi.c optional sdhci_xenon sdhci acpi
dev/sdhci/sdhci_xenon_fdt.c optional sdhci_xenon sdhci fdt
dev/sram/mmio_sram.c optional fdt mmio_sram
dev/sram/mmio_sram_if.m optional fdt mmio_sram
dev/spibus/controller/allwinner/aw_spi.c optional fdt aw_spi
dev/spibus/controller/rockchip/rk_spi.c optional fdt rk_spi
dev/uart/uart_cpu_arm64.c optional uart
dev/uart/uart_dev_mu.c optional uart uart_mu fdt
dev/uart/uart_dev_pl011.c optional uart pl011
dev/usb/controller/dwc_otg_hisi.c optional dwcotg fdt soc_hisi_hi6220
dev/usb/controller/ehci_mv.c optional ehci_mv fdt
dev/usb/controller/generic_ehci.c optional ehci
dev/usb/controller/generic_ehci_acpi.c optional ehci acpi
dev/usb/controller/generic_ehci_fdt.c optional ehci fdt
dev/usb/controller/generic_ohci.c optional ohci fdt
dev/usb/controller/generic_usb_if.m optional ohci fdt
dev/usb/controller/musb_otg_allwinner.c optional musb fdt soc_allwinner_a64
dev/usb/controller/usb_nop_xceiv.c optional fdt
dev/usb/controller/generic_xhci.c optional xhci
dev/usb/controller/generic_xhci_acpi.c optional xhci acpi
dev/usb/controller/generic_xhci_fdt.c optional xhci fdt
dev/usb/controller/dwc3/dwc3.c optional xhci acpi dwc3 | xhci fdt dwc3
dev/usb/controller/dwc3/aw_dwc3.c optional xhci fdt dwc3 aw_dwc3
dev/usb/controller/dwc3/rk_dwc3.c optional xhci fdt dwc3 rk_dwc3
dev/vnic/mrml_bridge.c optional vnic fdt
dev/vnic/nic_main.c optional vnic pci
dev/vnic/nicvf_main.c optional vnic pci pci_iov
dev/vnic/nicvf_queues.c optional vnic pci pci_iov
dev/vnic/thunder_bgx_fdt.c optional soc_cavm_thunderx pci vnic fdt
dev/vnic/thunder_bgx.c optional soc_cavm_thunderx pci vnic pci
dev/vnic/thunder_mdio_fdt.c optional soc_cavm_thunderx pci vnic fdt
dev/vnic/thunder_mdio.c optional soc_cavm_thunderx pci vnic
dev/vnic/lmac_if.m optional inet | inet6 | vnic
##
## SoC Support
##
# Allwinner common files
arm/allwinner/a10_timer.c optional a10_timer fdt
arm/allwinner/a10_codec.c optional sound a10_codec fdt
arm/allwinner/a31_dmac.c optional a31_dmac fdt
arm/allwinner/a33_codec.c optional fdt sound a33_codec
arm/allwinner/a64/sun50i_a64_acodec.c optional fdt sound a64_codec
arm/allwinner/sunxi_dma_if.m optional a31_dmac
arm/allwinner/aw_cir.c optional evdev aw_cir fdt
arm/allwinner/aw_gpio.c optional gpio aw_gpio fdt
arm/allwinner/aw_i2s.c optional fdt sound aw_i2s
arm/allwinner/aw_mmc.c optional mmc aw_mmc fdt | mmccam aw_mmc fdt
arm/allwinner/aw_nmi.c optional aw_nmi fdt \
compile-with "${NORMAL_C} -I$S/contrib/device-tree/include"
arm/allwinner/aw_r_intc.c optional aw_r_intc fdt
arm/allwinner/aw_rsb.c optional aw_rsb fdt
arm/allwinner/aw_rtc.c optional aw_rtc fdt
arm/allwinner/aw_sid.c optional aw_sid nvmem fdt
arm/allwinner/aw_syscon.c optional aw_syscon syscon fdt
arm/allwinner/aw_thermal.c optional aw_thermal nvmem fdt
arm/allwinner/aw_usbphy.c optional ehci aw_usbphy fdt
arm/allwinner/aw_usb3phy.c optional xhci aw_usbphy fdt
arm/allwinner/aw_wdog.c optional aw_wdog fdt
arm/allwinner/axp81x.c optional axp81x fdt
arm/allwinner/if_awg.c optional awg syscon aw_sid nvmem fdt
# Allwinner clock driver
dev/clk/allwinner/aw_ccung.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_frac.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_m.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_mipi.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_nkmp.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_nm.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_nmm.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_np.c optional aw_ccu fdt
dev/clk/allwinner/aw_clk_prediv_mux.c optional aw_ccu fdt
dev/clk/allwinner/ccu_a64.c optional soc_allwinner_a64 aw_ccu fdt
dev/clk/allwinner/ccu_h3.c optional soc_allwinner_h5 aw_ccu fdt
dev/clk/allwinner/ccu_h6.c optional soc_allwinner_h6 aw_ccu fdt
dev/clk/allwinner/ccu_h6_r.c optional soc_allwinner_h6 aw_ccu fdt
dev/clk/allwinner/ccu_sun8i_r.c optional aw_ccu fdt
dev/clk/allwinner/ccu_de2.c optional aw_ccu fdt
# Allwinner padconf files
arm/allwinner/a64/a64_padconf.c optional soc_allwinner_a64 fdt
arm/allwinner/a64/a64_r_padconf.c optional soc_allwinner_a64 fdt
arm/allwinner/h3/h3_padconf.c optional soc_allwinner_h5 fdt
arm/allwinner/h3/h3_r_padconf.c optional soc_allwinner_h5 fdt
arm/allwinner/h6/h6_padconf.c optional soc_allwinner_h6 fdt
arm/allwinner/h6/h6_r_padconf.c optional soc_allwinner_h6 fdt
# Altera/Intel
arm64/intel/stratix10-soc-fpga-mgr.c optional soc_intel_stratix10 fdt
arm64/intel/stratix10-svc.c optional soc_intel_stratix10 fdt
# Annapurna
arm/annapurna/alpine/alpine_ccu.c optional al_ccu fdt
arm/annapurna/alpine/alpine_nb_service.c optional al_nb_service fdt
arm/annapurna/alpine/alpine_pci.c optional al_pci fdt
arm/annapurna/alpine/alpine_pci_msix.c optional al_pci fdt
arm/annapurna/alpine/alpine_serdes.c optional al_serdes fdt \
no-depend \
compile-with "${CC} -c -o ${.TARGET} ${CFLAGS} -I$S/contrib/alpine-hal -I$S/contrib/alpine-hal/eth ${.IMPSRC}"
# Broadcom
arm64/broadcom/brcmmdio/mdio_mux_iproc.c optional soc_brcm_ns2 fdt
arm64/broadcom/brcmmdio/mdio_nexus_iproc.c optional soc_brcm_ns2 fdt
arm64/broadcom/brcmmdio/mdio_ns2_pcie_phy.c optional soc_brcm_ns2 fdt pci
arm64/broadcom/genet/if_genet.c optional soc_brcm_bcm2838 fdt genet
arm/broadcom/bcm2835/bcm2835_audio.c optional sound vchiq fdt \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
arm/broadcom/bcm2835/bcm2835_bsc.c optional bcm2835_bsc fdt
arm/broadcom/bcm2835/bcm2835_clkman.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_cpufreq.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_dma.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_fbd.c optional vt soc_brcm_bcm2837 fdt | vt soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_firmware.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_ft5406.c optional evdev bcm2835_ft5406 fdt
arm/broadcom/bcm2835/bcm2835_gpio.c optional gpio soc_brcm_bcm2837 fdt | gpio soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_intr.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_mbox.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_rng.c optional !random_loadable soc_brcm_bcm2837 fdt | !random_loadable soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_sdhci.c optional sdhci soc_brcm_bcm2837 fdt | sdhci soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_sdhost.c optional sdhci soc_brcm_bcm2837 fdt | sdhci soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_spi.c optional bcm2835_spi fdt
arm/broadcom/bcm2835/bcm2835_vcbus.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_vcio.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2835_wdog.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm2836.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt
arm/broadcom/bcm2835/bcm283x_dwc_fdt.c optional dwcotg fdt soc_brcm_bcm2837 | dwcotg fdt soc_brcm_bcm2838
arm/broadcom/bcm2835/bcm2838_pci.c optional soc_brcm_bcm2838 fdt pci
arm/broadcom/bcm2835/bcm2838_xhci.c optional soc_brcm_bcm2838 fdt pci xhci
arm/broadcom/bcm2835/raspberrypi_gpio.c optional soc_brcm_bcm2837 gpio fdt | soc_brcm_bcm2838 gpio fdt
contrib/vchiq/interface/compat/vchi_bsd.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -Wno-unused -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_arm.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -Wno-unused -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_connected.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_core.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_kern_lib.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_shim.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
contrib/vchiq/interface/vchiq_arm/vchiq_util.c optional vchiq soc_brcm_bcm2837 \
compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq"
# Cavium
arm64/cavium/thunder_pcie_fdt.c optional soc_cavm_thunderx pci fdt
arm64/cavium/thunder_pcie_pem.c optional soc_cavm_thunderx pci
arm64/cavium/thunder_pcie_pem_fdt.c optional soc_cavm_thunderx pci fdt
arm64/cavium/thunder_pcie_common.c optional soc_cavm_thunderx pci
# i.MX8 Clock support
arm64/freescale/imx/imx8mq_ccm.c optional fdt soc_freescale_imx8
arm64/freescale/imx/clk/imx_clk_gate.c optional fdt soc_freescale_imx8
arm64/freescale/imx/clk/imx_clk_mux.c optional fdt soc_freescale_imx8
arm64/freescale/imx/clk/imx_clk_composite.c optional fdt soc_freescale_imx8
arm64/freescale/imx/clk/imx_clk_sscg_pll.c optional fdt soc_freescale_imx8
arm64/freescale/imx/clk/imx_clk_frac_pll.c optional fdt soc_freescale_imx8
# iMX drivers
arm/freescale/imx/imx_gpio.c optional gpio soc_freescale_imx8 fdt
arm/freescale/imx/imx_i2c.c optional fsliic
arm/freescale/imx/imx_machdep.c optional fdt soc_freescale_imx8
arm64/freescale/imx/imx7gpc.c optional fdt soc_freescale_imx8
dev/ffec/if_ffec.c optional ffec
# Marvell
arm/mv/a37x0_gpio.c optional a37x0_gpio gpio fdt
arm/mv/a37x0_iic.c optional a37x0_iic iicbus fdt
arm/mv/a37x0_spi.c optional a37x0_spi spibus fdt
arm/mv/clk/a37x0_tbg.c optional a37x0_tbg clk fdt syscon
arm/mv/clk/a37x0_xtal.c optional a37x0_xtal clk fdt syscon
arm/mv/armada38x/armada38x_rtc.c optional mv_rtc fdt
arm/mv/gpio.c optional mv_gpio fdt
arm/mv/mvebu_gpio.c optional mv_gpio fdt
arm/mv/mvebu_pinctrl.c optional mvebu_pinctrl fdt
arm/mv/mv_ap806_clock.c optional soc_marvell_8k fdt
arm/mv/mv_ap806_gicp.c optional mv_ap806_gicp fdt
arm/mv/mv_ap806_sei.c optional mv_ap806_sei fdt
arm/mv/mv_cp110_clock.c optional soc_marvell_8k fdt
arm/mv/mv_cp110_icu.c optional mv_cp110_icu fdt
arm/mv/mv_cp110_icu_bus.c optional mv_cp110_icu fdt
arm/mv/mv_thermal.c optional soc_marvell_8k mv_thermal fdt
arm/mv/clk/a37x0_tbg_pll.c optional a37x0_tbg clk fdt syscon
arm/mv/clk/a37x0_periph_clk_driver.c optional a37x0_nb_periph a37x0_sb_periph clk fdt syscon
arm/mv/clk/a37x0_nb_periph_clk_driver.c optional a37x0_nb_periph clk fdt syscon
arm/mv/clk/a37x0_sb_periph_clk_driver.c optional a37x0_sb_periph clk fdt syscon
arm/mv/clk/periph.c optional a37x0_nb_periph a37x0_sb_periph clk fdt syscon
arm/mv/clk/periph_clk_d.c optional a37x0_nb_periph a37x0_sb_periph clk fdt syscon
arm/mv/clk/periph_clk_fixed.c optional a37x0_nb_periph a37x0_sb_periph clk fdt syscon
arm/mv/clk/periph_clk_gate.c optional a37x0_nb_periph a37x0_sb_periph clk fdt syscon
arm/mv/clk/periph_clk_mux_gate.c optional a37x0_nb_periph a37x0_sb_periph clk fdt syscon
# NVidia
arm/nvidia/tegra_abpmisc.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_ahci.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_efuse.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_ehci.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_gpio.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_i2c.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_lic.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_mc.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_pcie.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_sdhci.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_soctherm_if.m optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_soctherm.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_uart.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_usbphy.c optional fdt soc_nvidia_tegra210
arm/nvidia/tegra_xhci.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/max77620.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/max77620_gpio.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/max77620_regulators.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/max77620_rtc.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_car.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_clk_per.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_clk_pll.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_clk_super.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_coretemp.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_cpufreq.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_pinmux.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_pmc.c optional fdt soc_nvidia_tegra210
arm64/nvidia/tegra210/tegra210_xusbpadctl.c optional fdt soc_nvidia_tegra210
# Nvidia firmware for Tegra
tegra210_xusb_fw.c optional tegra210_xusb_fw \
dependency "$S/conf/files.arm64" \
compile-with "${AWK} -f $S/tools/fw_stub.awk tegra210_xusb.fw:tegra210_xusb_fw -mtegra210_xusb_fw -c${.TARGET}" \
no-ctfconvert no-implicit-rule before-depend local \
clean "tegra210_xusb_fw.c"
tegra210_xusb.fwo optional tegra210_xusb_fw \
dependency "tegra210_xusb.fw" \
compile-with "${NORMAL_FWO}" \
no-implicit-rule \
clean "tegra210_xusb.fwo"
tegra210_xusb.fw optional tegra210_xusb_fw \
dependency "$S/contrib/dev/nvidia/tegra210_xusb.bin.uu" \
compile-with "${NORMAL_FW}" \
no-obj no-implicit-rule \
clean "tegra210_xusb.fw"
# NXP
-arm/freescale/vybrid/vf_i2c.c optional vf_i2c iicbus soc_nxp_ls
+dev/iicbus/controller/vybrid/vf_i2c.c optional vf_i2c iicbus soc_nxp_ls
+dev/iicbus/controller/vybrid/vf_i2c_acpi.c optional vf_i2c iicbus acpi soc_nxp_ls
+dev/iicbus/controller/vybrid/vf_i2c_fdt.c optional vf_i2c iicbus fdt soc_nxp_ls
arm64/qoriq/qoriq_dw_pci.c optional pci fdt soc_nxp_ls
arm64/qoriq/qoriq_gpio_pic.c optional gpio fdt soc_nxp_ls
arm64/qoriq/qoriq_therm.c optional pci fdt soc_nxp_ls
arm64/qoriq/qoriq_therm_if.m optional pci fdt soc_nxp_ls
arm64/qoriq/clk/ls1028a_clkgen.c optional clk soc_nxp_ls fdt
arm64/qoriq/clk/ls1028a_flexspi_clk.c optional clk soc_nxp_ls fdt
arm64/qoriq/clk/ls1046a_clkgen.c optional clk soc_nxp_ls fdt
arm64/qoriq/clk/ls1088a_clkgen.c optional clk soc_nxp_ls fdt
arm64/qoriq/clk/lx2160a_clkgen.c optional clk soc_nxp_ls fdt
arm64/qoriq/clk/qoriq_clk_pll.c optional clk soc_nxp_ls
arm64/qoriq/clk/qoriq_clkgen.c optional clk soc_nxp_ls fdt
dev/ahci/ahci_fsl_fdt.c optional soc_nxp_ls ahci fdt
dev/flash/flexspi/flex_spi.c optional clk flex_spi soc_nxp_ls fdt
# Qualcomm
arm64/qualcomm/qcom_gcc.c optional qcom_gcc fdt
dev/qcom_mdio/qcom_mdio_ipq4018.c optional qcom_mdio fdt mdio mii
# RockChip Drivers
arm64/rockchip/rk3328_codec.c optional fdt rk3328codec soc_rockchip_rk3328
arm64/rockchip/rk3399_emmcphy.c optional fdt rk_emmcphy soc_rockchip_rk3399
arm64/rockchip/rk3568_combphy.c optional fdt rk_combphy soc_rockchip_rk3568
arm64/rockchip/rk3568_pcie.c optional fdt pci soc_rockchip_rk3568
arm64/rockchip/rk3568_pciephy.c optional fdt pci soc_rockchip_rk3568
arm64/rockchip/rk_i2s.c optional fdt sound soc_rockchip_rk3328 | fdt sound soc_rockchip_rk3399
arm64/rockchip/rk_otp.c optional fdt soc_rockchip_rk3568
arm64/rockchip/rk_otp_if.m optional fdt soc_rockchip_rk3568
dev/iicbus/pmic/rockchip/rk8xx.c optional fdt rk805 soc_rockchip_rk3328 | fdt rk805 soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/iicbus/pmic/rockchip/rk8xx_clocks.c optional fdt rk805 soc_rockchip_rk3328 | fdt rk805 soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/iicbus/pmic/rockchip/rk8xx_regulators.c optional fdt rk805 soc_rockchip_rk3328 | fdt rk805 soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/iicbus/pmic/rockchip/rk8xx_rtc.c optional fdt rk805 soc_rockchip_rk3328 | fdt rk805 soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/iicbus/pmic/rockchip/rk805.c optional fdt rk805 soc_rockchip_rk3328
dev/iicbus/pmic/rockchip/rk808.c optional fdt rk805 soc_rockchip_rk3399
dev/iicbus/pmic/rockchip/rk817.c optional fdt rk817 soc_rockchip_rk3568
arm64/rockchip/rk_grf.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
arm64/rockchip/rk_pinctrl.c optional fdt rk_pinctrl soc_rockchip_rk3328 | fdt rk_pinctrl soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
arm64/rockchip/rk_gpio.c optional fdt rk_gpio soc_rockchip_rk3328 | fdt rk_gpio soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
arm64/rockchip/rk_iodomain.c optional fdt rk_iodomain
arm64/rockchip/rk_usb2phy.c optional fdt rk_usb2phy soc_rockchip_rk3328 | fdt rk_usb2phy soc_rockchip_rk3399 | fdt rk_usb2phy soc_rockchip_rk3568
arm64/rockchip/rk_typec_phy.c optional fdt rk_typec_phy soc_rockchip_rk3399
arm64/rockchip/rk_tsadc_if.m optional fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
arm64/rockchip/rk_tsadc.c optional fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
arm64/rockchip/rk_pcie.c optional fdt pci soc_rockchip_rk3399
arm64/rockchip/rk_pcie_phy.c optional fdt pci soc_rockchip_rk3399
# RockChip Clock support
dev/clk/rockchip/rk_cru.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk_clk_armclk.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk_clk_composite.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk_clk_fract.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk_clk_gate.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk_clk_mux.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk_clk_pll.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399 | fdt soc_rockchip_rk3568
dev/clk/rockchip/rk3328_cru.c optional fdt soc_rockchip_rk3328
dev/clk/rockchip/rk3399_cru.c optional fdt soc_rockchip_rk3399
dev/clk/rockchip/rk3399_pmucru.c optional fdt soc_rockchip_rk3399
dev/clk/rockchip/rk3568_cru.c optional fdt soc_rockchip_rk3568
dev/clk/rockchip/rk3568_pmucru.c optional fdt soc_rockchip_rk3568
# Xilinx
arm/xilinx/uart_dev_cdnc.c optional uart soc_xilinx_zynq fdt
arm/xilinx/zy7_gpio.c optional gpio soc_xilinx_zynq fdt
dev/iicbus/controller/cadence/cdnc_i2c.c optional cdnc_i2c iicbus soc_xilinx_zynq fdt
dev/usb/controller/xlnx_dwc3.c optional xhci soc_xilinx_zynq fdt
dev/firmware/xilinx/zynqmp_firmware.c optional fdt soc_xilinx_zynq
dev/firmware/xilinx/zynqmp_firmware_if.m optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_clock.c optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_clk_div.c optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_clk_fixed.c optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_clk_gate.c optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_clk_mux.c optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_clk_pll.c optional fdt soc_xilinx_zynq
dev/clk/xilinx/zynqmp_reset.c optional fdt soc_xilinx_zynq
diff --git a/sys/arm/freescale/vybrid/vf_i2c.c b/sys/dev/iicbus/controller/vybrid/vf_i2c.c
similarity index 75%
rename from sys/arm/freescale/vybrid/vf_i2c.c
rename to sys/dev/iicbus/controller/vybrid/vf_i2c.c
index cc0b32bb4759..7a6ec3948e13 100644
--- a/sys/arm/freescale/vybrid/vf_i2c.c
+++ b/sys/dev/iicbus/controller/vybrid/vf_i2c.c
@@ -1,610 +1,613 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2014 Ruslan Bukin
- * All rights reserved.
+ * Copyright (c) 2024 Pierre-Luc Drouin
*
* 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
*/
/*
* Vybrid Family Inter-Integrated Circuit (I2C)
* Chapter 48, Vybrid Reference Manual, Rev. 5, 07/2013
+ *
+ * The current implementation is based on the original driver by Ruslan Bukin,
+ * later modified by Dawid Górecki, and split into FDT and ACPI drivers by Val
+ * Packett.
*/
-/*
- * This driver is based on the I2C driver for i.MX
- */
-
+#include
+#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "iicbus_if.h"
-#include
-#include
-#include
-
-#include
-
#include
#include
#include
-#include
+#include
#define I2C_IBAD 0x0 /* I2C Bus Address Register */
#define I2C_IBFD 0x1 /* I2C Bus Frequency Divider Register */
#define I2C_IBCR 0x2 /* I2C Bus Control Register */
#define IBCR_MDIS (1 << 7) /* Module disable. */
#define IBCR_IBIE (1 << 6) /* I-Bus Interrupt Enable. */
#define IBCR_MSSL (1 << 5) /* Master/Slave mode select. */
#define IBCR_TXRX (1 << 4) /* Transmit/Receive mode select. */
#define IBCR_NOACK (1 << 3) /* Data Acknowledge disable. */
#define IBCR_RSTA (1 << 2) /* Repeat Start. */
#define IBCR_DMAEN (1 << 1) /* DMA Enable. */
#define I2C_IBSR 0x3 /* I2C Bus Status Register */
#define IBSR_TCF (1 << 7) /* Transfer complete. */
#define IBSR_IAAS (1 << 6) /* Addressed as a slave. */
#define IBSR_IBB (1 << 5) /* Bus busy. */
#define IBSR_IBAL (1 << 4) /* Arbitration Lost. */
#define IBSR_SRW (1 << 2) /* Slave Read/Write. */
#define IBSR_IBIF (1 << 1) /* I-Bus Interrupt Flag. */
#define IBSR_RXAK (1 << 0) /* Received Acknowledge. */
#define I2C_IBDR 0x4 /* I2C Bus Data I/O Register */
#define I2C_IBIC 0x5 /* I2C Bus Interrupt Config Register */
#define IBIC_BIIE (1 << 7) /* Bus Idle Interrupt Enable bit. */
#define I2C_IBDBG 0x6 /* I2C Bus Debug Register */
+#define DIV_REG_UNSET 0xFF
+
+#define READ1(_sc, _reg) bus_space_read_1(_sc->bst, _sc->bsh, _reg)
+#define WRITE1(_sc, _reg, _val) bus_space_write_1(_sc->bst,\
+ _sc->bsh, _reg, _val)
+
#ifdef DEBUG
#define vf_i2c_dbg(_sc, fmt, args...) \
device_printf((_sc)->dev, fmt, ##args)
+#ifdef DEBUG2
+#undef WRITE1
+#define WRITE1(_sc, _reg, _val) ({\
+ vf_i2c_dbg(_sc, "WRITE1 REG 0x%02X VAL 0x%02X\n",_reg,_val);\
+ bus_space_write_1(_sc->bst, _sc->bsh, _reg, _val);\
+ })
+#undef READ1
+#define READ1(_sc, _reg) ({\
+ uint32_t ret=bus_space_read_1(_sc->bst, _sc->bsh, _reg);\
+ vf_i2c_dbg(_sc, "READ1 REG 0x%02X RETURNS 0x%02X\n",_reg,ret);\
+ ret;\
+ })
+#endif
#else
#define vf_i2c_dbg(_sc, fmt, args...)
#endif
-#define HW_UNKNOWN 0x00
-#define HW_MVF600 0x01
-#define HW_VF610 0x02
-
static int i2c_repeated_start(device_t, u_char, int);
static int i2c_start(device_t, u_char, int);
static int i2c_stop(device_t);
static int i2c_reset(device_t, u_char, u_char, u_char *);
static int i2c_read(device_t, char *, int, int *, int, int);
static int i2c_write(device_t, const char *, int, int *, int);
-static phandle_t i2c_get_node(device_t, device_t);
struct i2c_div_type {
uint32_t reg_val;
uint32_t div;
};
-struct i2c_softc {
- struct resource *res[2];
- bus_space_tag_t bst;
- bus_space_handle_t bsh;
- clk_t clock;
- uint32_t freq;
- device_t dev;
- device_t iicbus;
- struct mtx mutex;
- uintptr_t hwtype;
-};
-
static struct resource_spec i2c_spec[] = {
{ SYS_RES_MEMORY, 0, RF_ACTIVE },
{ SYS_RES_IRQ, 0, RF_ACTIVE },
{ -1, 0 }
};
static struct i2c_div_type vf610_div_table[] = {
{ 0x00, 20 }, { 0x01, 22 }, { 0x02, 24 }, { 0x03, 26 },
{ 0x04, 28 }, { 0x05, 30 }, { 0x09, 32 }, { 0x06, 34 },
{ 0x0A, 36 }, { 0x0B, 40 }, { 0x0C, 44 }, { 0x0D, 48 },
{ 0x0E, 56 }, { 0x12, 64 }, { 0x13, 72 }, { 0x14, 80 },
{ 0x15, 88 }, { 0x19, 96 }, { 0x16, 104 }, { 0x1A, 112 },
{ 0x17, 128 }, { 0x1D, 160 }, { 0x1E, 192 }, { 0x22, 224 },
{ 0x1F, 240 }, { 0x23, 256 }, { 0x24, 288 }, { 0x25, 320 },
{ 0x26, 384 }, { 0x2A, 448 }, { 0x27, 480 }, { 0x2B, 512 },
{ 0x2C, 576 }, { 0x2D, 640 }, { 0x2E, 768 }, { 0x32, 896 },
{ 0x2F, 960 }, { 0x33, 1024 }, { 0x34, 1152 }, { 0x35, 1280 },
{ 0x36, 1536 }, { 0x3A, 1792 }, { 0x37, 1920 }, { 0x3B, 2048 },
{ 0x3C, 2304 }, { 0x3D, 2560 }, { 0x3E, 3072 }, { 0x3F, 3840 },
{ 0x3F, 3840 }, { 0x7B, 4096 }, { 0x7D, 5120 }, { 0x7E, 6144 },
};
-static const struct ofw_compat_data i2c_compat_data[] = {
- {"fsl,mvf600-i2c", HW_MVF600},
- {"fsl,vf610-i2c", HW_VF610},
- {NULL, HW_UNKNOWN}
-};
-
-static int
-i2c_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (!ofw_bus_search_compatible(dev, i2c_compat_data)->ocd_data)
- return (ENXIO);
-
- device_set_desc(dev, "Vybrid Family Inter-Integrated Circuit (I2C)");
- return (BUS_PROBE_DEFAULT);
-}
-
-static int
-i2c_attach(device_t dev)
+int
+vf_i2c_attach_common(device_t dev)
{
- struct i2c_softc *sc;
- phandle_t node;
+ struct vf_i2c_softc *sc;
int error;
sc = device_get_softc(dev);
- sc->dev = dev;
- sc->hwtype = ofw_bus_search_compatible(dev, i2c_compat_data)->ocd_data;
- node = ofw_bus_get_node(dev);
- error = clk_get_by_ofw_index(dev, node, 0, &sc->clock);
- if (error != 0) {
- sc->freq = 0;
- device_printf(dev, "Parent clock not found.\n");
- } else {
- if (OF_hasprop(node, "clock-frequency"))
- OF_getencprop(node, "clock-frequency", &sc->freq,
- sizeof(sc->freq));
- else
- sc->freq = 100000;
- }
+ vf_i2c_dbg(sc, "i2c attach common\n");
mtx_init(&sc->mutex, device_get_nameunit(dev), "I2C", MTX_DEF);
error = bus_alloc_resources(dev, i2c_spec, sc->res);
if (error != 0) {
mtx_destroy(&sc->mutex);
device_printf(dev, "could not allocate resources\n");
return (ENXIO);
}
/* Memory interface */
sc->bst = rman_get_bustag(sc->res[0]);
sc->bsh = rman_get_bushandle(sc->res[0]);
+ mtx_lock(&sc->mutex);
+
WRITE1(sc, I2C_IBIC, IBIC_BIIE);
+ if (sc->freq == 0) {
+ uint8_t div_reg;
+
+ div_reg = READ1(sc, I2C_IBFD);
+
+ if (div_reg != 0x00) {
+ sc->freq = UINT32_MAX;
+ device_printf(dev, "Using existing bus frequency divider register value (0x%02X).\n", div_reg);
+ } else {
+ device_printf(dev, "Bus frequency divider value appears unset, defaulting to low I2C bus speed.\n");
+ }
+ }
+
+ mtx_unlock(&sc->mutex);
+
sc->iicbus = device_add_child(dev, "iicbus", -1);
if (sc->iicbus == NULL) {
device_printf(dev, "could not add iicbus child");
mtx_destroy(&sc->mutex);
bus_release_resources(dev, i2c_spec, sc->res);
return (ENXIO);
}
bus_generic_attach(dev);
return (0);
}
static int
i2c_detach(device_t dev)
{
- struct i2c_softc *sc;
+ struct vf_i2c_softc *sc;
int error = 0;
sc = device_get_softc(dev);
+ vf_i2c_dbg(sc, "i2c detach\n");
+
+ mtx_lock(&sc->mutex);
+
+ if (sc->freq == 0) {
+ vf_i2c_dbg(sc, "Writing 0x00 to clock divider register\n");
+ WRITE1(sc, I2C_IBFD, 0x00);
+ }
error = bus_generic_detach(dev);
if (error != 0) {
device_printf(dev, "cannot detach child devices.\n");
return (error);
}
error = device_delete_child(dev, sc->iicbus);
if (error != 0) {
device_printf(dev, "could not delete iicbus child.\n");
return (error);
}
bus_release_resources(dev, i2c_spec, sc->res);
+ mtx_unlock(&sc->mutex);
+
mtx_destroy(&sc->mutex);
return (0);
}
/* Wait for transfer interrupt flag */
static int
-wait_for_iif(struct i2c_softc *sc)
+wait_for_iif(struct vf_i2c_softc *sc)
{
int retry;
retry = 1000;
while (retry --) {
if (READ1(sc, I2C_IBSR) & IBSR_IBIF) {
WRITE1(sc, I2C_IBSR, IBSR_IBIF);
return (IIC_NOERR);
}
DELAY(10);
}
return (IIC_ETIMEOUT);
}
/* Wait for free bus */
static int
-wait_for_nibb(struct i2c_softc *sc)
+wait_for_nibb(struct vf_i2c_softc *sc)
{
int retry;
retry = 1000;
while (retry --) {
if ((READ1(sc, I2C_IBSR) & IBSR_IBB) == 0)
return (IIC_NOERR);
DELAY(10);
}
return (IIC_ETIMEOUT);
}
/* Wait for transfer complete+interrupt flag */
static int
-wait_for_icf(struct i2c_softc *sc)
+wait_for_icf(struct vf_i2c_softc *sc)
{
int retry;
retry = 1000;
while (retry --) {
if (READ1(sc, I2C_IBSR) & IBSR_TCF) {
if (READ1(sc, I2C_IBSR) & IBSR_IBIF) {
WRITE1(sc, I2C_IBSR, IBSR_IBIF);
return (IIC_NOERR);
}
}
DELAY(10);
}
return (IIC_ETIMEOUT);
}
/* Get ACK bit from last write */
static bool
-tx_acked(struct i2c_softc *sc)
+tx_acked(struct vf_i2c_softc *sc)
{
+ vf_i2c_dbg(sc, "i2c get ACK bit from last write\n");
return (READ1(sc, I2C_IBSR) & IBSR_RXAK) ? false : true;
}
static int
i2c_repeated_start(device_t dev, u_char slave, int timeout)
{
- struct i2c_softc *sc;
+ struct vf_i2c_softc *sc;
int error;
int reg;
sc = device_get_softc(dev);
vf_i2c_dbg(sc, "i2c repeated start\n");
mtx_lock(&sc->mutex);
WRITE1(sc, I2C_IBAD, slave);
if ((READ1(sc, I2C_IBSR) & IBSR_IBB) == 0) {
mtx_unlock(&sc->mutex);
return (IIC_EBUSERR);
}
/* Set repeated start condition */
DELAY(10);
reg = READ1(sc, I2C_IBCR);
reg |= (IBCR_RSTA | IBCR_IBIE);
WRITE1(sc, I2C_IBCR, reg);
DELAY(10);
/* Write target address - LSB is R/W bit */
WRITE1(sc, I2C_IBDR, slave);
error = wait_for_iif(sc);
if (!tx_acked(sc)) {
vf_i2c_dbg(sc,
"cant i2c start: missing ACK after slave addres\n");
return (IIC_ENOACK);
}
mtx_unlock(&sc->mutex);
if (error != 0)
return (error);
return (IIC_NOERR);
}
static int
i2c_start(device_t dev, u_char slave, int timeout)
{
- struct i2c_softc *sc;
+ struct vf_i2c_softc *sc;
int error;
int reg;
sc = device_get_softc(dev);
vf_i2c_dbg(sc, "i2c start\n");
mtx_lock(&sc->mutex);
WRITE1(sc, I2C_IBAD, slave);
if (READ1(sc, I2C_IBSR) & IBSR_IBB) {
mtx_unlock(&sc->mutex);
vf_i2c_dbg(sc, "cant i2c start: IIC_EBUSBSY\n");
return (IIC_EBUSERR);
}
/* Set start condition */
reg = (IBCR_MSSL | IBCR_NOACK | IBCR_IBIE);
WRITE1(sc, I2C_IBCR, reg);
DELAY(100);
reg |= (IBCR_TXRX);
WRITE1(sc, I2C_IBCR, reg);
/* Write target address - LSB is R/W bit */
WRITE1(sc, I2C_IBDR, slave);
error = wait_for_iif(sc);
if (error != 0) {
mtx_unlock(&sc->mutex);
vf_i2c_dbg(sc, "cant i2c start: iif error\n");
return (error);
}
mtx_unlock(&sc->mutex);
if (!tx_acked(sc)) {
vf_i2c_dbg(sc,
"cant i2c start: missing QACK after slave addres\n");
return (IIC_ENOACK);
}
return (IIC_NOERR);
}
static int
i2c_stop(device_t dev)
{
- struct i2c_softc *sc;
+ struct vf_i2c_softc *sc;
sc = device_get_softc(dev);
vf_i2c_dbg(sc, "i2c stop\n");
mtx_lock(&sc->mutex);
WRITE1(sc, I2C_IBCR, IBCR_NOACK | IBCR_IBIE);
DELAY(100);
/* Reset controller if bus still busy after STOP */
if (wait_for_nibb(sc) == IIC_ETIMEOUT) {
WRITE1(sc, I2C_IBCR, IBCR_MDIS);
DELAY(1000);
WRITE1(sc, I2C_IBCR, IBCR_NOACK);
}
mtx_unlock(&sc->mutex);
return (IIC_NOERR);
}
-static uint32_t
+static uint8_t
i2c_get_div_val(device_t dev)
{
- struct i2c_softc *sc;
- uint64_t clk_freq;
- int error, i;
+ struct vf_i2c_softc *sc;
+ uint8_t div_reg = DIV_REG_UNSET;
sc = device_get_softc(dev);
+ if (sc->freq == UINT32_MAX)
+ return div_reg;
+#ifndef FDT
+ div_reg = vf610_div_table[nitems(vf610_div_table) - 1].reg_val;
+#else
if (sc->hwtype == HW_MVF600)
- return 20;
-
- if (sc->freq == 0)
- return vf610_div_table[nitems(vf610_div_table) - 1].reg_val;
-
- error = clk_get_freq(sc->clock, &clk_freq);
- if (error != 0) {
- device_printf(dev, "Could not get parent clock frequency. "
- "Using default divider.\n");
- return vf610_div_table[nitems(vf610_div_table) - 1].reg_val;
+ div_reg = MVF600_DIV_REG;
+ else if (sc->freq == 0)
+ div_reg = vf610_div_table[nitems(vf610_div_table) - 1].reg_val;
+ else {
+ uint64_t clk_freq;
+ int error, i;
+
+ error = clk_get_freq(sc->clock, &clk_freq);
+ if (error != 0) {
+ device_printf(dev, "Could not get parent clock frequency. "
+ "Using default divider.\n");
+ div_reg = vf610_div_table[nitems(vf610_div_table) - 1].reg_val;
+ } else {
+
+ for (i = 0; i < nitems(vf610_div_table) - 1; i++)
+ if ((clk_freq / vf610_div_table[i].div) <= sc->freq)
+ break;
+ div_reg = vf610_div_table[i].reg_val;
+ }
}
-
- for (i = 0; i < nitems(vf610_div_table) - 1; i++)
- if ((clk_freq / vf610_div_table[i].div) <= sc->freq)
- break;
-
- return vf610_div_table[i].reg_val;
+#endif
+ vf_i2c_dbg(sc, "Writing 0x%02X to clock divider register\n", div_reg);
+ return div_reg;
}
static int
i2c_reset(device_t dev, u_char speed, u_char addr, u_char *oldadr)
{
- struct i2c_softc *sc;
- uint32_t div;
+ struct vf_i2c_softc *sc;
+ uint8_t div_reg;
sc = device_get_softc(dev);
- div = i2c_get_div_val(dev);
- vf_i2c_dbg(sc, "Div val: %02x\n", div);
-
+ div_reg = i2c_get_div_val(dev);
vf_i2c_dbg(sc, "i2c reset\n");
switch (speed) {
case IIC_FAST:
case IIC_SLOW:
case IIC_UNKNOWN:
case IIC_FASTEST:
default:
break;
}
mtx_lock(&sc->mutex);
WRITE1(sc, I2C_IBCR, IBCR_MDIS);
DELAY(1000);
- WRITE1(sc, I2C_IBFD, div);
+ if(div_reg != DIV_REG_UNSET)
+ WRITE1(sc, I2C_IBFD, div_reg);
+
WRITE1(sc, I2C_IBCR, 0x0); /* Enable i2c */
DELAY(1000);
mtx_unlock(&sc->mutex);
return (IIC_NOERR);
}
static int
i2c_read(device_t dev, char *buf, int len, int *read, int last, int delay)
{
- struct i2c_softc *sc;
+ struct vf_i2c_softc *sc;
int error;
sc = device_get_softc(dev);
vf_i2c_dbg(sc, "i2c read\n");
*read = 0;
mtx_lock(&sc->mutex);
if (len) {
if (len == 1)
WRITE1(sc, I2C_IBCR, IBCR_IBIE | IBCR_MSSL | \
IBCR_NOACK);
else
WRITE1(sc, I2C_IBCR, IBCR_IBIE | IBCR_MSSL);
/* dummy read */
READ1(sc, I2C_IBDR);
DELAY(1000);
}
while (*read < len) {
error = wait_for_icf(sc);
if (error != 0) {
mtx_unlock(&sc->mutex);
return (error);
}
if ((*read == len - 2) && last) {
/* NO ACK on last byte */
WRITE1(sc, I2C_IBCR, IBCR_IBIE | IBCR_MSSL | \
IBCR_NOACK);
}
if ((*read == len - 1) && last) {
/* Transfer done, remove master bit */
WRITE1(sc, I2C_IBCR, IBCR_IBIE | IBCR_NOACK);
}
*buf++ = READ1(sc, I2C_IBDR);
(*read)++;
}
mtx_unlock(&sc->mutex);
return (IIC_NOERR);
}
static int
i2c_write(device_t dev, const char *buf, int len, int *sent, int timeout)
{
- struct i2c_softc *sc;
+ struct vf_i2c_softc *sc;
int error;
sc = device_get_softc(dev);
vf_i2c_dbg(sc, "i2c write\n");
*sent = 0;
mtx_lock(&sc->mutex);
while (*sent < len) {
WRITE1(sc, I2C_IBDR, *buf++);
error = wait_for_iif(sc);
if (error != 0) {
mtx_unlock(&sc->mutex);
return (error);
}
if (!tx_acked(sc) && (*sent = (len - 2)) ){
mtx_unlock(&sc->mutex);
vf_i2c_dbg(sc, "no ACK on %d write\n", *sent);
return (IIC_ENOACK);
}
(*sent)++;
}
mtx_unlock(&sc->mutex);
return (IIC_NOERR);
}
-static phandle_t
-i2c_get_node(device_t bus, device_t dev)
-{
-
- return ofw_bus_get_node(bus);
-}
-
static device_method_t i2c_methods[] = {
- DEVMETHOD(device_probe, i2c_probe),
- DEVMETHOD(device_attach, i2c_attach),
+ /* Device interface */
DEVMETHOD(device_detach, i2c_detach),
- DEVMETHOD(ofw_bus_get_node, i2c_get_node),
+ /* Device interface */
+ DEVMETHOD(bus_setup_intr, bus_generic_setup_intr),
+ DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr),
+ DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource),
+ DEVMETHOD(bus_release_resource, bus_generic_release_resource),
+ DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
+ DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+ DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
+ /* iicbus interface */
DEVMETHOD(iicbus_callback, iicbus_null_callback),
DEVMETHOD(iicbus_repeated_start, i2c_repeated_start),
DEVMETHOD(iicbus_start, i2c_start),
DEVMETHOD(iicbus_stop, i2c_stop),
DEVMETHOD(iicbus_reset, i2c_reset),
DEVMETHOD(iicbus_read, i2c_read),
DEVMETHOD(iicbus_write, i2c_write),
DEVMETHOD(iicbus_transfer, iicbus_transfer_gen),
- { 0, 0 }
+ DEVMETHOD_END
};
-static DEFINE_CLASS_0(i2c, i2c_driver, i2c_methods, sizeof(struct i2c_softc));
-DRIVER_MODULE(vybrid_i2c, simplebus, i2c_driver, 0, 0);
-DRIVER_MODULE(iicbus, i2c, iicbus_driver, 0, 0);
-DRIVER_MODULE(ofw_iicbus, i2c, ofw_iicbus_driver, 0, 0);
+driver_t vf_i2c_driver = {
+ "i2c",
+ i2c_methods,
+ sizeof(struct vf_i2c_softc),
+};
diff --git a/sys/dev/iicbus/controller/vybrid/vf_i2c.h b/sys/dev/iicbus/controller/vybrid/vf_i2c.h
new file mode 100644
index 000000000000..3498911dfd9c
--- /dev/null
+++ b/sys/dev/iicbus/controller/vybrid/vf_i2c.h
@@ -0,0 +1,75 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2014 Ruslan Bukin
+ * Copyright (c) 2024 Pierre-Luc Drouin
+ *
+ * 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ */
+
+/*
+ * Vybrid Family Inter-Integrated Circuit (I2C)
+ * Chapter 48, Vybrid Reference Manual, Rev. 5, 07/2013
+ *
+ * The current implementation is based on the original driver by Ruslan Bukin,
+ * later modified by Dawid Górecki, and split into FDT and ACPI drivers by Val
+ * Packett.
+ */
+
+#ifndef __VF_I2C_H__
+#define __VF_I2C_H__
+
+#include "opt_acpi.h"
+#include "opt_platform.h"
+
+#ifdef FDT
+#include
+#endif
+
+#define VF_I2C_DEVSTR "Vybrid Family Inter-Integrated Circuit (I2C)"
+
+#define HW_MVF600 0x01
+#define HW_VF610 0x02
+
+#define MVF600_DIV_REG 0x14
+
+#define VF_I2C_DEFAULT_BUS_SPEED 100000
+
+struct vf_i2c_softc {
+ struct resource *res[2];
+ bus_space_tag_t bst;
+ bus_space_handle_t bsh;
+ uint32_t freq;
+ device_t dev;
+ device_t iicbus;
+ struct mtx mutex;
+ uintptr_t hwtype;
+#ifdef FDT
+ clk_t clock;
+#endif
+};
+
+extern driver_t vf_i2c_driver;
+
+device_attach_t vf_i2c_attach_common;
+
+#endif /* !__VF_I2C_H__ */
diff --git a/sys/dev/iicbus/controller/vybrid/vf_i2c_acpi.c b/sys/dev/iicbus/controller/vybrid/vf_i2c_acpi.c
new file mode 100644
index 000000000000..03f5c99a45c6
--- /dev/null
+++ b/sys/dev/iicbus/controller/vybrid/vf_i2c_acpi.c
@@ -0,0 +1,101 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Pierre-Luc Drouin
+ *
+ * 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ */
+
+/*
+ * Vybrid Family Inter-Integrated Circuit (I2C)
+ * Chapter 48, Vybrid Reference Manual, Rev. 5, 07/2013
+ *
+ * The current implementation is based on the original driver by Ruslan Bukin,
+ * later modified by Dawid Górecki, and split into FDT and ACPI drivers by Val
+ * Packett.
+ */
+
+#include "opt_acpi.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+
+static char *vf_i2c_ids[] = {
+ "NXP0001",
+ NULL
+};
+
+static int
+vf_i2c_acpi_probe(device_t dev)
+{
+ int rv;
+
+ if (acpi_disabled("vf_i2c"))
+ return (ENXIO);
+
+ rv = ACPI_ID_PROBE(device_get_parent(dev), dev, vf_i2c_ids, NULL);
+ if (rv > 0)
+ return (rv);
+
+ device_set_desc(dev, VF_I2C_DEVSTR);
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+vf_i2c_acpi_attach(device_t dev)
+{
+ struct vf_i2c_softc *sc;
+
+ sc = device_get_softc(dev);
+ sc->dev = dev;
+ sc->hwtype = HW_VF610;
+ sc->freq = 0;
+
+ return (vf_i2c_attach_common(dev));
+}
+
+static device_method_t vf_i2c_acpi_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, vf_i2c_acpi_probe),
+ DEVMETHOD(device_attach, vf_i2c_acpi_attach),
+ DEVMETHOD_END
+};
+
+DEFINE_CLASS_1(vf_i2c_acpi, vf_i2c_acpi_driver, vf_i2c_acpi_methods,
+ sizeof(struct vf_i2c_softc), vf_i2c_driver);
+
+DRIVER_MODULE(vf_i2c_acpi, acpi, vf_i2c_acpi_driver, 0, 0);
+DRIVER_MODULE(iicbus, vf_i2c_acpi, iicbus_driver, 0, 0);
+DRIVER_MODULE(acpi_iicbus, vf_i2c_acpi, acpi_iicbus_driver, 0, 0);
diff --git a/sys/dev/iicbus/controller/vybrid/vf_i2c_fdt.c b/sys/dev/iicbus/controller/vybrid/vf_i2c_fdt.c
new file mode 100644
index 000000000000..935f389ab516
--- /dev/null
+++ b/sys/dev/iicbus/controller/vybrid/vf_i2c_fdt.c
@@ -0,0 +1,122 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2014 Ruslan Bukin
+ * Copyright (c) 2024 Pierre-Luc Drouin
+ *
+ * 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ */
+
+/*
+ * Vybrid Family Inter-Integrated Circuit (I2C)
+ * Chapter 48, Vybrid Reference Manual, Rev. 5, 07/2013
+ *
+ * The current implementation is based on the original driver by Ruslan Bukin,
+ * later modified by Dawid Górecki, and split into FDT and ACPI drivers by Val
+ * Packett.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+
+#include
+
+static const struct ofw_compat_data vf_i2c_compat_data[] = {
+ {"fsl,mvf600-i2c", HW_MVF600},
+ {"fsl,vf610-i2c", HW_VF610},
+ {NULL, 0}
+};
+
+static int
+vf_i2c_fdt_probe(device_t dev)
+{
+
+ if (!ofw_bus_status_okay(dev))
+ return (ENXIO);
+
+ if (ofw_bus_search_compatible(dev, vf_i2c_compat_data)->ocd_data == 0)
+ return (ENXIO);
+
+ device_set_desc(dev, VF_I2C_DEVSTR);
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+vf_i2c_fdt_attach(device_t dev)
+{
+ struct vf_i2c_softc *sc;
+ phandle_t node;
+ int error;
+
+ sc = device_get_softc(dev);
+ sc->dev = dev;
+ sc->hwtype = ofw_bus_search_compatible(dev, vf_i2c_compat_data)->ocd_data;
+ node = ofw_bus_get_node(dev);
+
+ error = clk_get_by_ofw_index(dev, node, 0, &sc->clock);
+ if (error != 0) {
+ sc->freq = 0;
+ device_printf(dev, "Parent clock not found.\n");
+ } else {
+ if (OF_hasprop(node, "clock-frequency"))
+ OF_getencprop(node, "clock-frequency", &sc->freq,
+ sizeof(sc->freq));
+ else
+ sc->freq = VF_I2C_DEFAULT_BUS_SPEED;
+ }
+ return (vf_i2c_attach_common(dev));
+}
+
+static phandle_t
+vf_i2c_get_node(device_t bus, device_t dev)
+{
+ return (ofw_bus_get_node(bus));
+}
+
+static device_method_t vf_i2c_fdt_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, vf_i2c_fdt_probe),
+ DEVMETHOD(device_attach, vf_i2c_fdt_attach),
+
+ /* ofw_bus interface */
+ DEVMETHOD(ofw_bus_get_node, vf_i2c_get_node),
+ DEVMETHOD_END
+};
+
+DEFINE_CLASS_1(vf_i2c_fdt, vf_i2c_fdt_driver, vf_i2c_fdt_methods,
+ sizeof(struct vf_i2c_softc), vf_i2c_driver);
+
+DRIVER_MODULE(vf_i2c_fdt, simplebus, vf_i2c_fdt_driver, 0, 0);
+DRIVER_MODULE(iicbus, vf_i2c_fdt, iicbus_driver, 0, 0);
+DRIVER_MODULE(ofw_iicbus, vf_i2c_fdt, ofw_iicbus_driver, 0, 0);
+
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index dcd9e25b1cb3..748b0b18a14d 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -1,927 +1,929 @@
SYSDIR?=${SRCTOP}/sys
.include "${SYSDIR}/conf/kern.opts.mk"
SUBDIR_PARALLEL=
# Modules that include binary-only blobs of microcode should be selectable by
# MK_SOURCELESS_UCODE option (see below).
.include "${SYSDIR}/conf/config.mk"
.if defined(MODULES_OVERRIDE) && !defined(ALL_MODULES)
SUBDIR=${MODULES_OVERRIDE}
.else
SUBDIR= \
${_3dfx} \
${_3dfx_linux} \
${_aac} \
${_aacraid} \
accf_data \
accf_dns \
accf_http \
acl_nfs4 \
acl_posix1e \
${_acpi} \
ae \
${_aesni} \
age \
${_agp} \
ahci \
aic7xxx \
alc \
ale \
alq \
${_amd_ecc_inject} \
${_amdgpio} \
${_amdsbwd} \
${_amdsmn} \
${_amdtemp} \
${_aout} \
${_arcmsr} \
${_allwinner} \
${_armv8crypto} \
${_armv8_rng} \
${_asmc} \
ata \
ath \
ath_dfs \
ath_hal \
ath_hal_ar5210 \
ath_hal_ar5211 \
ath_hal_ar5212 \
ath_hal_ar5416 \
ath_hal_ar9300 \
ath_main \
ath_rate \
${_autofs} \
axgbe \
backlight \
${_bce} \
${_bcm283x_clkman} \
${_bcm283x_pwm} \
bfe \
bge \
bhnd \
${_bxe} \
${_bios} \
${_blake2} \
${_bnxt} \
bridgestp \
bwi \
bwn \
${_bytgpio} \
${_chvgpio} \
cam \
${_cardbus} \
${_carp} \
cas \
${_cbb} \
cc \
${_ccp} \
cd9660 \
cd9660_iconv \
${_cfi} \
${_chromebook_platform} \
${_ciss} \
${_coretemp} \
${_cpsw} \
${_cpuctl} \
${_cpufreq} \
${_crypto} \
${_cryptodev} \
ctl \
${_cxgb} \
${_cxgbe} \
dc \
dcons \
dcons_crom \
${_dpaa2} \
${_dpdk_lpm4} \
${_dpdk_lpm6} \
${_dpms} \
dummynet \
${_dwwdt} \
${_e6000sw} \
${_efirt} \
${_em} \
${_ena} \
${_enic} \
${_enetc} \
${_et} \
evdev \
${_exca} \
ext2fs \
fdc \
fdescfs \
${_felix} \
${_ffec} \
${_fib_dxr} \
filemon \
firewire \
firmware \
flash \
${_ftgpio} \
${_ftwd} \
fusefs \
${_fxp} \
gem \
geom \
${_glxiic} \
${_glxsb} \
gpio \
${_gve} \
hid \
hifn \
${_hpt27xx} \
${_hptiop} \
${_hptmv} \
${_hptnr} \
${_hptrr} \
hwpmc \
${_hyperv} \
i2c \
${_iavf} \
${_ibcore} \
${_ichwd} \
${_ice} \
${_ice_ddp} \
${_irdma} \
${_ida} \
if_bridge \
${_if_cgem} \
if_disc \
if_edsc \
${_if_enc} \
if_epair \
${_if_gif} \
${_if_gre} \
${_if_me} \
if_infiniband \
if_lagg \
if_ovpn \
${_if_stf} \
if_tuntap \
if_vlan \
if_vxlan \
${_if_wg} \
iflib \
${_igc} \
imgact_binmisc \
${_intelspi} \
${_io} \
${_ioat} \
${_ipoib} \
ipdivert \
${_ipfilter} \
${_ipfw} \
ipfw_nat \
${_ipfw_nat64} \
${_ipfw_nptv6} \
${_ipfw_pmod} \
${_ipmi} \
ip6_mroute_mod \
ip_mroute_mod \
${_ips} \
${_ipsec} \
${_ipw} \
${_ipwfw} \
${_isci} \
${_iser} \
isp \
${_ispfw} \
${_itwd} \
${_iwi} \
${_iwifw} \
${_iwlwifi} \
${_iwlwififw} \
${_iwm} \
${_iwmfw} \
${_iwn} \
${_iwnfw} \
${_ix} \
${_ixv} \
${_ixl} \
jme \
kbdmux \
kgssapi \
kgssapi_krb5 \
khelp \
krpc \
ksyms \
le \
lge \
libalias \
libiconv \
libmchain \
lindebugfs \
linuxkpi \
linuxkpi_hdmi \
linuxkpi_wlan \
${_lio} \
lpt \
${_mac_biba} \
${_mac_bsdextended} \
${_mac_ddb} \
${_mac_ifoff} \
${_mac_ipacl} \
${_mac_lomac} \
${_mac_mls} \
${_mac_none} \
${_mac_ntpd} \
${_mac_partition} \
${_mac_pimd} \
${_mac_portacl} \
${_mac_priority} \
${_mac_seeotheruids} \
${_mac_stub} \
${_mac_test} \
${_mac_veriexec} \
${_mac_veriexec_sha1} \
${_mac_veriexec_sha256} \
${_mac_veriexec_sha384} \
${_mac_veriexec_sha512} \
${_malo} \
${_mana} \
md \
mdio \
${_mgb} \
mem \
mfi \
mii \
mlx \
mlxfw \
${_mlx4} \
${_mlx4ib} \
${_mlx4en} \
${_mlx5} \
${_mlx5en} \
${_mlx5ib} \
mmc \
mmcsd \
${_mpi3mr} \
${_mpr} \
${_mps} \
mpt \
mqueue \
mrsas \
msdosfs \
msdosfs_iconv \
msk \
${_mthca} \
mvs \
mwl \
${_mwlfw} \
mxge \
my \
${_nctgpio} \
${_ncthwm} \
${_neta} \
netlink \
${_netgraph} \
${_nfe} \
nfscl \
nfscommon \
nfsd \
nfslockd \
nfssvc \
nlsysevent \
nge \
nmdm \
nullfs \
${_ntb} \
${_nvd} \
${_nvdimm} \
${_nvme} \
${_nvram} \
oce \
${_ocs_fc} \
${_ossl} \
otus \
${_otusfw} \
ow \
${_padlock} \
${_padlock_rng} \
${_pchtherm} \
${_pcfclock} \
${_pf} \
${_pflog} \
${_pflow} \
${_pfsync} \
plip \
${_pms} \
ppbus \
ppc \
ppi \
pps \
procfs \
proto \
pseudofs \
${_pst} \
pty \
puc \
pwm \
${_qat} \
${_qatfw} \
${_qat_c2xxx} \
${_qat_c2xxxfw} \
${_qlxge} \
${_qlxgb} \
${_qlxgbe} \
${_qlnx} \
ral \
${_ralfw} \
${_random_fortuna} \
${_random_other} \
rc4 \
${_rdma} \
${_rdrand_rng} \
re \
rl \
${_rockchip} \
rtsx \
${_rtw88} \
rtwn \
rtwn_pci \
rtwn_usb \
${_rtwnfw} \
${_s3} \
${_safe} \
safexcel \
${_sbni} \
scc \
${_sctp} \
sdhci \
${_sdhci_acpi} \
${_sdhci_fdt} \
sdhci_pci \
sdio \
${_sff} \
sem \
send \
${_sfxge} \
sge \
${_sgx} \
${_sgx_linux} \
siftr \
siis \
sis \
sk \
${_smartpqi} \
smbfs \
snp \
sound \
${_speaker} \
spi \
${_splash} \
ste \
stge \
${_sume} \
${_superio} \
${_p2sb} \
sym \
${_syscons} \
sysvipc \
tarfs \
tcp \
${_ti} \
tmpfs \
${_toecore} \
${_tpm} \
tws \
uart \
udf \
udf_iconv \
ufs \
uinput \
unionfs \
usb \
${_vesa} \
+ ${_vf_i2c} \
virtio \
vge \
${_viawd} \
videomode \
vkbd \
${_vmd} \
${_vmm} \
${_vmware} \
vr \
vte \
${_wbwd} \
${_wdatwd} \
wlan \
wlan_acl \
wlan_amrr \
wlan_ccmp \
wlan_rssadapt \
wlan_tkip \
wlan_wep \
wlan_xauth \
${_wpi} \
${_wpifw} \
${_x86bios} \
xdr \
xl \
xz \
zlib
.if ${MK_AUTOFS} != "no" || defined(ALL_MODULES)
_autofs= autofs
.endif
.if ${MK_DTRACE} != "no" || defined(ALL_MODULES)
.if ${KERN_OPTS:MKDTRACE_HOOKS}
SUBDIR+= dtrace
.endif
SUBDIR+= opensolaris
.endif
# Requires bus_space_read_8
.if ${MACHINE_ARCH} != "i386"
_bnxt= bnxt
.endif
.if ${MK_CRYPT} != "no" || defined(ALL_MODULES)
.if exists(${SRCTOP}/sys/opencrypto)
_crypto= crypto
_cryptodev= cryptodev
_random_fortuna=random_fortuna
_random_other= random_other
.endif
.endif
.if ${MK_CUSE} != "no" || defined(ALL_MODULES)
SUBDIR+= cuse
.endif
.if ${MK_EFI} != "no"
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64"
_efirt= efirt
.endif
.endif
.if (${MK_INET_SUPPORT} != "no" || ${MK_INET6_SUPPORT} != "no") || \
defined(ALL_MODULES)
_carp= carp
_toecore= toecore
_if_enc= if_enc
_if_gif= if_gif
_if_gre= if_gre
.if ${MK_CRYPT} != "no" || defined(ALL_MODULES)
_if_wg= if_wg
.endif
_ipfw_pmod= ipfw_pmod
.if ${KERN_OPTS:MIPSEC_SUPPORT} && !${KERN_OPTS:MIPSEC}
_ipsec= ipsec
.endif
.if ${KERN_OPTS:MSCTP_SUPPORT} || ${KERN_OPTS:MSCTP}
_sctp= sctp
.endif
.endif
.if (${MK_INET_SUPPORT} != "no" && ${MK_INET6_SUPPORT} != "no") || \
defined(ALL_MODULES)
_if_stf= if_stf
.endif
.if ${MK_INET_SUPPORT} != "no" || defined(ALL_MODULES)
_if_me= if_me
_ipfw= ipfw
.if ${MK_INET6_SUPPORT} != "no" || defined(ALL_MODULES)
_ipfw_nat64= ipfw_nat64
.endif
.endif
.if ${MK_INET6_SUPPORT} != "no" || defined(ALL_MODULES)
_ipfw_nptv6= ipfw_nptv6
.endif
.if ${MK_IPFILTER} != "no" || defined(ALL_MODULES)
_ipfilter= ipfilter
.endif
.if ${MK_INET_SUPPORT} != "no" && ${KERN_OPTS:MFIB_ALGO}
_dpdk_lpm4= dpdk_lpm4
_fib_dxr= fib_dxr
.endif
.if ${MK_INET6_SUPPORT} != "no" && ${KERN_OPTS:MFIB_ALGO}
_dpdk_lpm6= dpdk_lpm6
.endif
.if ${MK_ISCSI} != "no" || defined(ALL_MODULES)
SUBDIR+= cfiscsi
SUBDIR+= iscsi
.endif
.if !empty(OPT_FDT)
SUBDIR+= fdt
.endif
# Linuxulator
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "i386"
SUBDIR+= linprocfs
SUBDIR+= linsysfs
.endif
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
SUBDIR+= linux
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64"
SUBDIR+= linux64
SUBDIR+= linux_common
.endif
.if ${MACHINE_CPUARCH} != "arm"
.if ${MK_OFED} != "no" || defined(ALL_MODULES)
_ibcore= ibcore
_ipoib= ipoib
_iser= iser
_mthca= mthca
_rdma= rdma
.endif
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "i386" || ${MACHINE_ARCH:Mpowerpc64*} != ""
_ipmi= ipmi
_mlx4= mlx4
_mlx5= mlx5
.if (${MK_INET_SUPPORT} != "no" && ${MK_INET6_SUPPORT} != "no") || \
defined(ALL_MODULES)
_mlx4en= mlx4en
_mlx5en= mlx5en
.endif
.if ${MK_OFED} != "no" || defined(ALL_MODULES)
_mlx4ib= mlx4ib
_mlx5ib= mlx5ib
.endif
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "i386"
_ena= ena
_gve= gve
_iwlwifi= iwlwifi
.if ${MK_SOURCELESS_UCODE} != "no"
_iwlwififw= iwlwififw
.endif
_rtw88= rtw88
_vmware= vmware
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "i386" || ${MACHINE_ARCH} == "armv7"
_ossl= ossl
.endif
# MAC framework
.if ${KERN_OPTS:MMAC} || defined(ALL_MODULES)
_mac_biba= mac_biba
_mac_bsdextended= mac_bsdextended
.if ${KERN_OPTS:MDDB} || defined(ALL_MODULES)
_mac_ddb= mac_ddb
.endif
_mac_ifoff= mac_ifoff
_mac_ipacl= mac_ipacl
_mac_lomac= mac_lomac
_mac_mls= mac_mls
_mac_none= mac_none
_mac_ntpd= mac_ntpd
_mac_partition= mac_partition
_mac_pimd= mac_pimd
_mac_portacl= mac_portacl
_mac_priority= mac_priority
_mac_seeotheruids= mac_seeotheruids
_mac_stub= mac_stub
_mac_test= mac_test
.if ${MK_VERIEXEC} != "no" || defined(ALL_MODULES)
_mac_veriexec= mac_veriexec
_mac_veriexec_sha1= mac_veriexec_sha1
_mac_veriexec_sha256= mac_veriexec_sha256
_mac_veriexec_sha384= mac_veriexec_sha384
_mac_veriexec_sha512= mac_veriexec_sha512
.endif
.endif
.if ${MK_NETGRAPH} != "no" || defined(ALL_MODULES)
_netgraph= netgraph
.endif
.if (${MK_PF} != "no" && (${MK_INET_SUPPORT} != "no" || \
${MK_INET6_SUPPORT} != "no")) || defined(ALL_MODULES)
_pf= pf
_pflog= pflog
_pflow= pflow
.if ${MK_INET_SUPPORT} != "no"
_pfsync= pfsync
.endif
.endif
.if ${MK_SOURCELESS_UCODE} != "no"
_bce= bce
_fxp= fxp
_ispfw= ispfw
_ti= ti
_mwlfw= mwlfw
_otusfw= otusfw
_ralfw= ralfw
_rtwnfw= rtwnfw
.endif
.if ${MK_SOURCELESS_UCODE} != "no" && ${MACHINE_CPUARCH} != "arm" && \
${MACHINE_ARCH} != "powerpc" && ${MACHINE_ARCH} != "powerpcspe" && \
${MACHINE_CPUARCH} != "riscv"
_cxgbe= cxgbe
.endif
# This has only been tested on amd64 and arm64
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "aarch64"
_mpi3mr=mpi3mr
.endif
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "aarch64" || \
${MACHINE_ARCH:Mpowerpc64*}
_ice= ice
.if ${MK_SOURCELESS_UCODE} != "no"
_ice_ddp= ice_ddp
.endif
.if ${MK_OFED} != "no" || defined(ALL_MODULES)
.if ${MK_INET_SUPPORT} != "no" && ${MK_INET6_SUPPORT} != "no"
_irdma= irdma
.endif
.endif
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" || \
${MACHINE_CPUARCH} == "riscv"
.if !empty(OPT_FDT)
_if_cgem= if_cgem
.endif
.endif
# These rely on 64bit atomics
.if ${MACHINE_ARCH} != "powerpc" && ${MACHINE_ARCH} != "powerpcspe"
_mps= mps
_mpr= mpr
.endif
.if ${MK_TESTS} != "no" || defined(ALL_MODULES)
SUBDIR+= ktest
SUBDIR+= tests
.endif
.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
SUBDIR+= zfs
.endif
.if ${MK_SOURCELESS_UCODE} != "no"
_cxgb= cxgb
.endif
.if ${MACHINE_CPUARCH} == "aarch64"
_armv8crypto= armv8crypto
_armv8_rng= armv8_rng
_dpaa2= dpaa2
_sff= sff
_em= em
_hyperv= hyperv
+_vf_i2c= vf_i2c
.if !empty(OPT_FDT)
_allwinner= allwinner
_dwwdt= dwwdt
_enetc= enetc
_felix= felix
_rockchip= rockchip
.endif
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm"
.if !empty(OPT_FDT)
_sdhci_fdt= sdhci_fdt
.endif
_e6000sw= e6000sw
_neta= neta
.endif
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
_agp= agp
.if ${MACHINE_CPUARCH} == "i386" || !empty(COMPAT_FREEBSD32_ENABLED)
_aout= aout
.endif
_bios= bios
.if ${MK_SOURCELESS_UCODE} != "no"
_bxe= bxe
.endif
_cardbus= cardbus
_cbb= cbb
_cpuctl= cpuctl
_cpufreq= cpufreq
_dpms= dpms
_em= em
_et= et
_ftgpio= ftgpio
_ftwd= ftwd
_exca= exca
_igc= igc
_io= io
_itwd= itwd
_ix= ix
_ixv= ixv
.if ${MK_SOURCELESS_UCODE} != "no"
_lio= lio
.endif
_mana= mana
_mgb= mgb
_nctgpio= nctgpio
_ncthwm= ncthwm
_ntb= ntb
_ocs_fc= ocs_fc
_p2sb= p2sb
_qat_c2xxx= qat_c2xxx
_qat_c2xxxfw= qat_c2xxxfw
_safe= safe
_speaker= speaker
_splash= splash
_syscons= syscons
_wbwd= wbwd
_wdatwd= wdatwd
_aac= aac
_aacraid= aacraid
_acpi= acpi
.if ${MK_CRYPT} != "no" || defined(ALL_MODULES)
_aesni= aesni
.endif
_amd_ecc_inject=amd_ecc_inject
_amdsbwd= amdsbwd
_amdsmn= amdsmn
_amdtemp= amdtemp
_arcmsr= arcmsr
_asmc= asmc
.if ${MK_CRYPT} != "no" || defined(ALL_MODULES)
_blake2= blake2
.endif
_bytgpio= bytgpio
_chvgpio= chvgpio
_ciss= ciss
_chromebook_platform= chromebook_platform
_coretemp= coretemp
.if ${MK_SOURCELESS_HOST} != "no" && empty(KCSAN_ENABLED)
_hpt27xx= hpt27xx
.endif
_hptiop= hptiop
.if ${MK_SOURCELESS_HOST} != "no" && empty(KCSAN_ENABLED)
_hptmv= hptmv
_hptnr= hptnr
_hptrr= hptrr
.endif
_hyperv= hyperv
_ichwd= ichwd
_ida= ida
_intelspi= intelspi
_ips= ips
_isci= isci
_ipw= ipw
_iwi= iwi
_iwm= iwm
_iwn= iwn
.if ${MK_SOURCELESS_UCODE} != "no"
_ipwfw= ipwfw
_iwifw= iwifw
_iwmfw= iwmfw
_iwnfw= iwnfw
.endif
_nfe= nfe
_nvd= nvd
_nvme= nvme
_nvram= nvram
.if ${MK_CRYPT} != "no" || defined(ALL_MODULES)
_padlock= padlock
_padlock_rng= padlock_rng
_rdrand_rng= rdrand_rng
.endif
_pchtherm = pchtherm
_s3= s3
_sdhci_acpi= sdhci_acpi
_superio= superio
_tpm= tpm
_vesa= vesa
_viawd= viawd
_vmd= vmd
_wpi= wpi
.if ${MK_SOURCELESS_UCODE} != "no"
_wpifw= wpifw
.endif
_x86bios= x86bios
.endif
.if ${MACHINE_CPUARCH} == "amd64"
_amdgpio= amdgpio
_ccp= ccp
_enic= enic
_iavf= iavf
_ioat= ioat
_ixl= ixl
_nvdimm= nvdimm
_pms= pms
_qat= qat
.if ${MK_SOURCELESS_UCODE} != "no"
_qatfw= qatfw
.endif
_qlxge= qlxge
_qlxgb= qlxgb
_sume= sume
.if ${MK_SOURCELESS_UCODE} != "no"
_qlxgbe= qlxgbe
_qlnx= qlnx
.endif
_sfxge= sfxge
_sgx= sgx
_sgx_linux= sgx_linux
_smartpqi= smartpqi
_p2sb= p2sb
.endif
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64"
.if ${MK_BHYVE} != "no" || defined(ALL_MODULES)
.if ${KERN_OPTS:MSMP}
_vmm= vmm
.endif
.endif
.endif
.if ${MACHINE_CPUARCH} == "i386"
# XXX some of these can move to the general case when de-i386'ed
# XXX some of these can move now, but are untested on other architectures.
_3dfx= 3dfx
_3dfx_linux= 3dfx_linux
_glxiic= glxiic
_glxsb= glxsb
_pcfclock= pcfclock
_pst= pst
_sbni= sbni
.endif
.if ${MACHINE_ARCH} == "armv7"
_cfi= cfi
_cpsw= cpsw
.endif
.if ${MACHINE_CPUARCH} == "powerpc"
_aacraid= aacraid
_agp= agp
_an= an
_cardbus= cardbus
_cbb= cbb
_cfi= cfi
_cpufreq= cpufreq
_exca= exca
_ffec= ffec
_nvd= nvd
_nvme= nvme
.endif
.if ${MACHINE_ARCH:Mpowerpc64*} != ""
_ixl= ixl
_nvram= opal_nvram
.endif
.if ${MACHINE_CPUARCH} == "powerpc" && ${MACHINE_ARCH} != "powerpcspe"
# Don't build powermac_nvram for powerpcspe, it's never supported.
_nvram+= powermac_nvram
.endif
.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "aarch64"
_bcm283x_clkman= bcm283x_clkman
_bcm283x_pwm= bcm283x_pwm
.endif
.if !(${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} < 110000)
# LLVM 10 crashes when building if_malo_pci.c, fixed in LLVM11:
# https://bugs.llvm.org/show_bug.cgi?id=44351
_malo= malo
.endif
SUBDIR+=${MODULES_EXTRA}
.for reject in ${WITHOUT_MODULES}
SUBDIR:= ${SUBDIR:N${reject}}
.endfor
.endif # MODULES_OVERRIDE -- Keep last
# Calling kldxref(8) for each module is expensive.
.if !defined(NO_XREF)
.MAKEFLAGS+= -DNO_XREF
afterinstall: .PHONY
${KLDXREF_CMD} ${DESTDIR}${KMODDIR}
.if defined(NO_ROOT) && defined(METALOG)
echo ".${DISTBASE}${KMODDIR}/linker.hints type=file mode=0644 uname=root gname=wheel" | \
cat -l >> ${METALOG}
.endif
.endif
SUBDIR:= ${SUBDIR:u:O}
.include
diff --git a/sys/modules/vf_i2c/Makefile b/sys/modules/vf_i2c/Makefile
new file mode 100644
index 000000000000..53c9f9948ac8
--- /dev/null
+++ b/sys/modules/vf_i2c/Makefile
@@ -0,0 +1,14 @@
+.PATH: ${SRCTOP}/sys/dev/iicbus/controller/vybrid
+
+KMOD= vf_i2c
+SRCS= vf_i2c.c vf_i2c.h
+SRCS+= device_if.h bus_if.h iicbus_if.h
+SRCS+= opt_acpi.h opt_platform.h
+
+SRCS.DEV_ACPI= vf_i2c_acpi.c acpi_if.h
+
+.if !empty(OPT_FDT)
+SRCS+= vf_i2c_fdt.c ofw_bus_if.h clknode_if.h
+.endif
+
+.include