aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2021-12-05 15:27:50 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2023-04-17 16:02:56 +0000
commit0edbab45af5d36596b77e7d6da71c3b529b09bc1 (patch)
treed7ddd945e63f82c8a51847e69d30a36bb76ea41d
parentda048bd318b3d144de0d4ad9596963d978a75e0f (diff)
downloadsrc-0edbab45af5d36596b77e7d6da71c3b529b09bc1.tar.gz
src-0edbab45af5d36596b77e7d6da71c3b529b09bc1.zip
arm: add an interrupt rman to nexus
Allow the nexus bus to own and manage interrupt resources. Currently, interrupt resources on this architecture are managed completely by ofwbus, but it is desirable that system-wide memory and interrupt resources be managed by the top-level bus. This is a pre-requisite to moving this resource management out of ofwbus. Reviewed By: ian, Elliott Mitchell <ehem+freebsd@m5p.com> MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D32357 (cherry picked from commit 1d03c3578d05b011dc714ec0735a5783c421530b)
-rw-r--r--sys/arm/arm/nexus.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/arm/arm/nexus.c b/sys/arm/arm/nexus.c
index be84ab82d43f..f2506dfb3cb5 100644
--- a/sys/arm/arm/nexus.c
+++ b/sys/arm/arm/nexus.c
@@ -77,6 +77,7 @@ struct nexus_device {
#define DEVTONX(dev) ((struct nexus_device *)device_get_ivars(dev))
static struct rman mem_rman;
+static struct rman irq_rman;
static int nexus_probe(device_t);
static int nexus_attach(device_t);
@@ -171,6 +172,12 @@ nexus_attach(device_t dev)
if (rman_init(&mem_rman) ||
rman_manage_region(&mem_rman, 0, BUS_SPACE_MAXADDR))
panic("nexus_probe mem_rman");
+ irq_rman.rm_start = 0;
+ irq_rman.rm_end = ~0;
+ irq_rman.rm_type = RMAN_ARRAY;
+ irq_rman.rm_descr = "Interrupts";
+ if (rman_init(&irq_rman) || rman_manage_region(&irq_rman, 0, ~0))
+ panic("nexus_attach irq_rman");
/*
* First, deal with the children we know about already
@@ -227,6 +234,10 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
flags &= ~RF_ACTIVE;
switch (type) {
+ case SYS_RES_IRQ:
+ rm = &irq_rman;
+ break;
+
case SYS_RES_MEMORY:
case SYS_RES_IOPORT:
rm = &mem_rman;