mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-04-13 06:11:37 +01:00
lib: sbi_irqchip: Allow registering interrupt handlers
To handle external interrupts in M-mode, the sbi_irqchip framework must allow registering interrupt handlers from device drivers. Signed-off-by: Anup Patel <anup.patel@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260213055342.3124872-9-anup.patel@oss.qualcomm.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -307,6 +307,7 @@ int aplic_cold_irqchip_init(struct aplic_data *aplic)
|
||||
|
||||
/* Register irqchip device */
|
||||
aplic->irqchip.id = aplic->unique_id;
|
||||
aplic->irqchip.num_hwirq = aplic->num_source + 1;
|
||||
rc = sbi_irqchip_add_device(&aplic->irqchip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -346,9 +346,17 @@ int imsic_data_check(struct imsic_data *imsic)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int imsic_hwirq_setup(struct sbi_irqchip_device *chip, u32 hwirq)
|
||||
{
|
||||
if (!hwirq || hwirq == IMSIC_IPI_ID)
|
||||
return SBI_ENOTSUPP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct sbi_irqchip_device imsic_device = {
|
||||
.warm_init = imsic_warm_irqchip_init,
|
||||
.process_hwirqs = imsic_process_hwirqs,
|
||||
.hwirq_setup = imsic_hwirq_setup,
|
||||
};
|
||||
|
||||
int imsic_cold_irqchip_init(struct imsic_data *imsic)
|
||||
@@ -392,6 +400,7 @@ int imsic_cold_irqchip_init(struct imsic_data *imsic)
|
||||
|
||||
/* Register irqchip device */
|
||||
imsic_device.id = imsic->unique_id;
|
||||
imsic_device.num_hwirq = imsic->num_ids + 1;
|
||||
sbi_hartmask_set_all(&imsic_device.target_harts);
|
||||
rc = sbi_irqchip_add_device(&imsic_device);
|
||||
if (rc)
|
||||
|
||||
@@ -281,6 +281,7 @@ int plic_cold_irqchip_init(struct plic_data *plic)
|
||||
|
||||
/* Register irqchip device */
|
||||
plic->irqchip.id = plic->unique_id;
|
||||
plic->irqchip.num_hwirq = plic->num_src + 1;
|
||||
plic->irqchip.warm_init = plic_warm_irqchip_init;
|
||||
return sbi_irqchip_add_device(&plic->irqchip);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user