diff --git a/include/sbi_utils/irqchip/fdt_irqchip_plic.h b/include/sbi_utils/irqchip/fdt_irqchip_plic.h index f158b02f..98d4de57 100644 --- a/include/sbi_utils/irqchip/fdt_irqchip_plic.h +++ b/include/sbi_utils/irqchip/fdt_irqchip_plic.h @@ -17,4 +17,6 @@ void fdt_plic_context_save(bool smode, u32 *enable, u32 *threshold); void fdt_plic_context_restore(bool smode, const u32 *enable, u32 threshold); +void thead_plic_restore(void); + #endif diff --git a/lib/utils/irqchip/fdt_irqchip_plic.c b/lib/utils/irqchip/fdt_irqchip_plic.c index 89b12d40..a6e185cf 100644 --- a/lib/utils/irqchip/fdt_irqchip_plic.c +++ b/lib/utils/irqchip/fdt_irqchip_plic.c @@ -151,6 +151,13 @@ static void thead_plic_plat_init(struct plic_data *pd) writel_relaxed(BIT(0), (char *)pd->addr + THEAD_PLIC_CTRL_REG); } +void thead_plic_restore(void) +{ + struct plic_data *plic = plic_hartid2data[current_hartid()]; + + thead_plic_plat_init(plic); +} + static const struct fdt_match irqchip_plic_match[] = { { .compatible = "riscv,plic0" }, { .compatible = "sifive,plic-1.0.0" },