Module Name: src
Committed By: thorpej
Date: Tue Jan 19 00:40:17 UTC 2021
Modified Files:
src/sys/arch/arm/fdt: gicv3_fdt.c
Log Message:
Use device_compatible_entry / of_search_compatible() for the GICv3
quirk table.
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/fdt/gicv3_fdt.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/fdt/gicv3_fdt.c
diff -u src/sys/arch/arm/fdt/gicv3_fdt.c:1.11 src/sys/arch/arm/fdt/gicv3_fdt.c:1.12
--- src/sys/arch/arm/fdt/gicv3_fdt.c:1.11 Fri Jan 15 00:38:22 2021
+++ src/sys/arch/arm/fdt/gicv3_fdt.c Tue Jan 19 00:40:17 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: gicv3_fdt.c,v 1.11 2021/01/15 00:38:22 jmcneill Exp $ */
+/* $NetBSD: gicv3_fdt.c,v 1.12 2021/01/19 00:40:17 thorpej Exp $ */
/*-
* Copyright (c) 2015-2018 Jared McNeill <[email protected]>
@@ -31,7 +31,7 @@
#define _INTR_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gicv3_fdt.c,v 1.11 2021/01/15 00:38:22 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gicv3_fdt.c,v 1.12 2021/01/19 00:40:17 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -107,29 +107,26 @@ struct gicv3_fdt_softc {
struct gicv3_fdt_irq *sc_irq[GICV3_MAXIRQ];
};
-struct gicv3_fdt_quirk {
- const char *compat;
- u_int quirks;
-};
-
-static const struct gicv3_fdt_quirk gicv3_fdt_quirks[] = {
- { "rockchip,rk3399", GICV3_QUIRK_RK3399 },
+static const struct device_compatible_entry gicv3_fdt_quirks[] = {
+ { .compat = "rockchip,rk3399", .value = GICV3_QUIRK_RK3399 },
+ { 0 }
};
CFATTACH_DECL_NEW(gicv3_fdt, sizeof(struct gicv3_fdt_softc),
gicv3_fdt_match, gicv3_fdt_attach, NULL, NULL);
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "arm,gic-v3" },
+ { 0 }
+};
+
static int
gicv3_fdt_match(device_t parent, cfdata_t cf, void *aux)
{
- const char * const compatible[] = {
- "arm,gic-v3",
- NULL
- };
struct fdt_attach_args * const faa = aux;
const int phandle = faa->faa_phandle;
- return of_match_compatible(phandle, compatible);
+ return of_match_compat_data(phandle, compat_data);
}
static void
@@ -138,7 +135,7 @@ gicv3_fdt_attach(device_t parent, device
struct gicv3_fdt_softc * const sc = device_private(self);
struct fdt_attach_args * const faa = aux;
const int phandle = faa->faa_phandle;
- int error, n;
+ int error;
error = fdtbus_register_interrupt_controller(self, phandle,
&gicv3_fdt_funcs);
@@ -164,11 +161,10 @@ gicv3_fdt_attach(device_t parent, device
aprint_debug_dev(self, "%d redistributors\n", sc->sc_gic.sc_bsh_r_count);
/* Apply quirks */
- for (n = 0; n < __arraycount(gicv3_fdt_quirks); n++) {
- const char *compat[] = { gicv3_fdt_quirks[n].compat, NULL };
- if (of_match_compatible(OF_finddevice("/"), compat)) {
- sc->sc_gic.sc_quirks |= gicv3_fdt_quirks[n].quirks;
- }
+ const struct device_compatible_entry *dce =
+ of_search_compatible(OF_finddevice("/"), gicv3_fdt_quirks);
+ if (dce != NULL) {
+ sc->sc_gic.sc_quirks |= dce->value;
}
error = gicv3_init(&sc->sc_gic);
@@ -183,11 +179,16 @@ gicv3_fdt_attach(device_t parent, device
gicv3_fdt_attach_mbi(sc);
} else {
/* Interrupt Translation Services */
- for (int child = OF_child(phandle); child; child = OF_peer(child)) {
+ static const struct device_compatible_entry its_compat[] = {
+ { .compat = "arm,gic-v3-its" },
+ { 0 }
+ };
+
+ for (int child = OF_child(phandle); child;
+ child = OF_peer(child)) {
if (!fdtbus_status_okay(child))
continue;
- const char * const its_compat[] = { "arm,gic-v3-its", NULL };
- if (of_match_compatible(child, its_compat))
+ if (of_match_compat_data(child, its_compat))
gicv3_fdt_attach_its(sc, faa->faa_bst, child);
}
}