All of lore.kernel.org
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert+renesas@glider.be>
To: Fabrizio Castro <fabrizio.castro@bp.renesas.com>,
	Wim Van Sebroeck <wim@iguana.be>,
	Guenter Roeck <linux@roeck-us.net>
Cc: Philipp Zabel <p.zabel@pengutronix.de>,
	Chris Paterson <Chris.Paterson2@renesas.com>,
	Biju Das <biju.das@bp.renesas.com>,
	Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>,
	Simon Horman <horms@verge.net.au>,
	Magnus Damm <magnus.damm@gmail.com>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>,
	linux-watchdog@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org,
	Geert Uytterhoeven <geert+renesas@glider.be>
Subject: [PATCH] watchdog: renesas_wdt: Blacklist early R-Car Gen2 SoCs
Date: Wed, 21 Feb 2018 16:43:04 +0100	[thread overview]
Message-ID: <1519227784-27117-1-git-send-email-geert+renesas@glider.be> (raw)
In-Reply-To: <1518457475-4480-13-git-send-email-fabrizio.castro@bp.renesas.com>

On early revisions of some R-Car Gen2 SoCs, and depending on SMP
configuration, the system may fail to restart on watchdog time-out, and
lock up instead.

Specifically:
  - On R-Car H2 ES1.0 and M2-W ES1.0, watchdog restart fails unless
    only the first CPU core is in use (using e.g. the "maxcpus=1" kernel
    commandline option).
  - On R-Car V2H ES1.1, watchdog restart fails unless SMP is disabled
    completely (using CONFIG_SMP=n during build configuration, or using
    the "nosmp" or "maxcpus=0" kernel commandline options).

Prevent using the watchdog in impacted cases by blacklisting the
affected SoCs, using the minimum known working revisions (ES2.0 on R-Car
H2, and ES3.0 on M2-W), and taking the actual SMP software configuration
into account.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
To be folded into Fabrizio Castro's "watchdog: renesas_wdt: Add R-Car
Gen2 support".

Note that I cannot use IS_ENABLED(CONFIG_SMP), as setup_max_cpus does
not exist for CONFIG_SMP=n.

Any reports on R-Car M2-W ES2.0 and V2H ES2.0+ are welcomed!

