From: Alexander Usyskin <alexander.usyskin@intel.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jani Nikula <jani.nikula@linux.intel.com>, Joonas Lahtinen <joonas.lahtinen@linux.intel.com>, Rodrigo Vivi <rodrigo.vivi@intel.com>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch> Cc: linux-kernel@vger.kernel.org, Tomas Winkler <tomas.winkler@intel.com>, Alexander Usyskin <alexander.usyskin@intel.com>, Vitaly Lubart <vitaly.lubart@intel.com>, intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH v2 4/5] mei: gsc: add runtime pm handlers Date: Wed, 19 Jan 2022 17:58:06 +0200 [thread overview] Message-ID: <20220119155807.222657-5-alexander.usyskin@intel.com> (raw) In-Reply-To: <20220119155807.222657-1-alexander.usyskin@intel.com> From: Tomas Winkler <tomas.winkler@intel.com> Implement runtime handlers for mei-gsc, to track idle state of the device properly. CC: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> --- drivers/misc/mei/gsc-me.c | 80 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/drivers/misc/mei/gsc-me.c b/drivers/misc/mei/gsc-me.c index f58e54d2c1fc..fddae8009b62 100644 --- a/drivers/misc/mei/gsc-me.c +++ b/drivers/misc/mei/gsc-me.c @@ -158,7 +158,85 @@ static int __maybe_unused mei_gsc_pm_resume(struct device *device) return 0; } -static SIMPLE_DEV_PM_OPS(mei_gsc_pm_ops, mei_gsc_pm_suspend, mei_gsc_pm_resume); +static int __maybe_unused mei_gsc_pm_runtime_idle(struct device *device) +{ + struct mei_device *dev; + + dev_dbg(device, "rpm: me: runtime_idle\n"); + + dev = dev_get_drvdata(device); + if (!dev) + return -ENODEV; + if (mei_write_is_idle(dev)) + pm_runtime_autosuspend(device); + + return -EBUSY; +} + +static int __maybe_unused mei_gsc_pm_runtime_suspend(struct device *device) +{ + struct mei_device *dev; + struct mei_me_hw *hw; + int ret; + + dev_dbg(device, "rpm: me: runtime suspend\n"); + + dev = dev_get_drvdata(device); + if (!dev) + return -ENODEV; + + mutex_lock(&dev->device_lock); + + if (mei_write_is_idle(dev)) { + hw = to_me_hw(dev); + hw->pg_state = MEI_PG_ON; + ret = 0; + } else { + ret = -EAGAIN; + } + + mutex_unlock(&dev->device_lock); + + dev_dbg(device, "rpm: me: runtime suspend ret=%d\n", ret); + + return ret; +} + +static int __maybe_unused mei_gsc_pm_runtime_resume(struct device *device) +{ + struct mei_device *dev; + struct mei_me_hw *hw; + irqreturn_t irq_ret; + + dev_dbg(device, "rpm: me: runtime resume\n"); + + dev = dev_get_drvdata(device); + if (!dev) + return -ENODEV; + + mutex_lock(&dev->device_lock); + + hw = to_me_hw(dev); + hw->pg_state = MEI_PG_OFF; + + mutex_unlock(&dev->device_lock); + + irq_ret = mei_me_irq_thread_handler(1, dev); + if (irq_ret != IRQ_HANDLED) + dev_err(dev->dev, "thread handler fail %d\n", irq_ret); + + dev_dbg(device, "rpm: me: runtime resume ret = 0\n"); + + return 0; +} + +static const struct dev_pm_ops mei_gsc_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(mei_gsc_pm_suspend, + mei_gsc_pm_resume) + SET_RUNTIME_PM_OPS(mei_gsc_pm_runtime_suspend, + mei_gsc_pm_runtime_resume, + mei_gsc_pm_runtime_idle) +}; static const struct auxiliary_device_id mei_gsc_id_table[] = { { -- 2.32.0
WARNING: multiple messages have this Message-ID (diff)
From: Alexander Usyskin <alexander.usyskin@intel.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jani Nikula <jani.nikula@linux.intel.com>, Joonas Lahtinen <joonas.lahtinen@linux.intel.com>, Rodrigo Vivi <rodrigo.vivi@intel.com>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch> Cc: Tomas Winkler <tomas.winkler@intel.com>, Alexander Usyskin <alexander.usyskin@intel.com>, Vitaly Lubart <vitaly.lubart@intel.com>, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/5] mei: gsc: add runtime pm handlers Date: Wed, 19 Jan 2022 17:58:06 +0200 [thread overview] Message-ID: <20220119155807.222657-5-alexander.usyskin@intel.com> (raw) In-Reply-To: <20220119155807.222657-1-alexander.usyskin@intel.com> From: Tomas Winkler <tomas.winkler@intel.com> Implement runtime handlers for mei-gsc, to track idle state of the device properly. CC: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> --- drivers/misc/mei/gsc-me.c | 80 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/drivers/misc/mei/gsc-me.c b/drivers/misc/mei/gsc-me.c index f58e54d2c1fc..fddae8009b62 100644 --- a/drivers/misc/mei/gsc-me.c +++ b/drivers/misc/mei/gsc-me.c @@ -158,7 +158,85 @@ static int __maybe_unused mei_gsc_pm_resume(struct device *device) return 0; } -static SIMPLE_DEV_PM_OPS(mei_gsc_pm_ops, mei_gsc_pm_suspend, mei_gsc_pm_resume); +static int __maybe_unused mei_gsc_pm_runtime_idle(struct device *device) +{ + struct mei_device *dev; + + dev_dbg(device, "rpm: me: runtime_idle\n"); + + dev = dev_get_drvdata(device); + if (!dev) + return -ENODEV; + if (mei_write_is_idle(dev)) + pm_runtime_autosuspend(device); + + return -EBUSY; +} + +static int __maybe_unused mei_gsc_pm_runtime_suspend(struct device *device) +{ + struct mei_device *dev; + struct mei_me_hw *hw; + int ret; + + dev_dbg(device, "rpm: me: runtime suspend\n"); + + dev = dev_get_drvdata(device); + if (!dev) + return -ENODEV; + + mutex_lock(&dev->device_lock); + + if (mei_write_is_idle(dev)) { + hw = to_me_hw(dev); + hw->pg_state = MEI_PG_ON; + ret = 0; + } else { + ret = -EAGAIN; + } + + mutex_unlock(&dev->device_lock); + + dev_dbg(device, "rpm: me: runtime suspend ret=%d\n", ret); + + return ret; +} + +static int __maybe_unused mei_gsc_pm_runtime_resume(struct device *device) +{ + struct mei_device *dev; + struct mei_me_hw *hw; + irqreturn_t irq_ret; + + dev_dbg(device, "rpm: me: runtime resume\n"); + + dev = dev_get_drvdata(device); + if (!dev) + return -ENODEV; + + mutex_lock(&dev->device_lock); + + hw = to_me_hw(dev); + hw->pg_state = MEI_PG_OFF; + + mutex_unlock(&dev->device_lock); + + irq_ret = mei_me_irq_thread_handler(1, dev); + if (irq_ret != IRQ_HANDLED) + dev_err(dev->dev, "thread handler fail %d\n", irq_ret); + + dev_dbg(device, "rpm: me: runtime resume ret = 0\n"); + + return 0; +} + +static const struct dev_pm_ops mei_gsc_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(mei_gsc_pm_suspend, + mei_gsc_pm_resume) + SET_RUNTIME_PM_OPS(mei_gsc_pm_runtime_suspend, + mei_gsc_pm_runtime_resume, + mei_gsc_pm_runtime_idle) +}; static const struct auxiliary_device_id mei_gsc_id_table[] = { { -- 2.32.0
next prev parent reply other threads:[~2022-01-19 15:58 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-01-19 15:58 [PATCH v2 0/5] Add driver for GSC controller Alexander Usyskin 2022-01-19 15:58 ` [Intel-gfx] " Alexander Usyskin 2022-01-19 15:58 ` [PATCH v2 1/5] drm/i915/gsc: add gsc as a mei auxiliary device Alexander Usyskin 2022-01-19 15:58 ` [Intel-gfx] " Alexander Usyskin 2022-01-19 15:58 ` [PATCH v2 2/5] mei: add support for graphics system controller (gsc) devices Alexander Usyskin 2022-01-19 15:58 ` [Intel-gfx] " Alexander Usyskin 2022-01-26 18:05 ` Greg Kroah-Hartman 2022-01-26 18:05 ` [Intel-gfx] " Greg Kroah-Hartman 2022-01-27 8:51 ` Usyskin, Alexander 2022-01-27 8:51 ` [Intel-gfx] " Usyskin, Alexander 2022-01-27 9:12 ` Jani Nikula 2022-01-27 9:12 ` [Intel-gfx] " Jani Nikula 2022-01-19 15:58 ` [Intel-gfx] [PATCH v2 3/5] mei: gsc: setup char driver alive in spite of firmware handshake failure Alexander Usyskin 2022-01-19 15:58 ` Alexander Usyskin 2022-01-19 15:58 ` Alexander Usyskin [this message] 2022-01-19 15:58 ` [PATCH v2 4/5] mei: gsc: add runtime pm handlers Alexander Usyskin 2022-01-26 18:06 ` Greg Kroah-Hartman 2022-01-26 18:06 ` [Intel-gfx] " Greg Kroah-Hartman 2022-01-19 15:58 ` [Intel-gfx] [PATCH v2 5/5] mei: gsc: retrieve the firmware version Alexander Usyskin 2022-01-19 15:58 ` Alexander Usyskin 2022-01-19 17:47 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Add driver for GSC controller (rev2) Patchwork 2022-01-19 17:51 ` [PATCH v2 0/5] Add driver for GSC controller Greg Kroah-Hartman 2022-01-19 17:51 ` [Intel-gfx] " Greg Kroah-Hartman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220119155807.222657-5-alexander.usyskin@intel.com \ --to=alexander.usyskin@intel.com \ --cc=airlied@linux.ie \ --cc=daniel@ffwll.ch \ --cc=gregkh@linuxfoundation.org \ --cc=intel-gfx@lists.freedesktop.org \ --cc=jani.nikula@linux.intel.com \ --cc=joonas.lahtinen@linux.intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=rodrigo.vivi@intel.com \ --cc=tomas.winkler@intel.com \ --cc=vitaly.lubart@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.