Date: Fri, 1 Aug 2014 14:10:11 +0000 (UTC) From: Andrew Turner <andrew@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r269382 - in projects/arm64/sys: arm/arm conf Message-ID: <201408011410.s71EAB7M012213@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: andrew Date: Fri Aug 1 14:10:10 2014 New Revision: 269382 URL: http://svnweb.freebsd.org/changeset/base/269382 Log: Alos use the GICv2 driver on arm64. No interrupts are working yet as we are still missing the code to handle the correct exception. Modified: projects/arm64/sys/arm/arm/gic.c projects/arm64/sys/conf/files.arm64 Modified: projects/arm64/sys/arm/arm/gic.c ============================================================================== --- projects/arm64/sys/arm/arm/gic.c Fri Aug 1 13:54:58 2014 (r269381) +++ projects/arm64/sys/arm/arm/gic.c Fri Aug 1 14:10:10 2014 (r269382) @@ -47,7 +47,9 @@ __FBSDID("$FreeBSD$"); #include <sys/lock.h> #include <sys/mutex.h> #include <machine/bus.h> +#if 0 #include <machine/intr.h> +#endif #include <machine/smp.h> #include <dev/fdt/fdt_common.h> @@ -104,6 +106,12 @@ struct arm_gic_softc { uint32_t nirqs; }; +static struct ofw_compat_data compat_data[] = { + { "arm,cortex-a9-gic", 1 }, + { "arm,gic", 1 }, + { NULL, 0 }, +}; + static struct resource_spec arm_gic_spec[] = { { SYS_RES_MEMORY, 0, RF_ACTIVE }, /* Distributor registers */ { SYS_RES_MEMORY, 1, RF_ACTIVE }, /* CPU Interrupt Intf. registers */ @@ -132,12 +140,14 @@ arm_gic_probe(device_t dev) if (!ofw_bus_status_okay(dev)) return (ENXIO); - if (!ofw_bus_is_compatible(dev, "arm,gic")) + if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data) return (ENXIO); + device_set_desc(dev, "ARM Generic Interrupt Controller"); return (BUS_PROBE_DEFAULT); } +#if 0 void gic_init_secondary(void) { @@ -167,6 +177,7 @@ gic_init_secondary(void) /* Activate IRQ 29, ie private timer IRQ*/ gic_d_write_4(GICD_ISENABLER(29 >> 5), (1UL << (29 & 0x1F))); } +#endif static int arm_gic_attach(device_t dev) @@ -206,9 +217,11 @@ arm_gic_attach(device_t dev) sc->nirqs = gic_d_read_4(GICD_TYPER); sc->nirqs = 32 * ((sc->nirqs & 0x1f) + 1); +#if 0 /* Set up function pointers */ arm_post_filter = gic_post_filter; arm_config_irq = gic_config_irq; +#endif icciidr = gic_c_read_4(GICC_IIDR); device_printf(dev,"pn 0x%x, arch 0x%x, rev 0x%x, implementer 0x%x sc->nirqs %u\n", @@ -262,6 +275,7 @@ static driver_t arm_gic_driver = { static devclass_t arm_gic_devclass; DRIVER_MODULE(gic, simplebus, arm_gic_driver, arm_gic_devclass, 0, 0); +DRIVER_MODULE(gic, ofwbus, arm_gic_driver, arm_gic_devclass, 0, 0); static void gic_post_filter(void *arg) @@ -271,6 +285,7 @@ gic_post_filter(void *arg) gic_c_write_4(GICC_EOIR, irq); } +#if 0 int arm_get_next_irq(int last_irq) { @@ -311,6 +326,7 @@ arm_unmask_irq(uintptr_t nb) gic_d_write_4(GICD_ISENABLER(nb >> 5), (1UL << (nb & 0x1F))); } +#endif static int gic_config_irq(int irq, enum intr_trigger trig, Modified: projects/arm64/sys/conf/files.arm64 ============================================================================== --- projects/arm64/sys/conf/files.arm64 Fri Aug 1 13:54:58 2014 (r269381) +++ projects/arm64/sys/conf/files.arm64 Fri Aug 1 14:10:10 2014 (r269382) @@ -1,5 +1,6 @@ arm/arm/devmap.c standard +arm/arm/gic.c standard arm64/arm64/autoconf.c standard arm64/arm64/bcopy.c standard arm64/arm64/bus_machdep.c standard
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408011410.s71EAB7M012213>