2 * Copyright (C) 2005, 2006 IBM Corporation
3 * Copyright (C) 2014, 2015 Intel Corporation
6 * Leendert van Doorn <leendert@watson.ibm.com>
7 * Kylene Hall <kjhall@us.ibm.com>
9 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
11 * Device driver for TCG/TCPA TPM (trusted platform module).
12 * Specifications at www.trustedcomputinggroup.org
14 * This device driver implements the TPM interface as defined in
15 * the TCG TPM Interface Spec version 1.2, revision 1.0.
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU General Public License as
19 * published by the Free Software Foundation, version 2 of the
22 #include <linux/init.h>
23 #include <linux/module.h>
24 #include <linux/moduleparam.h>
25 #include <linux/pnp.h>
26 #include <linux/slab.h>
27 #include <linux/interrupt.h>
28 #include <linux/wait.h>
29 #include <linux/acpi.h>
30 #include <linux/freezer.h>
34 TPM_ACCESS_VALID
= 0x80,
35 TPM_ACCESS_ACTIVE_LOCALITY
= 0x20,
36 TPM_ACCESS_REQUEST_PENDING
= 0x04,
37 TPM_ACCESS_REQUEST_USE
= 0x02,
42 TPM_STS_COMMAND_READY
= 0x40,
44 TPM_STS_DATA_AVAIL
= 0x10,
45 TPM_STS_DATA_EXPECT
= 0x08,
49 TPM_GLOBAL_INT_ENABLE
= 0x80000000,
50 TPM_INTF_BURST_COUNT_STATIC
= 0x100,
51 TPM_INTF_CMD_READY_INT
= 0x080,
52 TPM_INTF_INT_EDGE_FALLING
= 0x040,
53 TPM_INTF_INT_EDGE_RISING
= 0x020,
54 TPM_INTF_INT_LEVEL_LOW
= 0x010,
55 TPM_INTF_INT_LEVEL_HIGH
= 0x008,
56 TPM_INTF_LOCALITY_CHANGE_INT
= 0x004,
57 TPM_INTF_STS_VALID_INT
= 0x002,
58 TPM_INTF_DATA_AVAIL_INT
= 0x001,
63 TIS_SHORT_TIMEOUT
= 750, /* ms */
64 TIS_LONG_TIMEOUT
= 2000, /* 2 sec */
69 /* irq > 0 means: use irq $irq;
70 * irq = 0 means: autoprobe for an irq;
71 * irq = -1 means: no irq support
76 /* Some timeout values are needed before it is known whether the chip is
79 #define TIS_TIMEOUT_A_MAX max(TIS_SHORT_TIMEOUT, TPM2_TIMEOUT_A)
80 #define TIS_TIMEOUT_B_MAX max(TIS_LONG_TIMEOUT, TPM2_TIMEOUT_B)
81 #define TIS_TIMEOUT_C_MAX max(TIS_SHORT_TIMEOUT, TPM2_TIMEOUT_C)
82 #define TIS_TIMEOUT_D_MAX max(TIS_SHORT_TIMEOUT, TPM2_TIMEOUT_D)
84 #define TPM_ACCESS(l) (0x0000 | ((l) << 12))
85 #define TPM_INT_ENABLE(l) (0x0008 | ((l) << 12))
86 #define TPM_INT_VECTOR(l) (0x000C | ((l) << 12))
87 #define TPM_INT_STATUS(l) (0x0010 | ((l) << 12))
88 #define TPM_INTF_CAPS(l) (0x0014 | ((l) << 12))
89 #define TPM_STS(l) (0x0018 | ((l) << 12))
90 #define TPM_STS3(l) (0x001b | ((l) << 12))
91 #define TPM_DATA_FIFO(l) (0x0024 | ((l) << 12))
93 #define TPM_DID_VID(l) (0x0F00 | ((l) << 12))
94 #define TPM_RID(l) (0x0F04 | ((l) << 12))
100 #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
101 static int has_hid(struct acpi_device
*dev
, const char *hid
)
103 struct acpi_hardware_id
*id
;
105 list_for_each_entry(id
, &dev
->pnp
.ids
, list
)
106 if (!strcmp(hid
, id
->id
))
112 static inline int is_itpm(struct acpi_device
*dev
)
114 return has_hid(dev
, "INTC0102");
117 static inline int is_itpm(struct acpi_device
*dev
)
123 /* Before we attempt to access the TPM we must see that the valid bit is set.
124 * The specification says that this bit is 0 at reset and remains 0 until the
125 * 'TPM has gone through its self test and initialization and has established
126 * correct values in the other bits.' */
127 static int wait_startup(struct tpm_chip
*chip
, int l
)
129 unsigned long stop
= jiffies
+ chip
->vendor
.timeout_a
;
131 if (ioread8(chip
->vendor
.iobase
+ TPM_ACCESS(l
)) &
135 } while (time_before(jiffies
, stop
));
139 static int check_locality(struct tpm_chip
*chip
, int l
)
141 if ((ioread8(chip
->vendor
.iobase
+ TPM_ACCESS(l
)) &
142 (TPM_ACCESS_ACTIVE_LOCALITY
| TPM_ACCESS_VALID
)) ==
143 (TPM_ACCESS_ACTIVE_LOCALITY
| TPM_ACCESS_VALID
))
144 return chip
->vendor
.locality
= l
;
149 static void release_locality(struct tpm_chip
*chip
, int l
, int force
)
151 if (force
|| (ioread8(chip
->vendor
.iobase
+ TPM_ACCESS(l
)) &
152 (TPM_ACCESS_REQUEST_PENDING
| TPM_ACCESS_VALID
)) ==
153 (TPM_ACCESS_REQUEST_PENDING
| TPM_ACCESS_VALID
))
154 iowrite8(TPM_ACCESS_ACTIVE_LOCALITY
,
155 chip
->vendor
.iobase
+ TPM_ACCESS(l
));
158 static int request_locality(struct tpm_chip
*chip
, int l
)
160 unsigned long stop
, timeout
;
163 if (check_locality(chip
, l
) >= 0)
166 iowrite8(TPM_ACCESS_REQUEST_USE
,
167 chip
->vendor
.iobase
+ TPM_ACCESS(l
));
169 stop
= jiffies
+ chip
->vendor
.timeout_a
;
171 if (chip
->vendor
.irq
) {
173 timeout
= stop
- jiffies
;
174 if ((long)timeout
<= 0)
176 rc
= wait_event_interruptible_timeout(chip
->vendor
.int_queue
,
182 if (rc
== -ERESTARTSYS
&& freezing(current
)) {
183 clear_thread_flag(TIF_SIGPENDING
);
187 /* wait for burstcount */
189 if (check_locality(chip
, l
) >= 0)
193 while (time_before(jiffies
, stop
));
198 static u8
tpm_tis_status(struct tpm_chip
*chip
)
200 return ioread8(chip
->vendor
.iobase
+
201 TPM_STS(chip
->vendor
.locality
));
204 static void tpm_tis_ready(struct tpm_chip
*chip
)
206 /* this causes the current command to be aborted */
207 iowrite8(TPM_STS_COMMAND_READY
,
208 chip
->vendor
.iobase
+ TPM_STS(chip
->vendor
.locality
));
211 static int get_burstcount(struct tpm_chip
*chip
)
216 /* wait for burstcount */
217 /* which timeout value, spec has 2 answers (c & d) */
218 stop
= jiffies
+ chip
->vendor
.timeout_d
;
220 burstcnt
= ioread8(chip
->vendor
.iobase
+
221 TPM_STS(chip
->vendor
.locality
) + 1);
222 burstcnt
+= ioread8(chip
->vendor
.iobase
+
223 TPM_STS(chip
->vendor
.locality
) +
228 } while (time_before(jiffies
, stop
));
232 static int recv_data(struct tpm_chip
*chip
, u8
*buf
, size_t count
)
234 int size
= 0, burstcnt
;
235 while (size
< count
&&
236 wait_for_tpm_stat(chip
,
237 TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
238 chip
->vendor
.timeout_c
,
239 &chip
->vendor
.read_queue
, true)
241 burstcnt
= get_burstcount(chip
);
242 for (; burstcnt
> 0 && size
< count
; burstcnt
--)
243 buf
[size
++] = ioread8(chip
->vendor
.iobase
+
244 TPM_DATA_FIFO(chip
->vendor
.
250 static int tpm_tis_recv(struct tpm_chip
*chip
, u8
*buf
, size_t count
)
253 int expected
, status
;
255 if (count
< TPM_HEADER_SIZE
) {
260 /* read first 10 bytes, including tag, paramsize, and result */
262 recv_data(chip
, buf
, TPM_HEADER_SIZE
)) < TPM_HEADER_SIZE
) {
263 dev_err(chip
->pdev
, "Unable to read header\n");
267 expected
= be32_to_cpu(*(__be32
*) (buf
+ 2));
268 if (expected
> count
) {
274 recv_data(chip
, &buf
[TPM_HEADER_SIZE
],
275 expected
- TPM_HEADER_SIZE
)) < expected
) {
276 dev_err(chip
->pdev
, "Unable to read remainder of result\n");
281 wait_for_tpm_stat(chip
, TPM_STS_VALID
, chip
->vendor
.timeout_c
,
282 &chip
->vendor
.int_queue
, false);
283 status
= tpm_tis_status(chip
);
284 if (status
& TPM_STS_DATA_AVAIL
) { /* retry? */
285 dev_err(chip
->pdev
, "Error left over data\n");
292 release_locality(chip
, chip
->vendor
.locality
, 0);
297 module_param(itpm
, bool, 0444);
298 MODULE_PARM_DESC(itpm
, "Force iTPM workarounds (found on some Lenovo laptops)");
301 * If interrupts are used (signaled by an irq set in the vendor structure)
302 * tpm.c can skip polling for the data to be available as the interrupt is
305 static int tpm_tis_send_data(struct tpm_chip
*chip
, u8
*buf
, size_t len
)
307 int rc
, status
, burstcnt
;
310 if (request_locality(chip
, 0) < 0)
313 status
= tpm_tis_status(chip
);
314 if ((status
& TPM_STS_COMMAND_READY
) == 0) {
316 if (wait_for_tpm_stat
317 (chip
, TPM_STS_COMMAND_READY
, chip
->vendor
.timeout_b
,
318 &chip
->vendor
.int_queue
, false) < 0) {
324 while (count
< len
- 1) {
325 burstcnt
= get_burstcount(chip
);
326 for (; burstcnt
> 0 && count
< len
- 1; burstcnt
--) {
327 iowrite8(buf
[count
], chip
->vendor
.iobase
+
328 TPM_DATA_FIFO(chip
->vendor
.locality
));
332 wait_for_tpm_stat(chip
, TPM_STS_VALID
, chip
->vendor
.timeout_c
,
333 &chip
->vendor
.int_queue
, false);
334 status
= tpm_tis_status(chip
);
335 if (!itpm
&& (status
& TPM_STS_DATA_EXPECT
) == 0) {
341 /* write last byte */
343 chip
->vendor
.iobase
+ TPM_DATA_FIFO(chip
->vendor
.locality
));
344 wait_for_tpm_stat(chip
, TPM_STS_VALID
, chip
->vendor
.timeout_c
,
345 &chip
->vendor
.int_queue
, false);
346 status
= tpm_tis_status(chip
);
347 if ((status
& TPM_STS_DATA_EXPECT
) != 0) {
356 release_locality(chip
, chip
->vendor
.locality
, 0);
360 static void disable_interrupts(struct tpm_chip
*chip
)
365 ioread32(chip
->vendor
.iobase
+
366 TPM_INT_ENABLE(chip
->vendor
.locality
));
367 intmask
&= ~TPM_GLOBAL_INT_ENABLE
;
369 chip
->vendor
.iobase
+
370 TPM_INT_ENABLE(chip
->vendor
.locality
));
371 devm_free_irq(chip
->pdev
, chip
->vendor
.irq
, chip
);
372 chip
->vendor
.irq
= 0;
376 * If interrupts are used (signaled by an irq set in the vendor structure)
377 * tpm.c can skip polling for the data to be available as the interrupt is
380 static int tpm_tis_send_main(struct tpm_chip
*chip
, u8
*buf
, size_t len
)
386 rc
= tpm_tis_send_data(chip
, buf
, len
);
392 chip
->vendor
.iobase
+ TPM_STS(chip
->vendor
.locality
));
394 if (chip
->vendor
.irq
) {
395 ordinal
= be32_to_cpu(*((__be32
*) (buf
+ 6)));
397 if (chip
->flags
& TPM_CHIP_FLAG_TPM2
)
398 dur
= tpm2_calc_ordinal_duration(chip
, ordinal
);
400 dur
= tpm_calc_ordinal_duration(chip
, ordinal
);
402 if (wait_for_tpm_stat
403 (chip
, TPM_STS_DATA_AVAIL
| TPM_STS_VALID
, dur
,
404 &chip
->vendor
.read_queue
, false) < 0) {
412 release_locality(chip
, chip
->vendor
.locality
, 0);
416 static int tpm_tis_send(struct tpm_chip
*chip
, u8
*buf
, size_t len
)
419 struct priv_data
*priv
= chip
->vendor
.priv
;
421 if (!chip
->vendor
.irq
|| priv
->irq_tested
)
422 return tpm_tis_send_main(chip
, buf
, len
);
424 /* Verify receipt of the expected IRQ */
425 irq
= chip
->vendor
.irq
;
426 chip
->vendor
.irq
= 0;
427 rc
= tpm_tis_send_main(chip
, buf
, len
);
428 chip
->vendor
.irq
= irq
;
429 if (!priv
->irq_tested
)
431 if (!priv
->irq_tested
)
432 disable_interrupts(chip
);
433 priv
->irq_tested
= true;
437 struct tis_vendor_timeout_override
{
439 unsigned long timeout_us
[4];
442 static const struct tis_vendor_timeout_override vendor_timeout_overrides
[] = {
444 { 0x32041114, { (TIS_SHORT_TIMEOUT
*1000), (TIS_LONG_TIMEOUT
*1000),
445 (TIS_SHORT_TIMEOUT
*1000), (TIS_SHORT_TIMEOUT
*1000) } },
448 static bool tpm_tis_update_timeouts(struct tpm_chip
*chip
,
449 unsigned long *timeout_cap
)
454 did_vid
= ioread32(chip
->vendor
.iobase
+ TPM_DID_VID(0));
456 for (i
= 0; i
!= ARRAY_SIZE(vendor_timeout_overrides
); i
++) {
457 if (vendor_timeout_overrides
[i
].did_vid
!= did_vid
)
459 memcpy(timeout_cap
, vendor_timeout_overrides
[i
].timeout_us
,
460 sizeof(vendor_timeout_overrides
[i
].timeout_us
));
468 * Early probing for iTPM with STS_DATA_EXPECT flaw.
469 * Try sending command without itpm flag set and if that
470 * fails, repeat with itpm flag set.
472 static int probe_itpm(struct tpm_chip
*chip
)
475 u8 cmd_getticks
[] = {
476 0x00, 0xc1, 0x00, 0x00, 0x00, 0x0a,
477 0x00, 0x00, 0x00, 0xf1
479 size_t len
= sizeof(cmd_getticks
);
480 bool rem_itpm
= itpm
;
481 u16 vendor
= ioread16(chip
->vendor
.iobase
+ TPM_DID_VID(0));
483 /* probe only iTPMS */
484 if (vendor
!= TPM_VID_INTEL
)
489 rc
= tpm_tis_send_data(chip
, cmd_getticks
, len
);
494 release_locality(chip
, chip
->vendor
.locality
, 0);
498 rc
= tpm_tis_send_data(chip
, cmd_getticks
, len
);
500 dev_info(chip
->pdev
, "Detected an iTPM.\n");
508 release_locality(chip
, chip
->vendor
.locality
, 0);
513 static bool tpm_tis_req_canceled(struct tpm_chip
*chip
, u8 status
)
515 switch (chip
->vendor
.manufacturer_id
) {
516 case TPM_VID_WINBOND
:
517 return ((status
== TPM_STS_VALID
) ||
518 (status
== (TPM_STS_VALID
| TPM_STS_COMMAND_READY
)));
520 return (status
== (TPM_STS_VALID
| TPM_STS_COMMAND_READY
));
522 return (status
== TPM_STS_COMMAND_READY
);
526 static const struct tpm_class_ops tpm_tis
= {
527 .status
= tpm_tis_status
,
528 .recv
= tpm_tis_recv
,
529 .send
= tpm_tis_send
,
530 .cancel
= tpm_tis_ready
,
531 .update_timeouts
= tpm_tis_update_timeouts
,
532 .req_complete_mask
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
533 .req_complete_val
= TPM_STS_DATA_AVAIL
| TPM_STS_VALID
,
534 .req_canceled
= tpm_tis_req_canceled
,
537 static irqreturn_t
tis_int_handler(int dummy
, void *dev_id
)
539 struct tpm_chip
*chip
= dev_id
;
543 interrupt
= ioread32(chip
->vendor
.iobase
+
544 TPM_INT_STATUS(chip
->vendor
.locality
));
549 ((struct priv_data
*)chip
->vendor
.priv
)->irq_tested
= true;
550 if (interrupt
& TPM_INTF_DATA_AVAIL_INT
)
551 wake_up_interruptible(&chip
->vendor
.read_queue
);
552 if (interrupt
& TPM_INTF_LOCALITY_CHANGE_INT
)
553 for (i
= 0; i
< 5; i
++)
554 if (check_locality(chip
, i
) >= 0)
557 (TPM_INTF_LOCALITY_CHANGE_INT
| TPM_INTF_STS_VALID_INT
|
558 TPM_INTF_CMD_READY_INT
))
559 wake_up_interruptible(&chip
->vendor
.int_queue
);
561 /* Clear interrupts handled with TPM_EOI */
563 chip
->vendor
.iobase
+
564 TPM_INT_STATUS(chip
->vendor
.locality
));
565 ioread32(chip
->vendor
.iobase
+ TPM_INT_STATUS(chip
->vendor
.locality
));
569 /* Register the IRQ and issue a command that will cause an interrupt. If an
570 * irq is seen then leave the chip setup for IRQ operation, otherwise reverse
571 * everything and leave in polling mode. Returns 0 on success.
573 static int tpm_tis_probe_irq_single(struct tpm_chip
*chip
, u32 intmask
,
576 struct priv_data
*priv
= chip
->vendor
.priv
;
579 if (devm_request_irq(chip
->pdev
, irq
, tis_int_handler
, flags
,
580 chip
->devname
, chip
) != 0) {
581 dev_info(chip
->pdev
, "Unable to request irq: %d for probe\n",
585 chip
->vendor
.irq
= irq
;
587 original_int_vec
= ioread8(chip
->vendor
.iobase
+
588 TPM_INT_VECTOR(chip
->vendor
.locality
));
590 chip
->vendor
.iobase
+ TPM_INT_VECTOR(chip
->vendor
.locality
));
592 /* Clear all existing */
593 iowrite32(ioread32(chip
->vendor
.iobase
+
594 TPM_INT_STATUS(chip
->vendor
.locality
)),
595 chip
->vendor
.iobase
+ TPM_INT_STATUS(chip
->vendor
.locality
));
598 iowrite32(intmask
| TPM_GLOBAL_INT_ENABLE
,
599 chip
->vendor
.iobase
+ TPM_INT_ENABLE(chip
->vendor
.locality
));
601 priv
->irq_tested
= false;
603 /* Generate an interrupt by having the core call through to
606 if (chip
->flags
& TPM_CHIP_FLAG_TPM2
)
607 tpm2_gen_interrupt(chip
);
609 tpm_gen_interrupt(chip
);
611 /* tpm_tis_send will either confirm the interrupt is working or it
612 * will call disable_irq which undoes all of the above.
614 if (!chip
->vendor
.irq
) {
615 iowrite8(original_int_vec
,
616 chip
->vendor
.iobase
+
617 TPM_INT_VECTOR(chip
->vendor
.locality
));
624 /* Try to find the IRQ the TPM is using. This is for legacy x86 systems that
625 * do not have ACPI/etc. We typically expect the interrupt to be declared if
628 static void tpm_tis_probe_irq(struct tpm_chip
*chip
, u32 intmask
)
633 original_int_vec
= ioread8(chip
->vendor
.iobase
+
634 TPM_INT_VECTOR(chip
->vendor
.locality
));
636 if (!original_int_vec
) {
637 if (IS_ENABLED(CONFIG_X86
))
638 for (i
= 3; i
<= 15; i
++)
639 if (!tpm_tis_probe_irq_single(chip
, intmask
, 0,
642 } else if (!tpm_tis_probe_irq_single(chip
, intmask
, 0,
647 static bool interrupts
= true;
648 module_param(interrupts
, bool, 0444);
649 MODULE_PARM_DESC(interrupts
, "Enable interrupts");
651 static void tpm_tis_remove(struct tpm_chip
*chip
)
653 if (chip
->flags
& TPM_CHIP_FLAG_TPM2
)
654 tpm2_shutdown(chip
, TPM2_SU_CLEAR
);
656 iowrite32(~TPM_GLOBAL_INT_ENABLE
&
657 ioread32(chip
->vendor
.iobase
+
658 TPM_INT_ENABLE(chip
->vendor
.
660 chip
->vendor
.iobase
+
661 TPM_INT_ENABLE(chip
->vendor
.locality
));
662 release_locality(chip
, chip
->vendor
.locality
, 1);
665 static int tpm_tis_init(struct device
*dev
, struct tpm_info
*tpm_info
,
666 acpi_handle acpi_dev_handle
)
668 u32 vendor
, intfcaps
, intmask
;
670 struct tpm_chip
*chip
;
671 struct priv_data
*priv
;
673 priv
= devm_kzalloc(dev
, sizeof(struct priv_data
), GFP_KERNEL
);
677 chip
= tpmm_chip_alloc(dev
, &tpm_tis
);
679 return PTR_ERR(chip
);
681 chip
->vendor
.priv
= priv
;
683 chip
->acpi_dev_handle
= acpi_dev_handle
;
686 chip
->vendor
.iobase
= devm_ioremap_resource(dev
, &tpm_info
->res
);
687 if (IS_ERR(chip
->vendor
.iobase
))
688 return PTR_ERR(chip
->vendor
.iobase
);
690 /* Maximum timeouts */
691 chip
->vendor
.timeout_a
= TIS_TIMEOUT_A_MAX
;
692 chip
->vendor
.timeout_b
= TIS_TIMEOUT_B_MAX
;
693 chip
->vendor
.timeout_c
= TIS_TIMEOUT_C_MAX
;
694 chip
->vendor
.timeout_d
= TIS_TIMEOUT_D_MAX
;
696 if (wait_startup(chip
, 0) != 0) {
701 /* Take control of the TPM's interrupt hardware and shut it off */
702 intmask
= ioread32(chip
->vendor
.iobase
+
703 TPM_INT_ENABLE(chip
->vendor
.locality
));
704 intmask
|= TPM_INTF_CMD_READY_INT
| TPM_INTF_LOCALITY_CHANGE_INT
|
705 TPM_INTF_DATA_AVAIL_INT
| TPM_INTF_STS_VALID_INT
;
706 intmask
&= ~TPM_GLOBAL_INT_ENABLE
;
708 chip
->vendor
.iobase
+ TPM_INT_ENABLE(chip
->vendor
.locality
));
710 if (request_locality(chip
, 0) != 0) {
715 rc
= tpm2_probe(chip
);
719 vendor
= ioread32(chip
->vendor
.iobase
+ TPM_DID_VID(0));
720 chip
->vendor
.manufacturer_id
= vendor
;
722 dev_info(dev
, "%s TPM (device-id 0x%X, rev-id %d)\n",
723 (chip
->flags
& TPM_CHIP_FLAG_TPM2
) ? "2.0" : "1.2",
724 vendor
>> 16, ioread8(chip
->vendor
.iobase
+ TPM_RID(0)));
727 probe
= probe_itpm(chip
);
736 dev_info(dev
, "Intel iTPM workaround enabled\n");
739 /* Figure out the capabilities */
741 ioread32(chip
->vendor
.iobase
+
742 TPM_INTF_CAPS(chip
->vendor
.locality
));
743 dev_dbg(dev
, "TPM interface capabilities (0x%x):\n",
745 if (intfcaps
& TPM_INTF_BURST_COUNT_STATIC
)
746 dev_dbg(dev
, "\tBurst Count Static\n");
747 if (intfcaps
& TPM_INTF_CMD_READY_INT
)
748 dev_dbg(dev
, "\tCommand Ready Int Support\n");
749 if (intfcaps
& TPM_INTF_INT_EDGE_FALLING
)
750 dev_dbg(dev
, "\tInterrupt Edge Falling\n");
751 if (intfcaps
& TPM_INTF_INT_EDGE_RISING
)
752 dev_dbg(dev
, "\tInterrupt Edge Rising\n");
753 if (intfcaps
& TPM_INTF_INT_LEVEL_LOW
)
754 dev_dbg(dev
, "\tInterrupt Level Low\n");
755 if (intfcaps
& TPM_INTF_INT_LEVEL_HIGH
)
756 dev_dbg(dev
, "\tInterrupt Level High\n");
757 if (intfcaps
& TPM_INTF_LOCALITY_CHANGE_INT
)
758 dev_dbg(dev
, "\tLocality Change Int Support\n");
759 if (intfcaps
& TPM_INTF_STS_VALID_INT
)
760 dev_dbg(dev
, "\tSts Valid Int Support\n");
761 if (intfcaps
& TPM_INTF_DATA_AVAIL_INT
)
762 dev_dbg(dev
, "\tData Avail Int Support\n");
764 /* Very early on issue a command to the TPM in polling mode to make
765 * sure it works. May as well use that command to set the proper
766 * timeouts for the driver.
768 if (tpm_get_timeouts(chip
)) {
769 dev_err(dev
, "Could not get TPM timeouts and durations\n");
774 /* INTERRUPT Setup */
775 init_waitqueue_head(&chip
->vendor
.read_queue
);
776 init_waitqueue_head(&chip
->vendor
.int_queue
);
777 if (interrupts
&& tpm_info
->irq
!= -1) {
779 tpm_tis_probe_irq_single(chip
, intmask
, IRQF_SHARED
,
781 if (!chip
->vendor
.irq
)
782 dev_err(chip
->pdev
, FW_BUG
783 "TPM interrupt not working, polling instead\n");
785 tpm_tis_probe_irq(chip
, intmask
);
788 if (chip
->flags
& TPM_CHIP_FLAG_TPM2
) {
789 rc
= tpm2_do_selftest(chip
);
790 if (rc
== TPM2_RC_INITIALIZE
) {
791 dev_warn(dev
, "Firmware has not started TPM\n");
792 rc
= tpm2_startup(chip
, TPM2_SU_CLEAR
);
794 rc
= tpm2_do_selftest(chip
);
798 dev_err(dev
, "TPM self test failed\n");
804 if (tpm_do_selftest(chip
)) {
805 dev_err(dev
, "TPM self test failed\n");
811 return tpm_chip_register(chip
);
813 tpm_tis_remove(chip
);
817 #ifdef CONFIG_PM_SLEEP
818 static void tpm_tis_reenable_interrupts(struct tpm_chip
*chip
)
822 /* reenable interrupts that device may have lost or
823 BIOS/firmware may have disabled */
824 iowrite8(chip
->vendor
.irq
, chip
->vendor
.iobase
+
825 TPM_INT_VECTOR(chip
->vendor
.locality
));
828 ioread32(chip
->vendor
.iobase
+
829 TPM_INT_ENABLE(chip
->vendor
.locality
));
831 intmask
|= TPM_INTF_CMD_READY_INT
832 | TPM_INTF_LOCALITY_CHANGE_INT
| TPM_INTF_DATA_AVAIL_INT
833 | TPM_INTF_STS_VALID_INT
| TPM_GLOBAL_INT_ENABLE
;
836 chip
->vendor
.iobase
+ TPM_INT_ENABLE(chip
->vendor
.locality
));
839 static int tpm_tis_resume(struct device
*dev
)
841 struct tpm_chip
*chip
= dev_get_drvdata(dev
);
844 if (chip
->vendor
.irq
)
845 tpm_tis_reenable_interrupts(chip
);
847 ret
= tpm_pm_resume(dev
);
851 /* TPM 1.2 requires self-test on resume. This function actually returns
852 * an error code but for unknown reason it isn't handled.
854 if (!(chip
->flags
& TPM_CHIP_FLAG_TPM2
))
855 tpm_do_selftest(chip
);
861 static SIMPLE_DEV_PM_OPS(tpm_tis_pm
, tpm_pm_suspend
, tpm_tis_resume
);
863 static int tpm_tis_pnp_init(struct pnp_dev
*pnp_dev
,
864 const struct pnp_device_id
*pnp_id
)
866 struct tpm_info tpm_info
= {};
867 acpi_handle acpi_dev_handle
= NULL
;
868 struct resource
*res
;
870 res
= pnp_get_resource(pnp_dev
, IORESOURCE_MEM
, 0);
875 if (pnp_irq_valid(pnp_dev
, 0))
876 tpm_info
.irq
= pnp_irq(pnp_dev
, 0);
880 if (pnp_acpi_device(pnp_dev
)) {
881 if (is_itpm(pnp_acpi_device(pnp_dev
)))
884 acpi_dev_handle
= ACPI_HANDLE(&pnp_dev
->dev
);
887 return tpm_tis_init(&pnp_dev
->dev
, &tpm_info
, acpi_dev_handle
);
890 static struct pnp_device_id tpm_pnp_tbl
[] = {
891 {"PNP0C31", 0}, /* TPM */
892 {"ATM1200", 0}, /* Atmel */
893 {"IFX0102", 0}, /* Infineon */
894 {"BCM0101", 0}, /* Broadcom */
895 {"BCM0102", 0}, /* Broadcom */
896 {"NSC1200", 0}, /* National */
897 {"ICO0102", 0}, /* Intel */
899 {"", 0}, /* User Specified */
900 {"", 0} /* Terminator */
902 MODULE_DEVICE_TABLE(pnp
, tpm_pnp_tbl
);
904 static void tpm_tis_pnp_remove(struct pnp_dev
*dev
)
906 struct tpm_chip
*chip
= pnp_get_drvdata(dev
);
908 tpm_chip_unregister(chip
);
909 tpm_tis_remove(chip
);
912 static struct pnp_driver tis_pnp_driver
= {
914 .id_table
= tpm_pnp_tbl
,
915 .probe
= tpm_tis_pnp_init
,
916 .remove
= tpm_tis_pnp_remove
,
922 #define TIS_HID_USR_IDX sizeof(tpm_pnp_tbl)/sizeof(struct pnp_device_id) -2
923 module_param_string(hid
, tpm_pnp_tbl
[TIS_HID_USR_IDX
].id
,
924 sizeof(tpm_pnp_tbl
[TIS_HID_USR_IDX
].id
), 0444);
925 MODULE_PARM_DESC(hid
, "Set additional specific HID for this driver to probe");
928 static int tpm_check_resource(struct acpi_resource
*ares
, void *data
)
930 struct tpm_info
*tpm_info
= (struct tpm_info
*) data
;
933 if (acpi_dev_resource_interrupt(ares
, 0, &res
))
934 tpm_info
->irq
= res
.start
;
935 else if (acpi_dev_resource_memory(ares
, &res
)) {
937 tpm_info
->res
.name
= NULL
;
943 static int tpm_tis_acpi_init(struct acpi_device
*acpi_dev
)
945 struct acpi_table_tpm2
*tbl
;
947 struct list_head resources
;
948 struct tpm_info tpm_info
= {};
951 st
= acpi_get_table(ACPI_SIG_TPM2
, 1,
952 (struct acpi_table_header
**) &tbl
);
953 if (ACPI_FAILURE(st
) || tbl
->header
.length
< sizeof(*tbl
)) {
954 dev_err(&acpi_dev
->dev
,
955 FW_BUG
"failed to get TPM2 ACPI table\n");
959 if (tbl
->start_method
!= ACPI_TPM2_MEMORY_MAPPED
)
962 INIT_LIST_HEAD(&resources
);
964 ret
= acpi_dev_get_resources(acpi_dev
, &resources
, tpm_check_resource
,
969 acpi_dev_free_resource_list(&resources
);
971 if (resource_type(&tpm_info
.res
) != IORESOURCE_MEM
) {
972 dev_err(&acpi_dev
->dev
,
973 FW_BUG
"TPM2 ACPI table does not define a memory resource\n");
977 if (is_itpm(acpi_dev
))
980 return tpm_tis_init(&acpi_dev
->dev
, &tpm_info
, acpi_dev
->handle
);
983 static int tpm_tis_acpi_remove(struct acpi_device
*dev
)
985 struct tpm_chip
*chip
= dev_get_drvdata(&dev
->dev
);
987 tpm_chip_unregister(chip
);
988 tpm_tis_remove(chip
);
993 static struct acpi_device_id tpm_acpi_tbl
[] = {
994 {"MSFT0101", 0}, /* TPM 2.0 */
996 {"", 0}, /* User Specified */
997 {"", 0} /* Terminator */
999 MODULE_DEVICE_TABLE(acpi
, tpm_acpi_tbl
);
1001 static struct acpi_driver tis_acpi_driver
= {
1003 .ids
= tpm_acpi_tbl
,
1005 .add
= tpm_tis_acpi_init
,
1006 .remove
= tpm_tis_acpi_remove
,
1014 static struct platform_device
*force_pdev
;
1016 static int tpm_tis_plat_probe(struct platform_device
*pdev
)
1018 struct tpm_info tpm_info
= {};
1019 struct resource
*res
;
1021 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1023 dev_err(&pdev
->dev
, "no memory resource defined\n");
1026 tpm_info
.res
= *res
;
1028 res
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
1030 tpm_info
.irq
= res
->start
;
1032 if (pdev
== force_pdev
)
1035 /* When forcing auto probe the IRQ */
1039 return tpm_tis_init(&pdev
->dev
, &tpm_info
, NULL
);
1042 static int tpm_tis_plat_remove(struct platform_device
*pdev
)
1044 struct tpm_chip
*chip
= dev_get_drvdata(&pdev
->dev
);
1046 tpm_chip_unregister(chip
);
1047 tpm_tis_remove(chip
);
1052 static struct platform_driver tis_drv
= {
1053 .probe
= tpm_tis_plat_probe
,
1054 .remove
= tpm_tis_plat_remove
,
1063 module_param(force
, bool, 0444);
1064 MODULE_PARM_DESC(force
, "Force device probe rather than using ACPI entry");
1067 static int tpm_tis_force_device(void)
1069 struct platform_device
*pdev
;
1070 static const struct resource x86_resources
[] = {
1072 .start
= 0xFED40000,
1073 .end
= 0xFED40000 + TIS_MEM_LEN
- 1,
1074 .flags
= IORESOURCE_MEM
,
1081 /* The driver core will match the name tpm_tis of the device to
1082 * the tpm_tis platform driver and complete the setup via
1083 * tpm_tis_plat_probe
1085 pdev
= platform_device_register_simple("tpm_tis", -1, x86_resources
,
1086 ARRAY_SIZE(x86_resources
));
1088 return PTR_ERR(pdev
);
1094 static int __init
init_tis(void)
1098 rc
= tpm_tis_force_device();
1102 rc
= platform_driver_register(&tis_drv
);
1107 rc
= acpi_bus_register_driver(&tis_acpi_driver
);
1112 if (IS_ENABLED(CONFIG_PNP
)) {
1113 rc
= pnp_register_driver(&tis_pnp_driver
);
1122 acpi_bus_unregister_driver(&tis_acpi_driver
);
1125 platform_device_unregister(force_pdev
);
1128 platform_device_unregister(force_pdev
);
1133 static void __exit
cleanup_tis(void)
1135 pnp_unregister_driver(&tis_pnp_driver
);
1137 acpi_bus_unregister_driver(&tis_acpi_driver
);
1139 platform_driver_unregister(&tis_drv
);
1142 platform_device_unregister(force_pdev
);
1145 module_init(init_tis
);
1146 module_exit(cleanup_tis
);
1147 MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
1148 MODULE_DESCRIPTION("TPM Driver");
1149 MODULE_VERSION("2.0");
1150 MODULE_LICENSE("GPL");