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 |