Commit 6155a3b8 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'tpmdd-v6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd

Pull more tpm updates from Jarkko Sakkinen:
 "Two more bug fixes for tpm_crb, categorically disabling rng for AMD
  CPU's in the tpm_crb driver, discarding the earlier probing approach"

* tag 'tpmdd-v6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd:
  tpm: Enable hwrng only for Pluton on AMD CPUs
  tpm_crb: Fix an error handling path in crb_acpi_add()
parents 61401a87 8f7f35e5
...@@ -463,28 +463,6 @@ static bool crb_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -463,28 +463,6 @@ static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE; 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 = { static const struct tpm_class_ops tpm_crb = {
.flags = TPM_OPS_AUTO_STARTUP, .flags = TPM_OPS_AUTO_STARTUP,
.status = crb_status, .status = crb_status,
...@@ -797,12 +775,13 @@ static int crb_acpi_add(struct acpi_device *device) ...@@ -797,12 +775,13 @@ static int crb_acpi_add(struct acpi_device *device)
FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n", FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n",
buf->header.length, buf->header.length,
ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON); ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON);
return -EINVAL; rc = -EINVAL;
goto out;
} }
crb_pluton = ACPI_ADD_PTR(struct tpm2_crb_pluton, buf, sizeof(*buf)); crb_pluton = ACPI_ADD_PTR(struct tpm2_crb_pluton, buf, sizeof(*buf));
rc = crb_map_pluton(dev, priv, buf, crb_pluton); rc = crb_map_pluton(dev, priv, buf, crb_pluton);
if (rc) if (rc)
return rc; goto out;
} }
priv->sm = sm; priv->sm = sm;
...@@ -826,9 +805,14 @@ static int crb_acpi_add(struct acpi_device *device) ...@@ -826,9 +805,14 @@ static int crb_acpi_add(struct acpi_device *device)
if (rc) if (rc)
goto out; goto out;
rc = crb_check_flags(chip); #ifdef CONFIG_X86
if (rc) /* A quirk for https://www.amd.com/en/support/kb/faq/pa-410 */
goto out; 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); rc = tpm_chip_register(chip);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment