[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240805-lpm-v6-10-constraints-pmdomain-v1-3-d186b68ded4c@baylibre.com>
Date: Mon, 05 Aug 2024 16:38:41 -0700
From: Kevin Hilman <khilman@...libre.com>
To: Ulf Hansson <ulf.hansson@...aro.org>
Cc: Nishanth Menon <nm@...com>, Vibhore Vardhan <vibhore@...com>,
Dhruva Gole <d-gole@...com>, Akashdeep Kaur <a-kaur@...com>,
Sebin Francis <sebin.francis@...com>,
Markus Schneider-Pargmann <msp@...libre.com>,
linux-arm-kernel@...ts.infradead.org, linux-pm@...r.kernel.org,
linux-kernel@...r.kernel.org, 20240801195422.2296347-1-msp@...libre.com
Subject: [PATCH 3/3] pmdomain: ti_sci: handle wake IRQs for IO daisy chain
wakeups
When a device supports IO daisy-chain wakeups, it uses a dedicated
wake IRQ. Devices with IO daisy-chain wakeups enabled should not set
wakeup constraints since these can happen even from deep power states,
so should not prevent the DM from picking deep power states.
Wake IRQs are set with dev_pm_set_wake_irq() or
dev_pm_set_dedicated_wake_irq(). The latter is used by the serial
driver used on K3 platforms (drivers/tty/serial/8250/8250_omap.c)
when the interrupts-extended property is used to describe the
dedicated wakeup interrupt.
Detect these wake IRQs in the suspend path, and if set, skip sending
constraint.
Signed-off-by: Kevin Hilman <khilman@...libre.com>
---
drivers/pmdomain/ti/ti_sci_pm_domains.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pmdomain/ti/ti_sci_pm_domains.c b/drivers/pmdomain/ti/ti_sci_pm_domains.c
index 7cd6ae957289..4c85ce50510f 100644
--- a/drivers/pmdomain/ti/ti_sci_pm_domains.c
+++ b/drivers/pmdomain/ti/ti_sci_pm_domains.c
@@ -99,6 +99,15 @@ static inline bool ti_sci_pd_check_wkup_constraint(struct device *dev)
int ret;
if (device_may_wakeup(dev)) {
+ /*
+ * If device can wakeup using IO daisy chain wakeups,
+ * we do not want to set a constraint.
+ */
+ if (dev->power.wakeirq) {
+ dev_dbg(dev, "%s: has wake IRQ, not setting constraints\n", __func__);
+ return false;
+ }
+
ret = ti_sci->ops.pm_ops.set_device_constraint(ti_sci, pd->idx,
TISCI_MSG_CONSTRAINT_SET);
if (!ret) {
--
2.46.0
Powered by blists - more mailing lists