summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorgonzo <gonzo@FreeBSD.org>2012-07-17 03:18:12 +0000
committergonzo <gonzo@FreeBSD.org>2012-07-17 03:18:12 +0000
commitdf07abd457b125e834e6e9d477a00c8571b967f3 (patch)
treee995d73c6f0233d1b86fb92064f5bc44d01df00d /sys/arm
parentad2692aed9926b184f3b9376b29d1dab33d2497f (diff)
downloadFreeBSD-src-df07abd457b125e834e6e9d477a00c8571b967f3.zip
FreeBSD-src-df07abd457b125e834e6e9d477a00c8571b967f3.tar.gz
Move unmask IRQ function call up to nexus device level.
FDT-enabled targets were broken after r238043 that relies on device up the hierarchy to properly setup interrupt. nexus device for ARM platforms did job only partially: setting handler but not unmasking interrupt. Unmasking was performed by platform code. Reviewed by: andrew@
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/nexus.c8
-rw-r--r--sys/arm/at91/at91.c3
-rw-r--r--sys/arm/econa/econa.c2
-rw-r--r--sys/arm/s3c2xx0/s3c24x0.c1
-rw-r--r--sys/arm/xscale/i8134x/i81342.c1
-rw-r--r--sys/arm/xscale/pxa/pxa_obio.c1
6 files changed, 6 insertions, 10 deletions
diff --git a/sys/arm/arm/nexus.c b/sys/arm/arm/nexus.c
index 04cf1bf..93643d5 100644
--- a/sys/arm/arm/nexus.c
+++ b/sys/arm/arm/nexus.c
@@ -117,12 +117,16 @@ static int
nexus_setup_intr(device_t dev, device_t child, struct resource *res, int flags,
driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep)
{
+ int irq;
if ((rman_get_flags(res) & RF_SHAREABLE) == 0)
flags |= INTR_EXCL;
- arm_setup_irqhandler(device_get_nameunit(child),
- filt, intr, arg, rman_get_start(res), flags, cookiep);
+ for (irq = rman_get_start(res); irq <= rman_get_end(res); irq++) {
+ arm_setup_irqhandler(device_get_nameunit(child),
+ filt, intr, arg, irq, flags, cookiep);
+ arm_unmask_irq(irq);
+ }
return (0);
}
diff --git a/sys/arm/at91/at91.c b/sys/arm/at91/at91.c
index 4fe6143..deb3c38 100644
--- a/sys/arm/at91/at91.c
+++ b/sys/arm/at91/at91.c
@@ -397,7 +397,6 @@ at91_setup_intr(device_t dev, device_t child,
struct resource *ires, int flags, driver_filter_t *filt,
driver_intr_t *intr, void *arg, void **cookiep)
{
- struct at91_softc *sc = device_get_softc(dev);
int error;
if (rman_get_start(ires) == AT91_IRQ_SYSTEM && filt == NULL)
@@ -407,8 +406,6 @@ at91_setup_intr(device_t dev, device_t child,
if (error)
return (error);
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IECR,
- 1 << rman_get_start(ires));
return (0);
}
diff --git a/sys/arm/econa/econa.c b/sys/arm/econa/econa.c
index f96dfc3..9f29a7f 100644
--- a/sys/arm/econa/econa.c
+++ b/sys/arm/econa/econa.c
@@ -602,8 +602,6 @@ econa_setup_intr(device_t dev, device_t child,
if (error)
return (error);
- arm_unmask_irq(rman_get_start(ires));
-
return (0);
}
diff --git a/sys/arm/s3c2xx0/s3c24x0.c b/sys/arm/s3c2xx0/s3c24x0.c
index cddd435..f90c15d 100644
--- a/sys/arm/s3c2xx0/s3c24x0.c
+++ b/sys/arm/s3c2xx0/s3c24x0.c
@@ -220,7 +220,6 @@ s3c24x0_setup_intr(device_t dev, device_t child,
/* Enable the external interrupt pin */
s3c24x0_enable_ext_intr(irq - S3C24X0_EXTIRQ_MIN);
}
- arm_unmask_irq(irq);
}
return (0);
}
diff --git a/sys/arm/xscale/i8134x/i81342.c b/sys/arm/xscale/i8134x/i81342.c
index 2bfab78..bb3795c 100644
--- a/sys/arm/xscale/i8134x/i81342.c
+++ b/sys/arm/xscale/i8134x/i81342.c
@@ -435,7 +435,6 @@ i81342_setup_intr(device_t dev, device_t child, struct resource *ires,
filt, intr, arg, cookiep);
if (error)
return (error);
- arm_unmask_irq(rman_get_start(ires));
return (0);
}
diff --git a/sys/arm/xscale/pxa/pxa_obio.c b/sys/arm/xscale/pxa/pxa_obio.c
index 0f7e4a6..5cbb9c3 100644
--- a/sys/arm/xscale/pxa/pxa_obio.c
+++ b/sys/arm/xscale/pxa/pxa_obio.c
@@ -181,7 +181,6 @@ pxa_setup_intr(device_t dev, device_t child, struct resource *irq, int flags,
filter, ithread, arg, cookiep);
if (error)
return (error);
- arm_unmask_irq(rman_get_start(irq));
return (0);
}
OpenPOWER on IntegriCloud