As the failure is due to an integration issue, and the watchdog itself
is working fine, an alternative solution would be to move the check to
the code that installs the reset trigger ("soc: renesas: rcar-rst:
Enable watchdog as reset trigger for Gen2").
However, doing so would mean that:
  1. The user could enable and seemingly use the watchdog, but watchdog
     timeout would not restart the system,
  2. The same check should be done before installing the new reset
     vector ("ARM: shmobile: rcar-gen2: Add watchdog support"), too,
     else onlining CPU0 would fail once the watchdog has timed out.
---
 drivers/watchdog/renesas_wdt.c | 43 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c
index 0f88614797c36022..4c8e8d2600a922a5 100644
--- a/drivers/watchdog/renesas_wdt.c
+++ b/drivers/watchdog/renesas_wdt.c
@@ -16,6 +16,8 @@
 #include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
+#include <linux/smp.h>
+#include <linux/sys_soc.h>
 #include <linux/watchdog.h>
 
 #define RWTCNT		0
@@ -131,6 +133,44 @@ static const struct watchdog_ops rwdt_ops = {
 	.restart = rwdt_restart,
 };
 
+#if defined(CONFIG_ARCH_RCAR_GEN2) && defined(CONFIG_SMP)
+/*
+ * Watchdog-reset integration is broken on early revisions of R-Car Gen2 SoCs
+ */
+static const struct soc_device_attribute rwdt_quirks_match[] = {
+	{
+		.soc_id = "r8a7790",
+		.revision = "ES1.*",
+		.data = (void *)1,	/* needs single CPU */
+	}, {
+		.soc_id = "r8a7791",
+		.revision = "ES[12].*",
+		.data = (void *)1,	/* needs single CPU */
+	}, {
+		.soc_id = "r8a7792",
+		.revision = "*",
+		.data = (void *)0,	/* needs SMP disabled */
+	},
+	{ /* sentinel */ }
+};
+
+static bool rwdt_blacklisted(struct device *dev)
+{
+	const struct soc_device_attribute *attr;
+
+	attr = soc_device_match(rwdt_quirks_match);
+	if (attr && setup_max_cpus > (uintptr_t)attr->data) {
+		dev_info(dev, "Watchdog blacklisted on %s %s\n", attr->soc_id,
+			 attr->revision);
+		return true;
+	}
+
+	return false;
+}
+#else /* !CONFIG_ARCH_RCAR_GEN2 || !CONFIG_SMP */
+static inline bool rwdt_blacklisted(struct device *dev) { return false; }
+#endif /* !CONFIG_ARCH_RCAR_GEN2 || !CONFIG_SMP */
+
 static int rwdt_probe(struct platform_device *pdev)
 {
 	struct rwdt_priv *priv;
@@ -139,6 +179,9 @@ static int rwdt_probe(struct platform_device *pdev)
 	unsigned long clks_per_sec;
 	int ret, i;
 
+	if (rwdt_blacklisted(&pdev->dev))
+		return -ENODEV;
+
 	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
-- 
2.7.4

  parent reply	other threads:[~2018-02-21 15:43 UTC|newest]

Thread overview: 177+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-12 17:44 [PATCH v5 00/26] Fix watchdog on Renesas R-Car Gen2 and RZ/G1 Fabrizio Castro
2018-02-12 17:44 ` Fabrizio Castro
2018-02-12 17:44 ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 01/26] ARM: shmobile: Add watchdog support Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-28 12:57   ` Geert Uytterhoeven
2018-02-28 12:57     ` Geert Uytterhoeven
2018-02-28 12:57     ` Geert Uytterhoeven
2018-02-28 17:37     ` Fabrizio Castro
2018-02-28 17:37       ` Fabrizio Castro
2018-02-28 17:37       ` Fabrizio Castro
2018-02-28 17:37       ` Fabrizio Castro
2018-02-28 17:40     ` [PATCH v6 " Fabrizio Castro
2018-02-28 17:40       ` Fabrizio Castro
2018-02-28 17:40       ` Fabrizio Castro
2018-03-01  9:44       ` Simon Horman
2018-03-01  9:44         ` Simon Horman
2018-03-01  9:44         ` Simon Horman
2018-03-13 13:43       ` Geert Uytterhoeven
2018-03-13 13:43         ` Geert Uytterhoeven
2018-03-13 13:43         ` Geert Uytterhoeven
2018-03-14 11:02         ` Fabrizio Castro
2018-03-14 11:02           ` Fabrizio Castro
2018-03-14 11:02           ` Fabrizio Castro
2018-03-14 11:02           ` Fabrizio Castro
2018-03-14 11:13         ` [PATCH v7] " Fabrizio Castro
2018-03-14 11:13           ` Fabrizio Castro
2018-03-14 12:43           ` Simon Horman
2018-03-14 12:43             ` Simon Horman
2018-03-14 13:26             ` Fabrizio Castro
2018-03-14 13:26               ` Fabrizio Castro
2018-03-16 11:49               ` Simon Horman
2018-03-16 11:49                 ` Simon Horman
2018-02-12 17:44 ` [PATCH v5 02/26] ARM: dts: r8a7743: Adjust SMP routine size Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 03/26] ARM: dts: r8a7745: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 04/26] ARM: dts: r8a7790: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 07/26] ARM: dts: r8a7793: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 14/26] ARM: shmobile: defconfig: Enable RENESAS_WDT_GEN Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
     [not found]   ` <1518457475-4480-15-git-send-email-fabrizio.castro-kTT6dE0pTRh9uiUsa/gSgQ@public.gmane.org>
2018-02-13 13:08     ` Fabrizio Castro
2018-02-13 13:08       ` Fabrizio Castro
2018-02-13 13:08       ` Fabrizio Castro
2018-02-13 13:08       ` Fabrizio Castro
     [not found]       ` <TY1PR06MB0895970E6725F954D1A97E4CC0F60-/PRLmSCtZ16EeHdvShrxA20DtJ1/0DrXvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2018-02-15 16:20         ` Simon Horman
2018-02-15 16:20           ` Simon Horman
2018-02-15 16:20           ` Simon Horman
2018-05-02  9:38   ` Simon Horman
2018-05-02  9:38     ` Simon Horman
2018-05-02  9:38     ` Simon Horman
2018-02-12 17:44 ` [PATCH v5 15/26] clk: renesas: r8a7743: Add rwdt clock Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 16/26] clk: renesas: r8a7745: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
     [not found] ` <1518457475-4480-1-git-send-email-fabrizio.castro-kTT6dE0pTRh9uiUsa/gSgQ@public.gmane.org>
