Author: andrew
Date: Sun Dec 21 17:25:21 2014
New Revision: 276028
URL: https://svnweb.freebsd.org/changeset/base/276028

Log:
  Further reduce the diff between the arm_intrng gic driver and the version
  in head.

Modified:
  head/sys/arm/arm/gic.c

Modified: head/sys/arm/arm/gic.c
==============================================================================
--- head/sys/arm/arm/gic.c      Sun Dec 21 17:21:29 2014        (r276027)
+++ head/sys/arm/arm/gic.c      Sun Dec 21 17:25:21 2014        (r276028)
@@ -99,13 +99,13 @@ __FBSDID("$FreeBSD$");
 #define GICD_ICFGR_TRIG_MASK   0x2
 
 struct arm_gic_softc {
+       device_t                gic_dev;
        struct resource *       gic_res[3];
        bus_space_tag_t         gic_c_bst;
        bus_space_tag_t         gic_d_bst;
        bus_space_handle_t      gic_c_bsh;
        bus_space_handle_t      gic_d_bsh;
        uint8_t                 ver;
-       device_t                dev;
        struct mtx              mutex;
        uint32_t                nirqs;
 };
@@ -159,17 +159,13 @@ void
 gic_init_secondary(void)
 {
        struct arm_gic_softc *sc = arm_gic_sc;
-       int i, nirqs;
+       int i;
 
-       /* Get the number of interrupts */
-       nirqs = gic_d_read_4(sc, GICD_TYPER);
-       nirqs = 32 * ((nirqs & 0x1f) + 1);
-
-       for (i = 0; i < nirqs; i += 4)
+       for (i = 0; i < sc->nirqs; i += 4)
                gic_d_write_4(sc, GICD_IPRIORITYR(i >> 2), 0);
 
        /* Set all the interrupts to be in Group 0 (secure) */
-       for (i = 0; i < nirqs; i += 32) {
+       for (i = 0; i < sc->nirqs; i += 32) {
                gic_d_write_4(sc, GICD_IGROUPR(i >> 5), 0);
        }
 
@@ -246,13 +242,15 @@ arm_gic_attach(device_t dev)
                return (ENXIO);
 
        sc = device_get_softc(dev);
-       sc->dev = dev;
 
        if (bus_alloc_resources(dev, arm_gic_spec, sc->gic_res)) {
                device_printf(dev, "could not allocate resources\n");
                return (ENXIO);
        }
 
+       sc->gic_dev = dev;
+       arm_gic_sc = sc;
+
        /* Initialize mutex */
        mtx_init(&sc->mutex, "GIC lock", "", MTX_SPIN);
 
@@ -264,8 +262,6 @@ arm_gic_attach(device_t dev)
        sc->gic_c_bst = rman_get_bustag(sc->gic_res[1]);
        sc->gic_c_bsh = rman_get_bushandle(sc->gic_res[1]);
 
-       arm_gic_sc = sc;
-
        /* Disable interrupt forwarding to the CPU interface */
        gic_d_write_4(sc, GICD_CTLR, 0x00);
 
@@ -315,25 +311,6 @@ arm_gic_attach(device_t dev)
        return (0);
 }
 
-static device_method_t arm_gic_methods[] = {
-       DEVMETHOD(device_probe,         arm_gic_probe),
-       DEVMETHOD(device_attach,        arm_gic_attach),
-       { 0, 0 }
-};
-
-static driver_t arm_gic_driver = {
-       "gic",
-       arm_gic_methods,
-       sizeof(struct arm_gic_softc),
-};
-
-static devclass_t arm_gic_devclass;
-
-EARLY_DRIVER_MODULE(gic, simplebus, arm_gic_driver, arm_gic_devclass, 0, 0,
-    BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE);
-EARLY_DRIVER_MODULE(gic, ofwbus, arm_gic_driver, arm_gic_devclass, 0, 0,
-    BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE);
-
 static void
 gic_post_filter(void *arg)
 {
@@ -395,6 +372,7 @@ gic_config_irq(int irq, enum intr_trigge
     enum intr_polarity pol)
 {
        struct arm_gic_softc *sc = arm_gic_sc;
+       device_t dev = sc->gic_dev;
        uint32_t reg;
        uint32_t mask;
 
@@ -439,7 +417,7 @@ gic_config_irq(int irq, enum intr_trigge
        return (0);
 
 invalid_args:
-       device_printf(sc->dev, "gic_config_irg, invalid parameters\n");
+       device_printf(dev, "gic_config_irg, invalid parameters\n");
        return (EINVAL);
 }
 
@@ -470,6 +448,7 @@ pic_ipi_get(int i)
                        return (0);
                return (i);
        }
+
        return (0x3ff);
 }
 
@@ -479,3 +458,22 @@ pic_ipi_clear(int ipi)
 }
 #endif
 
+static device_method_t arm_gic_methods[] = {
+       /* Device interface */
+       DEVMETHOD(device_probe,         arm_gic_probe),
+       DEVMETHOD(device_attach,        arm_gic_attach),
+       { 0, 0 }
+};
+
+static driver_t arm_gic_driver = {
+       "gic",
+       arm_gic_methods,
+       sizeof(struct arm_gic_softc),
+};
+
+static devclass_t arm_gic_devclass;
+
+EARLY_DRIVER_MODULE(gic, simplebus, arm_gic_driver, arm_gic_devclass, 0, 0,
+    BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE);
+EARLY_DRIVER_MODULE(gic, ofwbus, arm_gic_driver, arm_gic_devclass, 0, 0,
+    BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to