[{"id":3679058,"web_url":"http://patchwork.ozlabs.org/comment/3679058/","msgid":"<782eeae7-0f54-4e5d-8199-7d66b6f4fd05@mailbox.org>","list_archive_url":null,"date":"2026-04-19T05:17:48","subject":"Re: [PATCH] watchdog: Add Renesas R-Car Gen5 window watchdog driver","submitter":{"id":69987,"url":"http://patchwork.ozlabs.org/api/people/69987/","name":"Stefan Roese","email":"stefan.roese@mailbox.org"},"content":"Hi Marek,\n\nOn 4/16/26 00:01, Marek Vasut wrote:\n> Add support of Renesas R-Car Gen5 window watchdog timer. Timeout\n> configuration is derived from CONFIG_WATCHDOG_TIMEOUT_MSECS, which\n> is more accurate than the 1-second granularity 'timeout' passed to\n> .start callback.\n> \n> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>\n> ---\n> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>\n> Cc: Stefan Roese <stefan.roese@mailbox.org>\n> Cc: Tom Rini <trini@konsulko.com>\n> Cc: u-boot@lists.denx.de\n> ---\n>   drivers/watchdog/Kconfig        |   6 ++\n>   drivers/watchdog/Makefile       |   1 +\n>   drivers/watchdog/renesas_wwdt.c | 147 ++++++++++++++++++++++++++++++++\n>   3 files changed, 154 insertions(+)\n>   create mode 100644 drivers/watchdog/renesas_wwdt.c\n> \n> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig\n> index 416d29d256a..7fdfb7add45 100644\n> --- a/drivers/watchdog/Kconfig\n> +++ b/drivers/watchdog/Kconfig\n> @@ -356,6 +356,12 @@ config WDT_RENESAS\n>   \thelp\n>   \t  Enables Renesas SoC R8A779F0 watchdog timer support.\n>   \n> +config WDT_RENESAS_WWDT\n> +\tbool \"Renesas window watchdog timer support\"\n> +\tdepends on WDT\n> +\thelp\n> +\t  Enables Renesas window watchdog timer support.\n> +\n>   config WDT_SANDBOX\n>   \tbool \"Enable Watchdog Timer support for Sandbox\"\n>   \tdepends on SANDBOX && WDT\n> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile\n> index 02e2674f8af..84faefdb4c2 100644\n> --- a/drivers/watchdog/Makefile\n> +++ b/drivers/watchdog/Makefile\n> @@ -44,6 +44,7 @@ obj-$(CONFIG_WDT_NPCM) += npcm_wdt.o\n>   obj-$(CONFIG_WDT_OCTEONTX) += octeontx_wdt.o\n>   obj-$(CONFIG_WDT_OMAP3) += omap_wdt.o\n>   obj-$(CONFIG_WDT_RENESAS) += renesas_wdt.o\n> +obj-$(CONFIG_WDT_RENESAS_WWDT) += renesas_wwdt.o\n>   obj-$(CONFIG_WDT_SBSA) += sbsa_gwdt.o\n>   obj-$(CONFIG_WDT_K3_RTI) += rti_wdt.o\n>   obj-$(CONFIG_WDT_SIEMENS_PMIC) += siemens_pmic_wdt.o\n> diff --git a/drivers/watchdog/renesas_wwdt.c b/drivers/watchdog/renesas_wwdt.c\n> new file mode 100644\n> index 00000000000..3e76ccc415d\n> --- /dev/null\n> +++ b/drivers/watchdog/renesas_wwdt.c\n> @@ -0,0 +1,147 @@\n> +// SPDX-License-Identifier: GPL-2.0+\n> +/*\n> + * Copyright (C) 2026 Marek Vasut <marek.vasut+renesas@mailbox.org>\n> + */\n> +\n> +#include <asm/io.h>\n> +#include <clk.h>\n> +#include <dm/device_compat.h>\n> +#include <dm.h>\n> +#include <linux/bitfield.h>\n> +#include <linux/iopoll.h>\n> +#include <wdt.h>\n> +\n> +#define field_prep(_mask, _val) (((_val) << (ffs(_mask) - 1)) & (_mask))\n> +\n> +#define RSIP_CTL_BASE\t\t0x5fffd000\n> +#define RSIP_CTL_CFG4\t\t(RSIP_CTL_BASE + 0xb0)\n\nHmmm, hardcoded address here...\n\n> +#define RSIP_CTL_CFG4_OPWDEN\tBIT(3)\n> +#define RSIP_CTL_CFG4_OPWDVAC\tBIT(5)\n> +\n> +#define WDTA0_ACT_CODE\t\t0xac\n> +#define WDTA0WDTE\t\t0x0\n> +#define WDTA0EVAC\t\t0x4\n> +#define WDTA0REF\t\t0x8\n> +#define WDTA0MD\t\t\t0xc\n> +#define WDTA0MD_OVF_MASK\tGENMASK(6, 4)\n> +#define WDTA0MD_OVF(n)\t\tfield_prep(WDTA0MD_OVF_MASK, (n))\n> +#define WDTA0MD_NWIE\t\tBIT(3)\n> +#define WDTA0MD_NERM\t\tBIT(2)\n> +#define WDTA0MD_NVS_MASK\tGENMASK(1, 0)\n> +#define WDTA0MD_NVS_75P\t\tFIELD_PREP(WDTA0MD_NVS_MASK, 3)\n> +\n> +struct wwdt_priv {\n> +\tvoid __iomem *base;\n> +\tunsigned int timeout;\n> +};\n> +\n> +/**\n> + * wwdt_reset() - Reset or ping Window WDT\n> + * @dev: Watchdog device\n> + */\n> +static int wwdt_reset(struct udevice *dev)\n> +{\n> +\tstruct wwdt_priv *priv = dev_get_priv(dev);\n> +\tconst u32 cfg = readl(RSIP_CTL_CFG4);\n\n...and used here.\n\n> +\tu32 rv;\n> +\n> +\t/* WDT disabled, do nothing. */\n> +\tif (!(cfg & RSIP_CTL_CFG4_OPWDEN))\n> +\t\treturn 0;\n> +\n> +\t/* WDT with variable activation code */\n> +\tif (cfg & RSIP_CTL_CFG4_OPWDVAC) {\n> +\t\trv = readb(priv->base + WDTA0REF);\n> +\t\trv = WDTA0_ACT_CODE - rv;\n> +\t\twriteb(rv, priv->base + WDTA0EVAC);\n\nAnd here the base address from the device-tree. Is this a complete\ndifferent address space / controller which is hardcoded? Can't you\nget this via DT?\n\nThanks,\nStefan\n\n> +\t} else {\n> +\t\twriteb(WDTA0_ACT_CODE, priv->base + WDTA0WDTE);\n> +\t}\n> +\n> +\treturn 0;\n> +}\n> +\n> +/**\n> + * wwdt_start() - Start Window WDT\n> + * @dev: Watchdog device\n> + * @timeout: Watchdog timeout (not used)\n> + * @flags: Flags (not used)\n> + */\n> +static int wwdt_start(struct udevice *dev, u64 timeout, ulong flags)\n> +{\n> +\tstruct wwdt_priv *priv = dev_get_priv(dev);\n> +\n> +\tclrsetbits_8(priv->base + WDTA0MD,\n> +\t\t     WDTA0MD_OVF_MASK | WDTA0MD_NWIE |\n> +\t\t     WDTA0MD_NERM | WDTA0MD_NVS_MASK,\n> +\t\t     WDTA0MD_OVF(priv->timeout) | WDTA0MD_NWIE |\n> +\t\t     WDTA0MD_NVS_75P);\n> +\n> +\twwdt_reset(dev);\n> +\n> +\treturn 0;\n> +}\n> +\n> +/**\n> + * wwdt_probe() - Initialize Window WDT hardware\n> + * @dev: Watchdog device\n> + */\n> +static int wwdt_probe(struct udevice *dev)\n> +{\n> +\tstruct wwdt_priv *priv = dev_get_priv(dev);\n> +\tunsigned long rate;\n> +\tstruct clk *clk;\n> +\tint ret;\n> +\n> +\tpriv->base = dev_remap_addr(dev);\n> +\tif (!priv->base)\n> +\t\treturn -EINVAL;\n> +\n> +\tclk = devm_clk_get(dev, \"cnt\");\n> +\tif (IS_ERR(clk)) {\n> +\t\tret = PTR_ERR(clk);\n> +\t\tdev_err(dev, \"Failed to get counter clock: %d\\n\", ret);\n> +\t\treturn ret;\n> +\t}\n> +\n> +\tret = clk_enable(clk);\n> +\tif (ret)\n> +\t\treturn ret;\n> +\n> +\trate = clk_get_rate(clk);\n> +\tif (!rate) {\n> +\t\tclk_disable(clk);\n> +\t\treturn -ENOENT;\n> +\t}\n> +\n> +\t/*\n> +\t * Interval time is in \"2^9..2^16 / clk_wdt\" range. WDTA0OVFx is\n> +\t * in 0..7 range. The code below does the WDTA0OVFx calculation\n> +\t * from \"interval_time = (1 << N) / clk_wdt\" by caculating the N.\n> +\t * The N rounded down is MSbit of (interval_time * clk_wdt). The\n> +\t * result is then clamped to fit into the N in 9..16 range, and\n> +\t * decremented by 9 to fit into WDTA0OVFx in 0..7 range .\n> +\t */\n> +\tpriv->timeout = clamp(fls(CONFIG_WATCHDOG_TIMEOUT_MSECS * rate) - 1, 9, 16) - 9;\n> +\n> +\treturn 0;\n> +}\n> +\n> +static const struct wdt_ops wwdt_ops = {\n> +\t.start = wwdt_start,\n> +\t.reset = wwdt_reset,\n> +};\n> +\n> +static const struct udevice_id wwdt_ids[] = {\n> +\t{ .compatible = \"renesas,rcar-gen5-wwdt\" },\n> +\t{}\n> +};\n> +\n> +U_BOOT_DRIVER(wwdt_renesas) = {\n> +\t.name = \"wwdt_renesas\",\n> +\t.id = UCLASS_WDT,\n> +\t.of_match = wwdt_ids,\n> +\t.ops = &wwdt_ops,\n> +\t.probe\t= wwdt_probe,\n> +\t.priv_auto = sizeof(struct wwdt_priv),\n> +};","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=temperror header.d=mailbox.org header.i=@mailbox.org header.a=rsa-sha256\n header.s=mail20150812 header.b=TWC2aCJi;\n\tdkim=pass (2048-bit key;\n secure) header.d=mailbox.org header.i=@mailbox.org header.a=rsa-sha256\n header.s=mail20150812 header.b=pNLH+578;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=mailbox.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (2048-bit key;\n secure) header.d=mailbox.org header.i=@mailbox.org header.b=\"TWC2aCJi\";\n\tdkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org\n header.b=\"pNLH+578\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=mailbox.org","phobos.denx.de;\n spf=pass smtp.mailfrom=stefan.roese@mailbox.org","outgoing_mbo_mout;\n dkim=pass header.d=mailbox.org header.s=mail20150812 header.b=pNLH+578;\n spf=pass (outgoing_mbo_mout: domain of stefan.roese@mailbox.org designates\n 2001:67c:2050:b231:465::102 as permitted sender)\n smtp.mailfrom=stefan.roese@mailbox.org"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fyxhs5SpZz1yGt\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 19 Apr 2026 15:18:05 +1000 (AEST)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id B68C083015;\n\tSun, 19 Apr 2026 07:17:57 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id EEAFB839D9; Sun, 19 Apr 2026 07:17:55 +0200 (CEST)","from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 89FD882BF2\n for <u-boot@lists.denx.de>; Sun, 19 Apr 2026 07:17:52 +0200 (CEST)","from smtp102.mailbox.org (smtp102.mailbox.org\n [IPv6:2001:67c:2050:b231:465::102])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4fyxhc1MPgz9tlR;\n Sun, 19 Apr 2026 07:17:52 +0200 (CEST)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,\n SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org;\n s=mail20150812; t=1776575872;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=3dxUkJomyEPnLnwbf2N0IIeG9A/2ZHu5ahiYPtydLNE=;\n b=TWC2aCJiuqIr1VIU99xsdnigUaEeXs5PizN6l/CMaXBar9z447JPf4tZJjYXFYkj3qcaKu\n AaJiOxTxiC1nyHteV36LUM2QKb8md1AF/ltevnO5OqqnphjpSLESp3h46nXAjUe/jcFFvd\n pg8p+nU58FzgRxl99hQZvWjL7YjS88PkoXGeVj/mQxW3M/CV9O99BAA+zG/Bj8bqLLH9Gq\n nNVVXT1ghL1CBwrie1awgh5ebrPi0DVukD7rpkwWOefQq6n4ElKE1UqV0ZGeGS+eVLS22Z\n 2VnTi0/EHoJfeS/b3aSDEbQuK0L1+qnKoXi94ScTMkn+rcX8vbUtIUzlyF/4GA==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org;\n s=mail20150812; t=1776575870;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=3dxUkJomyEPnLnwbf2N0IIeG9A/2ZHu5ahiYPtydLNE=;\n b=pNLH+578aZuX/mc/LRRb00n4zCoGs4YKd7neSlBZojuMCT79nw8SlKEgYxboZr80f9pN7/\n MYzU3k7+ShmfRI0vVNNW3vwASQbEHJU1C9PZqq/rcJyKlhZCZ2MSsCVGZrfCsLUHdvVgB0\n RwGS1OIBInqoiA6XUdrV+XXOFqlXZ3LtMsv8DKpzSmDQtay8xXk5pCexGUx4nBh1956W0v\n 1cHZgIeGpwMHqDlJv7+0fCIPaqvMrF8e2kQSlGXtnVWhV8N6WOKNpz3F0Vpx7ihcMk4gtG\n d29aIrrPGTVZaZzc3182SZ8Lx9GKpcB5HiuO7/Iyg5RVz+uB77kQAS5a1PnwKQ=="],"Message-ID":"<782eeae7-0f54-4e5d-8199-7d66b6f4fd05@mailbox.org>","Date":"Sun, 19 Apr 2026 07:17:48 +0200","MIME-Version":"1.0","Subject":"Re: [PATCH] watchdog: Add Renesas R-Car Gen5 window watchdog driver","To":"Marek Vasut <marek.vasut+renesas@mailbox.org>, u-boot@lists.denx.de","Cc":"Nobuhiro Iwamatsu <iwamatsu@nigauri.org>, Tom Rini <trini@konsulko.com>","References":"<20260415220213.449146-1-marek.vasut+renesas@mailbox.org>","Content-Language":"en-US","From":"Stefan Roese <stefan.roese@mailbox.org>","In-Reply-To":"<20260415220213.449146-1-marek.vasut+renesas@mailbox.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-MBO-RS-ID":"3a7a63d29f41380a1c9","X-MBO-RS-META":"ryzw839y1a15xo5x48k1yky81ywd3ir8","X-Rspamd-Queue-Id":"4fyxhc1MPgz9tlR","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}}]