[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z+Nv8U/4P3taDpUq@perf>
Date: Wed, 26 Mar 2025 12:09:37 +0900
From: Youngmin Nam <youngmin.nam@...sung.com>
To: Marc Zyngier <maz@...nel.org>, Thomas Gleixner <tglx@...utronix.de>
Cc: Saravana Kannan <saravanak@...gle.com>, Ulf Hansson
<ulf.hansson@...aro.org>, Vincent Guittot <vincent.guittot@...aro.org>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
kernel-team@...roid.com, youngmin.nam@...sung.com, hajun.sung@...sung.com,
d7271.choe@...sung.com, joonki.min@...sung.com
Subject: [GICv3 ITS]S2IDLE framework does not invoke syscore_ops in GICv3
ITS driver
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 ?
Powered by blists - more mailing lists