From nobody Mon Jun 8 09:48:23 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FEF921FF23 for ; Thu, 4 Jun 2026 01:06:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780535165; cv=none; b=F7pZy3U6qV0u1SG9f2sJSuUUJ2bFWmyrQJrNkBoODfjSCnz+QGVlEI8mZi0CgLL5GCEztuSxq0guw4nEdUo2qR69XRiHeVOS9Ev8Yn59l5lcfjTBPwn6EOj0+i+hCndkkmwU92j/Ilrmzd0++nalNKvkAia+bYvWn4DURLb4riQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780535165; c=relaxed/simple; bh=vcT4NW81m8XsoLMhxNoDk1/yerEMrmMNVMicm6D6waA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bCbOn+1bTpLA5t6581zpaIGcXDE/Nv5usXl+JJ3w/3ld54V019A3/0xYORKjP6ne0H7BuH8oBfZVvP2fWWAMt0vwTpT3ZtE1uBlSdXd+Gc5y0/l5i6Tv4uKaM/+oA7kbKz4silNuJj5HTzi8FuOj2qhTAUf4735SDFRXRd1domM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZGHSEUNv; arc=none smtp.client-ip=209.85.216.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZGHSEUNv" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-36da8439078so111513a91.2 for ; Wed, 03 Jun 2026 18:06:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780535162; x=1781139962; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y/BQtNunbqSxrovheX7WXW6K0SrGGYRahvXKwiLXth4=; b=ZGHSEUNv3xHRKro0yNcdjES2kdnVSW5/KGXvwx0N5sKWEUaycUtpA/XuC+ZJsCp9q0 HYT0TGmEPPVkznVm/ylvKpQrv/7d9+xp4A1PXfuYTTKeAlmlqo4lhq99JlA97WS9lIXN qtccJUy+/khI+1IbwFhH9SLUi+kWQChwpRBpmKs7hREPbbZGvbhmff8nxKV2Pjvwt11u J2rL6KRVdixwDfQA2pftFFH7zbLVjA6AhwZ7xI8MivI1efol8vrwisbvTj9QQGT/P9q3 dg2sFbQRygZVthpBo+jKkKhbh1DIGmHO5Y5gSh/mwPZ0RDBULmZsgYUZjXDDH7j01au3 226w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780535162; x=1781139962; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=y/BQtNunbqSxrovheX7WXW6K0SrGGYRahvXKwiLXth4=; b=bBLnys4Qcz/stZWIVpR7mBMzMawJ1R+xkKq53pHAENPpvYm0MCKHWUQxyYfMecDUXH 5wbxoyDsF3/l5EDWEAqAiWMOeAcKB4a98RCvgBQCiBO01HXqCtnTiOk0BwXgcpxs5KTU nkJu9U1WObUJjI47cnb8sWLm0pAoo7+bWeC5EZ52Ox3YE4cuGjr4AIUkZD/U3djbb4xV GaxL7EBZhQrPQ3b/g8WvhegBMzn57J5MZSlNuA2q6d7or/oZRLAaymPOoIxwp/XyZGPA tBapklQ4ijxVYuWp4FxhhPY4A++y2Cu7G9ieSnR44MQ6LVU6LOGuS9YP/IkFzqLXZHUX d4qw== X-Forwarded-Encrypted: i=1; AFNElJ98BhJFIhSZSj8PsqyHZGs3Lrfq+rR27bbusD8McCYlHj+GcmJ2WfxXw6RIRFdXBzKzM6Kos7PZRzI7nxA=@vger.kernel.org X-Gm-Message-State: AOJu0YzqT9H6w7dhQ7bW2Zcxyr7tOLErbkZ3CecTIyZ7UIrvc77jS0Ha fj4rVxh8+T8kVFphSYj63ld3fr/oTNtkFTlkQ2FOPYRkK1IdixPTzUJj X-Gm-Gg: Acq92OFyus3ij3ppXRl86YeEFweqpuUw1pMjtnxECm+yJyEBHJ5Reo6E8pNuwf/n0ga 4hv8GQqomxYTC8K7MbLAw7TTUyEW6WZOqf5YbCHWfj0XzHx09BknTjfhQNoDZTkejk62FGuCmc+ GHdJbremsjaa87BYFk4WLtGm68b0GiAb6P866a9jeE1aJqTLoboUX+GhaGSzUTmscgeDGnB6FY9 Gz419tp932414GuZhViJ/HQ7qL8e+8yxOvzFHDrpPotpUHn07rlKQ0Y5V9xCgHzCBf7RAXuVrJI a2t//iiLs1gYsi+/2H2T7B4YVFB8cmWz3aICDoq6FSfBMa4u5L4pphTFR5fY9+nvFo9TWT6WC8I K4pUQIGIgsCqBW8c0JIO8Bi0nZGz7e8cheMGiTvidzU4QiV5De4WA2NueBqRJLhnZMCjz1QBqLN VTt7MdyH1mf4k602bTCgIYJU81YTUYEOAzUa2/bxguZNFBYATwJ43KivJO/4oVLdrnK7pE39tKp mG68t0SaMjAF4mXLAmYfTH4KvMqdxUUIYJicmhuQP64Tg== X-Received: by 2002:a17:90b:4fcf:b0:36d:ae6a:22ed with SMTP id 98e67ed59e1d1-36e310ff0bdmr6115504a91.22.1780535162396; Wed, 03 Jun 2026 18:06:02 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36e6d169abdsm2366747a91.0.2026.06.03.18.06.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 18:06:01 -0700 (PDT) From: Rosen Penev To: linux-watchdog@vger.kernel.org Cc: Nicolas Ferre , Alexandre Belloni , Claudiu Beznea , Wim Van Sebroeck , Guenter Roeck , linux-arm-kernel@lists.infradead.org (moderated list:ARM/Microchip (AT91) SoC support), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/2] watchdog: sama5d4: fix shared IRQ and hardcoded timeout issues Date: Wed, 3 Jun 2026 18:05:41 -0700 Message-ID: <20260604010542.23177-2-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260604010542.23177-1-rosenp@gmail.com> References: <20260604010542.23177-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix three pre-existing issues in the sama5d4 watchdog driver: 1. Unsafe IRQF_SHARED | IRQF_NO_SUSPEND combination: The watchdog interrupt is a dedicated peripheral line, not shared with other devices. Drop IRQF_SHARED to avoid the documented unsafe interaction where IRQF_NO_SUSPEND keeps the line enabled during suspend while other sharing devices may be powered down. 2. Unconditional IRQ_HANDLED on shared line: The handler returned IRQ_HANDLED even when the status register indicated no watchdog interrupt was pending. Return IRQ_NONE in that case so the kernel can properly detect spurious interrupts on the line. 3. Hardcoded 16-second timeout: sama5d4_wdt_init() unconditionally used WDT_DEFAULT_TIMEOUT (16s) for the hardware timeout, ignoring any timeout configured via device tree (watchdog_init_timeout) or userspace. Pass wdd->timeout to sama5d4_wdt_init() so the configured timeout is honored during probe and resume. Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/watchdog/sama5d4_wdt.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/watchdog/sama5d4_wdt.c b/drivers/watchdog/sama5d4_wdt.c index 704b786cc2ec..b7a8cfed335d 100644 --- a/drivers/watchdog/sama5d4_wdt.c +++ b/drivers/watchdog/sama5d4_wdt.c @@ -169,11 +169,12 @@ static irqreturn_t sama5d4_wdt_irq_handler(int irq, v= oid *dev_id) else reg =3D wdt_read(wdt, AT91_WDT_SR); =20 - if (reg) { - pr_crit("Atmel Watchdog Software Reset\n"); - emergency_restart(); - pr_crit("Reboot didn't succeed\n"); - } + if (!reg) + return IRQ_NONE; + + pr_crit("Atmel Watchdog Software Reset\n"); + emergency_restart(); + pr_crit("Reboot didn't succeed\n"); =20 return IRQ_HANDLED; } @@ -197,11 +198,11 @@ static int of_sama5d4_wdt_init(struct device_node *np= , struct sama5d4_wdt *wdt) return 0; } =20 -static int sama5d4_wdt_init(struct sama5d4_wdt *wdt) +static int sama5d4_wdt_init(struct sama5d4_wdt *wdt, unsigned int timeout) { u32 reg, val; =20 - val =3D WDT_SEC2TICKS(WDT_DEFAULT_TIMEOUT); + val =3D WDT_SEC2TICKS(timeout); /* * When booting and resuming, the bootloader may have changed the * watchdog configuration. @@ -289,8 +290,8 @@ static int sama5d4_wdt_probe(struct platform_device *pd= ev) =20 if (wdt->need_irq) { ret =3D devm_request_irq(dev, irq, sama5d4_wdt_irq_handler, - IRQF_SHARED | IRQF_IRQPOLL | - IRQF_NO_SUSPEND, pdev->name, pdev); + IRQF_IRQPOLL | IRQF_NO_SUSPEND, + pdev->name, pdev); if (ret) { dev_err(dev, "cannot register interrupt handler\n"); return ret; @@ -305,7 +306,7 @@ static int sama5d4_wdt_probe(struct platform_device *pd= ev) set_bit(WDOG_HW_RUNNING, &wdd->status); } =20 - ret =3D sama5d4_wdt_init(wdt); + ret =3D sama5d4_wdt_init(wdt, wdd->timeout); if (ret) return ret; =20 @@ -358,7 +359,7 @@ static int sama5d4_wdt_resume_early(struct device *dev) * This should only be done when the registers are lost on suspend but * there is no way to get this information right now. */ - sama5d4_wdt_init(wdt); + sama5d4_wdt_init(wdt, wdt->wdd.timeout); =20 if (watchdog_active(&wdt->wdd)) sama5d4_wdt_start(&wdt->wdd); --=20 2.54.0 From nobody Mon Jun 8 09:48:23 2026 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 682A9236A73 for ; Thu, 4 Jun 2026 01:06:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780535165; cv=none; b=T7c7PA9G/7ibdXRSWDNcaB2KvsAwrjS/ULYiDwxUFpS4ttrTC0B/dWKzY4oklx2TSqd1FNDq56pcQyZqC38GDmDgSWovlVDNaLLeP5XveboUDvfGq9VYIbppanBtF8QgRHwmXOIDpaEiQLZ7KxKORvG7aWc8vXJRpsREitSyHzI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780535165; c=relaxed/simple; bh=1BVO5B6F+e++fyfcPkmh/wUWvp5N0OWIqOa+1VW5ETE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vj4cepS/Nmqfy/spoDRBqJcOnWT12iJPDbrMRL7y3HDdCOpMDUOeMP34uEtwz944HaSC9aFjCR04e2WJqeQsIYD8URSCClJpuwDsZVX4oy2KJYNt/3f9VnwXzttpnrB9P7krv2KXbPkd81kTfgiGMXU4W6pAu4ZDfYzFr4hQxJo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LPArYICa; arc=none smtp.client-ip=209.85.216.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LPArYICa" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-36d9794d82aso62465a91.0 for ; Wed, 03 Jun 2026 18:06:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780535164; x=1781139964; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=n9gEJWImTswB6lvU2PvICsMgm37R+YYrTrc943vxPQA=; b=LPArYICa3memQ4pC5GLZvFvEkmZe/fWt3+hZ9rFVUsxQ1Sag1MFoc+zMN11hxJ49QR zUEm0UjBc94Wp/Ra4CA6xn2JbzBetr7D9hbMDL9kzZlCm1pKLwZkPr6xlSD2p4GDp8t3 YpNRodnrNvZofdjiihP1+/42bAKjPmWdKkKf+1jAPY+IPgcRsPsYghc0h3dzvgY4ZGwO ZF4a7Tix2E3P135SqsyACzXMTvrVQ/8cfOXn+hkvJxWibg1WOu0WsZmzQbYUSOFM8701 kNi4QCI8Z/zSwp34dlmBGAMGJOtQXqES9+QD02xykx7sbLiZSGrujg7VYQ/VWNMlq8Py 4tNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780535164; x=1781139964; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=n9gEJWImTswB6lvU2PvICsMgm37R+YYrTrc943vxPQA=; b=TFZ2dts1pPnBGtZc3WTONPdW61soVAsM1g59s0LojXVnXt4ZV5B6J6LXf6G0kYOgwM KTPR/j8dz3OWyp3EE5JUcWiAYcpX5hkBVac+Z4h+R1amB8/MQBeZYeLrwaaPTNluwyY+ N9wZ1aX8P3TxfEK5Vqor0m8tZCGumMadytMCgcmknBpmQwR9sep48m7+0q5FM18Zg2Ms jzl+NtDv6Uc25P/a1jVi++OMNZTszwnZmhgyZx1obBBfFq/MxSLmEz7T3+ayIEaBSLiT E+XKmMC8jnIjgh2nkd1rl5LfuSX3GoEh/bzcxDuEuRUFgdwjmrUwOXcxLxRClMcs22A9 piFg== X-Forwarded-Encrypted: i=1; AFNElJ+h9ckIQG70oJvME10txdEOwmR4KZL8UE8P4aZOqKF0w21re+q7HMl9XW7uxv8p56E49qic/eKavLHw70U=@vger.kernel.org X-Gm-Message-State: AOJu0YwQMnETKFKl9thejgxELQmkuRZlAJ6rnUGl2wItMm8pcCixK/Mv jUhYGQQ+vIE0CH60YD4VRCMe2fGrxBsGsRa9/u7PeaEN3SP0DvVrapCS X-Gm-Gg: Acq92OH6fEyaZIPNVaabboeXnCXTUlE8ryqzO4oqUC87Ttn9Df9FM0PnDtJyLEaBKvi ZSgZ353JmIb7mqoref/rzGiAPbHt+pCIweKo0T3072RsbeecYDAlE7agEYuYYHpImFDrrScErrb rK8q6Nifh7A4l8O2MQLocH83A2WQC/MLRTncD0ZciTR6o0Pm3UJjaD7zgwpTDPvti50HxkDPCI2 OAURVecBwLu2qLWrUz1me9CthlfYCU3vMAzdwu7sJyYEDI3LM+HePn4lWDEkIz5wZ7eo4Stb8ci D9E2Sau8NtQ5bYnUs2M2e3BXquUCpsmceY3N/l1vcLYz/vM5ke6xf5kOl2Jc43pAAaAfayx4Po1 vsRvm2b10jfTdvRtZYcRN9sI1Mug3w1chd5yVqyUN6PIn8cszsedIHpAmwUwzjFHUFzB+jscMFH NLKtffFncYDit29ncu+XmUMuw6aL2gxFjaUc3OU1mZLoCulL8FhZlcdx8aGnEQGqV4o9dCZE/Kq WMrqxv+1ANdWzK4OAPn+rtsRASuhwi6jjfuKtQOcmsCvw== X-Received: by 2002:a17:90b:3b49:b0:35b:9894:f6f9 with SMTP id 98e67ed59e1d1-36e3228676emr5020525a91.18.1780535163699; Wed, 03 Jun 2026 18:06:03 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36e6d169abdsm2366747a91.0.2026.06.03.18.06.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 18:06:03 -0700 (PDT) From: Rosen Penev To: linux-watchdog@vger.kernel.org Cc: Nicolas Ferre , Alexandre Belloni , Claudiu Beznea , Wim Van Sebroeck , Guenter Roeck , linux-arm-kernel@lists.infradead.org (moderated list:ARM/Microchip (AT91) SoC support), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/2] watchdog: sama5d4: use platform_get_irq_optional() Date: Wed, 3 Jun 2026 18:05:42 -0700 Message-ID: <20260604010542.23177-3-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260604010542.23177-1-rosenp@gmail.com> References: <20260604010542.23177-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" irq_of_parse_and_map() requires irq_dispose_mapping() on failure. Don't bother with it as platform_get_irq_optional() doesn't need it. Also handle EPROBE_DEFER. Signed-off-by: Rosen Penev --- drivers/watchdog/sama5d4_wdt.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/watchdog/sama5d4_wdt.c b/drivers/watchdog/sama5d4_wdt.c index b7a8cfed335d..030029d50257 100644 --- a/drivers/watchdog/sama5d4_wdt.c +++ b/drivers/watchdog/sama5d4_wdt.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -245,7 +244,7 @@ static int sama5d4_wdt_probe(struct platform_device *pd= ev) struct watchdog_device *wdd; struct sama5d4_wdt *wdt; void __iomem *regs; - u32 irq =3D 0; + int irq =3D 0; u32 reg; int ret; =20 @@ -281,8 +280,11 @@ static int sama5d4_wdt_probe(struct platform_device *p= dev) return ret; =20 if (wdt->need_irq) { - irq =3D irq_of_parse_and_map(dev->of_node, 0); - if (!irq) { + irq =3D platform_get_irq_optional(pdev, 0); + if (irq =3D=3D -EPROBE_DEFER) + return irq; + + if (irq < 0) { dev_warn(dev, "failed to get IRQ from DT\n"); wdt->need_irq =3D false; } --=20 2.54.0