From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (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 100D43CDBC8 for ; Tue, 26 May 2026 23:23:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779837823; cv=none; b=gs/si3Dg/fyGi9Sa02Aj9SU/ZIlW5LSxbEJiMQ2AT6er0FCtB4zGrINPSyDaQdOeT8R1qZhFLQNo7qjQF8J/wQ6cqy4L/iADhO8bOexvvDfxU/jZcDAd/S20jE6YWZoevPEiJHfIrEMmQcGk9gdDn9i1g+8H5ARDMTTde2qJpbo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779837823; c=relaxed/simple; bh=Af7beS4YzYIWd0gIkVoWgdrwpXtZJX1iGVChKQqJjds=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M6btP5r1bUmBsGWEi/QptZ54nyvExf8hrXJ/Z7KjDwnNk7jFP00l1WhiHCO7KFt85Vng9XqRnTBjKwFJJz83m5q3jv04UdS0NGGB9p0TYeAvdlEhXpPFzZnnqCQTN9kOHSK8fMM09u6t9NpIZwFa/XsxrzpPxO1Hg3o655u6xhs= 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=N9dqABwI; arc=none smtp.client-ip=209.85.215.172 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="N9dqABwI" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-c801912c903so4954269a12.0 for ; Tue, 26 May 2026 16:23:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779837821; x=1780442621; 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=44MaYKgmOZTUoXwiuNfPKV3Ce/ndgF6NAT9m48G8ZAc=; b=N9dqABwIZW0Fd53/OFhlb7DhdfbOavRYxRe9dI60/k2DAhxMsar0Gx3uU0eiKgKK82 eDv9Kh0bNxQWkseZruMp/TvljzvPnbFDBv8n+K7YuJmr2mw7pq5mfaNKHTrEis2OBPdX FBcx/e2HildqMmZoHRfdubxedvGJDtxyOw99VJA9/sZrl+YSfAKQwwBpn4wF3SmgG6gj tu/noFKr3W5erENv8MZmEFLGp1EMO3/OrZCLuuJc1CeeN1zqIr3cRKoLRr+9/7auKLOZ +ka3MEUG3B+7+DcYaxxjYpuMEVslPkoA2RqO6LQx3Ra05RVL2/G3wWGB+jZj+T8NvJLE V2PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779837821; x=1780442621; 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=44MaYKgmOZTUoXwiuNfPKV3Ce/ndgF6NAT9m48G8ZAc=; b=DLqu3nSY8w3Uh5iaALPJ7FuN11l2xC118Iq1q13czclELSgy5mhdbfla7N/fCz4pEn 52mT4vjzHM1CZPvZK7ULvpmOsaLx1CM133PqzsmqSv4xa/EXboq9n7bQzOPUAxYFj21+ oC+jd7tuY1Umwa3EdNPcRuPzKmMnXq6/q6bPaXbqNEdAWm+nx4GFHC4MyQAx1HFp4/EC sifXvnEeADB4LYGSvYWUlUU8Bi9cYK20QoIsnjD8d2wvL5IDs6srLmKr2kwVMo6xEP2d 3+9oUwVaj6IIYYAzUU5hMBg92lbIG7TyJBj+VFHK3OUa7y2DzBXXtcK3fFDXw9CyuXn/ a1WQ== X-Forwarded-Encrypted: i=1; AFNElJ9u0p7xew2/ApEEO/kXIB0cWiznmHLxXj5QLngHTFyjC0S2vTYv2gGQJ+SilRnFp/GUFoON/JIhx8eWaOE=@vger.kernel.org X-Gm-Message-State: AOJu0YzAN6rn/bgdp0AEw5cjBw/xKVS/th6IYtmWLyTI1iccJ+kwEI+x U8/g4kJT1yevubDfX1z+xzictPnl7HwedrEToCaiIE5avWeF3Rztj5Mx X-Gm-Gg: Acq92OHypg/9LO0PhzjnjD3xTqYS3BpPYWBM6ca088Pp4fTAsAIY7ACf6rNvswyFGwJ uOs6Hth/q/C9touv4G6IrnWCIKUqNDdlM2pzxArLZgNhjfYKAdo6JteZoYmxEeNS61nd7l2oChE wW8oNHtgi4qQhg6EyZM3wmGpJwyL/U0+BCU7rTK1k35/TvcPe4guawhY8zxinSmUTCSU8s0AdFk JXpl3CQjbpTka8x1L/srOEwDNF0PiDNrRp6AaxQnAGpnC9qO8lJroe6iBXKcKykCc75JezhjvvW vZfxXFbT9ktkY7XIFn8hyTlHO0AuWeMJGzqey6GB8VGdtt+RkZSXyHab2fFOW9vJyPEjSv1QCam 4jy+I6itrswI97L2NCDFDiNyVbXzNnuYLIGYhcyv4HsMKz+wOU8yjDIfrTIucm6EL2n9bvhoN1F KOhniy0XMzcROP27aTXkt+xmpjhFVu/m9PemiF1kTUowm3jMfULRo1rexTaM3lMg9+6w== X-Received: by 2002:a17:902:e5cf:b0:2ba:de0:1eea with SMTP id d9443c01a7336-2beb075a829mr238008075ad.18.1779837821348; Tue, 26 May 2026 16:23:41 -0700 (PDT) Received: from harvey.lan (c-73-83-32-130.hsd1.wa.comcast.net. [73.83.32.130]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5903bcasm142501045ad.77.2026.05.26.16.23.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 May 2026 16:23:40 -0700 (PDT) From: Jim Broadus To: jarkko@kernel.org, linux-integrity@vger.kernel.org, linux-kernel@vger.kernel.org Cc: peterhuewe@gmx.de, jgg@ziepe.ca, Jim Broadus Subject: [PATCH v3 2/2] tpm: tpm_tis: Add settle time for some TPMs Date: Tue, 26 May 2026 16:22:44 -0700 Message-ID: <20260526232245.5409-3-jbroadus@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260526232245.5409-1-jbroadus@gmail.com> References: <20260519154530.6386-1-jbroadus@gmail.com> <20260526232245.5409-1-jbroadus@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 Some TPMs fail to grant locality when requested immediately after being relinquished. In this case, the TPM_ACCESS_REQUEST_USE bit of the TPM_ACCESS register is cleared immediately without setting TPM_ACCESS_ACTIVE_LOCALITY. This issue can be seen at boot since tpm_chip_start, called right after locality is relinquished, will fail. This causes the probe to fail: tpm_tis MSFT0101:00: probe with driver tpm_tis failed with error -1 This occurs on some older Dell Latitudes. For the Nuvoton TPM used in these machines, add a delay after locality is relinquished. Signed-off-by: Jim Broadus --- drivers/char/tpm/tpm_tis_core.c | 6 ++++++ drivers/char/tpm/tpm_tis_core.h | 1 + 2 files changed, 7 insertions(+) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index d0b87f5daa3e..e0ee98e93ede 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -171,6 +171,9 @@ static int __tpm_tis_relinquish_locality(struct tpm_tis_data *priv, int l) { tpm_tis_write8(priv, TPM_ACCESS(l), TPM_ACCESS_ACTIVE_LOCALITY); + if (test_bit(TPM_TIS_SETTLE_AFTER_RELINQUISH, &priv->flags)) + tpm_msleep(TPM_TIMEOUT); + return 0; } @@ -1166,6 +1169,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, if (vendor_id == TPM_VID_IFX) set_bit(TPM_TIS_STATUS_VALID_RETRY, &priv->flags); + if (vendor_id == TPM_VID_WINBOND && device_id == 0x00FE) + set_bit(TPM_TIS_SETTLE_AFTER_RELINQUISH, &priv->flags); + if (is_bsw()) { priv->ilb_base_addr = ioremap(INTEL_LEGACY_BLK_BASE_ADDR, ILB_REMAP_SIZE); diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h index f2c77844062a..aa6d78898ef3 100644 --- a/drivers/char/tpm/tpm_tis_core.h +++ b/drivers/char/tpm/tpm_tis_core.h @@ -90,6 +90,7 @@ enum tpm_tis_flags { TPM_TIS_DEFAULT_CANCELLATION = 2, TPM_TIS_IRQ_TESTED = 3, TPM_TIS_STATUS_VALID_RETRY = 4, + TPM_TIS_SETTLE_AFTER_RELINQUISH = 5, }; struct tpm_tis_data { -- 2.54.0