diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index f95c8ccff76858244fe866dab1c8263489564007..03b720aaa054658a53aab77dbd4452d641f6b771 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -54,8 +54,6 @@ #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1ULL << 0) #define ITS_FLAGS_WORKAROUND_CAVIUM_22375 (1ULL << 1) #define ITS_FLAGS_WORKAROUND_CAVIUM_23144 (1ULL << 2) -#define ITS_FLAGS_SAVE_SUSPEND_STATE (1ULL << 3) -#define ITS_FLAGS_SAVE_HIBERNATE_STATE (1ULL << 4) #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING (1 << 0) #define RDIST_FLAGS_RD_TABLES_PREALLOCATED (1 << 1) @@ -3617,17 +3615,6 @@ static int its_save_disable(void) raw_spin_lock(&its_lock); list_for_each_entry(its, &its_nodes, entry) { void __iomem *base; - u64 flags; - - if (system_in_hibernation()) - its->flags |= ITS_FLAGS_SAVE_HIBERNATE_STATE; - - flags = its->flags; - flags &= (ITS_FLAGS_SAVE_SUSPEND_STATE | - ITS_FLAGS_SAVE_HIBERNATE_STATE); - - if (!flags) - continue; base = its->base; its->ctlr_save = readl_relaxed(base + GITS_CTLR); @@ -3647,9 +3634,6 @@ static int its_save_disable(void) list_for_each_entry_continue_reverse(its, &its_nodes, entry) { void __iomem *base; - if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE)) - continue; - base = its->base; writel_relaxed(its->ctlr_save, base + GITS_CTLR); } @@ -3667,16 +3651,8 @@ static void its_restore_enable(void) raw_spin_lock(&its_lock); list_for_each_entry(its, &its_nodes, entry) { void __iomem *base; - u64 flags; int i; - flags = its->flags; - flags &= (ITS_FLAGS_SAVE_SUSPEND_STATE | - ITS_FLAGS_SAVE_HIBERNATE_STATE); - if (!flags) - continue; - - its->flags &= ~ITS_FLAGS_SAVE_HIBERNATE_STATE; base = its->base; /* @@ -3684,7 +3660,10 @@ static void its_restore_enable(void) * don't restore it since writing to CBASER or BASER * registers is undefined according to the GIC v3 ITS * Specification. + * + * Firmware resuming with the ITS enabled is terminally broken. */ + WARN_ON(readl_relaxed(base + GITS_CTLR) & GITS_CTLR_ENABLE); ret = its_force_quiescent(base); if (ret) { pr_err("ITS@%pa: failed to quiesce on resume: %d\n", @@ -3950,9 +3929,6 @@ static int __init its_probe_one(struct resource *res, ctlr |= GITS_CTLR_ImDe; writel_relaxed(ctlr, its->base + GITS_CTLR); - if (GITS_TYPER_HCC(typer)) - its->flags |= ITS_FLAGS_SAVE_SUSPEND_STATE; - err = its_init_domain(handle, its); if (err) goto out_free_tables;