From: Luca Leonardo Scorcia <l.scorcia@gmail.com>
To: linux-mediatek@lists.infradead.org
Cc: Luca Leonardo Scorcia <l.scorcia@gmail.com>,
Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
linux-watchdog@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 4/8] watchdog: mediatek: Add support for mt8167 toprgu/watchdog
Date: Tue, 8 Sep 2026 19:38:31 +0200 [thread overview]
Message-ID: <20260908174259.9009-5-l.scorcia@gmail.com> (raw)
In-Reply-To: <20260908174259.9009-1-l.scorcia@gmail.com>
Add support for the Top Reset Generation Unit/Watchdog Timer found on
mt8167.
Since according to its data sheet mt8167 toprgu reset bits are not
contiguous, add support for a reset table to the driver. This lets us
define reset identifiers as contiguous indexes in the binding headers.
Also address a preexisting Sashiko finding that noticed that the
has_swsysrst_en configuration was set after the reset controller
registration.
Signed-off-by: Luca Leonardo Scorcia <l.scorcia@gmail.com>
---
drivers/watchdog/mtk_wdt.c | 47 ++++++++++++++++++++++++++++++++++----
1 file changed, 43 insertions(+), 4 deletions(-)
diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
index d609f0fa35e3..abe58ed6a504 100644
--- a/drivers/watchdog/mtk_wdt.c
+++ b/drivers/watchdog/mtk_wdt.c
@@ -12,6 +12,7 @@
#include <dt-bindings/reset/mt2712-resets.h>
#include <dt-bindings/reset/mediatek,mt6735-wdt.h>
#include <dt-bindings/reset/mediatek,mt6795-resets.h>
+#include <dt-bindings/reset/mediatek,mt8167-wdt.h>
#include <dt-bindings/reset/mt7986-resets.h>
#include <dt-bindings/reset/mt8183-resets.h>
#include <dt-bindings/reset/mt8186-resets.h>
@@ -78,11 +79,14 @@ struct mtk_wdt_dev {
bool disable_wdt_extrst;
bool reset_by_toprgu;
bool has_swsysrst_en;
+ const u8 *toprgu_sw_rst_tb;
+ int toprgu_sw_rst_num;
};
struct mtk_wdt_data {
- int toprgu_sw_rst_num;
- bool has_swsysrst_en;
+ const u8 *toprgu_sw_rst_tb;
+ const int toprgu_sw_rst_num;
+ const bool has_swsysrst_en;
};
static const struct mtk_wdt_data mt2712_data = {
@@ -130,6 +134,29 @@ static const struct mtk_wdt_data mt8195_data = {
.toprgu_sw_rst_num = MT8195_TOPRGU_SW_RST_NUM,
};
+static const u8 mt8167_toprgu_sw_rst_tb[] = {
+ [MT8167_TOPRGU_DDRPHY_FLASH_RST] = 0,
+ [MT8167_TOPRGU_AUD_PAD_RST] = 1,
+ [MT8167_TOPRGU_MM_RST] = 2,
+ [MT8167_TOPRGU_MFG_RST] = 3,
+ [MT8167_TOPRGU_MDSYS_RST] = 4,
+ [MT8167_TOPRGU_CONN_RST] = 5,
+ [MT8167_TOPRGU_PAD2CAM_DIG_MIPI_RX_RST] = 6,
+ [MT8167_TOPRGU_DIG_MIPI_TX_RST] = 7,
+ [MT8167_TOPRGU_SPI_PAD_MACRO_RST] = 8,
+ /* The data sheet describes bit 9 as "reserved, unused" */
+ [MT8167_TOPRGU_APMIXED_RST] = 10,
+ [MT8167_TOPRGU_VDEC_RST] = 11,
+ [MT8167_TOPRGU_CONN_MCU_RST] = 12,
+ [MT8167_TOPRGU_EFUSE_RST] = 13,
+ [MT8167_TOPRGU_PWRAP_SPICTL_RST] = 14
+};
+
+static const struct mtk_wdt_data mt8167_data = {
+ .toprgu_sw_rst_tb = mt8167_toprgu_sw_rst_tb,
+ .toprgu_sw_rst_num = ARRAY_SIZE(mt8167_toprgu_sw_rst_tb),
+};
+
/**
* toprgu_reset_sw_en_unlocked() - enable/disable software control for reset bit
* @data: Pointer to instance of driver data.
@@ -160,6 +187,15 @@ static int toprgu_reset_update(struct reset_controller_dev *rcdev,
struct mtk_wdt_dev *data =
container_of(rcdev, struct mtk_wdt_dev, rcdev);
+ if (data->toprgu_sw_rst_tb) {
+ if (id >= data->toprgu_sw_rst_num) {
+ dev_err(rcdev->dev, "Invalid reset ID: %lu (>=%u)\n",
+ id, data->toprgu_sw_rst_num);
+ return -EINVAL;
+ }
+ id = data->toprgu_sw_rst_tb[id];
+ }
+
spin_lock_irqsave(&data->lock, flags);
if (assert && data->has_swsysrst_en)
@@ -457,12 +493,14 @@ static int mtk_wdt_probe(struct platform_device *pdev)
wdt_data = of_device_get_match_data(dev);
if (wdt_data) {
+ mtk_wdt->toprgu_sw_rst_num = wdt_data->toprgu_sw_rst_num;
+ mtk_wdt->toprgu_sw_rst_tb = wdt_data->toprgu_sw_rst_tb;
+ mtk_wdt->has_swsysrst_en = wdt_data->has_swsysrst_en;
+
err = toprgu_register_reset_controller(pdev,
wdt_data->toprgu_sw_rst_num);
if (err)
return err;
-
- mtk_wdt->has_swsysrst_en = wdt_data->has_swsysrst_en;
}
mtk_wdt->disable_wdt_extrst =
@@ -503,6 +541,7 @@ static const struct of_device_id mtk_wdt_dt_ids[] = {
{ .compatible = "mediatek,mt6795-wdt", .data = &mt6795_data },
{ .compatible = "mediatek,mt7986-wdt", .data = &mt7986_data },
{ .compatible = "mediatek,mt7988-wdt", .data = &mt7988_data },
+ { .compatible = "mediatek,mt8167-wdt", .data = &mt8167_data },
{ .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
{ .compatible = "mediatek,mt8186-wdt", .data = &mt8186_data },
{ .compatible = "mediatek,mt8188-wdt", .data = &mt8188_data },
--
2.43.0
next prev parent reply other threads:[~2026-09-08 17:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 17:38 [PATCH v5 0/8] Add support for mt8167 toprgu and mmsys resets Luca Leonardo Scorcia
2026-09-08 17:38 ` [PATCH v5 1/8] watchdog: mediatek: Add wdt/toprgu resets for mt6589 Luca Leonardo Scorcia
2026-09-09 21:24 ` Guenter Roeck
2026-09-08 17:38 ` [PATCH v5 2/8] arm: dts: mediatek: mt6589: Enable toprgu reset controller Luca Leonardo Scorcia
2026-09-08 17:38 ` [PATCH v5 3/8] dt-bindings: watchdog: Add compatible for MediaTek mt8167 Luca Leonardo Scorcia
2026-09-08 17:53 ` sashiko-bot
2026-09-13 8:35 ` Krzysztof Kozlowski
2026-09-17 1:09 ` Guenter Roeck
2026-09-08 17:38 ` Luca Leonardo Scorcia [this message]
2026-09-08 17:56 ` [PATCH v5 4/8] watchdog: mediatek: Add support for mt8167 toprgu/watchdog sashiko-bot
2026-09-17 1:10 ` Guenter Roeck
2026-09-08 17:38 ` [PATCH v5 5/8] arm64: dts: mt8167: Properly describe the SoC watchdog resets Luca Leonardo Scorcia
2026-09-08 17:38 ` [PATCH v5 6/8] dt-bindings: reset: Add mmsys reset ids for mt8167 Luca Leonardo Scorcia
2026-09-08 17:58 ` sashiko-bot
2026-09-13 8:36 ` Krzysztof Kozlowski
2026-09-08 17:38 ` [PATCH v5 7/8] soc: mediatek: mtk-mmsys: Add resets " Luca Leonardo Scorcia
2026-09-08 17:38 ` [PATCH v5 8/8] arm64: dts: mt8167: Add support for mmsys resets Luca Leonardo Scorcia
2026-09-09 9:42 ` [PATCH v5 0/8] Add support for mt8167 toprgu and " AngeloGioacchino Del Regno
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=20260908174259.9009-5-l.scorcia@gmail.com \
--to=l.scorcia@gmail.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=matthias.bgg@gmail.com \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=wim@linux-watchdog.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.