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 /* TPM command header size */
44 #define TPM_HEADER_SIZE 10
47 * I2C bus device maximum buffer size w/o counting I2C address or command
48 * i.e. max size required for I2C write is 34 = addr, command, 32 bytes data
50 #define TPM_I2C_MAX_BUF_SIZE 32
51 #define TPM_I2C_RETRY_COUNT 32
52 #define TPM_I2C_BUS_DELAY 1 /* msec */
53 #define TPM_I2C_RETRY_DELAY_SHORT 2 /* msec */
54 #define TPM_I2C_RETRY_DELAY_LONG 10 /* msec */
56 #define OF_IS_TPM2 ((void *)1)
62 wait_queue_head_t read_queue
;
65 static s32
i2c_nuvoton_read_buf(struct i2c_client
*client
, u8 offset
, u8 size
,
70 status
= i2c_smbus_read_i2c_block_data(client
, offset
, size
, data
);
72 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__
,
73 offset
, size
, (int)size
, data
, status
);
77 static s32
i2c_nuvoton_write_buf(struct i2c_client
*client
, u8 offset
, u8 size
,
82 status
= i2c_smbus_write_i2c_block_data(client
, offset
, size
, data
);
84 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__
,
85 offset
, size
, (int)size
, data
, status
);
89 #define TPM_STS_VALID 0x80
90 #define TPM_STS_COMMAND_READY 0x40
91 #define TPM_STS_GO 0x20
92 #define TPM_STS_DATA_AVAIL 0x10
93 #define TPM_STS_EXPECT 0x08
94 #define TPM_STS_RESPONSE_RETRY 0x02
95 #define TPM_STS_ERR_VAL 0x07 /* bit2...bit0 reads always 0 */
97 #define TPM_I2C_SHORT_TIMEOUT 750 /* ms */
98 #define TPM_I2C_LONG_TIMEOUT 2000 /* 2 sec */
100 /* read TPM_STS register */
101 static u8
i2c_nuvoton_read_status(struct tpm_chip
*chip
)
103 struct i2c_client
*client
= to_i2c_client(chip
->dev
.parent
);
107 status
= i2c_nuvoton_read_buf(client
, TPM_STS
, 1, &data
);
109 dev_err(&chip
->dev
, "%s() error return %d\n", __func__
,
111 data
= TPM_STS_ERR_VAL
;
117 /* write byte to TPM_STS register */
118 static s32
i2c_nuvoton_write_status(struct i2c_client
*client
, u8 data
)
123 /* this causes the current command to be aborted */
124 for (i
= 0, status
= -1; i
< TPM_I2C_RETRY_COUNT
&& status
< 0; i
++) {
125 status
= i2c_nuvoton_write_buf(client
, TPM_STS
, 1, &data
);
126 msleep(TPM_I2C_BUS_DELAY
);
131 /* write commandReady to TPM_STS register */
132 static void i2c_nuvoton_ready(struct tpm_chip
*chip
)
134 struct i2c_client
*client
= to_i2c_client(chip
->dev
.parent
);
137 /* this causes the current command to be aborted */
138 status
= i2c_nuvoton_write_status(client
, TPM_STS_COMMAND_READY
);
141 "%s() fail to write TPM_STS.commandReady\n", __func__
);
144 /* read burstCount field from TPM_STS register
145 * return -1 on fail to read */
146 static int i2c_nuvoton_get_burstcount(struct i2c_client
*client
,
147 struct tpm_chip
*chip
)
149 unsigned long stop
= jiffies
+ chip
->timeout_d
;
151 int burst_count
= -1;
154 /* wait for burstcount to be non-zero */
156 /* in I2C burstCount is 1 byte */
157 status
= i2c_nuvoton_read_buf(client
, TPM_BURST_COUNT
, 1,
159 if (status
> 0 && data
> 0) {
160 burst_count
= min_t(u8
, TPM_I2C_MAX_BUF_SIZE
, data
);
163 msleep(TPM_I2C_BUS_DELAY
);
164 } while (time_before(jiffies
, stop
));
170 * WPCT301/NPCT501/NPCT6XX SINT# supports only dataAvail
171 * any call to this function which is not waiting for dataAvail will
172 * set queue to NULL to avoid waiting for interrupt
174 static bool i2c_nuvoton_check_status(struct tpm_chip
*chip
, u8 mask
, u8 value
)
176 u8 status
= i2c_nuvoton_read_status(chip
);
177 return (status
!= TPM_STS_ERR_VAL
) && ((status
& mask
) == value
);
180 static int i2c_nuvoton_wait_for_stat(struct tpm_chip
*chip
, u8 mask
, u8 value
,
181 u32 timeout
, wait_queue_head_t
*queue
)
183 if ((chip
->flags
& TPM_CHIP_FLAG_IRQ
) && queue
) {
185 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
186 unsigned int cur_intrs
= priv
->intrs
;
188 enable_irq(priv
->irq
);
189 rc
= wait_event_interruptible_timeout(*queue
,
190 cur_intrs
!= priv
->intrs
,
194 /* At this point we know that the SINT pin is asserted, so we
195 * do not need to do i2c_nuvoton_check_status */
197 unsigned long ten_msec
, stop
;
200 /* check current status */
201 status_valid
= i2c_nuvoton_check_status(chip
, mask
, value
);
205 /* use polling to wait for the event */
206 ten_msec
= jiffies
+ msecs_to_jiffies(TPM_I2C_RETRY_DELAY_LONG
);
207 stop
= jiffies
+ timeout
;
209 if (time_before(jiffies
, ten_msec
))
210 msleep(TPM_I2C_RETRY_DELAY_SHORT
);
212 msleep(TPM_I2C_RETRY_DELAY_LONG
);
213 status_valid
= i2c_nuvoton_check_status(chip
, mask
,
217 } while (time_before(jiffies
, stop
));
219 dev_err(&chip
->dev
, "%s(%02x, %02x) -> timeout\n", __func__
, mask
,
224 /* wait for dataAvail field to be set in the TPM_STS register */
225 static int i2c_nuvoton_wait_for_data_avail(struct tpm_chip
*chip
, u32 timeout
,
226 wait_queue_head_t
*queue
)
228 return i2c_nuvoton_wait_for_stat(chip
,
229 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
230 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
234 /* Read @count bytes into @buf from TPM_RD_FIFO register */
235 static int i2c_nuvoton_recv_data(struct i2c_client
*client
,
236 struct tpm_chip
*chip
, u8
*buf
, size_t count
)
238 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
240 int burst_count
, bytes2read
, size
= 0;
242 while (size
< count
&&
243 i2c_nuvoton_wait_for_data_avail(chip
,
245 &priv
->read_queue
) == 0) {
246 burst_count
= i2c_nuvoton_get_burstcount(client
, chip
);
247 if (burst_count
< 0) {
249 "%s() fail to read burstCount=%d\n", __func__
,
253 bytes2read
= min_t(size_t, burst_count
, count
- size
);
254 rc
= i2c_nuvoton_read_buf(client
, TPM_DATA_FIFO_R
,
255 bytes2read
, &buf
[size
]);
258 "%s() fail on i2c_nuvoton_read_buf()=%d\n",
262 dev_dbg(&chip
->dev
, "%s(%d):", __func__
, bytes2read
);
269 /* Read TPM command results */
270 static int i2c_nuvoton_recv(struct tpm_chip
*chip
, u8
*buf
, size_t count
)
272 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
273 struct device
*dev
= chip
->dev
.parent
;
274 struct i2c_client
*client
= to_i2c_client(dev
);
276 int expected
, status
, burst_count
, retries
, size
= 0;
278 if (count
< TPM_HEADER_SIZE
) {
279 i2c_nuvoton_ready(chip
); /* return to idle */
280 dev_err(dev
, "%s() count < header size\n", __func__
);
283 for (retries
= 0; retries
< TPM_RETRY
; retries
++) {
285 /* if this is not the first trial, set responseRetry */
286 i2c_nuvoton_write_status(client
,
287 TPM_STS_RESPONSE_RETRY
);
290 * read first available (> 10 bytes), including:
291 * tag, paramsize, and result
293 status
= i2c_nuvoton_wait_for_data_avail(
294 chip
, chip
->timeout_c
, &priv
->read_queue
);
296 dev_err(dev
, "%s() timeout on dataAvail\n", __func__
);
300 burst_count
= i2c_nuvoton_get_burstcount(client
, chip
);
301 if (burst_count
< 0) {
302 dev_err(dev
, "%s() fail to get burstCount\n", __func__
);
306 size
= i2c_nuvoton_recv_data(client
, chip
, buf
,
308 if (size
< TPM_HEADER_SIZE
) {
309 dev_err(dev
, "%s() fail to read header\n", __func__
);
314 * convert number of expected bytes field from big endian 32 bit
317 expected
= be32_to_cpu(*(__be32
*) (buf
+ 2));
318 if (expected
> count
) {
319 dev_err(dev
, "%s() expected > count\n", __func__
);
323 rc
= i2c_nuvoton_recv_data(client
, chip
, &buf
[size
],
326 if (rc
< 0 || size
< expected
) {
327 dev_err(dev
, "%s() fail to read remainder of result\n",
332 if (i2c_nuvoton_wait_for_stat(
333 chip
, TPM_STS_VALID
| TPM_STS_DATA_AVAIL
,
334 TPM_STS_VALID
, chip
->timeout_c
,
336 dev_err(dev
, "%s() error left over data\n", __func__
);
342 i2c_nuvoton_ready(chip
);
343 dev_dbg(&chip
->dev
, "%s() -> %d\n", __func__
, size
);
350 * If interrupts are used (signaled by an irq set in the vendor structure)
351 * tpm.c can skip polling for the data to be available as the interrupt is
354 static int i2c_nuvoton_send(struct tpm_chip
*chip
, u8
*buf
, size_t len
)
356 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
357 struct device
*dev
= chip
->dev
.parent
;
358 struct i2c_client
*client
= to_i2c_client(dev
);
361 int burst_count
, bytes2write
, retries
, rc
= -EIO
;
363 for (retries
= 0; retries
< TPM_RETRY
; retries
++) {
364 i2c_nuvoton_ready(chip
);
365 if (i2c_nuvoton_wait_for_stat(chip
, TPM_STS_COMMAND_READY
,
366 TPM_STS_COMMAND_READY
,
367 chip
->timeout_b
, NULL
)) {
368 dev_err(dev
, "%s() timeout on commandReady\n",
374 while (count
< len
- 1) {
375 burst_count
= i2c_nuvoton_get_burstcount(client
,
377 if (burst_count
< 0) {
378 dev_err(dev
, "%s() fail get burstCount\n",
383 bytes2write
= min_t(size_t, burst_count
,
385 rc
= i2c_nuvoton_write_buf(client
, TPM_DATA_FIFO_W
,
386 bytes2write
, &buf
[count
]);
388 dev_err(dev
, "%s() fail i2cWriteBuf\n",
392 dev_dbg(dev
, "%s(%d):", __func__
, bytes2write
);
393 count
+= bytes2write
;
394 rc
= i2c_nuvoton_wait_for_stat(chip
,
402 dev_err(dev
, "%s() timeout on Expect\n",
411 /* write last byte */
412 rc
= i2c_nuvoton_write_buf(client
, TPM_DATA_FIFO_W
, 1,
415 dev_err(dev
, "%s() fail to write last byte\n",
420 dev_dbg(dev
, "%s(last): %02x", __func__
, buf
[count
]);
421 rc
= i2c_nuvoton_wait_for_stat(chip
,
422 TPM_STS_VALID
| TPM_STS_EXPECT
,
424 chip
->timeout_c
, NULL
);
426 dev_err(dev
, "%s() timeout on Expect to clear\n",
434 /* retries == TPM_RETRY */
435 i2c_nuvoton_ready(chip
);
438 /* execute the TPM command */
439 rc
= i2c_nuvoton_write_status(client
, TPM_STS_GO
);
441 dev_err(dev
, "%s() fail to write Go\n", __func__
);
442 i2c_nuvoton_ready(chip
);
445 ordinal
= be32_to_cpu(*((__be32
*) (buf
+ 6)));
446 rc
= i2c_nuvoton_wait_for_data_avail(chip
,
447 tpm_calc_ordinal_duration(chip
,
451 dev_err(dev
, "%s() timeout command duration\n", __func__
);
452 i2c_nuvoton_ready(chip
);
456 dev_dbg(dev
, "%s() -> %zd\n", __func__
, len
);
460 static bool i2c_nuvoton_req_canceled(struct tpm_chip
*chip
, u8 status
)
462 return (status
== TPM_STS_COMMAND_READY
);
465 static const struct tpm_class_ops tpm_i2c
= {
466 .flags
= TPM_OPS_AUTO_STARTUP
,
467 .status
= i2c_nuvoton_read_status
,
468 .recv
= i2c_nuvoton_recv
,
469 .send
= i2c_nuvoton_send
,
470 .cancel
= i2c_nuvoton_ready
,
471 .req_complete_mask
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
472 .req_complete_val
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
473 .req_canceled
= i2c_nuvoton_req_canceled
,
476 /* The only purpose for the handler is to signal to any waiting threads that
477 * the interrupt is currently being asserted. The driver does not do any
478 * processing triggered by interrupts, and the chip provides no way to mask at
479 * the source (plus that would be slow over I2C). Run the IRQ as a one-shot,
480 * this means it cannot be shared. */
481 static irqreturn_t
i2c_nuvoton_int_handler(int dummy
, void *dev_id
)
483 struct tpm_chip
*chip
= dev_id
;
484 struct priv_data
*priv
= dev_get_drvdata(&chip
->dev
);
487 wake_up(&priv
->read_queue
);
488 disable_irq_nosync(priv
->irq
);
492 static int get_vid(struct i2c_client
*client
, u32
*res
)
494 static const u8 vid_did_rid_value
[] = { 0x50, 0x10, 0xfe };
498 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
500 rc
= i2c_nuvoton_read_buf(client
, TPM_VID_DID_RID
, 4, (u8
*)&temp
);
504 /* check WPCT301 values - ignore RID */
505 if (memcmp(&temp
, vid_did_rid_value
, sizeof(vid_did_rid_value
))) {
507 * f/w rev 2.81 has an issue where the VID_DID_RID is not
508 * reporting the right value. so give it another chance at
509 * offset 0x20 (FIFO_W).
511 rc
= i2c_nuvoton_read_buf(client
, TPM_DATA_FIFO_W
, 4,
516 /* check WPCT301 values - ignore RID */
517 if (memcmp(&temp
, vid_did_rid_value
,
518 sizeof(vid_did_rid_value
)))
526 static int i2c_nuvoton_probe(struct i2c_client
*client
,
527 const struct i2c_device_id
*id
)
530 struct tpm_chip
*chip
;
531 struct device
*dev
= &client
->dev
;
532 struct priv_data
*priv
;
535 rc
= get_vid(client
, &vid
);
539 dev_info(dev
, "VID: %04X DID: %02X RID: %02X\n", (u16
) vid
,
540 (u8
) (vid
>> 16), (u8
) (vid
>> 24));
542 chip
= tpmm_chip_alloc(dev
, &tpm_i2c
);
544 return PTR_ERR(chip
);
546 priv
= devm_kzalloc(dev
, sizeof(struct priv_data
), GFP_KERNEL
);
551 const struct of_device_id
*of_id
;
553 of_id
= of_match_device(dev
->driver
->of_match_table
, dev
);
554 if (of_id
&& of_id
->data
== OF_IS_TPM2
)
555 chip
->flags
|= TPM_CHIP_FLAG_TPM2
;
557 if (id
->driver_data
== I2C_IS_TPM2
)
558 chip
->flags
|= TPM_CHIP_FLAG_TPM2
;
560 init_waitqueue_head(&priv
->read_queue
);
562 /* Default timeouts */
563 chip
->timeout_a
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
564 chip
->timeout_b
= msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT
);
565 chip
->timeout_c
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
566 chip
->timeout_d
= msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT
);
568 dev_set_drvdata(&chip
->dev
, priv
);
571 * I2C intfcaps (interrupt capabilitieis) in the chip are hard coded to:
572 * TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
573 * The IRQ should be set in the i2c_board_info (which is done
574 * automatically in of_i2c_register_devices, for device tree users */
575 priv
->irq
= client
->irq
;
577 dev_dbg(dev
, "%s() priv->irq\n", __func__
);
578 rc
= devm_request_irq(dev
, client
->irq
,
579 i2c_nuvoton_int_handler
,
581 dev_name(&chip
->dev
),
584 dev_err(dev
, "%s() Unable to request irq: %d for use\n",
585 __func__
, priv
->irq
);
588 chip
->flags
|= TPM_CHIP_FLAG_IRQ
;
589 /* Clear any pending interrupt */
590 i2c_nuvoton_ready(chip
);
591 /* - wait for TPM_STS==0xA0 (stsValid, commandReady) */
592 rc
= i2c_nuvoton_wait_for_stat(chip
,
593 TPM_STS_COMMAND_READY
,
594 TPM_STS_COMMAND_READY
,
599 * TIS is in ready state
600 * write dummy byte to enter reception state
601 * TPM_DATA_FIFO_W <- rc (0)
603 rc
= i2c_nuvoton_write_buf(client
,
608 /* TPM_STS <- 0x40 (commandReady) */
609 i2c_nuvoton_ready(chip
);
612 * timeout_b reached - command was
613 * aborted. TIS should now be in idle state -
614 * only TPM_STS_VALID should be set
616 if (i2c_nuvoton_read_status(chip
) !=
623 return tpm_chip_register(chip
);
626 static int i2c_nuvoton_remove(struct i2c_client
*client
)
628 struct tpm_chip
*chip
= i2c_get_clientdata(client
);
630 tpm_chip_unregister(chip
);
634 static const struct i2c_device_id i2c_nuvoton_id
[] = {
636 {"tpm2_i2c_nuvoton", .driver_data
= I2C_IS_TPM2
},
639 MODULE_DEVICE_TABLE(i2c
, i2c_nuvoton_id
);
642 static const struct of_device_id i2c_nuvoton_of_match
[] = {
643 {.compatible
= "nuvoton,npct501"},
644 {.compatible
= "winbond,wpct301"},
645 {.compatible
= "nuvoton,npct601", .data
= OF_IS_TPM2
},
648 MODULE_DEVICE_TABLE(of
, i2c_nuvoton_of_match
);
651 static SIMPLE_DEV_PM_OPS(i2c_nuvoton_pm_ops
, tpm_pm_suspend
, tpm_pm_resume
);
653 static struct i2c_driver i2c_nuvoton_driver
= {
654 .id_table
= i2c_nuvoton_id
,
655 .probe
= i2c_nuvoton_probe
,
656 .remove
= i2c_nuvoton_remove
,
658 .name
= "tpm_i2c_nuvoton",
659 .pm
= &i2c_nuvoton_pm_ops
,
660 .of_match_table
= of_match_ptr(i2c_nuvoton_of_match
),
664 module_i2c_driver(i2c_nuvoton_driver
);
666 MODULE_AUTHOR("Dan Morav (dan.morav@nuvoton.com)");
667 MODULE_DESCRIPTION("Nuvoton TPM I2C Driver");
668 MODULE_LICENSE("GPL");