diff --git a/sys/arm/arm/pmu.c b/sys/arm/arm/pmu.c
index b16ffcafcfac..544962e9ab28 100644
--- a/sys/arm/arm/pmu.c
+++ b/sys/arm/arm/pmu.c
@@ -1,364 +1,161 @@
/*-
* Copyright (c) 2015 Ruslan Bukin
* All rights reserved.
*
* This software was developed by SRI International and the University of
* Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
* ("CTSRD"), as part of the DARPA CRASH research programme.
*
* 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.
*/
/*
* Performance Monitoring Unit
*/
#include
__FBSDID("$FreeBSD$");
#include "opt_hwpmc_hooks.h"
-#include "opt_platform.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
-#ifdef FDT
-#include
-#include
-#include
-#endif
-
#include
#include
#include
-#define MAX_RLEN 8
-
-struct pmu_intr {
- struct resource *res;
- void *ih;
- int cpuid;
-};
-
-struct pmu_softc {
- device_t dev;
- struct pmu_intr irq[MAX_RLEN];
-};
+#include "pmu.h"
/* CCNT */
-#if __ARM_ARCH > 6
+#if defined(__arm__) && (__ARM_ARCH > 6)
int pmu_attched = 0;
uint32_t ccnt_hi[MAXCPU];
#endif
#define PMU_OVSR_C 0x80000000 /* Cycle Counter */
#define PMU_IESR_C 0x80000000 /* Cycle Counter */
static int
pmu_intr(void *arg)
{
#ifdef HWPMC_HOOKS
struct trapframe *tf;
#endif
uint32_t r;
#if defined(__arm__) && (__ARM_ARCH > 6)
u_int cpu;
cpu = PCPU_GET(cpuid);
r = cp15_pmovsr_get();
if (r & PMU_OVSR_C) {
atomic_add_32(&ccnt_hi[cpu], 1);
/* Clear the event. */
r &= ~PMU_OVSR_C;
cp15_pmovsr_set(PMU_OVSR_C);
}
#else
r = 1;
#endif
#ifdef HWPMC_HOOKS
/* Only call into the HWPMC framework if we know there is work. */
if (r != 0 && pmc_intr) {
tf = arg;
(*pmc_intr)(tf);
}
#endif
return (FILTER_HANDLED);
}
-static int
-pmu_parse_affinity(struct pmu_softc *sc, struct pmu_intr *irq, phandle_t xref,
- uint32_t mpidr)
-{
- struct pcpu *pcpu;
- int i, err;
-
-
- if (xref != 0) {
- err = OF_getencprop(OF_node_from_xref(xref), "reg", &mpidr,
- sizeof(mpidr));
- if (err < 0) {
- device_printf(sc->dev, "missing 'reg' property\n");
- return (ENXIO);
- }
- }
-
- for (i = 0; i < MAXCPU; i++) {
- pcpu = pcpu_find(i);
- if (pcpu != NULL && pcpu->pc_mpidr == mpidr) {
- irq->cpuid = i;
- return (0);
- }
- }
-
- device_printf(sc->dev, "Cannot find CPU with MPIDR: 0x%08X\n", mpidr);
- return (ENXIO);
-}
-
-static int
-pmu_parse_intr(struct pmu_softc *sc)
-{
- bool has_affinity;
- phandle_t node, *cpus;
- int rid, err, ncpus, i;
-
-
- node = ofw_bus_get_node(sc->dev);
- has_affinity = OF_hasprop(node, "interrupt-affinity");
-
- for (i = 0; i < MAX_RLEN; i++)
- sc->irq[i].cpuid = -1;
-
- cpus = NULL;
- if (has_affinity) {
- ncpus = OF_getencprop_alloc_multi(node, "interrupt-affinity",
- sizeof(*cpus), (void **)&cpus);
- if (ncpus < 0) {
- device_printf(sc->dev,
- "Cannot read interrupt affinity property\n");
- return (ENXIO);
- }
- }
-
- /* Process first interrupt */
- rid = 0;
- sc->irq[0].res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &rid,
- RF_ACTIVE | RF_SHAREABLE);
-
- if (sc->irq[0].res == NULL) {
- device_printf(sc->dev, "Cannot get interrupt\n");
- err = ENXIO;
- goto done;
- }
-
- /* Check if PMU have one per-CPU interrupt */
- if (intr_is_per_cpu(sc->irq[0].res)) {
- if (has_affinity) {
- device_printf(sc->dev,
- "Per CPU interupt have declared affinity\n");
- err = ENXIO;
- goto done;
- }
- return (0);
- }
-
- /*
- * PMU with set of generic interrupts (one per core)
- * Each one must be binded to exact core.
- */
- err = pmu_parse_affinity(sc, sc->irq + 0, has_affinity ? cpus[0]: 0,
- 0);
- if (err != 0) {
- device_printf(sc->dev, "Cannot parse affinity for CPUid: 0\n");
- goto done;
- }
-
- for (i = 1; i < MAX_RLEN; i++) {
- rid = i;
- sc->irq[i].res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ,
- &rid, RF_ACTIVE | RF_SHAREABLE);
- if (sc->irq[i].res == NULL)
- break;
-
- if (intr_is_per_cpu(sc->irq[i].res))
- {
- device_printf(sc->dev, "Unexpected per CPU interupt\n");
- err = ENXIO;
- goto done;
- }
-
- if (has_affinity && i >= ncpus) {
- device_printf(sc->dev, "Missing value in interrupt "
- "affinity property\n");
- err = ENXIO;
- goto done;
- }
-
- err = pmu_parse_affinity(sc, sc->irq + i,
- has_affinity ? cpus[i]: 0, i);
- if (err != 0) {
- device_printf(sc->dev,
- "Cannot parse affinity for CPUid: %d.\n", i);
- goto done;
- }
- }
- err = 0;
-done:
- OF_prop_free(cpus);
- return (err);
-}
-
-static int
+int
pmu_attach(device_t dev)
{
struct pmu_softc *sc;
#if defined(__arm__) && (__ARM_ARCH > 6)
uint32_t iesr;
#endif
int err, i;
sc = device_get_softc(dev);
sc->dev = dev;
- err = pmu_parse_intr(sc);
- if (err != 0)
- return (err);
-
for (i = 0; i < MAX_RLEN; i++) {
if (sc->irq[i].res == NULL)
break;
err = bus_setup_intr(dev, sc->irq[i].res,
INTR_MPSAFE | INTR_TYPE_MISC, pmu_intr, NULL, NULL,
&sc->irq[i].ih);
if (err != 0) {
device_printf(dev,
"Unable to setup interrupt handler.\n");
goto fail;
}
if (sc->irq[i].cpuid != -1) {
err = bus_bind_intr(dev, sc->irq[i].res,
sc->irq[i].cpuid);
if (err != 0) {
device_printf(sc->dev,
"Unable to bind interrupt.\n");
goto fail;
}
}
}
#if defined(__arm__) && (__ARM_ARCH > 6)
/* Initialize to 0. */
for (i = 0; i < MAXCPU; i++)
ccnt_hi[i] = 0;
/* Enable the interrupt to fire on overflow. */
iesr = cp15_pminten_get();
iesr |= PMU_IESR_C;
cp15_pminten_set(iesr);
/* Need this for getcyclecount() fast path. */
pmu_attched |= 1;
#endif
return (0);
fail:
for (i = 1; i < MAX_RLEN; i++) {
if (sc->irq[i].ih != NULL)
bus_teardown_intr(dev, sc->irq[i].res, sc->irq[i].ih);
if (sc->irq[i].res != NULL)
bus_release_resource(dev, SYS_RES_IRQ, i,
sc->irq[i].res);
}
return(err);
}
-#ifdef FDT
-static struct ofw_compat_data compat_data[] = {
- {"arm,armv8-pmuv3", 1},
- {"arm,cortex-a77-pmu", 1},
- {"arm,cortex-a76-pmu", 1},
- {"arm,cortex-a75-pmu", 1},
- {"arm,cortex-a73-pmu", 1},
- {"arm,cortex-a72-pmu", 1},
- {"arm,cortex-a65-pmu", 1},
- {"arm,cortex-a57-pmu", 1},
- {"arm,cortex-a55-pmu", 1},
- {"arm,cortex-a53-pmu", 1},
- {"arm,cortex-a34-pmu", 1},
-
- {"arm,cortex-a17-pmu", 1},
- {"arm,cortex-a15-pmu", 1},
- {"arm,cortex-a12-pmu", 1},
- {"arm,cortex-a9-pmu", 1},
- {"arm,cortex-a8-pmu", 1},
- {"arm,cortex-a7-pmu", 1},
- {"arm,cortex-a5-pmu", 1},
- {"arm,arm11mpcore-pmu", 1},
- {"arm,arm1176-pmu", 1},
- {"arm,arm1136-pmu", 1},
- {"qcom,krait-pmu", 1},
- {NULL, 0}
-};
-
-static int
-pmu_fdt_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (ofw_bus_search_compatible(dev, compat_data)->ocd_data != 0) {
- device_set_desc(dev, "Performance Monitoring Unit");
- return (BUS_PROBE_DEFAULT);
- }
-
- return (ENXIO);
-}
-
-static device_method_t pmu_fdt_methods[] = {
- DEVMETHOD(device_probe, pmu_fdt_probe),
- DEVMETHOD(device_attach, pmu_attach),
- { 0, 0 }
-};
-
-static driver_t pmu_fdt_driver = {
- "pmu",
- pmu_fdt_methods,
- sizeof(struct pmu_softc),
-};
-
-static devclass_t pmu_fdt_devclass;
-
-DRIVER_MODULE(pmu, simplebus, pmu_fdt_driver, pmu_fdt_devclass, 0, 0);
-#endif
diff --git a/sys/arm/arm/pmu.c b/sys/arm/arm/pmu_fdt.c
similarity index 58%
copy from sys/arm/arm/pmu.c
copy to sys/arm/arm/pmu_fdt.c
index b16ffcafcfac..2e03fc98bfe0 100644
--- a/sys/arm/arm/pmu.c
+++ b/sys/arm/arm/pmu_fdt.c
@@ -1,364 +1,239 @@
/*-
* Copyright (c) 2015 Ruslan Bukin
* All rights reserved.
*
* This software was developed by SRI International and the University of
* Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
* ("CTSRD"), as part of the DARPA CRASH research programme.
*
* 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.
*/
-/*
- * Performance Monitoring Unit
- */
-
#include
__FBSDID("$FreeBSD$");
-#include "opt_hwpmc_hooks.h"
-#include "opt_platform.h"
-
#include
#include
#include
#include
#include
-#include
#include
-#include
-#include
-#include
-#include
-#ifdef FDT
#include
#include
#include
-#endif
-
-#include
-#include
-#include
-#define MAX_RLEN 8
+#include "pmu.h"
-struct pmu_intr {
- struct resource *res;
- void *ih;
- int cpuid;
-};
+static struct ofw_compat_data compat_data[] = {
+ {"arm,armv8-pmuv3", 1},
+ {"arm,cortex-a77-pmu", 1},
+ {"arm,cortex-a76-pmu", 1},
+ {"arm,cortex-a75-pmu", 1},
+ {"arm,cortex-a73-pmu", 1},
+ {"arm,cortex-a72-pmu", 1},
+ {"arm,cortex-a65-pmu", 1},
+ {"arm,cortex-a57-pmu", 1},
+ {"arm,cortex-a55-pmu", 1},
+ {"arm,cortex-a53-pmu", 1},
+ {"arm,cortex-a34-pmu", 1},
-struct pmu_softc {
- device_t dev;
- struct pmu_intr irq[MAX_RLEN];
+ {"arm,cortex-a17-pmu", 1},
+ {"arm,cortex-a15-pmu", 1},
+ {"arm,cortex-a12-pmu", 1},
+ {"arm,cortex-a9-pmu", 1},
+ {"arm,cortex-a8-pmu", 1},
+ {"arm,cortex-a7-pmu", 1},
+ {"arm,cortex-a5-pmu", 1},
+ {"arm,arm11mpcore-pmu", 1},
+ {"arm,arm1176-pmu", 1},
+ {"arm,arm1136-pmu", 1},
+ {"qcom,krait-pmu", 1},
+ {NULL, 0}
};
-/* CCNT */
-#if __ARM_ARCH > 6
-int pmu_attched = 0;
-uint32_t ccnt_hi[MAXCPU];
-#endif
-
-#define PMU_OVSR_C 0x80000000 /* Cycle Counter */
-#define PMU_IESR_C 0x80000000 /* Cycle Counter */
-
static int
-pmu_intr(void *arg)
+pmu_fdt_probe(device_t dev)
{
-#ifdef HWPMC_HOOKS
- struct trapframe *tf;
-#endif
- uint32_t r;
-#if defined(__arm__) && (__ARM_ARCH > 6)
- u_int cpu;
-
- cpu = PCPU_GET(cpuid);
-
- r = cp15_pmovsr_get();
- if (r & PMU_OVSR_C) {
- atomic_add_32(&ccnt_hi[cpu], 1);
- /* Clear the event. */
- r &= ~PMU_OVSR_C;
- cp15_pmovsr_set(PMU_OVSR_C);
- }
-#else
- r = 1;
-#endif
-
-#ifdef HWPMC_HOOKS
- /* Only call into the HWPMC framework if we know there is work. */
- if (r != 0 && pmc_intr) {
- tf = arg;
- (*pmc_intr)(tf);
+
+ if (!ofw_bus_status_okay(dev))
+ return (ENXIO);
+
+ if (ofw_bus_search_compatible(dev, compat_data)->ocd_data != 0) {
+ device_set_desc(dev, "Performance Monitoring Unit");
+ return (BUS_PROBE_DEFAULT);
}
-#endif
- return (FILTER_HANDLED);
+ return (ENXIO);
}
static int
-pmu_parse_affinity(struct pmu_softc *sc, struct pmu_intr *irq, phandle_t xref,
- uint32_t mpidr)
+pmu_parse_affinity(device_t dev, struct pmu_softc *sc, struct pmu_intr *irq,
+ phandle_t xref, uint32_t mpidr)
{
struct pcpu *pcpu;
int i, err;
if (xref != 0) {
err = OF_getencprop(OF_node_from_xref(xref), "reg", &mpidr,
sizeof(mpidr));
if (err < 0) {
- device_printf(sc->dev, "missing 'reg' property\n");
+ device_printf(dev, "missing 'reg' property\n");
return (ENXIO);
}
}
for (i = 0; i < MAXCPU; i++) {
pcpu = pcpu_find(i);
if (pcpu != NULL && pcpu->pc_mpidr == mpidr) {
irq->cpuid = i;
return (0);
}
}
- device_printf(sc->dev, "Cannot find CPU with MPIDR: 0x%08X\n", mpidr);
+ device_printf(dev, "Cannot find CPU with MPIDR: 0x%08X\n", mpidr);
return (ENXIO);
}
static int
-pmu_parse_intr(struct pmu_softc *sc)
+pmu_parse_intr(device_t dev, struct pmu_softc *sc)
{
bool has_affinity;
phandle_t node, *cpus;
int rid, err, ncpus, i;
- node = ofw_bus_get_node(sc->dev);
+ node = ofw_bus_get_node(dev);
has_affinity = OF_hasprop(node, "interrupt-affinity");
for (i = 0; i < MAX_RLEN; i++)
sc->irq[i].cpuid = -1;
cpus = NULL;
if (has_affinity) {
ncpus = OF_getencprop_alloc_multi(node, "interrupt-affinity",
sizeof(*cpus), (void **)&cpus);
if (ncpus < 0) {
- device_printf(sc->dev,
- "Cannot read interrupt affinity property\n");
+ device_printf(dev,
+ "Cannot read interrupt affinity property\n");
return (ENXIO);
}
}
/* Process first interrupt */
rid = 0;
- sc->irq[0].res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &rid,
+ sc->irq[0].res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
RF_ACTIVE | RF_SHAREABLE);
if (sc->irq[0].res == NULL) {
- device_printf(sc->dev, "Cannot get interrupt\n");
+ device_printf(dev, "Cannot get interrupt\n");
err = ENXIO;
goto done;
}
/* Check if PMU have one per-CPU interrupt */
if (intr_is_per_cpu(sc->irq[0].res)) {
if (has_affinity) {
- device_printf(sc->dev,
+ device_printf(dev,
"Per CPU interupt have declared affinity\n");
err = ENXIO;
goto done;
}
return (0);
}
/*
* PMU with set of generic interrupts (one per core)
* Each one must be binded to exact core.
*/
- err = pmu_parse_affinity(sc, sc->irq + 0, has_affinity ? cpus[0]: 0,
- 0);
+ err = pmu_parse_affinity(dev, sc, sc->irq + 0,
+ has_affinity ? cpus[0] : 0, 0);
if (err != 0) {
- device_printf(sc->dev, "Cannot parse affinity for CPUid: 0\n");
+ device_printf(dev, "Cannot parse affinity for CPUid: 0\n");
goto done;
}
for (i = 1; i < MAX_RLEN; i++) {
rid = i;
- sc->irq[i].res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ,
+ sc->irq[i].res = bus_alloc_resource_any(dev, SYS_RES_IRQ,
&rid, RF_ACTIVE | RF_SHAREABLE);
if (sc->irq[i].res == NULL)
break;
if (intr_is_per_cpu(sc->irq[i].res))
{
- device_printf(sc->dev, "Unexpected per CPU interupt\n");
+ device_printf(dev, "Unexpected per CPU interupt\n");
err = ENXIO;
goto done;
}
if (has_affinity && i >= ncpus) {
- device_printf(sc->dev, "Missing value in interrupt "
+ device_printf(dev, "Missing value in interrupt "
"affinity property\n");
err = ENXIO;
goto done;
}
- err = pmu_parse_affinity(sc, sc->irq + i,
- has_affinity ? cpus[i]: 0, i);
+ err = pmu_parse_affinity(dev, sc, sc->irq + i,
+ has_affinity ? cpus[i] : 0, i);
if (err != 0) {
- device_printf(sc->dev,
+ device_printf(dev,
"Cannot parse affinity for CPUid: %d.\n", i);
goto done;
}
}
err = 0;
done:
OF_prop_free(cpus);
return (err);
}
static int
-pmu_attach(device_t dev)
+pmu_fdt_attach(device_t dev)
{
struct pmu_softc *sc;
-#if defined(__arm__) && (__ARM_ARCH > 6)
- uint32_t iesr;
-#endif
- int err, i;
+ int err;
sc = device_get_softc(dev);
- sc->dev = dev;
-
- err = pmu_parse_intr(sc);
+ err = pmu_parse_intr(dev, sc);
if (err != 0)
return (err);
- for (i = 0; i < MAX_RLEN; i++) {
- if (sc->irq[i].res == NULL)
- break;
- err = bus_setup_intr(dev, sc->irq[i].res,
- INTR_MPSAFE | INTR_TYPE_MISC, pmu_intr, NULL, NULL,
- &sc->irq[i].ih);
- if (err != 0) {
- device_printf(dev,
- "Unable to setup interrupt handler.\n");
- goto fail;
- }
- if (sc->irq[i].cpuid != -1) {
- err = bus_bind_intr(dev, sc->irq[i].res,
- sc->irq[i].cpuid);
- if (err != 0) {
- device_printf(sc->dev,
- "Unable to bind interrupt.\n");
- goto fail;
- }
- }
- }
-
-#if defined(__arm__) && (__ARM_ARCH > 6)
- /* Initialize to 0. */
- for (i = 0; i < MAXCPU; i++)
- ccnt_hi[i] = 0;
-
- /* Enable the interrupt to fire on overflow. */
- iesr = cp15_pminten_get();
- iesr |= PMU_IESR_C;
- cp15_pminten_set(iesr);
-
- /* Need this for getcyclecount() fast path. */
- pmu_attched |= 1;
-#endif
-
- return (0);
-
-fail:
- for (i = 1; i < MAX_RLEN; i++) {
- if (sc->irq[i].ih != NULL)
- bus_teardown_intr(dev, sc->irq[i].res, sc->irq[i].ih);
- if (sc->irq[i].res != NULL)
- bus_release_resource(dev, SYS_RES_IRQ, i,
- sc->irq[i].res);
- }
- return(err);
-}
-
-#ifdef FDT
-static struct ofw_compat_data compat_data[] = {
- {"arm,armv8-pmuv3", 1},
- {"arm,cortex-a77-pmu", 1},
- {"arm,cortex-a76-pmu", 1},
- {"arm,cortex-a75-pmu", 1},
- {"arm,cortex-a73-pmu", 1},
- {"arm,cortex-a72-pmu", 1},
- {"arm,cortex-a65-pmu", 1},
- {"arm,cortex-a57-pmu", 1},
- {"arm,cortex-a55-pmu", 1},
- {"arm,cortex-a53-pmu", 1},
- {"arm,cortex-a34-pmu", 1},
-
- {"arm,cortex-a17-pmu", 1},
- {"arm,cortex-a15-pmu", 1},
- {"arm,cortex-a12-pmu", 1},
- {"arm,cortex-a9-pmu", 1},
- {"arm,cortex-a8-pmu", 1},
- {"arm,cortex-a7-pmu", 1},
- {"arm,cortex-a5-pmu", 1},
- {"arm,arm11mpcore-pmu", 1},
- {"arm,arm1176-pmu", 1},
- {"arm,arm1136-pmu", 1},
- {"qcom,krait-pmu", 1},
- {NULL, 0}
-};
-
-static int
-pmu_fdt_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (ofw_bus_search_compatible(dev, compat_data)->ocd_data != 0) {
- device_set_desc(dev, "Performance Monitoring Unit");
- return (BUS_PROBE_DEFAULT);
- }
-
- return (ENXIO);
+ return (pmu_attach(dev));
}
static device_method_t pmu_fdt_methods[] = {
DEVMETHOD(device_probe, pmu_fdt_probe),
- DEVMETHOD(device_attach, pmu_attach),
+ DEVMETHOD(device_attach, pmu_fdt_attach),
{ 0, 0 }
};
static driver_t pmu_fdt_driver = {
"pmu",
pmu_fdt_methods,
sizeof(struct pmu_softc),
};
static devclass_t pmu_fdt_devclass;
DRIVER_MODULE(pmu, simplebus, pmu_fdt_driver, pmu_fdt_devclass, 0, 0);
-#endif
diff --git a/sys/conf/files.arm b/sys/conf/files.arm
index 13a47e5b6f5a..eb3a23b5fc21 100644
--- a/sys/conf/files.arm
+++ b/sys/conf/files.arm
@@ -1,154 +1,155 @@
# $FreeBSD$
arm/arm/autoconf.c standard
arm/arm/bcopy_page.S standard
arm/arm/bcopyinout.S standard
arm/arm/blockio.S standard
arm/arm/bus_space_asm_generic.S standard
arm/arm/bus_space_base.c optional fdt
arm/arm/bus_space_generic.c standard
arm/arm/busdma_machdep.c standard
arm/arm/copystr.S standard
arm/arm/cpufunc.c standard
arm/arm/cpufunc_asm.S standard
arm/arm/cpufunc_asm_arm11x6.S optional cpu_arm1176
arm/arm/cpufunc_asm_armv7.S optional cpu_cortexa | cpu_krait | cpu_mv_pj4b
arm/arm/cpufunc_asm_pj4b.S optional cpu_mv_pj4b
arm/arm/cpuinfo.c standard
arm/arm/cpu_asm-v6.S standard
arm/arm/db_disasm.c optional ddb
arm/arm/db_interface.c optional ddb
arm/arm/db_trace.c optional ddb
arm/arm/debug_monitor.c optional ddb armv6
arm/arm/debug_monitor.c optional ddb armv7
arm/arm/disassem.c optional ddb
arm/arm/dump_machdep.c standard
arm/arm/elf_machdep.c standard
arm/arm/elf_note.S standard
arm/arm/exception.S standard
arm/arm/fiq.c standard
arm/arm/fiq_subr.S standard
arm/arm/fusu.S standard
arm/arm/gdb_machdep.c optional gdb
arm/arm/generic_timer.c optional generic_timer
arm/arm/gic.c optional gic
arm/arm/gic_fdt.c optional gic fdt
arm/arm/identcpu-v6.c standard
arm/arm/in_cksum.c optional inet | inet6
arm/arm/in_cksum_arm.S optional inet | inet6
kern/subr_intr.c standard
arm/arm/locore.S standard no-obj
arm/arm/hypervisor-stub.S standard
arm/arm/machdep.c standard
arm/arm/machdep_boot.c standard
arm/arm/machdep_kdb.c standard
arm/arm/machdep_intr.c standard
arm/arm/machdep_ptrace.c standard
arm/arm/mem.c optional mem
arm/arm/minidump_machdep.c standard
arm/arm/mp_machdep.c optional smp
arm/arm/mpcore_timer.c optional mpcore_timer
arm/arm/nexus.c standard
arm/arm/ofw_machdep.c optional fdt
arm/arm/pl190.c optional pl190
arm/arm/pl310.c optional pl310
arm/arm/platform.c optional platform
arm/arm/platform_if.m optional platform
arm/arm/platform_pl310_if.m optional platform pl310
arm/arm/pmap-v6.c standard
-arm/arm/pmu.c optional pmu | fdt hwpmc
+arm/arm/pmu.c optional pmu | hwpmc
+arm/arm/pmu_fdt.c optional fdt pmu | fdt hwpmc
arm/arm/ptrace_machdep.c standard
arm/arm/sc_machdep.c optional sc
arm/arm/setcpsr.S standard
arm/arm/setstack.s standard
arm/arm/stack_machdep.c optional ddb | stack
arm/arm/stdatomic.c standard \
compile-with "${NORMAL_C:N-Wmissing-prototypes}"
arm/arm/support.S standard
arm/arm/swtch.S standard
arm/arm/swtch-v6.S standard
arm/arm/sys_machdep.c standard
arm/arm/syscall.c standard
arm/arm/trap-v6.c standard
arm/arm/uio_machdep.c standard
arm/arm/undefined.c standard
arm/arm/unwind.c optional ddb | kdtrace_hooks | stack
arm/arm/vm_machdep.c standard
arm/arm/vfp.c standard
arm/cloudabi32/cloudabi32_sysvec.c optional compat_cloudabi32
cddl/compat/opensolaris/kern/opensolaris_atomic.c optional !armv7 !armv6 zfs | !armv7 !armv6 dtrace compile-with "${CDDL_C}"
cddl/dev/dtrace/arm/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
cddl/dev/dtrace/arm/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
cddl/dev/fbt/arm/fbt_isa.c optional dtrace_fbt | dtraceall compile-with "${FBT_C}"
crypto/des/des_enc.c optional netsmb
dev/cpufreq/cpufreq_dt.c optional cpufreq fdt
dev/dwc/if_dwc.c optional dwc
dev/dwc/if_dwc_if.m optional dwc
dev/fb/fb.c optional sc
dev/fdt/fdt_arm_platform.c optional platform fdt
dev/hdmi/hdmi_if.m optional hdmi
dev/hwpmc/hwpmc_arm.c optional hwpmc
dev/hwpmc/hwpmc_armv7.c optional hwpmc armv6
dev/hwpmc/hwpmc_armv7.c optional hwpmc armv7
dev/iicbus/twsi/twsi.c optional twsi
dev/ofw/ofwpci.c optional fdt pci
dev/pci/pci_host_generic.c optional pci_host_generic pci
dev/pci/pci_host_generic_fdt.c optional pci_host_generic pci fdt
dev/psci/psci.c optional psci
dev/psci/smccc_arm.S optional psci
dev/syscons/scgfbrndr.c optional sc
dev/uart/uart_cpu_fdt.c optional uart fdt
kern/msi_if.m optional intrng
kern/pic_if.m optional intrng
kern/subr_busdma_bufalloc.c standard
kern/subr_devmap.c standard
kern/subr_physmem.c standard
kern/subr_sfbuf.c standard
libkern/arm/aeabi_unwind.c standard
libkern/arm/divsi3.S standard
libkern/arm/ffs.S optional !armv7 !armv6
libkern/arm/ldivmod.S standard
libkern/arm/ldivmod_helper.c standard
libkern/arm/memclr.S standard
libkern/arm/memcpy.S standard
libkern/arm/memset.S standard
libkern/arm/muldi3.c standard
libkern/ashldi3.c standard
libkern/ashrdi3.c standard
libkern/divdi3.c standard
libkern/ffsl.c optional !armv7 !armv6
libkern/ffsll.c optional !armv7 !armv6
libkern/fls.c optional !armv7 !armv6
libkern/flsl.c optional !armv7 !armv6
libkern/flsll.c optional !armv7 !armv6
libkern/lshrdi3.c standard
libkern/memcmp.c standard
libkern/moddi3.c standard
libkern/qdivrem.c standard
libkern/ucmpdi2.c standard
libkern/udivdi3.c standard
libkern/umoddi3.c standard
# CloudABI support
cloudabi32_vdso.o optional compat_cloudabi32 \
dependency "$S/contrib/cloudabi/cloudabi_vdso_armv6.S" \
compile-with "${CC} -x assembler-with-cpp -shared -nostdinc -nostdlib -Wl,-T$S/compat/cloudabi/cloudabi_vdso.lds $S/contrib/cloudabi/cloudabi_vdso_armv6.S -o ${.TARGET}" \
no-obj no-implicit-rule \
clean "cloudabi32_vdso.o"
#
cloudabi32_vdso_blob.o optional compat_cloudabi32 \
dependency "cloudabi32_vdso.o" \
compile-with "${OBJCOPY} --input-target binary --output-target elf32-littlearm --binary-architecture arm cloudabi32_vdso.o ${.TARGET}" \
no-implicit-rule \
clean "cloudabi32_vdso_blob.o"
#
# Annapurna support
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 ${PROF} ${.IMPSRC}"
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
index 439b37c12cd0..f421304b1903 100644
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -1,490 +1,491 @@
# $FreeBSD$
cloudabi32_vdso.o optional compat_cloudabi32 \
dependency "$S/contrib/cloudabi/cloudabi_vdso_armv6_on_64bit.S" \
compile-with "${CC} -x assembler-with-cpp -m32 -shared -nostdinc -nostdlib -Wl,-T$S/compat/cloudabi/cloudabi_vdso.lds $S/contrib/cloudabi/cloudabi_vdso_armv6_on_64bit.S -o ${.TARGET}" \
no-obj no-implicit-rule \
clean "cloudabi32_vdso.o"
#
cloudabi32_vdso_blob.o optional compat_cloudabi32 \
dependency "cloudabi32_vdso.o" \
compile-with "${OBJCOPY} --input-target binary --output-target elf64-littleaarch64 --binary-architecture aarch64 cloudabi32_vdso.o ${.TARGET}" \
no-implicit-rule \
clean "cloudabi32_vdso_blob.o"
#
cloudabi64_vdso.o optional compat_cloudabi64 \
dependency "$S/contrib/cloudabi/cloudabi_vdso_aarch64.S" \
compile-with "${CC} -x assembler-with-cpp -shared -nostdinc -nostdlib -Wl,-T$S/compat/cloudabi/cloudabi_vdso.lds $S/contrib/cloudabi/cloudabi_vdso_aarch64.S -o ${.TARGET}" \
no-obj no-implicit-rule \
clean "cloudabi64_vdso.o"
#
cloudabi64_vdso_blob.o optional compat_cloudabi64 \
dependency "cloudabi64_vdso.o" \
compile-with "${OBJCOPY} --input-target binary --output-target elf64-littleaarch64 --binary-architecture aarch64 cloudabi64_vdso.o ${.TARGET}" \
no-implicit-rule \
clean "cloudabi64_vdso_blob.o"
#
# Allwinner common files
arm/allwinner/a10_timer.c optional a10_timer fdt
arm/allwinner/a10_codec.c optional sound a10_codec
arm/allwinner/a31_dmac.c optional a31_dmac
arm/allwinner/sunxi_dma_if.m optional a31_dmac
arm/allwinner/aw_cir.c optional evdev aw_cir fdt
arm/allwinner/aw_dwc3.c optional aw_dwc3 fdt
arm/allwinner/aw_gpio.c optional gpio aw_gpio fdt
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/gnu/dts/include"
arm/allwinner/aw_pwm.c optional aw_pwm 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_spi.c optional aw_spi fdt
arm/allwinner/aw_syscon.c optional aw_syscon ext_resources 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 ext_resources syscon aw_sid nvmem fdt
# Allwinner clock driver
arm/allwinner/clkng/aw_ccung.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_frac.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_m.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_mipi.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_nkmp.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_nm.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_nmm.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_np.c optional aw_ccu fdt
arm/allwinner/clkng/aw_clk_prediv_mux.c optional aw_ccu fdt
arm/allwinner/clkng/ccu_a64.c optional soc_allwinner_a64 aw_ccu fdt
arm/allwinner/clkng/ccu_h3.c optional soc_allwinner_h5 aw_ccu fdt
arm/allwinner/clkng/ccu_h6.c optional soc_allwinner_h6 aw_ccu fdt
arm/allwinner/clkng/ccu_h6_r.c optional soc_allwinner_h6 aw_ccu fdt
arm/allwinner/clkng/ccu_sun8i_r.c optional aw_ccu fdt
arm/allwinner/clkng/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
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 ${PROF} ${.IMPSRC}"
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/pmu.c standard
+arm/arm/pmu_fdt.c optional fdt
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 | soc_brcm_bcm2838 gpio
arm/freescale/vybrid/vf_i2c.c optional vf_i2c iicbus SOC_NXP_LS
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/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/armada38x/armada38x_rtc.c optional mv_rtc fdt
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
arm/xilinx/uart_dev_cdnc.c optional uart soc_xilinx_zynq
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/bzero.S 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/freebsd32_machdep.c optional compat_freebsd32
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/identcpu.c standard
arm64/arm64/in_cksum.c optional inet | inet6
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/memcpy.S standard
arm64/arm64/memmove.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/pmap.c standard
arm64/arm64/stack_machdep.c optional ddb | stack
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
arm64/arm64/vfp.c standard
arm64/arm64/vm_machdep.c standard
arm64/broadcom/brcmmdio/mdio_mux_iproc.c optional fdt
arm64/broadcom/brcmmdio/mdio_nexus_iproc.c optional fdt
arm64/broadcom/brcmmdio/mdio_ns2_pcie_phy.c optional fdt pci
arm64/broadcom/genet/if_genet.c optional SOC_BRCM_BCM2838 fdt genet
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
arm64/cloudabi32/cloudabi32_sysvec.c optional compat_cloudabi32
arm64/cloudabi64/cloudabi64_sysvec.c optional compat_cloudabi64
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 standard
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
arm64/intel/firmware.c optional soc_intel_stratix10
arm64/intel/stratix10-soc-fpga-mgr.c optional soc_intel_stratix10
arm64/intel/stratix10-svc.c optional soc_intel_stratix10
arm64/iommu/iommu.c optional iommu
arm64/iommu/iommu_if.m optional iommu
arm64/iommu/smmu.c optional iommu
arm64/iommu/smmu_acpi.c optional acpi iommu
arm64/iommu/smmu_quirks.c optional iommu
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
arm64/qoriq/ls1046_gpio.c optional ls1046_gpio gpio fdt SOC_NXP_LS
arm64/qoriq/qoriq_dw_pci.c optional pci 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/ls1046a_clkgen.c optional clk SOC_NXP_LS
arm64/qoriq/clk/lx2160a_clkgen.c optional clk SOC_NXP_LS
arm64/qoriq/clk/qoriq_clk_pll.c optional clk SOC_NXP_LS
arm64/qoriq/clk/qoriq_clkgen.c optional clk SOC_NXP_LS
arm64/qualcomm/qcom_gcc.c optional qcom_gcc 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"
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} ${PROF} -march=armv8-a+crypto ${.IMPSRC}" \
no-implicit-rule \
clean "armv8_crypto_wrap.o"
crypto/des/des_enc.c optional netsmb
crypto/openssl/ossl_aarch64.c optional ossl
crypto/openssl/aarch64/sha1-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} ${WERROR} ${PROF} ${.IMPSRC}"
crypto/openssl/aarch64/sha256-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} ${WERROR} ${PROF} ${.IMPSRC}"
crypto/openssl/aarch64/sha512-armv8.S optional ossl \
compile-with "${CC} -c ${CFLAGS:N-mgeneral-regs-only} ${WERROR} ${PROF} ${.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_fsl_fdt.c optional SOC_NXP_LS ahci fdt
dev/ahci/ahci_generic.c optional ahci
dev/altera/dwc/if_dwc_socfpga.c optional fdt dwc_socfpga
dev/axgbe/if_axgbe.c optional axa
dev/axgbe/xgbe-desc.c optional axa
dev/axgbe/xgbe-dev.c optional axa
dev/axgbe/xgbe-drv.c optional axa
dev/axgbe/xgbe-mdio.c optional axa
dev/axgbe/xgbe-sysctl.c optional axa
dev/axgbe/xgbe-txrx.c optional axa
dev/axgbe/xgbe_osdep.c optional axa
dev/axgbe/xgbe-phy-v1.c optional axa
dev/cpufreq/cpufreq_dt.c optional cpufreq fdt
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/hwpmc/hwpmc_arm64.c optional hwpmc
dev/hwpmc/hwpmc_arm64_md.c optional hwpmc
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_sriov.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"
ice_ddp.c optional ice_ddp \
compile-with "${AWK} -f $S/tools/fw_stub.awk ice_ddp.fw:ice_ddp:0x01031000 -mice_ddp -c${.TARGET}" \
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.16.0.pkg" \
compile-with "${CP} $S/contrib/dev/ice/ice-1.3.16.0.pkg ice_ddp.fw" \
no-obj no-implicit-rule \
clean "ice_ddp.fw"
dev/iicbus/sy8106a.c optional sy8106a fdt
dev/iicbus/twsi/mv_twsi.c optional twsi fdt
dev/iicbus/twsi/a10_twsi.c optional twsi fdt
dev/iicbus/twsi/twsi.c optional twsi fdt
dev/iommu/busdma_iommu.c optional iommu
dev/iommu/iommu_gas.c optional iommu
dev/mbox/mbox_if.m optional soc_brcm_bcm2837
dev/mmc/host/dwmmc.c optional dwmmc fdt
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
dev/ofw/ofw_cpu.c optional fdt
dev/ofw/ofwpci.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_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/safexcel/safexcel.c optional safexcel fdt
dev/sdhci/sdhci_xenon.c optional sdhci_xenon sdhci fdt
dev/uart/uart_cpu_arm64.c optional uart
dev/uart/uart_dev_mu.c optional uart uart_mu
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/dwc3.c optional fdt dwc3
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 ext_resources
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/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 vnic fdt
dev/vnic/thunder_bgx.c optional vnic pci
dev/vnic/thunder_mdio_fdt.c optional vnic fdt
dev/vnic/thunder_mdio.c optional vnic
dev/vnic/lmac_if.m optional inet | inet6 | vnic
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/bcmp.c standard
libkern/memcmp.c standard \
compile-with "${NORMAL_C:N-fsanitize*}"
libkern/memset.c standard \
compile-with "${NORMAL_C:N-fsanitize*}"
libkern/arm64/crc32c_armv8.S standard
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}"
# RockChip Drivers
arm64/rockchip/rk3399_emmcphy.c optional fdt rk_emmcphy soc_rockchip_rk3399
arm64/rockchip/rk_dwc3.c optional fdt rk_dwc3 soc_rockchip_rk3399
arm64/rockchip/rk_i2c.c optional fdt rk_i2c soc_rockchip_rk3328 | fdt rk_i2c soc_rockchip_rk3399
arm64/rockchip/rk805.c optional fdt rk805 soc_rockchip_rk3328 | fdt rk805 soc_rockchip_rk3399
arm64/rockchip/rk_grf.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/rk_pinctrl.c optional fdt rk_pinctrl soc_rockchip_rk3328 | fdt rk_pinctrl soc_rockchip_rk3399
arm64/rockchip/rk_gpio.c optional fdt rk_gpio soc_rockchip_rk3328 | fdt rk_gpio soc_rockchip_rk3399
arm64/rockchip/rk_iodomain.c optional fdt rk_iodomain
arm64/rockchip/rk_spi.c optional fdt rk_spi
arm64/rockchip/rk_usb2phy.c optional fdt rk_usb2phy soc_rockchip_rk3328 | soc_rockchip_rk3399
arm64/rockchip/rk_typec_phy.c optional fdt rk_typec_phy soc_rockchip_rk3399
arm64/rockchip/if_dwc_rk.c optional fdt dwc_rk soc_rockchip_rk3328 | fdt dwc_rk soc_rockchip_rk3399
arm64/rockchip/rk_tsadc_if.m optional fdt soc_rockchip_rk3399
arm64/rockchip/rk_tsadc.c optional fdt soc_rockchip_rk3399
arm64/rockchip/rk_pwm.c optional fdt rk_pwm
arm64/rockchip/rk_pcie.c optional fdt pci soc_rockchip_rk3399
arm64/rockchip/rk_pcie_phy.c optional fdt pci soc_rockchip_rk3399
dev/dwc/if_dwc.c optional fdt dwc_rk soc_rockchip_rk3328 | fdt dwc_rk soc_rockchip_rk3399
dev/dwc/if_dwc_if.m optional fdt dwc_rk soc_rockchip_rk3328 | fdt dwc_rk soc_rockchip_rk3399
# RockChip Clock support
arm64/rockchip/clk/rk_cru.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk_clk_armclk.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk_clk_composite.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk_clk_fract.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk_clk_gate.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk_clk_mux.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk_clk_pll.c optional fdt soc_rockchip_rk3328 | fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk3328_cru.c optional fdt soc_rockchip_rk3328
arm64/rockchip/clk/rk3399_cru.c optional fdt soc_rockchip_rk3399
arm64/rockchip/clk/rk3399_pmucru.c optional fdt soc_rockchip_rk3399
# 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
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
# 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-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"