[PATCH 6/8] lib: utils/irqchip: Add unique_id to plic, aplic, and imsic data
Anup Patel
anup.patel at oss.qualcomm.com
Sat Feb 7 02:26:00 PST 2026
Add a 32-bit unique ID to plic, aplic, and imsic data which can be
used to differentiate multiple irqchip devices.
Signed-off-by: Anup Patel <anup.patel at oss.qualcomm.com>
---
include/sbi_utils/irqchip/aplic.h | 1 +
include/sbi_utils/irqchip/imsic.h | 1 +
include/sbi_utils/irqchip/plic.h | 1 +
lib/utils/fdt/fdt_helper.c | 3 +++
platform/generic/openhwgroup/ariane.c | 1 +
platform/generic/openhwgroup/openpiton.c | 1 +
platform/kendryte/k210/platform.c | 1 +
platform/nuclei/ux600/platform.c | 1 +
platform/template/platform.c | 1 +
9 files changed, 11 insertions(+)
diff --git a/include/sbi_utils/irqchip/aplic.h b/include/sbi_utils/irqchip/aplic.h
index ad613778..3461d1c7 100644
--- a/include/sbi_utils/irqchip/aplic.h
+++ b/include/sbi_utils/irqchip/aplic.h
@@ -35,6 +35,7 @@ struct aplic_data {
struct sbi_irqchip_device irqchip;
struct sbi_dlist node;
/* Public members */
+ u32 unique_id;
unsigned long addr;
unsigned long size;
unsigned long num_idc;
diff --git a/include/sbi_utils/irqchip/imsic.h b/include/sbi_utils/irqchip/imsic.h
index 353cefec..88dd3cfb 100644
--- a/include/sbi_utils/irqchip/imsic.h
+++ b/include/sbi_utils/irqchip/imsic.h
@@ -24,6 +24,7 @@ struct imsic_regs {
};
struct imsic_data {
+ u32 unique_id;
bool targets_mmode;
u32 guest_index_bits;
u32 hart_index_bits;
diff --git a/include/sbi_utils/irqchip/plic.h b/include/sbi_utils/irqchip/plic.h
index 18aa7469..0dbf4ed3 100644
--- a/include/sbi_utils/irqchip/plic.h
+++ b/include/sbi_utils/irqchip/plic.h
@@ -17,6 +17,7 @@ struct plic_data {
/* Private members */
struct sbi_irqchip_device irqchip;
/* Public members */
+ u32 unique_id;
unsigned long addr;
unsigned long size;
unsigned long num_src;
diff --git a/lib/utils/fdt/fdt_helper.c b/lib/utils/fdt/fdt_helper.c
index 799fd48d..4cd71b8f 100644
--- a/lib/utils/fdt/fdt_helper.c
+++ b/lib/utils/fdt/fdt_helper.c
@@ -673,6 +673,7 @@ int fdt_parse_aplic_node(const void *fdt, int nodeoff, struct aplic_data *aplic)
rc = fdt_get_node_addr_size(fdt, nodeoff, 0, ®_addr, ®_size);
if (rc < 0 || !reg_addr || !reg_size)
return SBI_ENODEV;
+ aplic->unique_id = nodeoff;
aplic->addr = reg_addr;
aplic->size = reg_size;
@@ -805,6 +806,7 @@ int fdt_parse_imsic_node(const void *fdt, int nodeoff, struct imsic_data *imsic)
if (nodeoff < 0 || !imsic || !fdt)
return SBI_ENODEV;
+ imsic->unique_id = nodeoff;
imsic->targets_mmode = false;
val = fdt_getprop(fdt, nodeoff, "interrupts-extended", &len);
if (val && len > sizeof(fdt32_t)) {
@@ -887,6 +889,7 @@ int fdt_parse_plic_node(const void *fdt, int nodeoffset, struct plic_data *plic)
®_addr, ®_size);
if (rc < 0 || !reg_addr || !reg_size)
return SBI_ENODEV;
+ plic->unique_id = nodeoffset;
plic->addr = reg_addr;
plic->size = reg_size;
diff --git a/platform/generic/openhwgroup/ariane.c b/platform/generic/openhwgroup/ariane.c
index 70a97f38..ce2f5512 100644
--- a/platform/generic/openhwgroup/ariane.c
+++ b/platform/generic/openhwgroup/ariane.c
@@ -24,6 +24,7 @@
CLINT_MTIMER_OFFSET)
static struct plic_data plic = {
+ .unique_id = 0,
.addr = ARIANE_PLIC_ADDR,
.size = ARIANE_PLIC_SIZE,
.num_src = ARIANE_PLIC_NUM_SOURCES,
diff --git a/platform/generic/openhwgroup/openpiton.c b/platform/generic/openhwgroup/openpiton.c
index 60d719e1..1d098da7 100644
--- a/platform/generic/openhwgroup/openpiton.c
+++ b/platform/generic/openhwgroup/openpiton.c
@@ -23,6 +23,7 @@
(OPENPITON_DEFAULT_CLINT_ADDR + CLINT_MTIMER_OFFSET)
static struct plic_data plic = {
+ .unique_id = 0,
.addr = (unsigned long)OPENPITON_DEFAULT_PLIC_ADDR,
.size = OPENPITON_DEFAULT_PLIC_SIZE,
.num_src = OPENPITON_DEFAULT_PLIC_NUM_SOURCES,
diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c
index 65f5d497..0b76104c 100644
--- a/platform/kendryte/k210/platform.c
+++ b/platform/kendryte/k210/platform.c
@@ -30,6 +30,7 @@ unsigned long fw_platform_init(unsigned long arg0, unsigned long arg1,
}
static struct plic_data plic = {
+ .unique_id = 0,
.addr = K210_PLIC_BASE_ADDR,
.size = K210_PLIC_BASE_SIZE,
.num_src = K210_PLIC_NUM_SOURCES,
diff --git a/platform/nuclei/ux600/platform.c b/platform/nuclei/ux600/platform.c
index 14fbaeb6..07b27977 100644
--- a/platform/nuclei/ux600/platform.c
+++ b/platform/nuclei/ux600/platform.c
@@ -63,6 +63,7 @@
static u32 ux600_clk_freq = 8000000;
static struct plic_data plic = {
+ .unique_id = 0,
.addr = UX600_PLIC_ADDR,
.size = UX600_PLIC_SIZE,
.num_src = UX600_PLIC_NUM_SOURCES,
diff --git a/platform/template/platform.c b/platform/template/platform.c
index 38be1b5c..1f2a1dce 100644
--- a/platform/template/platform.c
+++ b/platform/template/platform.c
@@ -34,6 +34,7 @@
#define PLATFORM_UART_BAUDRATE 115200
static struct plic_data plic = {
+ .unique_id = 0,
.addr = PLATFORM_PLIC_ADDR,
.size = PLATFORM_PLIC_SIZE,
.num_src = PLATFORM_PLIC_NUM_SOURCES,
--
2.43.0
More information about the opensbi
mailing list