[GICv3 ITS]S2IDLE framework does not invoke syscore_ops in GICv3 ITS driver
From: Youngmin Nam
Date: Tue Mar 25 2025 - 23:05:45 EST
Hi.
On our SoC, we are using S2IDLE instead of S2R as a system suspend mode.
However, when I try to enable ARM GICv3 ITS driver (drivers/irqchip/irq-gic-v3-its.c),
I noticed that there is no proper way to invoke suspend/resume callback,
because it only uses syscore_ops, which is not called in an s2idle scenario.
Please refer to the codes below.
<drivers/irqchip/irq-gic-v3-its.c>
5028 static struct syscore_ops its_syscore_ops = {
5029 .suspend = its_save_disable,
5030 .resume = its_restore_enable,
5031 };
...
5803 register_syscore_ops(&its_syscore_ops);
<kernel/power/suspend.c>
444 if (state == PM_SUSPEND_TO_IDLE) {
445 s2idle_loop();
446 goto Platform_wake;
447 }
448
449 error = pm_sleep_disable_secondary_cpus();
450 if (error || suspend_test(TEST_CPUS)) {
451 log_suspend_abort_reason("Disabling non-boot cpus failed");
452 goto Enable_cpus;
453 }
454
455 arch_suspend_disable_irqs();
456 BUG_ON(!irqs_disabled());
457
458 system_state = SYSTEM_SUSPEND;
459
460 error = syscore_suspend();
How should we handle this situation ?