1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2016 Google, Inc
5 * This device driver implements a TCG PTP FIFO interface over SPI for chips
7 * It is based on tpm_tis_spi driver by Peter Huewe and Christophe Ricard.
10 #include <linux/completion.h>
11 #include <linux/interrupt.h>
12 #include <linux/module.h>
15 #include <linux/spi/spi.h>
16 #include <linux/wait.h>
18 #include "tpm_tis_core.h"
19 #include "tpm_tis_spi.h"
22 * Cr50 timing constants:
23 * - can go to sleep not earlier than after CR50_SLEEP_DELAY_MSEC.
24 * - needs up to CR50_WAKE_START_DELAY_USEC to wake after sleep.
25 * - requires waiting for "ready" IRQ, if supported; or waiting for at least
26 * CR50_NOIRQ_ACCESS_DELAY_MSEC between transactions, if IRQ is not supported.
27 * - waits for up to CR50_FLOW_CONTROL for flow control 'ready' indication.
29 #define CR50_SLEEP_DELAY_MSEC 1000
30 #define CR50_WAKE_START_DELAY_USEC 1000
31 #define CR50_NOIRQ_ACCESS_DELAY msecs_to_jiffies(2)
32 #define CR50_READY_IRQ_TIMEOUT msecs_to_jiffies(TPM2_TIMEOUT_A)
33 #define CR50_FLOW_CONTROL msecs_to_jiffies(TPM2_TIMEOUT_A)
34 #define MAX_IRQ_CONFIRMATION_ATTEMPTS 3
36 #define TPM_CR50_FW_VER(l) (0x0f90 | ((l) << 12))
37 #define TPM_CR50_MAX_FW_VER_LEN 64
39 /* Default quality for hwrng. */
40 #define TPM_CR50_DEFAULT_RNG_QUALITY 700
43 struct tpm_tis_spi_phy spi_phy
;
45 struct mutex time_track_mutex
;
46 unsigned long last_access
;
48 unsigned long access_delay
;
50 unsigned int irq_confirmation_attempt
;
51 bool irq_needs_confirmation
;
55 static inline struct cr50_spi_phy
*to_cr50_spi_phy(struct tpm_tis_spi_phy
*phy
)
57 return container_of(phy
, struct cr50_spi_phy
, spi_phy
);
61 * The cr50 interrupt handler just signals waiting threads that the
62 * interrupt was asserted. It does not do any processing triggered
63 * by interrupts but is instead used to avoid fixed delays.
65 static irqreturn_t
cr50_spi_irq_handler(int dummy
, void *dev_id
)
67 struct cr50_spi_phy
*cr50_phy
= dev_id
;
69 cr50_phy
->irq_confirmed
= true;
70 complete(&cr50_phy
->spi_phy
.ready
);
76 * Cr50 needs to have at least some delay between consecutive
77 * transactions. Make sure we wait.
79 static void cr50_ensure_access_delay(struct cr50_spi_phy
*phy
)
81 unsigned long allowed_access
= phy
->last_access
+ phy
->access_delay
;
82 unsigned long time_now
= jiffies
;
83 struct device
*dev
= &phy
->spi_phy
.spi_device
->dev
;
86 * Note: There is a small chance, if Cr50 is not accessed in a few days,
87 * that time_in_range will not provide the correct result after the wrap
88 * around for jiffies. In this case, we'll have an unneeded short delay,
91 if (time_in_range_open(time_now
, phy
->last_access
, allowed_access
)) {
92 unsigned long remaining
, timeout
= allowed_access
- time_now
;
94 remaining
= wait_for_completion_timeout(&phy
->spi_phy
.ready
,
96 if (!remaining
&& phy
->irq_confirmed
)
97 dev_warn(dev
, "Timeout waiting for TPM ready IRQ\n");
100 if (phy
->irq_needs_confirmation
) {
101 unsigned int attempt
= ++phy
->irq_confirmation_attempt
;
103 if (phy
->irq_confirmed
) {
104 phy
->irq_needs_confirmation
= false;
105 phy
->access_delay
= CR50_READY_IRQ_TIMEOUT
;
106 dev_info(dev
, "TPM ready IRQ confirmed on attempt %u\n",
108 } else if (attempt
> MAX_IRQ_CONFIRMATION_ATTEMPTS
) {
109 phy
->irq_needs_confirmation
= false;
110 dev_warn(dev
, "IRQ not confirmed - will use delays\n");
116 * Cr50 might go to sleep if there is no SPI activity for some time and
117 * miss the first few bits/bytes on the bus. In such case, wake it up
118 * by asserting CS and give it time to start up.
120 static bool cr50_needs_waking(struct cr50_spi_phy
*phy
)
123 * Note: There is a small chance, if Cr50 is not accessed in a few days,
124 * that time_in_range will not provide the correct result after the wrap
125 * around for jiffies. In this case, we'll probably timeout or read
126 * incorrect value from TPM_STS and just retry the operation.
128 return !time_in_range_open(jiffies
, phy
->last_access
,
129 phy
->spi_phy
.wake_after
);
132 static void cr50_wake_if_needed(struct cr50_spi_phy
*cr50_phy
)
134 struct tpm_tis_spi_phy
*phy
= &cr50_phy
->spi_phy
;
136 if (cr50_needs_waking(cr50_phy
)) {
137 /* Assert CS, wait 1 msec, deassert CS */
138 struct spi_transfer spi_cs_wake
= {
141 .unit
= SPI_DELAY_UNIT_USECS
145 spi_sync_transfer(phy
->spi_device
, &spi_cs_wake
, 1);
146 /* Wait for it to fully wake */
147 usleep_range(CR50_WAKE_START_DELAY_USEC
,
148 CR50_WAKE_START_DELAY_USEC
* 2);
151 /* Reset the time when we need to wake Cr50 again */
152 phy
->wake_after
= jiffies
+ msecs_to_jiffies(CR50_SLEEP_DELAY_MSEC
);
156 * Flow control: clock the bus and wait for cr50 to set LSB before
157 * sending/receiving data. TCG PTP spec allows it to happen during
158 * the last byte of header, but cr50 never does that in practice,
159 * and earlier versions had a bug when it was set too early, so don't
160 * check for it during header transfer.
162 static int cr50_spi_flow_control(struct tpm_tis_spi_phy
*phy
,
163 struct spi_transfer
*spi_xfer
)
165 struct device
*dev
= &phy
->spi_device
->dev
;
166 unsigned long timeout
= jiffies
+ CR50_FLOW_CONTROL
;
167 struct spi_message m
;
173 spi_message_init(&m
);
174 spi_message_add_tail(spi_xfer
, &m
);
175 ret
= spi_sync_locked(phy
->spi_device
, &m
);
179 if (time_after(jiffies
, timeout
)) {
180 dev_warn(dev
, "Timeout during flow control\n");
183 } while (!(phy
->iobuf
[0] & 0x01));
188 static bool tpm_cr50_spi_is_firmware_power_managed(struct device
*dev
)
193 /* This flag should default true when the device property is not present */
194 ret
= device_property_read_u8(dev
, "firmware-power-managed", &val
);
201 static int tpm_tis_spi_cr50_transfer(struct tpm_tis_data
*data
, u32 addr
, u16 len
,
202 u8
*in
, const u8
*out
)
204 struct tpm_tis_spi_phy
*phy
= to_tpm_tis_spi_phy(data
);
205 struct cr50_spi_phy
*cr50_phy
= to_cr50_spi_phy(phy
);
208 mutex_lock(&cr50_phy
->time_track_mutex
);
210 * Do this outside of spi_bus_lock in case cr50 is not the
211 * only device on that spi bus.
213 cr50_ensure_access_delay(cr50_phy
);
214 cr50_wake_if_needed(cr50_phy
);
216 ret
= tpm_tis_spi_transfer(data
, addr
, len
, in
, out
);
218 cr50_phy
->last_access
= jiffies
;
219 mutex_unlock(&cr50_phy
->time_track_mutex
);
224 static int tpm_tis_spi_cr50_read_bytes(struct tpm_tis_data
*data
, u32 addr
,
225 u16 len
, u8
*result
, enum tpm_tis_io_mode io_mode
)
227 return tpm_tis_spi_cr50_transfer(data
, addr
, len
, result
, NULL
);
230 static int tpm_tis_spi_cr50_write_bytes(struct tpm_tis_data
*data
, u32 addr
,
231 u16 len
, const u8
*value
, enum tpm_tis_io_mode io_mode
)
233 return tpm_tis_spi_cr50_transfer(data
, addr
, len
, NULL
, value
);
236 static const struct tpm_tis_phy_ops tpm_spi_cr50_phy_ops
= {
237 .read_bytes
= tpm_tis_spi_cr50_read_bytes
,
238 .write_bytes
= tpm_tis_spi_cr50_write_bytes
,
241 static void cr50_print_fw_version(struct tpm_tis_data
*data
)
243 struct tpm_tis_spi_phy
*phy
= to_tpm_tis_spi_phy(data
);
245 char fw_ver
[TPM_CR50_MAX_FW_VER_LEN
+ 1];
246 char fw_ver_block
[4];
249 * Write anything to TPM_CR50_FW_VER to start from the beginning
250 * of the version string
252 tpm_tis_write8(data
, TPM_CR50_FW_VER(data
->locality
), 0);
254 /* Read the string, 4 bytes at a time, until we get '\0' */
256 tpm_tis_read_bytes(data
, TPM_CR50_FW_VER(data
->locality
), 4,
258 for (i
= 0; i
< 4 && fw_ver_block
[i
]; ++len
, ++i
)
259 fw_ver
[len
] = fw_ver_block
[i
];
260 } while (i
== 4 && len
< TPM_CR50_MAX_FW_VER_LEN
);
263 dev_info(&phy
->spi_device
->dev
, "Cr50 firmware version: %s\n", fw_ver
);
266 int cr50_spi_probe(struct spi_device
*spi
)
268 struct tpm_tis_spi_phy
*phy
;
269 struct cr50_spi_phy
*cr50_phy
;
271 struct tpm_chip
*chip
;
273 cr50_phy
= devm_kzalloc(&spi
->dev
, sizeof(*cr50_phy
), GFP_KERNEL
);
277 phy
= &cr50_phy
->spi_phy
;
278 phy
->flow_control
= cr50_spi_flow_control
;
279 phy
->wake_after
= jiffies
;
280 phy
->priv
.rng_quality
= TPM_CR50_DEFAULT_RNG_QUALITY
;
281 init_completion(&phy
->ready
);
283 cr50_phy
->access_delay
= CR50_NOIRQ_ACCESS_DELAY
;
284 cr50_phy
->last_access
= jiffies
;
285 mutex_init(&cr50_phy
->time_track_mutex
);
288 ret
= devm_request_irq(&spi
->dev
, spi
->irq
,
289 cr50_spi_irq_handler
,
290 IRQF_TRIGGER_RISING
| IRQF_ONESHOT
,
291 "cr50_spi", cr50_phy
);
293 if (ret
== -EPROBE_DEFER
)
295 dev_warn(&spi
->dev
, "Requesting IRQ %d failed: %d\n",
298 * This is not fatal, the driver will fall back to
299 * delays automatically, since ready will never
300 * be completed without a registered irq handler.
301 * So, just fall through.
305 * IRQ requested, let's verify that it is actually
306 * triggered, before relying on it.
308 cr50_phy
->irq_needs_confirmation
= true;
312 "No IRQ - will use delays between transactions.\n");
315 ret
= tpm_tis_spi_init(spi
, phy
, -1, &tpm_spi_cr50_phy_ops
);
319 cr50_print_fw_version(&phy
->priv
);
321 chip
= dev_get_drvdata(&spi
->dev
);
322 if (tpm_cr50_spi_is_firmware_power_managed(&spi
->dev
))
323 chip
->flags
|= TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED
;
328 #ifdef CONFIG_PM_SLEEP
329 int tpm_tis_spi_resume(struct device
*dev
)
331 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
332 struct tpm_tis_data
*data
= dev_get_drvdata(&chip
->dev
);
333 struct tpm_tis_spi_phy
*phy
= to_tpm_tis_spi_phy(data
);
335 * Jiffies not increased during suspend, so we need to reset
336 * the time to wake Cr50 after resume.
338 phy
->wake_after
= jiffies
;
340 return tpm_tis_resume(dev
);