Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3889652pxv; Mon, 19 Jul 2021 11:12:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyA0qYT81yI2W7E/dgr03GCLxKRrhOROuQtM6QZ5qe+/yagiMvj4pmQg24DkSmu5HKprI3J X-Received: by 2002:a17:906:c182:: with SMTP id g2mr19716631ejz.507.1626718351404; Mon, 19 Jul 2021 11:12:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626718351; cv=none; d=google.com; s=arc-20160816; b=px5EaZ5IuiQIWKH7BEgWQ1Lne8j3QTAFh57YrYukKMJvFKw8yUX4MCOwBvwbZ82TqE 3m0sPj9aId4d283x2D4agxGB3k9ZFXEVxErLumliPeKjOWC8c09TeZQyzkNwKWNYrCxz PjpJ5qX+/aN9ENzb5NT+UjCwK7pEmVMcz9AX3thK8wcgE/p3anke8HuUJDaAwt/SGyoE VRc6yNtOnyo3+S5fFItcsJ3DfyKSg+a0KMavwsnZl5YffBMqAORMWdTx0vOCeo5ZdWsd z52AGF2E/SAq4BpANSW9HGOtwD4BM4vxbnP0T3jbT9+aX85ifz2PLX9pDqxMNXI8WBsO wj+A== 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=7YSOhgWoM2zvgzGttl3AYB7TEjHa/Vjf4ZSWZ+P42Go=; b=hl35Unop5YimPkwb6Br6uRRyo79Zs+2jP+08wDt393yjaJJzKRyoBb4hZGT2z3B3qa OFmQhzv6d+x8nMmCDPbPg0EOt1X98MCGAOseX7Zh/GeykrjjDJvASrcU57UDNcAIUBkj P7AP/IvAnes8WuUmz+XApvj782jiO+hR9AlKsPsKqMY26DUReSMRRO7aqRO/NmTjF4vM DRB9vBlJiqE3nr2WLzzSqrez2ZMNluiuHlCrJhPFLd0Ef3Nj5aASmArnpVsPOwhW7RDu rGTnYPOtfeyLifv7BW36/6PmH9m7RMsI2ZCleKoc7B3I/wY83KfCBt2EWP9bv0o0X+6+ AZhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CHp+zLew; 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 w10si20551550ejf.364.2021.07.19.11.12.07; Mon, 19 Jul 2021 11:12:31 -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=CHp+zLew; 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 S1379440AbhGSR06 (ORCPT + 99 others); Mon, 19 Jul 2021 13:26:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:46042 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349160AbhGSPoy (ORCPT ); Mon, 19 Jul 2021 11:44:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 513CE6157E; Mon, 19 Jul 2021 16:23:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626711836; bh=96LjCpP+q2lNFwkuwSh8WkFF0CnkOkRCU0meSQEXn2I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CHp+zLewL6C2cwEotp2R6jq7maFH85AaXng2Sgcjl9vCtJc19IEgRTt3YqXL9UKwY gW1o+RJK1yt+sf+XVNV8FfWjlEHeMjKAZVR8PdI6zfP8SAbZ6ImbJ7yD5SaoFLZYOO 0X7qFZt9L1BxpXtyowo2ViHPLQJWVBG72cPUkbtU= 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 5.12 149/292] watchdog: iTCO_wdt: Account for rebooting on second timeout Date: Mon, 19 Jul 2021 16:53:31 +0200 Message-Id: <20210719144947.389936186@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.514164272@linuxfoundation.org> References: <20210719144942.514164272@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 bf31d7b67a69..3f1324871cfd 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c @@ -71,6 +71,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*/ @@ -355,8 +357,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: */ @@ -521,7 +527,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