lib: utils/irqchip: Add wrapper for T-HEAD PLIC delegation

The delegation bit is lost along with the rest of the PLIC state when
the CPU power domain in the Allwinner D1 is powered down, so the PLIC
needs to be re-delegated to S-mode during the hart resume path.

Reviewed-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Samuel Holland <samuel@sholland.org>
This commit is contained in:
Samuel Holland 2022-06-12 20:03:54 -05:00 committed by Anup Patel
parent 69be3dff9d
commit 5e5675874c
2 changed files with 9 additions and 0 deletions

View File

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

View File

@ -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" },