lib: utils/irqchip: Add unique_id to plic, aplic, and imsic data 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@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260213055342.3124872-7-anup.patel@oss.qualcomm.com Signed-off-by: Anup Patel <anup@brainfault.org>
diff --git a/include/sbi_utils/irqchip/aplic.h b/include/sbi_utils/irqchip/aplic.h index ad61377..3461d1c 100644 --- a/include/sbi_utils/irqchip/aplic.h +++ b/include/sbi_utils/irqchip/aplic.h
@@ -35,6 +35,7 @@ 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 353cefe..88dd3cf 100644 --- a/include/sbi_utils/irqchip/imsic.h +++ b/include/sbi_utils/irqchip/imsic.h
@@ -24,6 +24,7 @@ }; 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 18aa746..0dbf4ed 100644 --- a/include/sbi_utils/irqchip/plic.h +++ b/include/sbi_utils/irqchip/plic.h
@@ -17,6 +17,7 @@ /* 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 a8c6e1a..b57eae1 100644 --- a/lib/utils/fdt/fdt_helper.c +++ b/lib/utils/fdt/fdt_helper.c
@@ -673,6 +673,7 @@ rc = fdt_get_node_addr_size(fdt, nodeoff, 0, ®_addr, ®_size); if (rc < 0 || !reg_size) return SBI_ENODEV; + aplic->unique_id = nodeoff; aplic->addr = reg_addr; aplic->size = reg_size; @@ -805,6 +806,7 @@ 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 @@ ®_addr, ®_size); if (rc < 0 || !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 70a97f3..ce2f551 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 60d719e..1d098da 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 65f5d49..0b76104 100644 --- a/platform/kendryte/k210/platform.c +++ b/platform/kendryte/k210/platform.c
@@ -30,6 +30,7 @@ } 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 14fbaeb..07b2797 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 38be1b5..1f2a1dc 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,