From nobody Mon Jun 8 19:46:24 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 41BFF3CEB84 for ; Tue, 26 May 2026 23:23:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779837818; cv=none; b=XR/z6cAzD1BBg0JRXM942YrJGkwJ0MDigyjmmIkyXAhZ/9PlrX60D0QEVcpTldpJLGV4z09AauafYE9alsJ08X1Dxo4XvT/Lbm8EkEKTEgzcCyVR8EwNEyKnz/2YwHk9aHVujLWWrp3olWrZdrkVJfJm5IBg+DnQEF9vle+GsjY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779837818; c=relaxed/simple; bh=BEyPeMDl5nAXSzWv4091vlic9CMAd3/SfmxGqNG9MPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mij4ihrLFzl3ZgmUAcxcPjX+NS1i8bIpF1QF2pieHpekJgBVjwiof9dXX2lsUTe8YJxPPsqRSZpkGsgVo6u3xj31hnX9dcsAoAJfI1DGIB4+XLdogEsqA8wPRd0mEFswkz4Yd1u4ajHPO0X1N2WEDt8gX9XKP3f/woqaBzHg8yc= 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=LaxGosj7; arc=none smtp.client-ip=209.85.214.176 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="LaxGosj7" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2bcd730e090so90411075ad.2 for ; Tue, 26 May 2026 16:23:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779837817; x=1780442617; 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=rxHtjdRc2OkY6aJQKSQqj47m3Loeixs8cm6oSLIwFEU=; b=LaxGosj7EA4uKSsfOx+iF3x1ePE2n0l0uBhfU4UCSQuKZqx/q6botLWUtZc4JwZLzy 50zTeyV6WywfS3ZXhDlOqdfIbQdloOYk3pe7t2OInr9hlRycEgBeniu3qz6Yfo3Ira1h 57zjIYN282Ir3amS8GUxIvLiBgDodZS0f7a4qKI3/KWb0t/MlQrPHR/g/64hrbzFHbG1 xUDaKXtlk8uJVmQZtmlrwtkCvCs6UK+zuVxuRhyu2e4K5xumyt4myT305+kDLwb+XpoX UMIq4tTru5lobhV5euJ5QKzvqIDLnwDDeFaN0Qlcrkz3rwlhKsdKNOOZAV0Yo5DjRMP9 QpgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779837817; x=1780442617; 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=rxHtjdRc2OkY6aJQKSQqj47m3Loeixs8cm6oSLIwFEU=; b=CYfV03Hp/sVM9K/6YW4p87UXhqEmDI8/jhRlLG28cEE7PqUnSzypDo454d+FEtw275 NfndgJJuBjBs/orVg3DwXIjjSzN0XXEt64FDszpOSEt0+YT59w0VlPGNw8dWRU5N5YC2 6fmQnwAAH4X8dNCuF/PsTwLu04sPnOFk7KCNasRt1zwy30IOvGR/2GVHWQQzeTHUTr5A c/TZJ6zs1GdqO8uXvNMvRof6GkMH4rsApMgiD5i/rCswrQbFTfvzeN/YxLWsYk4QthLi MLkb0LS9EiAj6NlHBx0DTwghpdaVK6exmr7P9qhTBNs2uv1S1riNzXCiU95iF8BBu1eD 5Dag== X-Forwarded-Encrypted: i=1; AFNElJ8tY2RMZ1DLtt/mirUao/e1F+DqHm5hdXUTyw4scq3lX2TkV/1HaXYeRhSadq3q7UYXQqKkhz1qwCRvYq4=@vger.kernel.org X-Gm-Message-State: AOJu0Yyu/wHwhMrZxz+sV4r3PU7r3C8YWmUKTgQOjS4ZrkHGOUvB3PPD BY9wR1r9z9Wz12nUlBzQfA4pY65jg9+lZIMvf0aGye5G656Ike6KG7c9 X-Gm-Gg: Acq92OHOb65INv14P1WSqha1i2y/JsPkh5MIT25E6N4fIQCTe5j2LObJQoSK/lXn1CX LnZcaskHjGcHVC4a06mpBmGr7i8y32rs0MSvsCG+m5BZONGaY7lbdasJHcM6Hqc1r8V/e74fijk otcMGN7lzM4fz/uITqwhxKCQOwuJua4Lecv7U0nVDZxo8A0YXVGo2TTcHxryFIQYyeNyJWaiP/v trfPS7dLj2q5cEVrZoMcmzFX/Vi9Oe6m+/9YcKJRYF9zvnpLz3K1ZUcI92HdN87UX+sIR43K+Bl vKLZogJ+TmKfsGL7BNFw1nMIuniWnole090R8UfCIREIJ2eCDQZB4+kXhh51I/YDvHOvU0KVuIw +SthSOeh4gRbBnlnwL2KWi79MPNFk8KM88rEKdHqL7jrJzZMHxwsxkN6HFHI+PnZ2bCgpNkGFhS 1yAeYuiJ2ryP27qHx8koAqNWwhoECDaHpywpAJDZzQSv2mRhufV+mn5X4= X-Received: by 2002:a17:902:cf08:b0:2bd:49ce:d240 with SMTP id d9443c01a7336-2beb03909bdmr229191055ad.5.1779837816439; Tue, 26 May 2026 16:23:36 -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.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 May 2026 16:23:35 -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 1/2] tpm: tpm_tis: store entire did_vid Date: Tue, 26 May 2026 16:22:43 -0700 Message-ID: <20260526232245.5409-2-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: quoted-printable Content-Type: text/plain; charset="utf-8" The entire 32 bit did_vid is read from the device, but only the 16 bit vendor id portion was stored in the tpm_tis_data structure. Storing the entire value allows the device id to be used to handle quirks. Printing the vid and did in the error case also helps identify problem devices. Signed-off-by: Jim Broadus --- drivers/char/tpm/tpm_tis_core.c | 22 ++++++++++++++-------- drivers/char/tpm/tpm_tis_core.h | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_cor= e.c index 21d79ad3b164..d0b87f5daa3e 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -792,9 +792,10 @@ static int probe_itpm(struct tpm_chip *chip) static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status) { struct tpm_tis_data *priv =3D dev_get_drvdata(&chip->dev); + u16 vendor_id =3D priv->did_vid; =20 if (!test_bit(TPM_TIS_DEFAULT_CANCELLATION, &priv->flags)) { - switch (priv->manufacturer_id) { + switch (vendor_id) { case TPM_VID_WINBOND: return ((status =3D=3D TPM_STS_VALID) || (status =3D=3D (TPM_STS_VALID | TPM_STS_COMMAND_READY))); @@ -1115,7 +1116,8 @@ int tpm_tis_core_init(struct device *dev, struct tpm_= tis_data *priv, int irq, const struct tpm_tis_phy_ops *phy_ops, acpi_handle acpi_dev_handle) { - u32 vendor; + u16 vendor_id; + u16 device_id; u32 intfcaps; u32 intmask; u32 clkrun_val; @@ -1148,19 +1150,20 @@ int tpm_tis_core_init(struct device *dev, struct tp= m_tis_data *priv, int irq, =20 dev_set_drvdata(&chip->dev, priv); =20 - rc =3D tpm_tis_read32(priv, TPM_DID_VID(0), &vendor); + rc =3D tpm_tis_read32(priv, TPM_DID_VID(0), &priv->did_vid); if (rc < 0) return rc; =20 - priv->manufacturer_id =3D vendor; + vendor_id =3D priv->did_vid; + device_id =3D priv->did_vid >> 16; =20 - if (priv->manufacturer_id =3D=3D TPM_VID_ATML && + if (vendor_id =3D=3D TPM_VID_ATML && !(chip->flags & TPM_CHIP_FLAG_TPM2)) { priv->timeout_min =3D TIS_TIMEOUT_MIN_ATML; priv->timeout_max =3D TIS_TIMEOUT_MAX_ATML; } =20 - if (priv->manufacturer_id =3D=3D TPM_VID_IFX) + if (vendor_id =3D=3D TPM_VID_IFX) set_bit(TPM_TIS_STATUS_VALID_RETRY, &priv->flags); =20 if (is_bsw()) { @@ -1247,9 +1250,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_= tis_data *priv, int irq, if (rc < 0) goto out_err; =20 - dev_info(dev, "%s TPM (device-id 0x%X, rev-id %d)\n", + dev_info(dev, "%s TPM (vendor-id 0x%X, device-id 0x%X, rev-id %d)\n", (chip->flags & TPM_CHIP_FLAG_TPM2) ? "2.0" : "1.2", - vendor >> 16, rid); + vendor_id, device_id, rid); =20 probe =3D probe_itpm(chip); if (probe < 0) { @@ -1315,6 +1318,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_= tis_data *priv, int irq, =20 return 0; out_err: + dev_err(dev, "TPM vid 0x%X, did 0x%X init failed with error %d\n", + vendor_id, device_id, rc); + if (chip->ops->clk_enable !=3D NULL) chip->ops->clk_enable(chip, false); =20 diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_cor= e.h index 6c3aa480396b..f2c77844062a 100644 --- a/drivers/char/tpm/tpm_tis_core.h +++ b/drivers/char/tpm/tpm_tis_core.h @@ -94,7 +94,7 @@ enum tpm_tis_flags { =20 struct tpm_tis_data { struct tpm_chip *chip; - u16 manufacturer_id; + u32 did_vid; struct mutex locality_count_mutex; unsigned int locality_count; int locality; --=20 2.54.0 From nobody Mon Jun 8 19:46:24 2026 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: quoted-printable Content-Type: text/plain; charset="utf-8" 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_cor= e.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); =20 + if (test_bit(TPM_TIS_SETTLE_AFTER_RELINQUISH, &priv->flags)) + tpm_msleep(TPM_TIMEOUT); + return 0; } =20 @@ -1166,6 +1169,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_= tis_data *priv, int irq, if (vendor_id =3D=3D TPM_VID_IFX) set_bit(TPM_TIS_STATUS_VALID_RETRY, &priv->flags); =20 + if (vendor_id =3D=3D TPM_VID_WINBOND && device_id =3D=3D 0x00FE) + set_bit(TPM_TIS_SETTLE_AFTER_RELINQUISH, &priv->flags); + if (is_bsw()) { priv->ilb_base_addr =3D 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_cor= e.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 =3D 2, TPM_TIS_IRQ_TESTED =3D 3, TPM_TIS_STATUS_VALID_RETRY =3D 4, + TPM_TIS_SETTLE_AFTER_RELINQUISH =3D 5, }; =20 struct tpm_tis_data { --=20 2.54.0