1 /******************************************************************************
2 * Nuvoton TPM I2C Device Driver Interface for WPCT301/NPCT501/NPCT6XX,
3 * based on the TCG TPM Interface Spec version 1.2.
4 * Specifications at www.trustedcomputinggroup.org
6 * Copyright (C) 2011, Nuvoton Technology Corporation.
7 * Dan Morav <dan.morav@nuvoton.com>
8 * Copyright (C) 2013, Obsidian Research Corp.
9 * Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation, either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see http://www.gnu.org/licenses/>.
24 * Nuvoton contact information: APC.Support@nuvoton.com
25 *****************************************************************************/
27 #include <linux/init.h>
28 #include <linux/module.h>
29 #include <linux/moduleparam.h>
30 #include <linux/slab.h>
31 #include <linux/interrupt.h>
32 #include <linux/wait.h>
33 #include <linux/i2c.h>
34 #include <linux/of_device.h>
37 /* I2C interface offsets */
39 #define TPM_BURST_COUNT 0x01
40 #define TPM_DATA_FIFO_W 0x20
41 #define TPM_DATA_FIFO_R 0x40
42 #define TPM_VID_DID_RID 0x60
43 #define TPM_I2C_RETRIES 5
45 * I2C bus device maximum buffer size w/o counting I2C address or command
46 * i.e. max size required for I2C write is 34 = addr, command, 32 bytes data
48 #define TPM_I2C_MAX_BUF_SIZE 32
49 #define TPM_I2C_RETRY_COUNT 32
50 #define TPM_I2C_BUS_DELAY 1000 /* usec */
51 #define TPM_I2C_RETRY_DELAY_SHORT (2 * 1000) /* usec */
52 #define TPM_I2C_RETRY_DELAY_LONG (10 * 1000) /* usec */
53 #define TPM_I2C_DELAY_RANGE 300 /* usec */
55 #define OF_IS_TPM2 ((void *)1)
61 wait_queue_head_t read_queue
;
64 static s32
i2c_nuvoton_read_buf(struct i2c_client
*client
, u8 offset
, u8 size
,
69 status
= i2c_smbus_read_i2c_block_data(client
, offset
, size
, data
);
71 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__
,
72 offset
, size
, (int)size
, data
, status
);
76 static s32
i2c_nuvoton_write_buf(struct i2c_client
*client
, u8 offset
, u8 size
,
81 status
= i2c_smbus_write_i2c_block_data(client
, offset
, size
, data
);
83 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__
,
84 offset
, size
, (int)size
, data
, status
);
88 #define TPM_STS_VALID 0x80
89 #define TPM_STS_COMMAND_READY 0x40
90 #define TPM_STS_GO 0x20
91 #define TPM_STS_DATA_AVAIL 0x10
92 #define TPM_STS_EXPECT 0x08
93 #define TPM_STS_RESPONSE_RETRY 0x02
94 #define TPM_STS_ERR_VAL 0x07 /* bit2...bit0 reads always 0 */
96 #define TPM_I2C_SHORT_TIMEOUT 750 /* ms */
97 #define TPM_I2C_LONG_TIMEOUT 2000 /* 2 sec */
99 /* read TPM_STS register */
100 static u8
i2c_nuvoton_read_status(struct tpm_chip
*chip
)
102 struct i2c_client
*client
= to_i2c_client(chip
->dev
.parent
);
106 status
= i2c_nuvoton_read_buf(client
, TPM_STS
, 1, &data
);
108 dev_err(&chip
->dev
, "%s() error return %d\n", __func__
,
110 data
= TPM_STS_ERR_VAL
;
116 /* write byte to TPM_STS register */
117 static s32
i2c_nuvoton_write_status(struct i2c_client
*client
, u8 data
)
122 /* this causes the current command to be aborted */
123 for (i
= 0, status
= -1; i
< TPM_I2C_RETRY_COUNT
&& status
< 0; i
++) {
124 status
= i2c_nuvoton_write_buf(client
, TPM_STS
, 1, &data
);
126 usleep_range(TPM_I2C_BUS_DELAY
, TPM_I2C_BUS_DELAY
127 + TPM_I2C_DELAY_RANGE
);
132 /* write commandReady to TPM_STS register */
133 static void i2c_nuvoton_ready(struct tpm_chip
*chip
)
135 struct i2c_client
*client
= to_i2c_client(chip
->dev
.parent
);
138 /* this causes the current command to be aborted */
139 status
= i2c_nuvoton_write_status(client
, TPM_STS_COMMAND_READY
);
142 "%s() fail to write TPM_STS.commandReady\n", __func__
);
145 /* read burstCount field from TPM_STS register
146 * return -1 on fail to read */
147 static int i2c_nuvoton_get_burstcount(struct i2c_client
*client
,
148 struct tpm_chip
*chip
)
150 unsigned long stop
= jiffies
+ chip
->timeout_d
;
152 int burst_count
= -1;
155 /* wait for burstcount to be non-zero */
157 /* in I2C burstCount is 1 byte */
158 status
= i2c_nuvoton_read_buf(client
, TPM_BURST_COUNT
, 1,
160 if (status
> 0 && data
> 0) {
161 burst_count
= min_t(u8
, TPM_I2C_MAX_BUF_SIZE
, data
);
164 usleep_range(TPM_I2C_BUS_DELAY
, TPM_I2C_BUS_DELAY
165 + TPM_I2C_DELAY_RANGE
);
166 } while (time_before(jiffies
, stop
));
172 * WPCT301/NPCT501/NPCT6XX SINT# supports only dataAvail
173 * any call to this function which is not waiting for dataAvail will
174 * set queue to NULL to avoid waiting for interrupt
176 static bool i2c_nuvoton_check_status(struct tpm_chip
*chip
, u8 mask
, u8 value
)
178 u8 status
= i2c_nuvoton_read_status(chip
);
179 return (status
!= TPM_STS_ERR_VAL
) && ((status
& mask
) == value
);
182 static int i2c_nuvoton_wait_for_stat(struct tpm_chip
*chip
, u8 mask
, u8 value
,
183 u32 timeout
, wait_queue_head_t
*queue
)
185 if ((chip
->flags
& TPM_CHIP_FLAG_IRQ
) && queue
) {
187 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
188 unsigned int cur_intrs
= priv
->intrs
;
190 enable_irq(priv
->irq
);
191 rc
= wait_event_interruptible_timeout(*queue
,
192 cur_intrs
!= priv
->intrs
,
196 /* At this point we know that the SINT pin is asserted, so we
197 * do not need to do i2c_nuvoton_check_status */
199 unsigned long ten_msec
, stop
;
202 /* check current status */
203 status_valid
= i2c_nuvoton_check_status(chip
, mask
, value
);
207 /* use polling to wait for the event */
208 ten_msec
= jiffies
+ usecs_to_jiffies(TPM_I2C_RETRY_DELAY_LONG
);
209 stop
= jiffies
+ timeout
;
211 if (time_before(jiffies
, ten_msec
))
212 usleep_range(TPM_I2C_RETRY_DELAY_SHORT
,
213 TPM_I2C_RETRY_DELAY_SHORT
214 + TPM_I2C_DELAY_RANGE
);
216 usleep_range(TPM_I2C_RETRY_DELAY_LONG
,
217 TPM_I2C_RETRY_DELAY_LONG
218 + TPM_I2C_DELAY_RANGE
);
219 status_valid
= i2c_nuvoton_check_status(chip
, mask
,
223 } while (time_before(jiffies
, stop
));
225 dev_err(&chip
->dev
, "%s(%02x, %02x) -> timeout\n", __func__
, mask
,
230 /* wait for dataAvail field to be set in the TPM_STS register */
231 static int i2c_nuvoton_wait_for_data_avail(struct tpm_chip
*chip
, u32 timeout
,
232 wait_queue_head_t
*queue
)
234 return i2c_nuvoton_wait_for_stat(chip
,
235 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
236 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
240 /* Read @count bytes into @buf from TPM_RD_FIFO register */
241 static int i2c_nuvoton_recv_data(struct i2c_client
*client
,
242 struct tpm_chip
*chip
, u8
*buf
, size_t count
)
244 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
246 int burst_count
, bytes2read
, size
= 0;
248 while (size
< count
&&
249 i2c_nuvoton_wait_for_data_avail(chip
,
251 &priv
->read_queue
) == 0) {
252 burst_count
= i2c_nuvoton_get_burstcount(client
, chip
);
253 if (burst_count
< 0) {
255 "%s() fail to read burstCount=%d\n", __func__
,
259 bytes2read
= min_t(size_t, burst_count
, count
- size
);
260 rc
= i2c_nuvoton_read_buf(client
, TPM_DATA_FIFO_R
,
261 bytes2read
, &buf
[size
]);
264 "%s() fail on i2c_nuvoton_read_buf()=%d\n",
268 dev_dbg(&chip
->dev
, "%s(%d):", __func__
, bytes2read
);
275 /* Read TPM command results */
276 static int i2c_nuvoton_recv(struct tpm_chip
*chip
, u8
*buf
, size_t count
)
278 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
279 struct device
*dev
= chip
->dev
.parent
;
280 struct i2c_client
*client
= to_i2c_client(dev
);
288 if (count
< TPM_HEADER_SIZE
) {
289 i2c_nuvoton_ready(chip
); /* return to idle */
290 dev_err(dev
, "%s() count < header size\n", __func__
);
293 for (retries
= 0; retries
< TPM_I2C_RETRIES
; retries
++) {
295 /* if this is not the first trial, set responseRetry */
296 i2c_nuvoton_write_status(client
,
297 TPM_STS_RESPONSE_RETRY
);
300 * read first available (> 10 bytes), including:
301 * tag, paramsize, and result
303 status
= i2c_nuvoton_wait_for_data_avail(
304 chip
, chip
->timeout_c
, &priv
->read_queue
);
306 dev_err(dev
, "%s() timeout on dataAvail\n", __func__
);
310 burst_count
= i2c_nuvoton_get_burstcount(client
, chip
);
311 if (burst_count
< 0) {
312 dev_err(dev
, "%s() fail to get burstCount\n", __func__
);
316 size
= i2c_nuvoton_recv_data(client
, chip
, buf
,
318 if (size
< TPM_HEADER_SIZE
) {
319 dev_err(dev
, "%s() fail to read header\n", __func__
);
324 * convert number of expected bytes field from big endian 32 bit
327 expected
= be32_to_cpu(*(__be32
*) (buf
+ 2));
328 if (expected
> count
|| expected
< size
) {
329 dev_err(dev
, "%s() expected > count\n", __func__
);
333 rc
= i2c_nuvoton_recv_data(client
, chip
, &buf
[size
],
336 if (rc
< 0 || size
< expected
) {
337 dev_err(dev
, "%s() fail to read remainder of result\n",
342 if (i2c_nuvoton_wait_for_stat(
343 chip
, TPM_STS_VALID
| TPM_STS_DATA_AVAIL
,
344 TPM_STS_VALID
, chip
->timeout_c
,
346 dev_err(dev
, "%s() error left over data\n", __func__
);
352 i2c_nuvoton_ready(chip
);
353 dev_dbg(&chip
->dev
, "%s() -> %d\n", __func__
, size
);
360 * If interrupts are used (signaled by an irq set in the vendor structure)
361 * tpm.c can skip polling for the data to be available as the interrupt is
364 static int i2c_nuvoton_send(struct tpm_chip
*chip
, u8
*buf
, size_t len
)
366 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
367 struct device
*dev
= chip
->dev
.parent
;
368 struct i2c_client
*client
= to_i2c_client(dev
);
370 unsigned long duration
;
372 int burst_count
, bytes2write
, retries
, rc
= -EIO
;
374 for (retries
= 0; retries
< TPM_RETRY
; retries
++) {
375 i2c_nuvoton_ready(chip
);
376 if (i2c_nuvoton_wait_for_stat(chip
, TPM_STS_COMMAND_READY
,
377 TPM_STS_COMMAND_READY
,
378 chip
->timeout_b
, NULL
)) {
379 dev_err(dev
, "%s() timeout on commandReady\n",
385 while (count
< len
- 1) {
386 burst_count
= i2c_nuvoton_get_burstcount(client
,
388 if (burst_count
< 0) {
389 dev_err(dev
, "%s() fail get burstCount\n",
394 bytes2write
= min_t(size_t, burst_count
,
396 rc
= i2c_nuvoton_write_buf(client
, TPM_DATA_FIFO_W
,
397 bytes2write
, &buf
[count
]);
399 dev_err(dev
, "%s() fail i2cWriteBuf\n",
403 dev_dbg(dev
, "%s(%d):", __func__
, bytes2write
);
404 count
+= bytes2write
;
405 rc
= i2c_nuvoton_wait_for_stat(chip
,
413 dev_err(dev
, "%s() timeout on Expect\n",
422 /* write last byte */
423 rc
= i2c_nuvoton_write_buf(client
, TPM_DATA_FIFO_W
, 1,
426 dev_err(dev
, "%s() fail to write last byte\n",
431 dev_dbg(dev
, "%s(last): %02x", __func__
, buf
[count
]);
432 rc
= i2c_nuvoton_wait_for_stat(chip
,
433 TPM_STS_VALID
| TPM_STS_EXPECT
,
435 chip
->timeout_c
, NULL
);
437 dev_err(dev
, "%s() timeout on Expect to clear\n",
445 /* retries == TPM_RETRY */
446 i2c_nuvoton_ready(chip
);
449 /* execute the TPM command */
450 rc
= i2c_nuvoton_write_status(client
, TPM_STS_GO
);
452 dev_err(dev
, "%s() fail to write Go\n", __func__
);
453 i2c_nuvoton_ready(chip
);
456 ordinal
= be32_to_cpu(*((__be32
*) (buf
+ 6)));
457 if (chip
->flags
& TPM_CHIP_FLAG_TPM2
)
458 duration
= tpm2_calc_ordinal_duration(chip
, ordinal
);
460 duration
= tpm_calc_ordinal_duration(chip
, ordinal
);
462 rc
= i2c_nuvoton_wait_for_data_avail(chip
, duration
, &priv
->read_queue
);
464 dev_err(dev
, "%s() timeout command duration\n", __func__
);
465 i2c_nuvoton_ready(chip
);
469 dev_dbg(dev
, "%s() -> %zd\n", __func__
, len
);
473 static bool i2c_nuvoton_req_canceled(struct tpm_chip
*chip
, u8 status
)
475 return (status
== TPM_STS_COMMAND_READY
);
478 static const struct tpm_class_ops tpm_i2c
= {
479 .flags
= TPM_OPS_AUTO_STARTUP
,
480 .status
= i2c_nuvoton_read_status
,
481 .recv
= i2c_nuvoton_recv
,
482 .send
= i2c_nuvoton_send
,
483 .cancel
= i2c_nuvoton_ready
,
484 .req_complete_mask
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
485 .req_complete_val
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
486 .req_canceled
= i2c_nuvoton_req_canceled
,
489 /* The only purpose for the handler is to signal to any waiting threads that
490 * the interrupt is currently being asserted. The driver does not do any
491 * processing triggered by interrupts, and the chip provides no way to mask at
492 * the source (plus that would be slow over I2C). Run the IRQ as a one-shot,
493 * this means it cannot be shared. */
494 static irqreturn_t
i2c_nuvoton_int_handler(int dummy
, void *dev_id
)
496 struct tpm_chip
*chip
= dev_id
;
497 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
500 wake_up(&priv
->read_queue
);
501 disable_irq_nosync(priv
->irq
);
505 static int get_vid(struct i2c_client
*client
, u32
*res
)
507 static const u8 vid_did_rid_value
[] = { 0x50, 0x10, 0xfe };
511 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
513 rc
= i2c_nuvoton_read_buf(client
, TPM_VID_DID_RID
, 4, (u8
*)&temp
);
517 /* check WPCT301 values - ignore RID */
518 if (memcmp(&temp
, vid_did_rid_value
, sizeof(vid_did_rid_value
))) {
520 * f/w rev 2.81 has an issue where the VID_DID_RID is not
521 * reporting the right value. so give it another chance at
522 * offset 0x20 (FIFO_W).
524 rc
= i2c_nuvoton_read_buf(client
, TPM_DATA_FIFO_W
, 4,
529 /* check WPCT301 values - ignore RID */
530 if (memcmp(&temp
, vid_did_rid_value
,
531 sizeof(vid_did_rid_value
)))
539 static int i2c_nuvoton_probe(struct i2c_client
*client
,
540 const struct i2c_device_id
*id
)
543 struct tpm_chip
*chip
;
544 struct device
*dev
= &client
->dev
;
545 struct priv_data
*priv
;
548 rc
= get_vid(client
, &vid
);
552 dev_info(dev
, "VID: %04X DID: %02X RID: %02X\n", (u16
) vid
,
553 (u8
) (vid
>> 16), (u8
) (vid
>> 24));
555 chip
= tpmm_chip_alloc(dev
, &tpm_i2c
);
557 return PTR_ERR(chip
);
559 priv
= devm_kzalloc(dev
, sizeof(struct priv_data
), GFP_KERNEL
);
564 const struct of_device_id
*of_id
;
566 of_id
= of_match_device(dev
->driver
->of_match_table
, dev
);
567 if (of_id
&& of_id
->data
== OF_IS_TPM2
)
568 chip
->flags
|= TPM_CHIP_FLAG_TPM2
;
570 if (id
->driver_data
== I2C_IS_TPM2
)
571 chip
->flags
|= TPM_CHIP_FLAG_TPM2
;
573 init_waitqueue_head(&priv
->read_queue
);
575 /* Default timeouts */
576 chip
->timeout_a
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
577 chip
->timeout_b
= msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT
);
578 chip
->timeout_c
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
579 chip
->timeout_d
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
581 dev_set_drvdata(&chip
->dev
, priv
);
584 * I2C intfcaps (interrupt capabilitieis) in the chip are hard coded to:
585 * TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
586 * The IRQ should be set in the i2c_board_info (which is done
587 * automatically in of_i2c_register_devices, for device tree users */
588 priv
->irq
= client
->irq
;
590 dev_dbg(dev
, "%s() priv->irq\n", __func__
);
591 rc
= devm_request_irq(dev
, client
->irq
,
592 i2c_nuvoton_int_handler
,
594 dev_name(&chip
->dev
),
597 dev_err(dev
, "%s() Unable to request irq: %d for use\n",
598 __func__
, priv
->irq
);
601 chip
->flags
|= TPM_CHIP_FLAG_IRQ
;
602 /* Clear any pending interrupt */
603 i2c_nuvoton_ready(chip
);
604 /* - wait for TPM_STS==0xA0 (stsValid, commandReady) */
605 rc
= i2c_nuvoton_wait_for_stat(chip
,
606 TPM_STS_COMMAND_READY
,
607 TPM_STS_COMMAND_READY
,
612 * TIS is in ready state
613 * write dummy byte to enter reception state
614 * TPM_DATA_FIFO_W <- rc (0)
616 rc
= i2c_nuvoton_write_buf(client
,
621 /* TPM_STS <- 0x40 (commandReady) */
622 i2c_nuvoton_ready(chip
);
625 * timeout_b reached - command was
626 * aborted. TIS should now be in idle state -
627 * only TPM_STS_VALID should be set
629 if (i2c_nuvoton_read_status(chip
) !=
636 return tpm_chip_register(chip
);
639 static int i2c_nuvoton_remove(struct i2c_client
*client
)
641 struct tpm_chip
*chip
= i2c_get_clientdata(client
);
643 tpm_chip_unregister(chip
);
647 static const struct i2c_device_id i2c_nuvoton_id
[] = {
649 {"tpm2_i2c_nuvoton", .driver_data
= I2C_IS_TPM2
},
652 MODULE_DEVICE_TABLE(i2c
, i2c_nuvoton_id
);
655 static const struct of_device_id i2c_nuvoton_of_match
[] = {
656 {.compatible
= "nuvoton,npct501"},
657 {.compatible
= "winbond,wpct301"},
658 {.compatible
= "nuvoton,npct601", .data
= OF_IS_TPM2
},
661 MODULE_DEVICE_TABLE(of
, i2c_nuvoton_of_match
);
664 static SIMPLE_DEV_PM_OPS(i2c_nuvoton_pm_ops
, tpm_pm_suspend
, tpm_pm_resume
);
666 static struct i2c_driver i2c_nuvoton_driver
= {
667 .id_table
= i2c_nuvoton_id
,
668 .probe
= i2c_nuvoton_probe
,
669 .remove
= i2c_nuvoton_remove
,
671 .name
= "tpm_i2c_nuvoton",
672 .pm
= &i2c_nuvoton_pm_ops
,
673 .of_match_table
= of_match_ptr(i2c_nuvoton_of_match
),
677 module_i2c_driver(i2c_nuvoton_driver
);
679 MODULE_AUTHOR("Dan Morav (dan.morav@nuvoton.com)");
680 MODULE_DESCRIPTION("Nuvoton TPM I2C Driver");
681 MODULE_LICENSE("GPL");