Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3841541pxv; Mon, 19 Jul 2021 10:02:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw5QyO72fVMrd20LT16XPDh06xJbYWI3kbHSDCOXolHMfZt8w/HQrhvim4/WUpmkCfDWsuq X-Received: by 2002:a17:906:ecf8:: with SMTP id qt24mr20198568ejb.433.1626714126467; Mon, 19 Jul 2021 10:02:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626714126; cv=none; d=google.com; s=arc-20160816; b=kSpXzW0BQvCBF/TxEmH9+Gq5P5h1WblXWquHh0JcQO9lt5U9tOLNXnOF+4uMTZ6DtX rKuXOkqc5sCOkk9JBc8yurCfcrFV6+mU6KakNLJgKnh/0DQpK+PBBfPXXFr7RR+CYFHU 9JND9JnfY5gB2SNXlN4So4cn0+++ZcFjGsvqrRB7LHAH8rn3PGnDGUV7C5p9tKsdkHpk o0vwZOAZgCxqVEbroU9f8MjxZtRkeJXZQZPo2YMXKm8j8pRerqdO1u9yDQJW8Zmf4Miw pyWz6yqWzWuP7tqLFs/cAF0kn6aiZO7WaoWfuRkwcWXyT6TQMlDi784QZS8RRxrVEQ2S hG7Q== 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=cNdkh3MYL5M4LPNBLfVTXyMNSdChNtJIFwPViT8UAgo=; b=H0yALybQeXMGT+HuOZlNIGhYGsr06YLzbR8FZlDZ33qcxeikLtQwk9NoOlnD3V0hl8 f+xF/tu9F8dnZ6piFFmtTV/h+a8jfySwYk5elxMXhGo9Mo4B3em5ZlR687LfXQUWUgUK cBtWPAQYcT60OEvcx91awn1LpCaRPY+pB7Kr9XQ40qJn/9UWz0knnfVT0vdTzCiqdoA6 8JuvH2W/v4u6LnKr8U5YgVR6sWkKzmSc+Kut2cuoemJspUu+MwjFQUI4A9rd6MTmELuP ++8gPmR9gSAoPksJnvHV7XFc83feREj3Yh3s1geHVUAu1h9v9Ns3buHs6p/C/5Bb76p1 5J5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="U/xmclsn"; 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 u15si23713950edt.211.2021.07.19.10.01.43; Mon, 19 Jul 2021 10:02:06 -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="U/xmclsn"; 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 S1350651AbhGSQLr (ORCPT + 99 others); Mon, 19 Jul 2021 12:11:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:41044 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345480AbhGSPJY (ORCPT ); Mon, 19 Jul 2021 11:09:24 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id E16B0613B7; Mon, 19 Jul 2021 15:49:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626709746; bh=tCUh3rEoL7t0V6Q9DxLofggK+iSzdMEzMiUzlyIwDPc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=U/xmclsneGZhPzdVVCBKO/FUqn21/C0X4Tjgs6sxGHyubBZOvmrovmLSiuQa4fQgr agQEoHJgASdwF3lf1e2NJSHAv5iura2E5EAlgvcaa4o7tWkl0wsb6pAeR7P0/u9txu eqh+npa9Gp1cK4q4SifGsOGE7VdaQO3l5oZUQj+I= 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.4 081/149] watchdog: iTCO_wdt: Account for rebooting on second timeout Date: Mon, 19 Jul 2021 16:53:09 +0200 Message-Id: <20210719144920.526749674@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144901.370365147@linuxfoundation.org> References: <20210719144901.370365147@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 e707c4797f76..08e534fba1bf 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c @@ -72,6 +72,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*/ @@ -344,8 +346,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: */ @@ -510,7 +516,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