X86 platform drivers
 help / color / mirror / Atom feed
From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Darren Hart <dvhart@infradead.org>,
	Lee Jones <lee.jones@linaro.org>,
	x86@kernel.org
Cc: Zha Qipeng <qipeng.zha@intel.com>,
	Rajneesh Bhardwaj <rajneesh.bhardwaj@linux.intel.com>,
	"David E . Box" <david.e.box@linux.intel.com>,
	Guenter Roeck <linux@roeck-us.net>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Wim Van Sebroeck <wim@linux-watchdog.org>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	platform-driver-x86@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH 16/37] watchdog: intel-mid_wdt: Convert to use new SCU IPC API
Date: Mon, 23 Dec 2019 17:16:55 +0300	[thread overview]
Message-ID: <20191223141716.13727-17-mika.westerberg@linux.intel.com> (raw)
In-Reply-To: <20191223141716.13727-1-mika.westerberg@linux.intel.com>

This converts the Intel MID watchdog driver over the new SCU IPC API
where the SCU IPC instance is passed to the functions.

While there drop useless print at the end of probe.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/watchdog/intel-mid_wdt.c | 53 ++++++++++++++++++++++----------
 1 file changed, 37 insertions(+), 16 deletions(-)

diff --git a/drivers/watchdog/intel-mid_wdt.c b/drivers/watchdog/intel-mid_wdt.c
index 470213abfd3d..1ae03b64ef8b 100644
--- a/drivers/watchdog/intel-mid_wdt.c
+++ b/drivers/watchdog/intel-mid_wdt.c
@@ -33,14 +33,24 @@ enum {
 	SCU_WATCHDOG_KEEPALIVE,
 };
 
-static inline int wdt_command(int sub, u32 *in, int inlen)
+struct mid_wdt {
+	struct watchdog_device wd;
+	struct device *dev;
+	struct intel_scu_ipc_dev *scu;
+};
+
+static inline int
+wdt_command(struct mid_wdt *mid, int sub, const void *in, size_t inlen, size_t size)
 {
-	return intel_scu_ipc_command(IPC_WATCHDOG, sub, in, inlen, NULL, 0);
+	struct intel_scu_ipc_dev *scu = mid->scu;
+
+	return intel_scu_ipc_dev_command_with_size(scu, IPC_WATCHDOG, sub, in,
+						   inlen, size, NULL, 0);
 }
 
 static int wdt_start(struct watchdog_device *wd)
 {
-	struct device *dev = watchdog_get_drvdata(wd);
+	struct mid_wdt *mid = watchdog_get_drvdata(wd);
 	int ret, in_size;
 	int timeout = wd->timeout;
 	struct ipc_wd_start {
@@ -49,38 +59,41 @@ static int wdt_start(struct watchdog_device *wd)
 	} ipc_wd_start = { timeout - MID_WDT_PRETIMEOUT, timeout };
 
 	/*
-	 * SCU expects the input size for watchdog IPC to
-	 * be based on 4 bytes
+	 * SCU expects the input size for watchdog IPC to be 2 which is the
+	 * size of the structure in dwords. SCU IPC normally takes bytes
+	 * but this is a special case where we specify size to be different
+	 * than inlen.
 	 */
 	in_size = DIV_ROUND_UP(sizeof(ipc_wd_start), 4);
 
-	ret = wdt_command(SCU_WATCHDOG_START, (u32 *)&ipc_wd_start, in_size);
+	ret = wdt_command(mid, SCU_WATCHDOG_START, &ipc_wd_start,
+			  sizeof(ipc_wd_start), in_size);
 	if (ret)
-		dev_crit(dev, "error starting watchdog: %d\n", ret);
+		dev_crit(mid->dev, "error starting watchdog: %d\n", ret);
 
 	return ret;
 }
 
 static int wdt_ping(struct watchdog_device *wd)
 {
-	struct device *dev = watchdog_get_drvdata(wd);
+	struct mid_wdt *mid = watchdog_get_drvdata(wd);
 	int ret;
 
-	ret = wdt_command(SCU_WATCHDOG_KEEPALIVE, NULL, 0);
+	ret = wdt_command(mid, SCU_WATCHDOG_KEEPALIVE, NULL, 0, 0);
 	if (ret)
-		dev_crit(dev, "Error executing keepalive: %d\n", ret);
+		dev_crit(mid->dev, "Error executing keepalive: %d\n", ret);
 
 	return ret;
 }
 
 static int wdt_stop(struct watchdog_device *wd)
 {
-	struct device *dev = watchdog_get_drvdata(wd);
+	struct mid_wdt *mid = watchdog_get_drvdata(wd);
 	int ret;
 
-	ret = wdt_command(SCU_WATCHDOG_STOP, NULL, 0);
+	ret = wdt_command(mid, SCU_WATCHDOG_STOP, NULL, 0, 0);
 	if (ret)
-		dev_crit(dev, "Error stopping watchdog: %d\n", ret);
+		dev_crit(mid->dev, "Error stopping watchdog: %d\n", ret);
 
 	return ret;
 }
@@ -110,6 +123,7 @@ static int mid_wdt_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct watchdog_device *wdt_dev;
 	struct intel_mid_wdt_pdata *pdata = dev->platform_data;
+	struct mid_wdt *mid;
 	int ret;
 
 	if (!pdata) {
@@ -123,10 +137,13 @@ static int mid_wdt_probe(struct platform_device *pdev)
 			return ret;
 	}
 
-	wdt_dev = devm_kzalloc(dev, sizeof(*wdt_dev), GFP_KERNEL);
-	if (!wdt_dev)
+	mid = devm_kzalloc(dev, sizeof(*mid), GFP_KERNEL);
+	if (!mid)
 		return -ENOMEM;
 
+	mid->dev = dev;
+	wdt_dev = &mid->wd;
+
 	wdt_dev->info = &mid_wdt_info;
 	wdt_dev->ops = &mid_wdt_ops;
 	wdt_dev->min_timeout = MID_WDT_TIMEOUT_MIN;
@@ -135,7 +152,7 @@ static int mid_wdt_probe(struct platform_device *pdev)
 	wdt_dev->parent = dev;
 
 	watchdog_set_nowayout(wdt_dev, WATCHDOG_NOWAYOUT);
-	watchdog_set_drvdata(wdt_dev, dev);
+	watchdog_set_drvdata(wdt_dev, mid);
 
 	ret = devm_request_irq(dev, pdata->irq, mid_wdt_irq,
 			       IRQF_SHARED | IRQF_NO_SUSPEND, "watchdog",
@@ -145,6 +162,10 @@ static int mid_wdt_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	mid->scu = devm_intel_scu_ipc_dev_get(dev);
+	if (!mid->scu)
+		return -EPROBE_DEFER;
+
 	/*
 	 * The firmware followed by U-Boot leaves the watchdog running
 	 * with the default threshold which may vary. When we get here
-- 
2.24.0

  parent reply	other threads:[~2019-12-23 14:16 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-23 14:16 [PATCH 00/37] platform/x86: Rework intel_scu_ipc and intel_pmc_ipc drivers Mika Westerberg
2019-12-23 14:16 ` [PATCH 01/37] platform/x86: intel_mid_powerbtn: Take a copy of ddata Mika Westerberg
2019-12-23 14:16 ` [PATCH 02/37] platform/x86: intel_scu_ipcutil: Remove default y from Kconfig Mika Westerberg
2019-12-23 14:16 ` [PATCH 03/37] platform/x86: intel_scu_ipc: Add constants for register offsets Mika Westerberg
2019-12-23 14:16 ` [PATCH 04/37] platform/x86: intel_scu_ipc: Remove Lincroft support Mika Westerberg
2019-12-23 14:16 ` [PATCH 05/37] platform/x86: intel_scu_ipc: Drop intel_scu_ipc_i2c_cntrl() Mika Westerberg
2019-12-23 14:16 ` [PATCH 06/37] platform/x86: intel_scu_ipc: Fix interrupt support Mika Westerberg
2019-12-23 14:16 ` [PATCH 07/37] platform/x86: intel_scu_ipc: Sleeping is fine when polling Mika Westerberg
2019-12-23 14:16 ` [PATCH 08/37] platform/x86: intel_scu_ipc: Drop unused prototype intel_scu_ipc_fw_update() Mika Westerberg
2019-12-23 14:16 ` [PATCH 09/37] platform/x86: intel_scu_ipc: Drop unused macros Mika Westerberg
2019-12-23 14:16 ` [PATCH 10/37] platform/x86: intel_scu_ipc: Drop intel_scu_ipc_io[read|write][8|16]() Mika Westerberg
2019-12-23 14:16 ` [PATCH 11/37] platform/x86: intel_scu_ipc: Drop intel_scu_ipc_raw_command() Mika Westerberg
2019-12-23 14:16 ` [PATCH 12/37] platform/x86: intel_scu_ipc: Split out SCU IPC functionality from the SCU driver Mika Westerberg
2020-01-02  8:58   ` Lee Jones
2019-12-23 14:16 ` [PATCH 13/37] platform/x86: intel_scu_ipc: Reformat kernel-doc comments of exported functions Mika Westerberg
2019-12-23 14:16 ` [PATCH 14/37] platform/x86: intel_scu_ipc: Introduce new SCU IPC API Mika Westerberg
2019-12-23 14:16 ` [PATCH 15/37] platform/x86: intel_mid_powerbtn: Convert to use " Mika Westerberg
2019-12-23 14:16 ` Mika Westerberg [this message]
2019-12-23 15:46   ` [PATCH 16/37] watchdog: intel-mid_wdt: " Guenter Roeck
2019-12-27  9:59     ` Mika Westerberg
2019-12-23 14:16 ` [PATCH 17/37] platform/x86: intel_scu_ipcutil: " Mika Westerberg
2019-12-23 14:16 ` [PATCH 18/37] platform/x86: intel_pmc_ipc: Make intel_pmc_gcr_update() static Mika Westerberg
2019-12-23 14:16 ` [PATCH 19/37] platform/x86: intel_pmc_ipc: Make intel_pmc_ipc_simple_command() static Mika Westerberg
2019-12-23 14:16 ` [PATCH 20/37] platform/x86: intel_pmc_ipc: Make intel_pmc_ipc_raw_cmd() static Mika Westerberg
2019-12-23 14:17 ` [PATCH 21/37] platform/x86: intel_pmc_ipc: Drop intel_pmc_gcr_read() and intel_pmc_gcr_write() Mika Westerberg
2019-12-23 14:17 ` [PATCH 22/37] platform/x86: intel_pmc_ipc: Drop ipc_data_readb() Mika Westerberg
2019-12-23 14:17 ` [PATCH 23/37] platform/x86: intel_pmc_ipc: Get rid of unnecessary includes Mika Westerberg
2019-12-23 14:17 ` [PATCH 24/37] platform/x86: intel_scu_ipc: Add function to remove SCU IPC Mika Westerberg
2019-12-23 14:17 ` [PATCH 25/37] platform/x86: intel_pmc_ipc: Start using " Mika Westerberg
2019-12-23 14:17 ` [PATCH 26/37] mfd: intel_soc_pmic: Add SCU IPC member to struct intel_soc_pmic Mika Westerberg
2020-01-02  9:01   ` Lee Jones
2020-01-02  9:45     ` Mika Westerberg
2019-12-23 14:17 ` [PATCH 27/37] mfd: intel_soc_pmic_bxtwc: Convert to use new SCU IPC API Mika Westerberg
2020-01-02  9:16   ` Lee Jones
2019-12-23 14:17 ` [PATCH 28/37] mfd: intel_soc_pmic_mrfld: " Mika Westerberg
2020-01-02  9:17   ` Lee Jones
2019-12-23 14:17 ` [PATCH 29/37] platform/x86: intel_telemetry: " Mika Westerberg
2019-12-23 14:17 ` [PATCH 30/37] platform/x86: intel_pmc_ipc: Drop intel_pmc_ipc_command() Mika Westerberg
2019-12-23 14:17 ` [PATCH 31/37] x86/platform/intel-mid: Add empty stubs for intel_scu_devices_[create|destroy]() Mika Westerberg
2019-12-23 14:17 ` [PATCH 32/37] platform/x86: intel_pmc_ipc: Move PCI IDs to intel_scu_pcidrv.c Mika Westerberg
2019-12-23 14:17 ` [PATCH 33/37] platform/x86: intel_pmc_ipc: Move under MFD Mika Westerberg
2020-01-02  9:41   ` Lee Jones
2020-01-02  9:50     ` Mika Westerberg
2019-12-23 14:17 ` [PATCH 34/37] mfd: intel_pmc_bxt: Convert to use MFD APIs Mika Westerberg
2019-12-23 14:17 ` [PATCH 35/37] mfd: intel_pmc_bxt: Use octal permissions in sysfs attributes Mika Westerberg
2019-12-23 14:17 ` [PATCH 36/37] mfd: intel_pmc_bxt: Switch to use driver->dev_groups Mika Westerberg
2019-12-23 14:17 ` [PATCH 37/37] MAINTAINERS: Update entry for Intel Broxton PMC driver Mika Westerberg

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=20191223141716.13727-17-mika.westerberg@linux.intel.com \
    --to=mika.westerberg@linux.intel.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=david.e.box@linux.intel.com \
    --cc=dvhart@infradead.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=qipeng.zha@intel.com \
    --cc=rajneesh.bhardwaj@linux.intel.com \
    --cc=wim@linux-watchdog.org \
    --cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox