Skip site navigation (1)Skip section navigation (2)
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>