Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp4161279pxv; Mon, 19 Jul 2021 18:53:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwv3nFFXGAspScSbI4itoBfMYuDTn1i1VuvGJE5kzjIvjtIfdVYKgMYiTPagfMHUKhBMPGj X-Received: by 2002:a17:907:3f9a:: with SMTP id hr26mr30079799ejc.110.1626746037268; Mon, 19 Jul 2021 18:53:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626746037; cv=none; d=google.com; s=arc-20160816; b=fdIoxOj/BWczjtB+YxftpXCQWy8hQbdmYrr1FelLK/IU3mZLkyLronnic3p0GWaTIY +htumAMeEIqFh0fA8L6ooJeecsSH1cJ8EWRp8r1vPq/0jG7UDF04CHfwsxsl07F9hyTC zyOqV07WoQHWtubHti8rBYhYQZcccur8yLwOqwCl5Hz8axGIIk/GCLdepW1l8rk2Z0eD oxqtHvG07XVrAHSl3xtVdgbQR32CLsYk0HimWqvtWpi5VCAXFRfW9HcvP7ABLTH0NnZn yz0YF+srikre0vCb7F5JXekV0Tkj0M/oPoUvXc0FHwcMjydRaL/l+uqYIuuVhA1IfLw8 NkIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=nFbxD3b3T/jf1i3Vh5jhpLGRNo2xXjLezL4X1Xn1xv8=; b=BlV4I7gd0eBGz4U0rbiBxGKt5HXul9Kyhx/Q/pvSBfFsfzXpfCYVgyhrGC1OU7e6y+ h1EZCDCUR0LzizTrosLuoDshsvaX03RDvAStPe4zMriFHUx0UuXjn715tGTNA5xMzdhM 3oBS0otpgET0c3QO5/knN8FCvHQb4c8Hs2lrPywblHINeL12m0uX07XKddtZXfv20WAF 7q72fApVnT5oCw4NunugDYowwqBgmpb/WLrMahs9rElU2gNQFA3tGq4+Dcq2zJtZi24S M3D2tTlUbKkLLq2F+V1W9k7R6C0g1u4fPuo0oabu2IaB+q9UfFGPmHEQGbFfnmJrzejQ vRJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=KqQsH7kE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hk6si22472251ejb.587.2021.07.19.18.53.34; Mon, 19 Jul 2021 18:53:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=KqQsH7kE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345324AbhGSPIz (ORCPT + 99 others); Mon, 19 Jul 2021 11:08:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:40458 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343965AbhGSOsh (ORCPT ); Mon, 19 Jul 2021 10:48:37 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 00FE2613CC; Mon, 19 Jul 2021 15:25:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626708343; bh=0QifNCpY/xvzZisF71nCx5PqR2PY7wNTgoNv7Nf5sCs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KqQsH7kEqGIP0zqi4see6mJdmyOVf/B8LK7ll/8Zi7DhRt+aZZ6CUfK/0tFSjx9ys XAgcJOGz+MFi3lvLX0fGQDZOm3F6drB94Hpv8TywtQ3EIqMmfODf8DYJRaD9M7zRLg izZyDCulv6AgwimdE/trwiaiJVd1fO2bkYaXsRz4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jan Kiszka , Guenter Roeck , Wim Van Sebroeck , Sasha Levin Subject: [PATCH 4.14 274/315] watchdog: iTCO_wdt: Account for rebooting on second timeout Date: Mon, 19 Jul 2021 16:52:43 +0200 Message-Id: <20210719144952.433642649@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.861561397@linuxfoundation.org> References: <20210719144942.861561397@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Kiszka [ Upstream commit cb011044e34c293e139570ce5c01aed66a34345c ] This was already attempted to fix via 1fccb73011ea: If the BIOS did not enable TCO SMIs, the timer definitely needs to trigger twice in order to cause a reboot. If TCO SMIs are on, as well as SMIs in general, we can continue to assume that the BIOS will perform a reboot on the first timeout. QEMU with its ICH9 and related BIOS falls into the former category, currently taking twice the configured timeout in order to reboot the machine. For iTCO version that fall under turn_SMI_watchdog_clear_off, this is also true and was currently only addressed for v1, irrespective of the turn_SMI_watchdog_clear_off value. Signed-off-by: Jan Kiszka Reviewed-by: Guenter Roeck Link: https://lore.kernel.org/r/0b8bb307-d08b-41b5-696c-305cdac6789c@siemens.com Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Sasha Levin --- drivers/watchdog/iTCO_wdt.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index 347f0389b089..059c9eddb546 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c @@ -75,6 +75,8 @@ #define TCOBASE(p) ((p)->tco_res->start) /* SMI Control and Enable Register */ #define SMI_EN(p) ((p)->smi_res->start) +#define TCO_EN (1 << 13) +#define GBL_SMI_EN (1 << 0) #define TCO_RLD(p) (TCOBASE(p) + 0x00) /* TCO Timer Reload/Curr. Value */ #define TCOv1_TMR(p) (TCOBASE(p) + 0x01) /* TCOv1 Timer Initial Value*/ @@ -330,8 +332,12 @@ static int iTCO_wdt_set_timeout(struct watchdog_device *wd_dev, unsigned int t) tmrval = seconds_to_ticks(p, t); - /* For TCO v1 the timer counts down twice before rebooting */ - if (p->iTCO_version == 1) + /* + * If TCO SMIs are off, the timer counts down twice before rebooting. + * Otherwise, the BIOS generally reboots when the SMI triggers. + */ + if (p->smi_res && + (SMI_EN(p) & (TCO_EN | GBL_SMI_EN)) != (TCO_EN | GBL_SMI_EN)) tmrval /= 2; /* from the specs: */ @@ -493,7 +499,7 @@ static int iTCO_wdt_probe(struct platform_device *pdev) * Disables TCO logic generating an SMI# */ val32 = inl(SMI_EN(p)); - val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ + val32 &= ~TCO_EN; /* Turn off SMI clearing watchdog */ outl(val32, SMI_EN(p)); } -- 2.30.2