Message ID | 20241206-lpm-v6-10-constraints-pmdomain-v6-3-833980158c68@baylibre.com (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | pmdomain: ti_sci: collect and send low-power mode constraints | expand |
On Dec 06, 2024 at 14:12:52 -0800, Kevin Hilman wrote: > 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. > > Tested-by: Dhruva Gole <d-gole@ti.com> > Signed-off-by: Kevin Hilman <khilman@baylibre.com> > --- Reviewed-by: Dhruva Gole <d-gole@ti.com>
diff --git a/drivers/pmdomain/ti/ti_sci_pm_domains.c b/drivers/pmdomain/ti/ti_sci_pm_domains.c index 587961519dcc9e13c32efe76cdaf801281f72f67..3fb78343d4388a7087dab5061c1127586968ef19 100644 --- a/drivers/pmdomain/ti/ti_sci_pm_domains.c +++ b/drivers/pmdomain/ti/ti_sci_pm_domains.c @@ -87,6 +87,15 @@ static inline void ti_sci_pd_set_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; + } + ret = ti_sci->ops.pm_ops.set_device_constraint(ti_sci, pd->idx, TISCI_MSG_CONSTRAINT_SET); if (!ret)