From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f173.google.com (mail-lj1-f173.google.com [209.85.208.173]) (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 A01BC3BB9F1 for ; Fri, 20 Mar 2026 13:56:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774015005; cv=none; b=CczYB2L8bCaJ/hs5ezyOtlV7JlTXWT46Lj3hvmPAwXDePvtQPb1QtXBmAY/X0vgNkes2+CSGFtJDIIRNVu0enbXmdE69dr8MgVlBwwPn7Et/KRmeybxOb9ZL5JA1l3amxWwXhwGtZlCamFwt5X9JB6hXHd5Gx1FFo+jv8YWgqSQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774015005; c=relaxed/simple; bh=7FaE8VdJnohhvqgqFNEK8NlmDgIwt88sxl+bn8YaTsw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=svQ9rl8w5Pg8frINqAYXE7xqxx+Y+Iknr8XDhLOr+bn4sDyFPnwcg5QK4ijm5rJf/atJd9KhIf7qB6RyD6+yvg17ZGjyrAFUC34A6tPr2+w1rDHX1qlfe9mmj/D2vz9cokmAaDBV1GygDR5vZnp2ugOokwOykjRwhwfiDsi2V48= 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=VAbIAD0P; arc=none smtp.client-ip=209.85.208.173 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="VAbIAD0P" Received: by mail-lj1-f173.google.com with SMTP id 38308e7fff4ca-38b13652c87so18052511fa.0 for ; Fri, 20 Mar 2026 06:56:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774014993; x=1774619793; 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=pmpUwafDPJ08vdYxVnIzsE+y/e7zfyVKAjb4p4prvRw=; b=VAbIAD0P0F52L0i1q3BfIgS15rlt1RZOqZyR/e4wQTd+yoifrvu2zJ8lnl1vXhY5qp sKkik2gT02El1FFMR83Ic0ZSrtypx/U7TNurKz3WwuKEMMgJszwihfODSYAvtF+jP88Q RdIfdSVEcWXMrRuysP8/Fe7glJX4Zdh24An8BDpc0bvUINmJTriZHrFZz6zfCcO2HJdS 9/Rwp4ctyhBLbRO2rD2R07WUZ+ABiSatd3VRgsPsSEmD1DMDwkWWduXkx9/cz9NV/vQa YTyETs7o7jXPv2Sp6Vvrt0sDP5Flxxw/cOZzpFvh15TOIf3BTZfAmfWFg/brkrEpsBvf 26tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774014993; x=1774619793; 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=pmpUwafDPJ08vdYxVnIzsE+y/e7zfyVKAjb4p4prvRw=; b=CESP6OrNE27MmvYNWfcT4Py9GTQYAdtE38fK2QdeuBKNzun+THbaBnfovM8ftuuN+z JsPok9Nv4X+Bi0V3vn6kKVOQQnEwV9nqZ3INfwOuAkCh7g9ZL4ICaqsojmYKuFv7JyBC mwwavlu5p0IBs89zCkU11WmqOOPF4fj+a5wEvZHh8zGZb1vl9+LAeNvvYGfym6TzCv9G k7Q3mM61AkIEH0FBUdRuITeZxdjuDHfkT6O4y+6qpKszlUuhjKO/Tw8PB542tNYBNILW Av6jYffOt+4miphP/Glf8cn7mHC1lqW9/6SobYDq54T18vhz/DJwfTVwnzPPAMvYhqFP LQjA== X-Forwarded-Encrypted: i=1; AJvYcCXYC75KTdRdbjJPwZ5c/F9h3hrTC5qarWB/QYx9DfUjsQ9pmPjuuLeTroVFrNUIwQ7BSrmmbf3EpVGk0Sw=@vger.kernel.org X-Gm-Message-State: AOJu0YwFN81rpJyAlMMp1IGSJA4ByPVSLdgtPMPmW212Qxkov+mg0+H0 rcDCzTZSorxM3lYRcUhjaR+c1Za0UDPtX03J9ja1DEkxMnoiy2bBG/66 X-Gm-Gg: ATEYQzw2Zv2Xiap5PmEdMNbNoxbQ3G3ZW6pTfEeTNekkZQFI6REy9bF8WE7egfZZqak 2splPvbwVla0s9jrU4289D63JyJBzpW2w2qePLl3tNrepd2rZ7fz/68oO7aDSy4Hfj4NJ6Y2BCq HeUWz4AszoBrf6Zg7+s7JTc0Wnf7IgFBE1uAMb/ZUKkeFHXXqqvgTB7Vp78GJX0m7XwZgPGqqGh LqswopSOY9LAaykdo12Pev6Wxl5l8bXqafAnFr2XrKEUyisYYmQrdXdBJpdsRGjqBlPOv2Stko4 oqAu0JuB6QaRsKpDm+QR3aCy6q+tMKhAPQuyLv8zjKl3KC1lKrwQ08VBN9ZhhB656q+wBP4CDSM DNgzYCXn/ZhIaUyRNeOauK7nC+eHCfe3qf2IV903LhEgySt0+t/lmsGLKstLbbUtBRPfw6cYlGT xNhUBYrjZHQYCVR+LfprJl7ELFcG8We5YBD62GzcuGbQ== X-Received: by 2002:a2e:9dd5:0:b0:38b:f49c:8679 with SMTP id 38308e7fff4ca-38bf970c3e6mr7917541fa.31.1774014992823; Fri, 20 Mar 2026 06:56:32 -0700 (PDT) Received: from NB-6746.corp.yadro.com ([188.243.183.148]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-38bf97709d9sm5468761fa.18.2026.03.20.06.56.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 06:56:32 -0700 (PDT) From: Artem Shimko To: wim@linux-watchdog.org, linux@roeck-us.net, p.zabel@pengutronix.de, Sergey.Semin@baikalelectronics.ru, mika.westerberg@linux.intel.com, andi.shyti@kernel.org Cc: Artem Shimko , linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/5] watchdog: dw_wdt: manage reset line during system suspend/resume Date: Fri, 20 Mar 2026 16:56:21 +0300 Message-ID: <20260320135624.223863-5-a.shimko.dev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260320135624.223863-1-a.shimko.dev@gmail.com> References: <20260320135624.223863-1-a.shimko.dev@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: 8bit The watchdog controller reset line is not currently managed during system suspend/resume. This can lead to an inconsistent hardware state when resuming from suspend, as the controller may not be properly reinitialized. Assert the reset line before disabling clocks during suspend to ensure the controller is held in reset while power is gated. During resume, deassert the reset after clocks are enabled and before restoring register state to guarantee the controller is properly initialized. Add proper error handling for reset control operations during resume with appropriate cleanup path on failure. Signed-off-by: Artem Shimko --- drivers/watchdog/dw_wdt.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c index 27b5098832d5..c2c5dc6e54e7 100644 --- a/drivers/watchdog/dw_wdt.c +++ b/drivers/watchdog/dw_wdt.c @@ -382,6 +382,8 @@ static int dw_wdt_suspend(struct device *dev) dw_wdt->control = readl(dw_wdt->regs + WDOG_CONTROL_REG_OFFSET); dw_wdt->timeout = readl(dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET); + reset_control_assert(dw_wdt->rst); + clk_disable_unprepare(dw_wdt->pclk); clk_disable_unprepare(dw_wdt->clk); @@ -402,12 +404,22 @@ static int dw_wdt_resume(struct device *dev) return err; } + err = reset_control_deassert(dw_wdt->rst); + if (err) + goto unprepare_pclk; + writel(dw_wdt->timeout, dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET); writel(dw_wdt->control, dw_wdt->regs + WDOG_CONTROL_REG_OFFSET); dw_wdt_ping(&dw_wdt->wdd); return 0; + +unprepare_clk: + clk_disable_unprepare(dw_wdt->pclk); + clk_disable_unprepare(dw_wdt->clk); + + return err; } static DEFINE_SIMPLE_DEV_PM_OPS(dw_wdt_pm_ops, dw_wdt_suspend, dw_wdt_resume); -- 2.43.0