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:
Anup Patel
2026-02-13 11:23:42 +05:30
committed by Anup Patel
parent e8ebd1fbc6
commit 0ab0c470d5
5 changed files with 267 additions and 3 deletions

View File

@@ -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)