All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: alexander.usyskin@intel.com
Subject: [Intel-gfx] [CI 4/6] mei: gsc: add runtime pm handlers
Date: Wed, 30 Mar 2022 13:53:32 -0700	[thread overview]
Message-ID: <20220330205334.3016587-5-daniele.ceraolospurio@intel.com> (raw)
In-Reply-To: <20220330205334.3016587-1-daniele.ceraolospurio@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>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/misc/mei/gsc-me.c | 67 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/mei/gsc-me.c b/drivers/misc/mei/gsc-me.c
index 58e39c00f1501..32ea75f5e7aa5 100644
--- a/drivers/misc/mei/gsc-me.c
+++ b/drivers/misc/mei/gsc-me.c
@@ -159,7 +159,72 @@ 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_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 = dev_get_drvdata(device);
+	struct mei_me_hw *hw;
+	int ret;
+
+	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);
+
+	return ret;
+}
+
+static int __maybe_unused mei_gsc_pm_runtime_resume(struct device *device)
+{
+	struct mei_device *dev = dev_get_drvdata(device);
+	struct mei_me_hw *hw;
+	irqreturn_t irq_ret;
+
+	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);
+
+	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.25.1


  parent reply	other threads:[~2022-03-30 20:59 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-30 20:53 [Intel-gfx] [CI 0/6] Add driver for GSC controller Daniele Ceraolo Spurio
2022-03-30 20:53 ` [Intel-gfx] [CI 1/6] drm/i915/gsc: add gsc as a mei auxiliary device Daniele Ceraolo Spurio
2022-03-30 20:53 ` [Intel-gfx] [CI 2/6] mei: add support for graphics system controller (gsc) devices Daniele Ceraolo Spurio
2022-03-30 20:53 ` [Intel-gfx] [CI 3/6] mei: gsc: setup char driver alive in spite of firmware handshake failure Daniele Ceraolo Spurio
2022-03-30 20:53 ` Daniele Ceraolo Spurio [this message]
2022-03-30 20:53 ` [Intel-gfx] [CI 5/6] mei: gsc: retrieve the firmware version Daniele Ceraolo Spurio
2022-03-30 20:53 ` [Intel-gfx] [CI 6/6] HAX: drm/i915: force INTEL_MEI_GSC on for CI Daniele Ceraolo Spurio
2022-03-30 21:43 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Add driver for GSC controller (rev14) Patchwork
2022-03-30 21:45 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-03-30 21:49 ` [Intel-gfx] ✗ Fi.CI.DOCS: " Patchwork
2022-03-30 22:15 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2022-04-04 18:17 [Intel-gfx] [CI 0/6] GSC support Daniele Ceraolo Spurio
2022-04-04 18:17 ` [Intel-gfx] [CI 4/6] mei: gsc: add runtime pm handlers Daniele Ceraolo Spurio
2022-03-28 21:53 [Intel-gfx] [CI 0/6] Add driver for GSC controller Daniele Ceraolo Spurio
2022-03-28 21:53 ` [Intel-gfx] [CI 4/6] mei: gsc: add runtime pm handlers Daniele Ceraolo Spurio

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=20220330205334.3016587-5-daniele.ceraolospurio@intel.com \
    --to=daniele.ceraolospurio@intel.com \
    --cc=alexander.usyskin@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /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: link
Be 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.