1
Accept another DID:VID for the next generation Google TPM. This TPM
1
Accept another DID:VID for the next generation Google TPM. This TPM
2
has the same Ti50 firmware and fulfills the same interface.
2
has the same Ti50 firmware and fulfills the same interface.
3
4
Suggested-by: jarkko@kernel.org
3
5
4
Signed-off-by: Jett Rink <jettrink@chromium.org>
6
Signed-off-by: Jett Rink <jettrink@chromium.org>
5
---
7
---
6
8
7
drivers/char/tpm/tpm_tis_i2c_cr50.c | 11 ++++++++---
9
Changes in v4:
8
1 file changed, 8 insertions(+), 3 deletions(-)
10
Add Suggested-by tag. Sorry that I forget.
11
12
Changes in v3:
13
Refactor ternary operators into helper method.
14
15
Changes in v2:
16
Patchset 2 applies cleanly
17
18
drivers/char/tpm/tpm_tis_i2c_cr50.c | 30 ++++++++++++++++++++++++++---
19
1 file changed, 27 insertions(+), 3 deletions(-)
9
20
10
diff --git a/drivers/char/tpm/tpm_tis_i2c_cr50.c b/drivers/char/tpm/tpm_tis_i2c_cr50.c
21
diff --git a/drivers/char/tpm/tpm_tis_i2c_cr50.c b/drivers/char/tpm/tpm_tis_i2c_cr50.c
11
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
12
--- a/drivers/char/tpm/tpm_tis_i2c_cr50.c
23
--- a/drivers/char/tpm/tpm_tis_i2c_cr50.c
13
+++ b/drivers/char/tpm/tpm_tis_i2c_cr50.c
24
+++ b/drivers/char/tpm/tpm_tis_i2c_cr50.c
...
...
19
+#define TPM_TI50_DT_I2C_DID_VID        0x504a6666L    /* Device and vendor ID reg value */
30
+#define TPM_TI50_DT_I2C_DID_VID        0x504a6666L    /* Device and vendor ID reg value */
20
+#define TPM_TI50_OT_I2C_DID_VID        0x50666666L    /* Device and vendor ID reg value */
31
+#define TPM_TI50_OT_I2C_DID_VID        0x50666666L    /* Device and vendor ID reg value */
21
#define TPM_CR50_I2C_MAX_RETRIES    3        /* Max retries due to I2C errors */
32
#define TPM_CR50_I2C_MAX_RETRIES    3        /* Max retries due to I2C errors */
22
#define TPM_CR50_I2C_RETRY_DELAY_LO    55        /* Min usecs between retries on I2C */
33
#define TPM_CR50_I2C_RETRY_DELAY_LO    55        /* Min usecs between retries on I2C */
23
#define TPM_CR50_I2C_RETRY_DELAY_HI    65        /* Max usecs between retries on I2C */
34
#define TPM_CR50_I2C_RETRY_DELAY_HI    65        /* Max usecs between retries on I2C */
35
@@ -XXX,XX +XXX,XX @@ static const struct of_device_id of_cr50_i2c_match[] = {
36
MODULE_DEVICE_TABLE(of, of_cr50_i2c_match);
37
#endif
38
39
+/**
40
+ * tpm_cr50_vid_to_name() - Maps VID to name.
41
+ * @vendor:    Vendor identifier to map to name
42
+ *
43
+ * Return:
44
+ *    A valid string for the vendor or empty string
45
+ */
46
+static const char *tpm_cr50_vid_to_name(u32 vendor)
47
+{
48
+    switch (vendor) {
49
+    case TPM_CR50_I2C_DID_VID:
50
+        return "cr50";
51
+    case TPM_TI50_DT_I2C_DID_VID:
52
+        return "ti50 DT";
53
+    case TPM_TI50_OT_I2C_DID_VID:
54
+        return "ti50 OT";
55
+    default:
56
+        return "";
57
+    }
58
+}
59
+
60
/**
61
* tpm_cr50_i2c_probe() - Driver probe function.
62
* @client:    I2C client information.
24
@@ -XXX,XX +XXX,XX @@ static int tpm_cr50_i2c_probe(struct i2c_client *client)
63
@@ -XXX,XX +XXX,XX @@ static int tpm_cr50_i2c_probe(struct i2c_client *client)
25
    }
64
    }
26
65
27
    vendor = le32_to_cpup((__le32 *)buf);
66
    vendor = le32_to_cpup((__le32 *)buf);
28
-    if (vendor != TPM_CR50_I2C_DID_VID && vendor != TPM_TI50_I2C_DID_VID) {
67
-    if (vendor != TPM_CR50_I2C_DID_VID && vendor != TPM_TI50_I2C_DID_VID) {
29
+    if (vendor != TPM_CR50_I2C_DID_VID &&
68
+    if (vendor != TPM_CR50_I2C_DID_VID &&
30
+     vendor != TPM_TI50_DT_I2C_DID_VID &&
69
+     vendor != TPM_TI50_DT_I2C_DID_VID &&
31
+     vendor != TPM_TI50_OT_I2C_DID_VID) {
70
+     vendor != TPM_TI50_OT_I2C_DID_VID) {
32
        dev_err(dev, "Vendor ID did not match! ID was %08x\n", vendor);
71
        dev_err(dev, "Vendor ID did not match! ID was %08x\n", vendor);
72
        tpm_cr50_release_locality(chip, true);
33
        return -ENODEV;
73
        return -ENODEV;
34
    }
74
    }
35
75
36
    dev_info(dev, "%s TPM 2.0 (i2c 0x%02x irq %d id 0x%x)\n",
76
    dev_info(dev, "%s TPM 2.0 (i2c 0x%02x irq %d id 0x%x)\n",
37
-         vendor == TPM_TI50_I2C_DID_VID ? "ti50" : "cr50",
77
-         vendor == TPM_TI50_I2C_DID_VID ? "ti50" : "cr50",
38
+         vendor == TPM_CR50_I2C_DID_VID     ? "cr50" :
78
+         tpm_cr50_vid_to_name(vendor),
39
+         vendor == TPM_TI50_DT_I2C_DID_VID ? "ti50 DT" :
40
+                         "ti50 OT",
41
         client->addr, client->irq, vendor >> 16);
79
         client->addr, client->irq, vendor >> 16);
42
    return tpm_chip_register(chip);
80
    return tpm_chip_register(chip);
43
}
81
}
44
--
82
--
45
2.45.2.505.gda0bf45e8d-goog
83
2.46.0.rc2.264.g509ed76dc8-goog
diff view generated by jsdifflib