On Wed, Aug 23, 2023 at 02:15:10AM +0300, Jarkko Sakkinen 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. > > Since only Microsoft Pluton is the only known combination of AMD CPU and > fTPM from other vendor, disable hwrng otherwise. In order to make sysadmin > aware of this, print also info message to the klog. > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 554b841d4703 ("tpm: Disable RNG for all AMD fTPMs") > Reported-by: Todd Brandt <todd.e.brandt@xxxxxxxxx> > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217804 > Signed-off-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx> > --- > v3: > * Forgot to amend config flags. > v2: > * CONFIG_X86 > * Removed "Reviewed-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx>" > * Removed "Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>" > --- > drivers/char/tpm/tpm_crb.c | 33 ++++++++------------------------- > 1 file changed, 8 insertions(+), 25 deletions(-) > Reviewed-by: Jerry Snitselaar <jsnitsel@xxxxxxxxxx> > diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c > index 65ff4d2fbe8d..ea085b14ab7c 100644 > --- a/drivers/char/tpm/tpm_crb.c > +++ b/drivers/char/tpm/tpm_crb.c > @@ -463,28 +463,6 @@ static bool crb_req_canceled(struct tpm_chip *chip, u8 status) > return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE; > } > > -static int crb_check_flags(struct tpm_chip *chip) > -{ > - u32 val; > - int ret; > - > - ret = crb_request_locality(chip, 0); > - if (ret) > - return ret; > - > - ret = tpm2_get_tpm_pt(chip, TPM2_PT_MANUFACTURER, &val, NULL); > - if (ret) > - goto release; > - > - if (val == 0x414D4400U /* AMD */) > - chip->flags |= TPM_CHIP_FLAG_HWRNG_DISABLED; > - > -release: > - crb_relinquish_locality(chip, 0); > - > - return ret; > -} > - > static const struct tpm_class_ops tpm_crb = { > .flags = TPM_OPS_AUTO_STARTUP, > .status = crb_status, > @@ -827,9 +805,14 @@ static int crb_acpi_add(struct acpi_device *device) > if (rc) > goto out; > > - rc = crb_check_flags(chip); > - if (rc) > - goto out; > +#ifdef CONFIG_X86 > + /* A quirk for https://www.amd.com/en/support/kb/faq/pa-410 */ > + if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD && > + priv->sm != ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON) { > + dev_info(dev, "Disabling hwrng\n"); > + chip->flags |= TPM_CHIP_FLAG_HWRNG_DISABLED; > + } > +#endif /* CONFIG_X86 */ > > rc = tpm_chip_register(chip); > > -- > 2.39.2 >