On 8/22/2023 08:22, Jarkko Sakkinen wrote:
On Mon Aug 21, 2023 at 5:02 PM EEST, Mario Limonciello wrote:
The vendor check introduced by commit 554b841d4703 ("tpm: Disable RNG for all AMD fTPMs") doesn't work properly on a number of Intel fTPMs. On the reported systems the TPM doesn't reply at bootup and returns back the command code. This makes the TPM fail probe.
As this isn't crucial for anything but AMD fTPM and AMD fTPM works, check the chip vendor and if it's not AMD don't run the checks.
Cc: stable@vger.kernel.org Fixes: 554b841d4703 ("tpm: Disable RNG for all AMD fTPMs") Reported-by: Todd Brandt todd.e.brandt@intel.com Reported-by: Patrick Steinhardt ps@pks.im Reported-by: Ronan Pigott ronan@rjp.ie Reported-by: Raymond Jay Golo rjgolo@gmail.com Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217804 Signed-off-by: Mario Limonciello mario.limonciello@amd.com
v1->v2:
- Check x86 vendor for AMD
drivers/char/tpm/tpm_crb.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index 9eb1a18590123..7faf670201ccc 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -465,8 +465,12 @@ static bool crb_req_canceled(struct tpm_chip *chip, u8 status) static int crb_check_flags(struct tpm_chip *chip) {
- int ret = 0;
+#ifdef CONFIG_X86 u32 val;
- int ret;
- if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
return ret;
ret = crb_request_locality(chip, 0); if (ret) @@ -481,6 +485,7 @@ static int crb_check_flags(struct tpm_chip *chip) release: crb_relinquish_locality(chip, 0); +#endif
Looks much better but the main question here is that is this combination possible:
- AMD CPU
- Non-AMD fTPM (i.e. manufacturer property differs)
BR, Jarkko
Yes that combination is possible.
Pluton TPM uses the tpm_crb driver.