1 /******************************************************************************
2 * Nuvoton TPM I2C Device Driver Interface for WPCT301/NPCT501,
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>
36 /* I2C interface offsets */
38 #define TPM_BURST_COUNT 0x01
39 #define TPM_DATA_FIFO_W 0x20
40 #define TPM_DATA_FIFO_R 0x40
41 #define TPM_VID_DID_RID 0x60
42 /* TPM command header size */
43 #define TPM_HEADER_SIZE 10
46 * I2C bus device maximum buffer size w/o counting I2C address or command
47 * i.e. max size required for I2C write is 34 = addr, command, 32 bytes data
49 #define TPM_I2C_MAX_BUF_SIZE 32
50 #define TPM_I2C_RETRY_COUNT 32
51 #define TPM_I2C_BUS_DELAY 1 /* msec */
52 #define TPM_I2C_RETRY_DELAY_SHORT 2 /* msec */
53 #define TPM_I2C_RETRY_DELAY_LONG 10 /* msec */
55 #define I2C_DRIVER_NAME "tpm_i2c_nuvoton"
61 static s32
i2c_nuvoton_read_buf(struct i2c_client
*client
, u8 offset
, u8 size
,
66 status
= i2c_smbus_read_i2c_block_data(client
, offset
, size
, data
);
68 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__
,
69 offset
, size
, (int)size
, data
, status
);
73 static s32
i2c_nuvoton_write_buf(struct i2c_client
*client
, u8 offset
, u8 size
,
78 status
= i2c_smbus_write_i2c_block_data(client
, offset
, size
, data
);
80 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__
,
81 offset
, size
, (int)size
, data
, status
);
85 #define TPM_STS_VALID 0x80
86 #define TPM_STS_COMMAND_READY 0x40
87 #define TPM_STS_GO 0x20
88 #define TPM_STS_DATA_AVAIL 0x10
89 #define TPM_STS_EXPECT 0x08
90 #define TPM_STS_RESPONSE_RETRY 0x02
91 #define TPM_STS_ERR_VAL 0x07 /* bit2...bit0 reads always 0 */
93 #define TPM_I2C_SHORT_TIMEOUT 750 /* ms */
94 #define TPM_I2C_LONG_TIMEOUT 2000 /* 2 sec */
96 /* read TPM_STS register */
97 static u8
i2c_nuvoton_read_status(struct tpm_chip
*chip
)
99 struct i2c_client
*client
= to_i2c_client(chip
->pdev
);
103 status
= i2c_nuvoton_read_buf(client
, TPM_STS
, 1, &data
);
105 dev_err(chip
->pdev
, "%s() error return %d\n", __func__
,
107 data
= TPM_STS_ERR_VAL
;
113 /* write byte to TPM_STS register */
114 static s32
i2c_nuvoton_write_status(struct i2c_client
*client
, u8 data
)
119 /* this causes the current command to be aborted */
120 for (i
= 0, status
= -1; i
< TPM_I2C_RETRY_COUNT
&& status
< 0; i
++) {
121 status
= i2c_nuvoton_write_buf(client
, TPM_STS
, 1, &data
);
122 msleep(TPM_I2C_BUS_DELAY
);
127 /* write commandReady to TPM_STS register */
128 static void i2c_nuvoton_ready(struct tpm_chip
*chip
)
130 struct i2c_client
*client
= to_i2c_client(chip
->pdev
);
133 /* this causes the current command to be aborted */
134 status
= i2c_nuvoton_write_status(client
, TPM_STS_COMMAND_READY
);
137 "%s() fail to write TPM_STS.commandReady\n", __func__
);
140 /* read burstCount field from TPM_STS register
141 * return -1 on fail to read */
142 static int i2c_nuvoton_get_burstcount(struct i2c_client
*client
,
143 struct tpm_chip
*chip
)
145 unsigned long stop
= jiffies
+ chip
->vendor
.timeout_d
;
147 int burst_count
= -1;
150 /* wait for burstcount to be non-zero */
152 /* in I2C burstCount is 1 byte */
153 status
= i2c_nuvoton_read_buf(client
, TPM_BURST_COUNT
, 1,
155 if (status
> 0 && data
> 0) {
156 burst_count
= min_t(u8
, TPM_I2C_MAX_BUF_SIZE
, data
);
159 msleep(TPM_I2C_BUS_DELAY
);
160 } while (time_before(jiffies
, stop
));
166 * WPCT301/NPCT501 SINT# supports only dataAvail
167 * any call to this function which is not waiting for dataAvail will
168 * set queue to NULL to avoid waiting for interrupt
170 static bool i2c_nuvoton_check_status(struct tpm_chip
*chip
, u8 mask
, u8 value
)
172 u8 status
= i2c_nuvoton_read_status(chip
);
173 return (status
!= TPM_STS_ERR_VAL
) && ((status
& mask
) == value
);
176 static int i2c_nuvoton_wait_for_stat(struct tpm_chip
*chip
, u8 mask
, u8 value
,
177 u32 timeout
, wait_queue_head_t
*queue
)
179 if (chip
->vendor
.irq
&& queue
) {
181 struct priv_data
*priv
= chip
->vendor
.priv
;
182 unsigned int cur_intrs
= priv
->intrs
;
184 enable_irq(chip
->vendor
.irq
);
185 rc
= wait_event_interruptible_timeout(*queue
,
186 cur_intrs
!= priv
->intrs
,
190 /* At this point we know that the SINT pin is asserted, so we
191 * do not need to do i2c_nuvoton_check_status */
193 unsigned long ten_msec
, stop
;
196 /* check current status */
197 status_valid
= i2c_nuvoton_check_status(chip
, mask
, value
);
201 /* use polling to wait for the event */
202 ten_msec
= jiffies
+ msecs_to_jiffies(TPM_I2C_RETRY_DELAY_LONG
);
203 stop
= jiffies
+ timeout
;
205 if (time_before(jiffies
, ten_msec
))
206 msleep(TPM_I2C_RETRY_DELAY_SHORT
);
208 msleep(TPM_I2C_RETRY_DELAY_LONG
);
209 status_valid
= i2c_nuvoton_check_status(chip
, mask
,
213 } while (time_before(jiffies
, stop
));
215 dev_err(chip
->pdev
, "%s(%02x, %02x) -> timeout\n", __func__
, mask
,
220 /* wait for dataAvail field to be set in the TPM_STS register */
221 static int i2c_nuvoton_wait_for_data_avail(struct tpm_chip
*chip
, u32 timeout
,
222 wait_queue_head_t
*queue
)
224 return i2c_nuvoton_wait_for_stat(chip
,
225 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
226 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
230 /* Read @count bytes into @buf from TPM_RD_FIFO register */
231 static int i2c_nuvoton_recv_data(struct i2c_client
*client
,
232 struct tpm_chip
*chip
, u8
*buf
, size_t count
)
235 int burst_count
, bytes2read
, size
= 0;
237 while (size
< count
&&
238 i2c_nuvoton_wait_for_data_avail(chip
,
239 chip
->vendor
.timeout_c
,
240 &chip
->vendor
.read_queue
) == 0) {
241 burst_count
= i2c_nuvoton_get_burstcount(client
, chip
);
242 if (burst_count
< 0) {
244 "%s() fail to read burstCount=%d\n", __func__
,
248 bytes2read
= min_t(size_t, burst_count
, count
- size
);
249 rc
= i2c_nuvoton_read_buf(client
, TPM_DATA_FIFO_R
,
250 bytes2read
, &buf
[size
]);
253 "%s() fail on i2c_nuvoton_read_buf()=%d\n",
257 dev_dbg(chip
->pdev
, "%s(%d):", __func__
, bytes2read
);
264 /* Read TPM command results */
265 static int i2c_nuvoton_recv(struct tpm_chip
*chip
, u8
*buf
, size_t count
)
267 struct device
*dev
= chip
->pdev
;
268 struct i2c_client
*client
= to_i2c_client(dev
);
270 int expected
, status
, burst_count
, retries
, size
= 0;
272 if (count
< TPM_HEADER_SIZE
) {
273 i2c_nuvoton_ready(chip
); /* return to idle */
274 dev_err(dev
, "%s() count < header size\n", __func__
);
277 for (retries
= 0; retries
< TPM_RETRY
; retries
++) {
279 /* if this is not the first trial, set responseRetry */
280 i2c_nuvoton_write_status(client
,
281 TPM_STS_RESPONSE_RETRY
);
284 * read first available (> 10 bytes), including:
285 * tag, paramsize, and result
287 status
= i2c_nuvoton_wait_for_data_avail(
288 chip
, chip
->vendor
.timeout_c
, &chip
->vendor
.read_queue
);
290 dev_err(dev
, "%s() timeout on dataAvail\n", __func__
);
294 burst_count
= i2c_nuvoton_get_burstcount(client
, chip
);
295 if (burst_count
< 0) {
296 dev_err(dev
, "%s() fail to get burstCount\n", __func__
);
300 size
= i2c_nuvoton_recv_data(client
, chip
, buf
,
302 if (size
< TPM_HEADER_SIZE
) {
303 dev_err(dev
, "%s() fail to read header\n", __func__
);
308 * convert number of expected bytes field from big endian 32 bit
311 expected
= be32_to_cpu(*(__be32
*) (buf
+ 2));
312 if (expected
> count
) {
313 dev_err(dev
, "%s() expected > count\n", __func__
);
317 rc
= i2c_nuvoton_recv_data(client
, chip
, &buf
[size
],
320 if (rc
< 0 || size
< expected
) {
321 dev_err(dev
, "%s() fail to read remainder of result\n",
326 if (i2c_nuvoton_wait_for_stat(
327 chip
, TPM_STS_VALID
| TPM_STS_DATA_AVAIL
,
328 TPM_STS_VALID
, chip
->vendor
.timeout_c
,
330 dev_err(dev
, "%s() error left over data\n", __func__
);
336 i2c_nuvoton_ready(chip
);
337 dev_dbg(chip
->pdev
, "%s() -> %d\n", __func__
, size
);
344 * If interrupts are used (signaled by an irq set in the vendor structure)
345 * tpm.c can skip polling for the data to be available as the interrupt is
348 static int i2c_nuvoton_send(struct tpm_chip
*chip
, u8
*buf
, size_t len
)
350 struct device
*dev
= chip
->pdev
;
351 struct i2c_client
*client
= to_i2c_client(dev
);
354 int burst_count
, bytes2write
, retries
, rc
= -EIO
;
356 for (retries
= 0; retries
< TPM_RETRY
; retries
++) {
357 i2c_nuvoton_ready(chip
);
358 if (i2c_nuvoton_wait_for_stat(chip
, TPM_STS_COMMAND_READY
,
359 TPM_STS_COMMAND_READY
,
360 chip
->vendor
.timeout_b
, NULL
)) {
361 dev_err(dev
, "%s() timeout on commandReady\n",
367 while (count
< len
- 1) {
368 burst_count
= i2c_nuvoton_get_burstcount(client
,
370 if (burst_count
< 0) {
371 dev_err(dev
, "%s() fail get burstCount\n",
376 bytes2write
= min_t(size_t, burst_count
,
378 rc
= i2c_nuvoton_write_buf(client
, TPM_DATA_FIFO_W
,
379 bytes2write
, &buf
[count
]);
381 dev_err(dev
, "%s() fail i2cWriteBuf\n",
385 dev_dbg(dev
, "%s(%d):", __func__
, bytes2write
);
386 count
+= bytes2write
;
387 rc
= i2c_nuvoton_wait_for_stat(chip
,
392 chip
->vendor
.timeout_c
,
395 dev_err(dev
, "%s() timeout on Expect\n",
404 /* write last byte */
405 rc
= i2c_nuvoton_write_buf(client
, TPM_DATA_FIFO_W
, 1,
408 dev_err(dev
, "%s() fail to write last byte\n",
413 dev_dbg(dev
, "%s(last): %02x", __func__
, buf
[count
]);
414 rc
= i2c_nuvoton_wait_for_stat(chip
,
415 TPM_STS_VALID
| TPM_STS_EXPECT
,
417 chip
->vendor
.timeout_c
, NULL
);
419 dev_err(dev
, "%s() timeout on Expect to clear\n",
427 /* retries == TPM_RETRY */
428 i2c_nuvoton_ready(chip
);
431 /* execute the TPM command */
432 rc
= i2c_nuvoton_write_status(client
, TPM_STS_GO
);
434 dev_err(dev
, "%s() fail to write Go\n", __func__
);
435 i2c_nuvoton_ready(chip
);
438 ordinal
= be32_to_cpu(*((__be32
*) (buf
+ 6)));
439 rc
= i2c_nuvoton_wait_for_data_avail(chip
,
440 tpm_calc_ordinal_duration(chip
,
442 &chip
->vendor
.read_queue
);
444 dev_err(dev
, "%s() timeout command duration\n", __func__
);
445 i2c_nuvoton_ready(chip
);
449 dev_dbg(dev
, "%s() -> %zd\n", __func__
, len
);
453 static bool i2c_nuvoton_req_canceled(struct tpm_chip
*chip
, u8 status
)
455 return (status
== TPM_STS_COMMAND_READY
);
458 static const struct tpm_class_ops tpm_i2c
= {
459 .status
= i2c_nuvoton_read_status
,
460 .recv
= i2c_nuvoton_recv
,
461 .send
= i2c_nuvoton_send
,
462 .cancel
= i2c_nuvoton_ready
,
463 .req_complete_mask
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
464 .req_complete_val
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
465 .req_canceled
= i2c_nuvoton_req_canceled
,
468 /* The only purpose for the handler is to signal to any waiting threads that
469 * the interrupt is currently being asserted. The driver does not do any
470 * processing triggered by interrupts, and the chip provides no way to mask at
471 * the source (plus that would be slow over I2C). Run the IRQ as a one-shot,
472 * this means it cannot be shared. */
473 static irqreturn_t
i2c_nuvoton_int_handler(int dummy
, void *dev_id
)
475 struct tpm_chip
*chip
= dev_id
;
476 struct priv_data
*priv
= chip
->vendor
.priv
;
479 wake_up(&chip
->vendor
.read_queue
);
480 disable_irq_nosync(chip
->vendor
.irq
);
484 static int get_vid(struct i2c_client
*client
, u32
*res
)
486 static const u8 vid_did_rid_value
[] = { 0x50, 0x10, 0xfe };
490 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
492 rc
= i2c_nuvoton_read_buf(client
, TPM_VID_DID_RID
, 4, (u8
*)&temp
);
496 /* check WPCT301 values - ignore RID */
497 if (memcmp(&temp
, vid_did_rid_value
, sizeof(vid_did_rid_value
))) {
499 * f/w rev 2.81 has an issue where the VID_DID_RID is not
500 * reporting the right value. so give it another chance at
501 * offset 0x20 (FIFO_W).
503 rc
= i2c_nuvoton_read_buf(client
, TPM_DATA_FIFO_W
, 4,
508 /* check WPCT301 values - ignore RID */
509 if (memcmp(&temp
, vid_did_rid_value
,
510 sizeof(vid_did_rid_value
)))
518 static int i2c_nuvoton_probe(struct i2c_client
*client
,
519 const struct i2c_device_id
*id
)
522 struct tpm_chip
*chip
;
523 struct device
*dev
= &client
->dev
;
526 rc
= get_vid(client
, &vid
);
530 dev_info(dev
, "VID: %04X DID: %02X RID: %02X\n", (u16
) vid
,
531 (u8
) (vid
>> 16), (u8
) (vid
>> 24));
533 chip
= tpmm_chip_alloc(dev
, &tpm_i2c
);
535 return PTR_ERR(chip
);
537 chip
->vendor
.priv
= devm_kzalloc(dev
, sizeof(struct priv_data
),
539 if (!chip
->vendor
.priv
)
542 init_waitqueue_head(&chip
->vendor
.read_queue
);
543 init_waitqueue_head(&chip
->vendor
.int_queue
);
545 /* Default timeouts */
546 chip
->vendor
.timeout_a
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
547 chip
->vendor
.timeout_b
= msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT
);
548 chip
->vendor
.timeout_c
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
549 chip
->vendor
.timeout_d
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
552 * I2C intfcaps (interrupt capabilitieis) in the chip are hard coded to:
553 * TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
554 * The IRQ should be set in the i2c_board_info (which is done
555 * automatically in of_i2c_register_devices, for device tree users */
556 chip
->vendor
.irq
= client
->irq
;
558 if (chip
->vendor
.irq
) {
559 dev_dbg(dev
, "%s() chip-vendor.irq\n", __func__
);
560 rc
= devm_request_irq(dev
, chip
->vendor
.irq
,
561 i2c_nuvoton_int_handler
,
566 dev_err(dev
, "%s() Unable to request irq: %d for use\n",
567 __func__
, chip
->vendor
.irq
);
568 chip
->vendor
.irq
= 0;
570 /* Clear any pending interrupt */
571 i2c_nuvoton_ready(chip
);
572 /* - wait for TPM_STS==0xA0 (stsValid, commandReady) */
573 rc
= i2c_nuvoton_wait_for_stat(chip
,
574 TPM_STS_COMMAND_READY
,
575 TPM_STS_COMMAND_READY
,
576 chip
->vendor
.timeout_b
,
580 * TIS is in ready state
581 * write dummy byte to enter reception state
582 * TPM_DATA_FIFO_W <- rc (0)
584 rc
= i2c_nuvoton_write_buf(client
,
589 /* TPM_STS <- 0x40 (commandReady) */
590 i2c_nuvoton_ready(chip
);
593 * timeout_b reached - command was
594 * aborted. TIS should now be in idle state -
595 * only TPM_STS_VALID should be set
597 if (i2c_nuvoton_read_status(chip
) !=
604 if (tpm_get_timeouts(chip
))
607 if (tpm_do_selftest(chip
))
610 return tpm_chip_register(chip
);
613 static int i2c_nuvoton_remove(struct i2c_client
*client
)
615 struct device
*dev
= &(client
->dev
);
616 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
617 tpm_chip_unregister(chip
);
621 static const struct i2c_device_id i2c_nuvoton_id
[] = {
622 {I2C_DRIVER_NAME
, 0},
625 MODULE_DEVICE_TABLE(i2c
, i2c_nuvoton_id
);
628 static const struct of_device_id i2c_nuvoton_of_match
[] = {
629 {.compatible
= "nuvoton,npct501"},
630 {.compatible
= "winbond,wpct301"},
633 MODULE_DEVICE_TABLE(of
, i2c_nuvoton_of_match
);
636 static SIMPLE_DEV_PM_OPS(i2c_nuvoton_pm_ops
, tpm_pm_suspend
, tpm_pm_resume
);
638 static struct i2c_driver i2c_nuvoton_driver
= {
639 .id_table
= i2c_nuvoton_id
,
640 .probe
= i2c_nuvoton_probe
,
641 .remove
= i2c_nuvoton_remove
,
643 .name
= I2C_DRIVER_NAME
,
644 .owner
= THIS_MODULE
,
645 .pm
= &i2c_nuvoton_pm_ops
,
646 .of_match_table
= of_match_ptr(i2c_nuvoton_of_match
),
650 module_i2c_driver(i2c_nuvoton_driver
);
652 MODULE_AUTHOR("Dan Morav (dan.morav@nuvoton.com)");
653 MODULE_DESCRIPTION("Nuvoton TPM I2C Driver");
654 MODULE_LICENSE("GPL");