static int gic_notifier(struct notifier_block *self, unsigned long cmd, void *v) { int i; for (i = 0; i < MAX_GIC_NR; i++) { switch (cmd) { case CPU_PM_ENTER: gic_cpu_save(i); break; case CPU_PM_ENTER_FAILED: case CPU_PM_EXIT: gic_cpu_restore(i); break; case CPU_CLUSTER_PM_ENTER: gic_dist_save(i); break; case CPU_CLUSTER_PM_ENTER_FAILED: case CPU_CLUSTER_PM_EXIT: gic_dist_restore(i); break; } } return NOTIFY_OK; }
static int gic_runtime_resume(struct device *dev) { struct gic_chip_data *gic = dev_get_drvdata(dev); int ret; ret = pm_clk_resume(dev); if (ret) return ret; /* * On the very first resume, the pointer to the driver data * will be NULL and this is intentional, because we do not * want to restore the GIC on the very first resume. So if * the pointer is not valid just return. */ if (!gic) return 0; gic_dist_restore(gic); gic_cpu_restore(gic); return 0; }