2018-02-12 17:44   ` [PATCH v5 05/26] ARM: dts: r8a7791: Adjust SMP routine size Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 06/26] ARM: dts: r8a7792: " Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 08/26] ARM: dts: r8a7794: " Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 09/26] soc: renesas: rcar-rst: Enable watchdog as reset trigger for Gen2 Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-13  8:19     ` Simon Horman
2018-02-13  8:19       ` Simon Horman
2018-02-13  8:19       ` Simon Horman
2018-02-13 12:57       ` Fabrizio Castro
2018-02-13 12:57         ` Fabrizio Castro
2018-02-13 12:57         ` Fabrizio Castro
2018-02-13 12:57         ` Fabrizio Castro
2018-02-13 13:02       ` [PATCH v6 " Fabrizio Castro
2018-02-13 13:02         ` Fabrizio Castro
2018-02-13 13:02         ` Fabrizio Castro
2018-02-15 16:20         ` Simon Horman
2018-02-15 16:20           ` Simon Horman
2018-02-15 16:20           ` Simon Horman
2018-02-12 17:44   ` [PATCH v5 10/26] ARM: shmobile: rcar-gen2: Add watchdog support Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
     [not found]     ` <1518457475-4480-11-git-send-email-fabrizio.castro-kTT6dE0pTRh9uiUsa/gSgQ@public.gmane.org>
