| From e5c36cf8236c221c1d7357548ec85a41482c50a8 Mon Sep 17 00:00:00 2001 |
| From: Yi Chou <yich@google.com> |
| Date: Mon, 9 Aug 2021 16:13:08 +0800 |
| Subject: [PATCH] Reland "CHROMIUM: tpm: expose the DID_VID information" |
| |
| This relands commit 40eedf6399b7 ("CHROMIUM: tpm: expose the DID_VID information") |
| |
| Diff: Increased the size of attribute_groups of tpm_chip. |
| |
| Original change's description: |
| > CHROMIUM: tpm: expose the DID_VID information |
| > |
| > This patch exposes tht DID_VID to userspace, so userspace program could |
| > use this file to get the DID_VID information. |
| > |
| > BUG=b:191499174 |
| > TEST=check the content of /sys/class/tpm/tpm0/did_vid |
| > |
| > Signed-off-by: Yi Chou <yich@google.com> |
| > Change-Id: I1eaa727f43ac372ddb3f9cd0049ca0a054f4064a |
| > Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3106049 |
| > Reviewed-by: Nicholas Bishop <nicholasbishop@google.com> |
| > Reviewed-by: Andrey Pronin <apronin@chromium.org> |
| |
| BUG=b:191499174 |
| TEST=check the content of /sys/class/tpm/tpm0/did_vid on ACPI TPM device |
| |
| Signed-off-by: Yi Chou <yich@google.com> |
| Change-Id: I5f5901cf137ab7c93f26c4376738aa10b62d2cb6 |
| Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3116425 |
| Reviewed-by: Andrey Pronin <apronin@chromium.org> |
| --- |
| drivers/char/tpm/tpm_tis_core.c | 28 ++++++++++++++++++++++++++++ |
| include/linux/tpm.h | 2 +- |
| 2 files changed, 29 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c |
| --- a/drivers/char/tpm/tpm_tis_core.c |
| +++ b/drivers/char/tpm/tpm_tis_core.c |
| @@ -925,6 +925,31 @@ static const struct tpm_class_ops tpm_tis = { |
| .clk_enable = tpm_tis_clkrun_enable, |
| }; |
| |
| +static ssize_t did_vid_show(struct device *dev, struct device_attribute *attr, |
| + char *buf) |
| +{ |
| + struct tpm_tis_data *priv = dev_get_drvdata(dev); |
| + u32 did_vid = 0; |
| + int rc; |
| + |
| + rc = tpm_tis_read32(priv, TPM_DID_VID(0), &did_vid); |
| + if (rc < 0) { |
| + dev_warn(dev, "%s: failed to read did_vid: %d\n", __func__, rc); |
| + return rc; |
| + } |
| + return sprintf(buf, "0x%08X\n", did_vid); |
| +} |
| +static DEVICE_ATTR_RO(did_vid); |
| + |
| +static struct attribute *tpm_tis_attrs[] = { |
| + &dev_attr_did_vid.attr, |
| + NULL, |
| +}; |
| + |
| +static const struct attribute_group tpm_tis_group = { |
| + .attrs = tpm_tis_attrs, |
| +}; |
| + |
| 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) |
| @@ -1009,6 +1034,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, |
| (chip->flags & TPM_CHIP_FLAG_TPM2) ? "2.0" : "1.2", |
| vendor >> 16, rid); |
| |
| + /* Expose the DID_VID information to userspace */ |
| + chip->groups[chip->groups_cnt++] = &tpm_tis_group; |
| + |
| probe = probe_itpm(chip); |
| if (probe < 0) { |
| rc = -ENODEV; |
| diff --git a/include/linux/tpm.h b/include/linux/tpm.h |
| --- a/include/linux/tpm.h |
| +++ b/include/linux/tpm.h |
| @@ -155,7 +155,7 @@ struct tpm_chip { |
| |
| struct dentry *bios_dir[TPM_NUM_EVENT_LOG_FILES]; |
| |
| - const struct attribute_group *groups[3 + TPM_MAX_HASHES]; |
| + const struct attribute_group *groups[4 + TPM_MAX_HASHES]; |
| unsigned int groups_cnt; |
| |
| u32 nr_allocated_banks; |
| -- |
| 2.33.0.259.gc128427fd7-goog |
| |