Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2221034/?format=api
{ "id": 2221034, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2221034/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260408-dev-b4-aaeon-mcu-driver-v5-5-ad98bd481668@bootlin.com/", "project": { "id": 42, "url": "http://patchwork.ozlabs.org/api/1.1/projects/42/?format=api", "name": "Linux GPIO development", "link_name": "linux-gpio", "list_id": "linux-gpio.vger.kernel.org", "list_email": "linux-gpio@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260408-dev-b4-aaeon-mcu-driver-v5-5-ad98bd481668@bootlin.com>", "date": "2026-04-08T17:21:58", "name": "[v5,5/5] watchdog: aaeon: Add watchdog driver for SRG-IMX8P MCU", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "7f74f5582d647eb55436bbab3c89890d939914a3", "submitter": { "id": 82054, "url": "http://patchwork.ozlabs.org/api/1.1/people/82054/?format=api", "name": "Thomas Perrot (Schneider Electric)", "email": "thomas.perrot@bootlin.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260408-dev-b4-aaeon-mcu-driver-v5-5-ad98bd481668@bootlin.com/mbox/", "series": [ { "id": 499169, "url": "http://patchwork.ozlabs.org/api/1.1/series/499169/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=499169", "date": "2026-04-08T17:21:53", "name": "Add support for AAEON SRG-IMX8P MCU", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/499169/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2221034/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2221034/checks/", "tags": {}, "headers": { "Return-Path": "\n <linux-gpio+bounces-34899-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-gpio@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=bootlin.com header.i=@bootlin.com header.a=rsa-sha256\n header.s=dkim header.b=z8unAsqB;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34899-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com\n header.b=\"z8unAsqB\"", "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=185.171.202.116", "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=bootlin.com", "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=bootlin.com" ], "Received": [ "from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frVKq1Bd8z1xv0\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 03:24:15 +1000 (AEST)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id BF9F1307171D\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 8 Apr 2026 17:22:52 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id B2E913D8905;\n\tWed, 8 Apr 2026 17:22:35 +0000 (UTC)", "from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id EC5763D75D5;\n\tWed, 8 Apr 2026 17:22:33 +0000 (UTC)", "from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233])\n\tby smtpout-04.galae.net (Postfix) with ESMTPS id 05BB4C5AAA8;\n\tWed, 8 Apr 2026 17:23:07 +0000 (UTC)", "from mail.galae.net (mail.galae.net [212.83.136.155])\n\tby smtpout-01.galae.net (Postfix) with ESMTPS id AE170603CE;\n\tWed, 8 Apr 2026 17:22:32 +0000 (UTC)", "from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon)\n with ESMTPSA id 195F51045019E;\n\tWed, 8 Apr 2026 19:22:29 +0200 (CEST)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775668955; cv=none;\n b=pYfeoyRfHubMtXqAsc5/y3C1sw5YwUHsphtU2VIua8PuAJcJad3EJO8qGTOapVCmCf/aUNYdhrqWgBd+C8mxrAPrpeZjnSJRCexJrLr4XsUMrXhgxHe7NbTzXpajB/SiypKtW7aA2Q3YK7SKE8lrAoUvoR1+fzXC7UasANta8ZI=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775668955; c=relaxed/simple;\n\tbh=65QwNvr+I5OOmsYxfpRudawMxhKeDbuvLhOvIVdlggg=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=H9EaQgrPf2t0pb4yaF/3hjpHppZtYCDTX8uw6G552v+jNnm2G7p9lIfM+FQrWTrX/3YTMrTzu9sId9yGHdxIwJ2sg13cDZqgu13c5KgdKy2nz2UrMyo3mDv47AEcR1sMnFDyv3riSa+lDo5SdoVgz8dV3OvaGbM7BOFnkF6Qukk=", "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=bootlin.com;\n spf=pass smtp.mailfrom=bootlin.com;\n dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com\n header.b=z8unAsqB; arc=none smtp.client-ip=185.171.202.116", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim;\n\tt=1775668951; h=from:subject:date:message-id:to:cc:mime-version:content-type:\n\t content-transfer-encoding:in-reply-to:references;\n\tbh=qZhH8c6x0PEbv9p0RAqu0ezmUYM5PZZV4d1Q1ar4FwE=;\n\tb=z8unAsqBhcFq5Vp4lQHlWVnZSxrWvHScIDOYqqp+A+dS3QgjjtDHAxKDjuEx0sxx6Ntw8m\n\t/9p7zjSpikeOg/vfYZYTPmaqnAxKLigX/Sqh4Cy+ieb4WQ7IJlDRyLsFZM0CjTR8cipVBd\n\tisItGziOohCzTwkhA8OjWcXijOoRqFa02KLen0vqjAdvH7maZMF66u4S0a4lFFsVfzOBB8\n\tdGgEGIuM6i2daXd89VBetMT61jlXZbVRuJ2zPu+P4oL/+wjZn3oeZ0pflLVK85kJDBrbrV\n\t+Dn/hhvE5dZl4tMmiG7Kv4LHFaOrEoW8aepF3HLtlgyhJThYLzrtH4vLKklGqg==", "From": "\"Thomas Perrot (Schneider Electric)\" <thomas.perrot@bootlin.com>", "Date": "Wed, 08 Apr 2026 19:21:58 +0200", "Subject": "[PATCH v5 5/5] watchdog: aaeon: Add watchdog driver for SRG-IMX8P\n MCU", "Precedence": "bulk", "X-Mailing-List": "linux-gpio@vger.kernel.org", "List-Id": "<linux-gpio.vger.kernel.org>", "List-Subscribe": "<mailto:linux-gpio+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-gpio+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "8bit", "Message-Id": "<20260408-dev-b4-aaeon-mcu-driver-v5-5-ad98bd481668@bootlin.com>", "References": "<20260408-dev-b4-aaeon-mcu-driver-v5-0-ad98bd481668@bootlin.com>", "In-Reply-To": "<20260408-dev-b4-aaeon-mcu-driver-v5-0-ad98bd481668@bootlin.com>", "To": "Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>,\n Conor Dooley <conor+dt@kernel.org>, Linus Walleij <linusw@kernel.org>,\n Bartosz Golaszewski <brgl@kernel.org>, Shawn Guo <shawnguo@kernel.org>,\n Sascha Hauer <s.hauer@pengutronix.de>,\n Pengutronix Kernel Team <kernel@pengutronix.de>,\n Fabio Estevam <festevam@gmail.com>,\n =?utf-8?b?SsOpcsOpbWllIERhdXRoZXJpYmVz?= <jeremie.dautheribes@bootlin.com>,\n Wim Van Sebroeck <wim@linux-watchdog.org>,\n Guenter Roeck <linux@roeck-us.net>, Lee Jones <lee@kernel.org>", "Cc": "devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-gpio@vger.kernel.org, imx@lists.linux.dev,\n linux-arm-kernel@lists.infradead.org, linux-watchdog@vger.kernel.org,\n Thomas Petazzoni <thomas.petazzoni@bootlin.com>,\n Miquel Raynal <miquel.raynal@bootlin.com>,\n \"Thomas Perrot (Schneider Electric)\" <thomas.perrot@bootlin.com>", "X-Mailer": "b4 0.14.3", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=6289;\n i=thomas.perrot@bootlin.com; h=from:subject:message-id;\n bh=65QwNvr+I5OOmsYxfpRudawMxhKeDbuvLhOvIVdlggg=;\n b=owEB7QES/pANAwAKAZ/ACwVx/grtAcsmYgBp1o7D023/jd70SBytcOY53H44Gff8aGs8jSBbo\n +a/5Eg1d1aJAbMEAAEKAB0WIQSHQHfGpqMKIwOoEiGfwAsFcf4K7QUCadaOwwAKCRCfwAsFcf4K\n 7Rx/C/9qKnMPOpRaDoSlA09ZRN0giYZatPJUexrNcHxuK8cjBp7y11zuq3C4s6O8QrilmBKw/Aw\n 9CYaXtm39Vdy2OWOKWAZA6TG3cA3/eiqsIdUo+OI93hbIW3LMyRMh9zlXKRoNkwfQFds4OAZe1C\n AU3TL8eKuUPdYFoJVd7lldprM14b2snHsFh6zZBpbj+49hwOViirfLN2Se57m/bDVdti3uZiRRh\n jb2wRfdz7ZxJlwCSIwSmsWN26FuFad417V+SI1+AbGTFd1oLdFiBruJg2qR4yh5sMsL3Kt7vbyq\n GdQeZEwjTVZOvWIQy7NmhtIejB5qDPLB4I8EwN39VU0Xe9bx3hzFMo5RVh3s5mX4yrKw5G6zKX4\n Y5Lg1DX7sFU8jKy+m+fPTNDAEzNJE9/ocw8rL1vSsokOiUFaHAPxnxuWdlwDEuIXFfywTMG9kGZ\n Q0fsKoWJlpZrlUt0qXONDKXTylsIx88zGYCLZQUGJ1KqNzkknFiG5qVJR0CT1Uh56i3Ds=", "X-Developer-Key": "i=thomas.perrot@bootlin.com; a=openpgp;\n fpr=874077C6A6A30A2303A812219FC00B0571FE0AED", "X-Last-TLS-Session-Version": "TLSv1.3" }, "content": "Add watchdog driver for the Aaeon SRG-IMX8P embedded controller.\nThis driver provides system monitoring and recovery capabilities\nthrough the MCU's watchdog timer.\n\nThe watchdog supports start, stop, and ping operations with a maximum\nhardware heartbeat of 25 seconds and a default timeout of 240 seconds.\n\nCo-developed-by: Jérémie Dautheribes (Schneider Electric) <jeremie.dautheribes@bootlin.com>\nSigned-off-by: Jérémie Dautheribes (Schneider Electric) <jeremie.dautheribes@bootlin.com>\nSigned-off-by: Thomas Perrot (Schneider Electric) <thomas.perrot@bootlin.com>\n---\n MAINTAINERS | 1 +\n drivers/watchdog/Kconfig | 10 +++\n drivers/watchdog/Makefile | 1 +\n drivers/watchdog/aaeon_mcu_wdt.c | 132 +++++++++++++++++++++++++++++++++++++++\n 4 files changed, 144 insertions(+)", "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 2538f8c4bc14..7b92af42c9fd 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -193,6 +193,7 @@ S:\tMaintained\n F:\tDocumentation/devicetree/bindings/mfd/aaeon,srg-imx8p-mcu.yaml\n F:\tdrivers/gpio/gpio-aaeon-mcu.c\n F:\tdrivers/mfd/aaeon-mcu.c\n+F:\tdrivers/watchdog/aaeon_mcu_wdt.c\n F:\tinclude/linux/mfd/aaeon-mcu.h\n \n AAEON UPBOARD FPGA MFD DRIVER\ndiff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig\nindex d3b9df7d466b..f67a0b453316 100644\n--- a/drivers/watchdog/Kconfig\n+++ b/drivers/watchdog/Kconfig\n@@ -420,6 +420,16 @@ config SL28CPLD_WATCHDOG\n \n # ARM Architecture\n \n+config AAEON_MCU_WATCHDOG\n+\ttristate \"Aaeon MCU Watchdog\"\n+\tdepends on MFD_AAEON_MCU\n+\tselect WATCHDOG_CORE\n+\thelp\n+\t Select this option to enable watchdog timer support for the Aaeon\n+\t SRG-IMX8P onboard microcontroller (MCU). This driver provides\n+\t watchdog functionality through the MCU, allowing system monitoring\n+\t and automatic recovery from system hangs.\n+\n config AIROHA_WATCHDOG\n \ttristate \"Airoha EN7581 Watchdog\"\n \tdepends on ARCH_AIROHA || COMPILE_TEST\ndiff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile\nindex ba52099b1253..2deec425d3ea 100644\n--- a/drivers/watchdog/Makefile\n+++ b/drivers/watchdog/Makefile\n@@ -37,6 +37,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o\n # ALPHA Architecture\n \n # ARM Architecture\n+obj-$(CONFIG_AAEON_MCU_WATCHDOG) += aaeon_mcu_wdt.o\n obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o\n obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o\n obj-$(CONFIG_ARMADA_37XX_WATCHDOG) += armada_37xx_wdt.o\ndiff --git a/drivers/watchdog/aaeon_mcu_wdt.c b/drivers/watchdog/aaeon_mcu_wdt.c\nnew file mode 100644\nindex 000000000000..949b506d8194\n--- /dev/null\n+++ b/drivers/watchdog/aaeon_mcu_wdt.c\n@@ -0,0 +1,132 @@\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+/*\n+ * Aaeon MCU Watchdog driver\n+ *\n+ * Copyright (C) 2026 Bootlin\n+ * Author: Jérémie Dautheribes <jeremie.dautheribes@bootlin.com>\n+ * Author: Thomas Perrot <thomas.perrot@bootlin.com>\n+ */\n+\n+#include <linux/mfd/aaeon-mcu.h>\n+#include <linux/module.h>\n+#include <linux/platform_device.h>\n+#include <linux/regmap.h>\n+#include <linux/watchdog.h>\n+\n+#define AAEON_MCU_PING_WDT\t0x73\n+\n+#define AAEON_MCU_WDT_TIMEOUT 240\n+#define AAEON_MCU_WDT_HEARTBEAT_MS 25000\n+\n+struct aaeon_mcu_wdt {\n+\tstruct watchdog_device wdt;\n+\tstruct regmap *regmap;\n+};\n+\n+static int aaeon_mcu_wdt_cmd(struct aaeon_mcu_wdt *data, u8 opcode, u8 arg)\n+{\n+\treturn regmap_write(data->regmap, AAEON_MCU_REG(opcode, arg), 0);\n+}\n+\n+static int aaeon_mcu_wdt_start(struct watchdog_device *wdt)\n+{\n+\tstruct aaeon_mcu_wdt *data = watchdog_get_drvdata(wdt);\n+\n+\treturn aaeon_mcu_wdt_cmd(data, AAEON_MCU_CONTROL_WDT_OPCODE, 0x01);\n+}\n+\n+static int aaeon_mcu_wdt_status(struct watchdog_device *wdt, bool *enabled)\n+{\n+\tstruct aaeon_mcu_wdt *data = watchdog_get_drvdata(wdt);\n+\tunsigned int rsp;\n+\tint ret;\n+\n+\tret = regmap_read(data->regmap,\n+\t\t\t AAEON_MCU_REG(AAEON_MCU_CONTROL_WDT_OPCODE, 0x02),\n+\t\t\t &rsp);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t*enabled = rsp == 0x01;\n+\treturn 0;\n+}\n+\n+static int aaeon_mcu_wdt_stop(struct watchdog_device *wdt)\n+{\n+\tstruct aaeon_mcu_wdt *data = watchdog_get_drvdata(wdt);\n+\n+\treturn aaeon_mcu_wdt_cmd(data, AAEON_MCU_CONTROL_WDT_OPCODE, 0x00);\n+}\n+\n+static int aaeon_mcu_wdt_ping(struct watchdog_device *wdt)\n+{\n+\tstruct aaeon_mcu_wdt *data = watchdog_get_drvdata(wdt);\n+\n+\treturn aaeon_mcu_wdt_cmd(data, AAEON_MCU_PING_WDT, 0x00);\n+}\n+\n+static const struct watchdog_info aaeon_mcu_wdt_info = {\n+\t.identity\t= \"Aaeon MCU Watchdog\",\n+\t.options\t= WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE\n+};\n+\n+static const struct watchdog_ops aaeon_mcu_wdt_ops = {\n+\t.owner\t\t= THIS_MODULE,\n+\t.start\t\t= aaeon_mcu_wdt_start,\n+\t.stop\t\t= aaeon_mcu_wdt_stop,\n+\t.ping\t\t= aaeon_mcu_wdt_ping,\n+};\n+\n+static int aaeon_mcu_wdt_probe(struct platform_device *pdev)\n+{\n+\tstruct device *dev = &pdev->dev;\n+\tstruct watchdog_device *wdt;\n+\tstruct aaeon_mcu_wdt *data;\n+\tbool enabled;\n+\tint ret;\n+\n+\tdata = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);\n+\tif (!data)\n+\t\treturn -ENOMEM;\n+\n+\tdata->regmap = dev_get_regmap(dev->parent, NULL);\n+\tif (!data->regmap)\n+\t\treturn -ENODEV;\n+\n+\twdt = &data->wdt;\n+\twdt->parent = dev;\n+\twdt->info = &aaeon_mcu_wdt_info;\n+\twdt->ops = &aaeon_mcu_wdt_ops;\n+\t/*\n+\t * The MCU firmware has a fixed hardware timeout of 25 seconds that\n+\t * cannot be changed. The watchdog core will handle automatic pinging\n+\t * to support longer timeouts. The software timeout of 240 seconds is\n+\t * chosen arbitrarily as a reasonable value and is not user-configurable.\n+\t */\n+\twdt->timeout = AAEON_MCU_WDT_TIMEOUT;\n+\twdt->max_hw_heartbeat_ms = AAEON_MCU_WDT_HEARTBEAT_MS;\n+\n+\twatchdog_set_drvdata(wdt, data);\n+\n+\tret = aaeon_mcu_wdt_status(wdt, &enabled);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tif (enabled)\n+\t\tset_bit(WDOG_HW_RUNNING, &wdt->status);\n+\n+\treturn devm_watchdog_register_device(dev, wdt);\n+}\n+\n+static struct platform_driver aaeon_mcu_wdt_driver = {\n+\t.driver\t\t= {\n+\t\t.name\t= \"aaeon-mcu-wdt\",\n+\t},\n+\t.probe\t\t= aaeon_mcu_wdt_probe,\n+};\n+\n+module_platform_driver(aaeon_mcu_wdt_driver);\n+\n+MODULE_DESCRIPTION(\"Aaeon MCU Watchdog Driver\");\n+MODULE_AUTHOR(\"Jérémie Dautheribes <jeremie.dautheribes@bootlin.com>\");\n+MODULE_LICENSE(\"GPL\");\n", "prefixes": [ "v5", "5/5" ] }