2018-02-13  8:21       ` Simon Horman
2018-02-13  8:21         ` Simon Horman
2018-02-13  8:21         ` Simon Horman
2018-02-12 17:44   ` [PATCH v5 11/26] dt-bindings: watchdog: renesas-wdt: Add R-Car Gen2 support Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 12/26] watchdog: renesas_wdt: " Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
     [not found]     ` <1518457475-4480-13-git-send-email-fabrizio.castro-kTT6dE0pTRh9uiUsa/gSgQ@public.gmane.org>
2018-02-12 19:24       ` Guenter Roeck
2018-02-12 19:24         ` Guenter Roeck
2018-02-12 19:24         ` Guenter Roeck
2018-02-12 20:58       ` Wolfram Sang
2018-02-12 20:58         ` Wolfram Sang
2018-02-12 20:58         ` Wolfram Sang
2018-02-21 15:43     ` Geert Uytterhoeven [this message]
2018-02-21 16:22       ` [PATCH] watchdog: renesas_wdt: Blacklist early R-Car Gen2 SoCs Simon Horman
2018-02-28 17:48       ` Fabrizio Castro
2018-02-28 19:24     ` [PATCH v5 12/26] watchdog: renesas_wdt: Add R-Car Gen2 support Geert Uytterhoeven
2018-02-28 19:24       ` Geert Uytterhoeven
2018-02-28 19:24       ` Geert Uytterhoeven
2018-03-01 15:34       ` Fabrizio Castro
2018-03-01 15:34         ` Fabrizio Castro
2018-03-01 15:34         ` Fabrizio Castro
2018-03-01 15:34         ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 13/26] watchdog: renesas_wdt: Add restart handler Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 20:59     ` Wolfram Sang
2018-02-12 20:59       ` Wolfram Sang
2018-02-12 20:59       ` Wolfram Sang
2018-02-12 17:44   ` [PATCH v5 17/26] clk: renesas: r8a7790: Add rwdt clock Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 18/26] clk: renesas: r8a7791/r8a7793: " Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 22/26] ARM: dts: r8a7790: Add watchdog support to SoC dtsi Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44   ` [PATCH v5 25/26] ARM: dts: iwg20m: Add watchdog support to SoM dtsi Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44     ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 19/26] clk: renesas: r8a7794: Add rwdt clock Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 20/26] ARM: dts: r8a7743: Add watchdog support to SoC dtsi Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 21/26] ARM: dts: r8a7745: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 23/26] ARM: dts: r8a7791: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 24/26] ARM: dts: r8a7794: " Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-12 17:44 ` [PATCH v5 26/26] ARM: dts: iwg22m: Add watchdog support to SoM dtsi Fabrizio Castro
2018-02-12 17:44   ` Fabrizio Castro
2018-02-13  8:05 ` [PATCH v5 00/26] Fix watchdog on Renesas R-Car Gen2 and RZ/G1 Simon Horman
2018-02-13  8:05   ` Simon Horman
2018-02-13  8:05   ` Simon Horman
2018-02-20 12:51 ` Geert Uytterhoeven
2018-02-20 12:51   ` Geert Uytterhoeven
2018-02-20 12:51   ` Geert Uytterhoeven
2018-02-21 16:13   ` Simon Horman
2018-02-21 16:13     ` Simon Horman
2018-02-21 16:13     ` Simon Horman
2018-02-21 16:30     ` Geert Uytterhoeven
2018-02-21 16:30       ` Geert Uytterhoeven
2018-02-21 16:30       ` Geert Uytterhoeven
2018-02-21 18:32       ` Simon Horman
2018-02-21 18:32         ` Simon Horman
2018-02-21 18:32         ` Simon Horman
2018-02-22  8:38         ` Geert Uytterhoeven
2018-02-22  8:38           ` Geert Uytterhoeven
2018-02-22  8:38           ` Geert Uytterhoeven
2018-02-23  8:14           ` Simon Horman
2018-02-23  8:14             ` Simon Horman
2018-02-23  8:14             ` Simon Horman
2018-03-01 10:20             ` Geert Uytterhoeven
2018-03-01 10:20               ` Geert Uytterhoeven
2018-03-01 10:20               ` Geert Uytterhoeven
2018-03-13 20:05               ` Simon Horman
2018-03-13 20:05                 ` Simon Horman
2018-03-13 20:05                 ` Simon Horman
2018-03-14  8:17                 ` Geert Uytterhoeven
2018-03-14  8:17                   ` Geert Uytterhoeven
2018-03-14  8:17                   ` Geert Uytterhoeven
2018-03-14  8:17                   ` Geert Uytterhoeven
2018-04-18 13:37                 ` Geert Uytterhoeven
2018-04-18 13:37                   ` Geert Uytterhoeven
2018-04-18 13:37                   ` Geert Uytterhoeven
2018-04-24  9:09                   ` Simon Horman
2018-04-24  9:09                     ` Simon Horman
2018-04-24  9:09                     ` Simon Horman

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=1519227784-27117-1-git-send-email-geert+renesas@glider.be \
    --to=geert+renesas@glider.be \
    --cc=Chris.Paterson2@renesas.com \
    --cc=biju.das@bp.renesas.com \
    --cc=fabrizio.castro@bp.renesas.com \
    --cc=horms@verge.net.au \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=magnus.damm@gmail.com \
    --cc=p.zabel@pengutronix.de \
    --cc=ramesh.shanmugasundaram@bp.renesas.com \
    --cc=wim@iguana.be \
    --cc=wsa+renesas@sang-engineering.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: 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.