2ccad8a8177f84e1509ed83db5d546eb6d7af5dd
[cascardo/linux.git] / drivers / char / tpm / tpm_tis.c
1 /*
2  * Copyright (C) 2005, 2006 IBM Corporation
3  * Copyright (C) 2014, 2015 Intel Corporation
4  *
5  * Authors:
6  * Leendert van Doorn <leendert@watson.ibm.com>
7  * Kylene Hall <kjhall@us.ibm.com>
8  *
9  * Maintained by: <tpmdd-devel@lists.sourceforge.net>
10  *
11  * Device driver for TCG/TCPA TPM (trusted platform module).
12  * Specifications at www.trustedcomputinggroup.org
13  *
14  * This device driver implements the TPM interface as defined in
15  * the TCG TPM Interface Spec version 1.2, revision 1.0.
16  *
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
20  * License.
21  */
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>
31 #include "tpm.h"
32
33 enum tis_access {
34         TPM_ACCESS_VALID = 0x80,
35         TPM_ACCESS_ACTIVE_LOCALITY = 0x20,
36         TPM_ACCESS_REQUEST_PENDING = 0x04,
37         TPM_ACCESS_REQUEST_USE = 0x02,
38 };
39
40 enum tis_status {
41         TPM_STS_VALID = 0x80,
42         TPM_STS_COMMAND_READY = 0x40,
43         TPM_STS_GO = 0x20,
44         TPM_STS_DATA_AVAIL = 0x10,
45         TPM_STS_DATA_EXPECT = 0x08,
46 };
47
48 enum tis_int_flags {
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,
59 };
60
61 enum tis_defaults {
62         TIS_MEM_BASE = 0xFED40000,
63         TIS_MEM_LEN = 0x5000,
64         TIS_SHORT_TIMEOUT = 750,        /* ms */
65         TIS_LONG_TIMEOUT = 2000,        /* 2 sec */
66 };
67
68 struct tpm_info {
69         unsigned long start;
70         unsigned long len;
71         /* irq > 0 means: use irq $irq;
72          * irq = 0 means: autoprobe for an irq;
73          * irq = -1 means: no irq support
74          */
75         int irq;
76 };
77
78 static struct tpm_info tis_default_info = {
79         .start = TIS_MEM_BASE,
80         .len = TIS_MEM_LEN,
81         .irq = 0,
82 };
83
84 /* Some timeout values are needed before it is known whether the chip is
85  * TPM 1.0 or TPM 2.0.
86  */
87 #define TIS_TIMEOUT_A_MAX       max(TIS_SHORT_TIMEOUT, TPM2_TIMEOUT_A)
88 #define TIS_TIMEOUT_B_MAX       max(TIS_LONG_TIMEOUT, TPM2_TIMEOUT_B)
89 #define TIS_TIMEOUT_C_MAX       max(TIS_SHORT_TIMEOUT, TPM2_TIMEOUT_C)
90 #define TIS_TIMEOUT_D_MAX       max(TIS_SHORT_TIMEOUT, TPM2_TIMEOUT_D)
91
92 #define TPM_ACCESS(l)                   (0x0000 | ((l) << 12))
93 #define TPM_INT_ENABLE(l)               (0x0008 | ((l) << 12))
94 #define TPM_INT_VECTOR(l)               (0x000C | ((l) << 12))
95 #define TPM_INT_STATUS(l)               (0x0010 | ((l) << 12))
96 #define TPM_INTF_CAPS(l)                (0x0014 | ((l) << 12))
97 #define TPM_STS(l)                      (0x0018 | ((l) << 12))
98 #define TPM_STS3(l)                     (0x001b | ((l) << 12))
99 #define TPM_DATA_FIFO(l)                (0x0024 | ((l) << 12))
100
101 #define TPM_DID_VID(l)                  (0x0F00 | ((l) << 12))
102 #define TPM_RID(l)                      (0x0F04 | ((l) << 12))
103
104 struct priv_data {
105         bool irq_tested;
106 };
107
108 #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
109 static int has_hid(struct acpi_device *dev, const char *hid)
110 {
111         struct acpi_hardware_id *id;
112
113         list_for_each_entry(id, &dev->pnp.ids, list)
114                 if (!strcmp(hid, id->id))
115                         return 1;
116
117         return 0;
118 }
119
120 static inline int is_itpm(struct acpi_device *dev)
121 {
122         return has_hid(dev, "INTC0102");
123 }
124 #else
125 static inline int is_itpm(struct acpi_device *dev)
126 {
127         return 0;
128 }
129 #endif
130
131 /* Before we attempt to access the TPM we must see that the valid bit is set.
132  * The specification says that this bit is 0 at reset and remains 0 until the
133  * 'TPM has gone through its self test and initialization and has established
134  * correct values in the other bits.' */
135 static int wait_startup(struct tpm_chip *chip, int l)
136 {
137         unsigned long stop = jiffies + chip->vendor.timeout_a;
138         do {
139                 if (ioread8(chip->vendor.iobase + TPM_ACCESS(l)) &
140                     TPM_ACCESS_VALID)
141                         return 0;
142                 msleep(TPM_TIMEOUT);
143         } while (time_before(jiffies, stop));
144         return -1;
145 }
146
147 static int check_locality(struct tpm_chip *chip, int l)
148 {
149         if ((ioread8(chip->vendor.iobase + TPM_ACCESS(l)) &
150              (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
151             (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID))
152                 return chip->vendor.locality = l;
153
154         return -1;
155 }
156
157 static void release_locality(struct tpm_chip *chip, int l, int force)
158 {
159         if (force || (ioread8(chip->vendor.iobase + TPM_ACCESS(l)) &
160                       (TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID)) ==
161             (TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID))
162                 iowrite8(TPM_ACCESS_ACTIVE_LOCALITY,
163                          chip->vendor.iobase + TPM_ACCESS(l));
164 }
165
166 static int request_locality(struct tpm_chip *chip, int l)
167 {
168         unsigned long stop, timeout;
169         long rc;
170
171         if (check_locality(chip, l) >= 0)
172                 return l;
173
174         iowrite8(TPM_ACCESS_REQUEST_USE,
175                  chip->vendor.iobase + TPM_ACCESS(l));
176
177         stop = jiffies + chip->vendor.timeout_a;
178
179         if (chip->vendor.irq) {
180 again:
181                 timeout = stop - jiffies;
182                 if ((long)timeout <= 0)
183                         return -1;
184                 rc = wait_event_interruptible_timeout(chip->vendor.int_queue,
185                                                       (check_locality
186                                                        (chip, l) >= 0),
187                                                       timeout);
188                 if (rc > 0)
189                         return l;
190                 if (rc == -ERESTARTSYS && freezing(current)) {
191                         clear_thread_flag(TIF_SIGPENDING);
192                         goto again;
193                 }
194         } else {
195                 /* wait for burstcount */
196                 do {
197                         if (check_locality(chip, l) >= 0)
198                                 return l;
199                         msleep(TPM_TIMEOUT);
200                 }
201                 while (time_before(jiffies, stop));
202         }
203         return -1;
204 }
205
206 static u8 tpm_tis_status(struct tpm_chip *chip)
207 {
208         return ioread8(chip->vendor.iobase +
209                        TPM_STS(chip->vendor.locality));
210 }
211
212 static void tpm_tis_ready(struct tpm_chip *chip)
213 {
214         /* this causes the current command to be aborted */
215         iowrite8(TPM_STS_COMMAND_READY,
216                  chip->vendor.iobase + TPM_STS(chip->vendor.locality));
217 }
218
219 static int get_burstcount(struct tpm_chip *chip)
220 {
221         unsigned long stop;
222         int burstcnt;
223
224         /* wait for burstcount */
225         /* which timeout value, spec has 2 answers (c & d) */
226         stop = jiffies + chip->vendor.timeout_d;
227         do {
228                 burstcnt = ioread8(chip->vendor.iobase +
229                                    TPM_STS(chip->vendor.locality) + 1);
230                 burstcnt += ioread8(chip->vendor.iobase +
231                                     TPM_STS(chip->vendor.locality) +
232                                     2) << 8;
233                 if (burstcnt)
234                         return burstcnt;
235                 msleep(TPM_TIMEOUT);
236         } while (time_before(jiffies, stop));
237         return -EBUSY;
238 }
239
240 static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
241 {
242         int size = 0, burstcnt;
243         while (size < count &&
244                wait_for_tpm_stat(chip,
245                                  TPM_STS_DATA_AVAIL | TPM_STS_VALID,
246                                  chip->vendor.timeout_c,
247                                  &chip->vendor.read_queue, true)
248                == 0) {
249                 burstcnt = get_burstcount(chip);
250                 for (; burstcnt > 0 && size < count; burstcnt--)
251                         buf[size++] = ioread8(chip->vendor.iobase +
252                                               TPM_DATA_FIFO(chip->vendor.
253                                                             locality));
254         }
255         return size;
256 }
257
258 static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
259 {
260         int size = 0;
261         int expected, status;
262
263         if (count < TPM_HEADER_SIZE) {
264                 size = -EIO;
265                 goto out;
266         }
267
268         /* read first 10 bytes, including tag, paramsize, and result */
269         if ((size =
270              recv_data(chip, buf, TPM_HEADER_SIZE)) < TPM_HEADER_SIZE) {
271                 dev_err(chip->pdev, "Unable to read header\n");
272                 goto out;
273         }
274
275         expected = be32_to_cpu(*(__be32 *) (buf + 2));
276         if (expected > count) {
277                 size = -EIO;
278                 goto out;
279         }
280
281         if ((size +=
282              recv_data(chip, &buf[TPM_HEADER_SIZE],
283                        expected - TPM_HEADER_SIZE)) < expected) {
284                 dev_err(chip->pdev, "Unable to read remainder of result\n");
285                 size = -ETIME;
286                 goto out;
287         }
288
289         wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
290                           &chip->vendor.int_queue, false);
291         status = tpm_tis_status(chip);
292         if (status & TPM_STS_DATA_AVAIL) {      /* retry? */
293                 dev_err(chip->pdev, "Error left over data\n");
294                 size = -EIO;
295                 goto out;
296         }
297
298 out:
299         tpm_tis_ready(chip);
300         release_locality(chip, chip->vendor.locality, 0);
301         return size;
302 }
303
304 static bool itpm;
305 module_param(itpm, bool, 0444);
306 MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)");
307
308 /*
309  * If interrupts are used (signaled by an irq set in the vendor structure)
310  * tpm.c can skip polling for the data to be available as the interrupt is
311  * waited for here
312  */
313 static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
314 {
315         int rc, status, burstcnt;
316         size_t count = 0;
317
318         if (request_locality(chip, 0) < 0)
319                 return -EBUSY;
320
321         status = tpm_tis_status(chip);
322         if ((status & TPM_STS_COMMAND_READY) == 0) {
323                 tpm_tis_ready(chip);
324                 if (wait_for_tpm_stat
325                     (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
326                      &chip->vendor.int_queue, false) < 0) {
327                         rc = -ETIME;
328                         goto out_err;
329                 }
330         }
331
332         while (count < len - 1) {
333                 burstcnt = get_burstcount(chip);
334                 for (; burstcnt > 0 && count < len - 1; burstcnt--) {
335                         iowrite8(buf[count], chip->vendor.iobase +
336                                  TPM_DATA_FIFO(chip->vendor.locality));
337                         count++;
338                 }
339
340                 wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
341                                   &chip->vendor.int_queue, false);
342                 status = tpm_tis_status(chip);
343                 if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
344                         rc = -EIO;
345                         goto out_err;
346                 }
347         }
348
349         /* write last byte */
350         iowrite8(buf[count],
351                  chip->vendor.iobase + TPM_DATA_FIFO(chip->vendor.locality));
352         wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
353                           &chip->vendor.int_queue, false);
354         status = tpm_tis_status(chip);
355         if ((status & TPM_STS_DATA_EXPECT) != 0) {
356                 rc = -EIO;
357                 goto out_err;
358         }
359
360         return 0;
361
362 out_err:
363         tpm_tis_ready(chip);
364         release_locality(chip, chip->vendor.locality, 0);
365         return rc;
366 }
367
368 static void disable_interrupts(struct tpm_chip *chip)
369 {
370         u32 intmask;
371
372         intmask =
373             ioread32(chip->vendor.iobase +
374                      TPM_INT_ENABLE(chip->vendor.locality));
375         intmask &= ~TPM_GLOBAL_INT_ENABLE;
376         iowrite32(intmask,
377                   chip->vendor.iobase +
378                   TPM_INT_ENABLE(chip->vendor.locality));
379         devm_free_irq(chip->pdev, chip->vendor.irq, chip);
380         chip->vendor.irq = 0;
381 }
382
383 /*
384  * If interrupts are used (signaled by an irq set in the vendor structure)
385  * tpm.c can skip polling for the data to be available as the interrupt is
386  * waited for here
387  */
388 static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
389 {
390         int rc;
391         u32 ordinal;
392         unsigned long dur;
393
394         rc = tpm_tis_send_data(chip, buf, len);
395         if (rc < 0)
396                 return rc;
397
398         /* go and do it */
399         iowrite8(TPM_STS_GO,
400                  chip->vendor.iobase + TPM_STS(chip->vendor.locality));
401
402         if (chip->vendor.irq) {
403                 ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
404
405                 if (chip->flags & TPM_CHIP_FLAG_TPM2)
406                         dur = tpm2_calc_ordinal_duration(chip, ordinal);
407                 else
408                         dur = tpm_calc_ordinal_duration(chip, ordinal);
409
410                 if (wait_for_tpm_stat
411                     (chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID, dur,
412                      &chip->vendor.read_queue, false) < 0) {
413                         rc = -ETIME;
414                         goto out_err;
415                 }
416         }
417         return len;
418 out_err:
419         tpm_tis_ready(chip);
420         release_locality(chip, chip->vendor.locality, 0);
421         return rc;
422 }
423
424 static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
425 {
426         int rc, irq;
427         struct priv_data *priv = chip->vendor.priv;
428
429         if (!chip->vendor.irq || priv->irq_tested)
430                 return tpm_tis_send_main(chip, buf, len);
431
432         /* Verify receipt of the expected IRQ */
433         irq = chip->vendor.irq;
434         chip->vendor.irq = 0;
435         rc = tpm_tis_send_main(chip, buf, len);
436         chip->vendor.irq = irq;
437         if (!priv->irq_tested)
438                 msleep(1);
439         if (!priv->irq_tested)
440                 disable_interrupts(chip);
441         priv->irq_tested = true;
442         return rc;
443 }
444
445 struct tis_vendor_timeout_override {
446         u32 did_vid;
447         unsigned long timeout_us[4];
448 };
449
450 static const struct tis_vendor_timeout_override vendor_timeout_overrides[] = {
451         /* Atmel 3204 */
452         { 0x32041114, { (TIS_SHORT_TIMEOUT*1000), (TIS_LONG_TIMEOUT*1000),
453                         (TIS_SHORT_TIMEOUT*1000), (TIS_SHORT_TIMEOUT*1000) } },
454 };
455
456 static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
457                                     unsigned long *timeout_cap)
458 {
459         int i;
460         u32 did_vid;
461
462         did_vid = ioread32(chip->vendor.iobase + TPM_DID_VID(0));
463
464         for (i = 0; i != ARRAY_SIZE(vendor_timeout_overrides); i++) {
465                 if (vendor_timeout_overrides[i].did_vid != did_vid)
466                         continue;
467                 memcpy(timeout_cap, vendor_timeout_overrides[i].timeout_us,
468                        sizeof(vendor_timeout_overrides[i].timeout_us));
469                 return true;
470         }
471
472         return false;
473 }
474
475 /*
476  * Early probing for iTPM with STS_DATA_EXPECT flaw.
477  * Try sending command without itpm flag set and if that
478  * fails, repeat with itpm flag set.
479  */
480 static int probe_itpm(struct tpm_chip *chip)
481 {
482         int rc = 0;
483         u8 cmd_getticks[] = {
484                 0x00, 0xc1, 0x00, 0x00, 0x00, 0x0a,
485                 0x00, 0x00, 0x00, 0xf1
486         };
487         size_t len = sizeof(cmd_getticks);
488         bool rem_itpm = itpm;
489         u16 vendor = ioread16(chip->vendor.iobase + TPM_DID_VID(0));
490
491         /* probe only iTPMS */
492         if (vendor != TPM_VID_INTEL)
493                 return 0;
494
495         itpm = false;
496
497         rc = tpm_tis_send_data(chip, cmd_getticks, len);
498         if (rc == 0)
499                 goto out;
500
501         tpm_tis_ready(chip);
502         release_locality(chip, chip->vendor.locality, 0);
503
504         itpm = true;
505
506         rc = tpm_tis_send_data(chip, cmd_getticks, len);
507         if (rc == 0) {
508                 dev_info(chip->pdev, "Detected an iTPM.\n");
509                 rc = 1;
510         } else
511                 rc = -EFAULT;
512
513 out:
514         itpm = rem_itpm;
515         tpm_tis_ready(chip);
516         release_locality(chip, chip->vendor.locality, 0);
517
518         return rc;
519 }
520
521 static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status)
522 {
523         switch (chip->vendor.manufacturer_id) {
524         case TPM_VID_WINBOND:
525                 return ((status == TPM_STS_VALID) ||
526                         (status == (TPM_STS_VALID | TPM_STS_COMMAND_READY)));
527         case TPM_VID_STM:
528                 return (status == (TPM_STS_VALID | TPM_STS_COMMAND_READY));
529         default:
530                 return (status == TPM_STS_COMMAND_READY);
531         }
532 }
533
534 static const struct tpm_class_ops tpm_tis = {
535         .status = tpm_tis_status,
536         .recv = tpm_tis_recv,
537         .send = tpm_tis_send,
538         .cancel = tpm_tis_ready,
539         .update_timeouts = tpm_tis_update_timeouts,
540         .req_complete_mask = TPM_STS_DATA_AVAIL | TPM_STS_VALID,
541         .req_complete_val = TPM_STS_DATA_AVAIL | TPM_STS_VALID,
542         .req_canceled = tpm_tis_req_canceled,
543 };
544
545 static irqreturn_t tis_int_handler(int dummy, void *dev_id)
546 {
547         struct tpm_chip *chip = dev_id;
548         u32 interrupt;
549         int i;
550
551         interrupt = ioread32(chip->vendor.iobase +
552                              TPM_INT_STATUS(chip->vendor.locality));
553
554         if (interrupt == 0)
555                 return IRQ_NONE;
556
557         ((struct priv_data *)chip->vendor.priv)->irq_tested = true;
558         if (interrupt & TPM_INTF_DATA_AVAIL_INT)
559                 wake_up_interruptible(&chip->vendor.read_queue);
560         if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
561                 for (i = 0; i < 5; i++)
562                         if (check_locality(chip, i) >= 0)
563                                 break;
564         if (interrupt &
565             (TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_STS_VALID_INT |
566              TPM_INTF_CMD_READY_INT))
567                 wake_up_interruptible(&chip->vendor.int_queue);
568
569         /* Clear interrupts handled with TPM_EOI */
570         iowrite32(interrupt,
571                   chip->vendor.iobase +
572                   TPM_INT_STATUS(chip->vendor.locality));
573         ioread32(chip->vendor.iobase + TPM_INT_STATUS(chip->vendor.locality));
574         return IRQ_HANDLED;
575 }
576
577 /* Register the IRQ and issue a command that will cause an interrupt. If an
578  * irq is seen then leave the chip setup for IRQ operation, otherwise reverse
579  * everything and leave in polling mode. Returns 0 on success.
580  */
581 static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
582                                     int flags, int irq)
583 {
584         struct priv_data *priv = chip->vendor.priv;
585         u8 original_int_vec;
586
587         if (devm_request_irq(chip->pdev, irq, tis_int_handler, flags,
588                              chip->devname, chip) != 0) {
589                 dev_info(chip->pdev, "Unable to request irq: %d for probe\n",
590                          irq);
591                 return -1;
592         }
593         chip->vendor.irq = irq;
594
595         original_int_vec = ioread8(chip->vendor.iobase +
596                                    TPM_INT_VECTOR(chip->vendor.locality));
597         iowrite8(irq,
598                  chip->vendor.iobase + TPM_INT_VECTOR(chip->vendor.locality));
599
600         /* Clear all existing */
601         iowrite32(ioread32(chip->vendor.iobase +
602                            TPM_INT_STATUS(chip->vendor.locality)),
603                   chip->vendor.iobase + TPM_INT_STATUS(chip->vendor.locality));
604
605         /* Turn on */
606         iowrite32(intmask | TPM_GLOBAL_INT_ENABLE,
607                   chip->vendor.iobase + TPM_INT_ENABLE(chip->vendor.locality));
608
609         priv->irq_tested = false;
610
611         /* Generate an interrupt by having the core call through to
612          * tpm_tis_send
613          */
614         if (chip->flags & TPM_CHIP_FLAG_TPM2)
615                 tpm2_gen_interrupt(chip);
616         else
617                 tpm_gen_interrupt(chip);
618
619         /* tpm_tis_send will either confirm the interrupt is working or it
620          * will call disable_irq which undoes all of the above.
621          */
622         if (!chip->vendor.irq) {
623                 iowrite8(original_int_vec,
624                          chip->vendor.iobase +
625                              TPM_INT_VECTOR(chip->vendor.locality));
626                 return 1;
627         }
628
629         return 0;
630 }
631
632 /* Try to find the IRQ the TPM is using. This is for legacy x86 systems that
633  * do not have ACPI/etc. We typically expect the interrupt to be declared if
634  * present.
635  */
636 static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
637 {
638         u8 original_int_vec;
639         int i;
640
641         original_int_vec = ioread8(chip->vendor.iobase +
642                                    TPM_INT_VECTOR(chip->vendor.locality));
643
644         if (!original_int_vec) {
645                 if (IS_ENABLED(CONFIG_X86))
646                         for (i = 3; i <= 15; i++)
647                                 if (!tpm_tis_probe_irq_single(chip, intmask, 0,
648                                                               i))
649                                         return;
650         } else if (!tpm_tis_probe_irq_single(chip, intmask, 0,
651                                              original_int_vec))
652                 return;
653 }
654
655 static bool interrupts = true;
656 module_param(interrupts, bool, 0444);
657 MODULE_PARM_DESC(interrupts, "Enable interrupts");
658
659 static void tpm_tis_remove(struct tpm_chip *chip)
660 {
661         if (chip->flags & TPM_CHIP_FLAG_TPM2)
662                 tpm2_shutdown(chip, TPM2_SU_CLEAR);
663
664         iowrite32(~TPM_GLOBAL_INT_ENABLE &
665                   ioread32(chip->vendor.iobase +
666                            TPM_INT_ENABLE(chip->vendor.
667                                           locality)),
668                   chip->vendor.iobase +
669                   TPM_INT_ENABLE(chip->vendor.locality));
670         release_locality(chip, chip->vendor.locality, 1);
671 }
672
673 static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
674                         acpi_handle acpi_dev_handle)
675 {
676         u32 vendor, intfcaps, intmask;
677         int rc, probe;
678         struct tpm_chip *chip;
679         struct priv_data *priv;
680
681         priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
682         if (priv == NULL)
683                 return -ENOMEM;
684
685         chip = tpmm_chip_alloc(dev, &tpm_tis);
686         if (IS_ERR(chip))
687                 return PTR_ERR(chip);
688
689         chip->vendor.priv = priv;
690 #ifdef CONFIG_ACPI
691         chip->acpi_dev_handle = acpi_dev_handle;
692 #endif
693
694         chip->vendor.iobase = devm_ioremap(dev, tpm_info->start, tpm_info->len);
695         if (!chip->vendor.iobase)
696                 return -EIO;
697
698         /* Maximum timeouts */
699         chip->vendor.timeout_a = TIS_TIMEOUT_A_MAX;
700         chip->vendor.timeout_b = TIS_TIMEOUT_B_MAX;
701         chip->vendor.timeout_c = TIS_TIMEOUT_C_MAX;
702         chip->vendor.timeout_d = TIS_TIMEOUT_D_MAX;
703
704         if (wait_startup(chip, 0) != 0) {
705                 rc = -ENODEV;
706                 goto out_err;
707         }
708
709         /* Take control of the TPM's interrupt hardware and shut it off */
710         intmask = ioread32(chip->vendor.iobase +
711                            TPM_INT_ENABLE(chip->vendor.locality));
712         intmask |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
713                    TPM_INTF_DATA_AVAIL_INT | TPM_INTF_STS_VALID_INT;
714         intmask &= ~TPM_GLOBAL_INT_ENABLE;
715         iowrite32(intmask,
716                   chip->vendor.iobase + TPM_INT_ENABLE(chip->vendor.locality));
717
718         if (request_locality(chip, 0) != 0) {
719                 rc = -ENODEV;
720                 goto out_err;
721         }
722
723         rc = tpm2_probe(chip);
724         if (rc)
725                 goto out_err;
726
727         vendor = ioread32(chip->vendor.iobase + TPM_DID_VID(0));
728         chip->vendor.manufacturer_id = vendor;
729
730         dev_info(dev, "%s TPM (device-id 0x%X, rev-id %d)\n",
731                  (chip->flags & TPM_CHIP_FLAG_TPM2) ? "2.0" : "1.2",
732                  vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0)));
733
734         if (!itpm) {
735                 probe = probe_itpm(chip);
736                 if (probe < 0) {
737                         rc = -ENODEV;
738                         goto out_err;
739                 }
740                 itpm = !!probe;
741         }
742
743         if (itpm)
744                 dev_info(dev, "Intel iTPM workaround enabled\n");
745
746
747         /* Figure out the capabilities */
748         intfcaps =
749             ioread32(chip->vendor.iobase +
750                      TPM_INTF_CAPS(chip->vendor.locality));
751         dev_dbg(dev, "TPM interface capabilities (0x%x):\n",
752                 intfcaps);
753         if (intfcaps & TPM_INTF_BURST_COUNT_STATIC)
754                 dev_dbg(dev, "\tBurst Count Static\n");
755         if (intfcaps & TPM_INTF_CMD_READY_INT)
756                 dev_dbg(dev, "\tCommand Ready Int Support\n");
757         if (intfcaps & TPM_INTF_INT_EDGE_FALLING)
758                 dev_dbg(dev, "\tInterrupt Edge Falling\n");
759         if (intfcaps & TPM_INTF_INT_EDGE_RISING)
760                 dev_dbg(dev, "\tInterrupt Edge Rising\n");
761         if (intfcaps & TPM_INTF_INT_LEVEL_LOW)
762                 dev_dbg(dev, "\tInterrupt Level Low\n");
763         if (intfcaps & TPM_INTF_INT_LEVEL_HIGH)
764                 dev_dbg(dev, "\tInterrupt Level High\n");
765         if (intfcaps & TPM_INTF_LOCALITY_CHANGE_INT)
766                 dev_dbg(dev, "\tLocality Change Int Support\n");
767         if (intfcaps & TPM_INTF_STS_VALID_INT)
768                 dev_dbg(dev, "\tSts Valid Int Support\n");
769         if (intfcaps & TPM_INTF_DATA_AVAIL_INT)
770                 dev_dbg(dev, "\tData Avail Int Support\n");
771
772         /* Very early on issue a command to the TPM in polling mode to make
773          * sure it works. May as well use that command to set the proper
774          *  timeouts for the driver.
775          */
776         if (tpm_get_timeouts(chip)) {
777                 dev_err(dev, "Could not get TPM timeouts and durations\n");
778                 rc = -ENODEV;
779                 goto out_err;
780         }
781
782         /* INTERRUPT Setup */
783         init_waitqueue_head(&chip->vendor.read_queue);
784         init_waitqueue_head(&chip->vendor.int_queue);
785         if (interrupts && tpm_info->irq != -1) {
786                 if (tpm_info->irq) {
787                         tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,
788                                                  tpm_info->irq);
789                         if (!chip->vendor.irq)
790                                 dev_err(chip->pdev, FW_BUG
791                                         "TPM interrupt not working, polling instead\n");
792                 } else
793                         tpm_tis_probe_irq(chip, intmask);
794         }
795
796         if (chip->flags & TPM_CHIP_FLAG_TPM2) {
797                 rc = tpm2_do_selftest(chip);
798                 if (rc == TPM2_RC_INITIALIZE) {
799                         dev_warn(dev, "Firmware has not started TPM\n");
800                         rc  = tpm2_startup(chip, TPM2_SU_CLEAR);
801                         if (!rc)
802                                 rc = tpm2_do_selftest(chip);
803                 }
804
805                 if (rc) {
806                         dev_err(dev, "TPM self test failed\n");
807                         if (rc > 0)
808                                 rc = -ENODEV;
809                         goto out_err;
810                 }
811         } else {
812                 if (tpm_do_selftest(chip)) {
813                         dev_err(dev, "TPM self test failed\n");
814                         rc = -ENODEV;
815                         goto out_err;
816                 }
817         }
818
819         return tpm_chip_register(chip);
820 out_err:
821         tpm_tis_remove(chip);
822         return rc;
823 }
824
825 #ifdef CONFIG_PM_SLEEP
826 static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
827 {
828         u32 intmask;
829
830         /* reenable interrupts that device may have lost or
831            BIOS/firmware may have disabled */
832         iowrite8(chip->vendor.irq, chip->vendor.iobase +
833                  TPM_INT_VECTOR(chip->vendor.locality));
834
835         intmask =
836             ioread32(chip->vendor.iobase +
837                      TPM_INT_ENABLE(chip->vendor.locality));
838
839         intmask |= TPM_INTF_CMD_READY_INT
840             | TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_DATA_AVAIL_INT
841             | TPM_INTF_STS_VALID_INT | TPM_GLOBAL_INT_ENABLE;
842
843         iowrite32(intmask,
844                   chip->vendor.iobase + TPM_INT_ENABLE(chip->vendor.locality));
845 }
846
847 static int tpm_tis_resume(struct device *dev)
848 {
849         struct tpm_chip *chip = dev_get_drvdata(dev);
850         int ret;
851
852         if (chip->vendor.irq)
853                 tpm_tis_reenable_interrupts(chip);
854
855         ret = tpm_pm_resume(dev);
856         if (ret)
857                 return ret;
858
859         /* TPM 1.2 requires self-test on resume. This function actually returns
860          * an error code but for unknown reason it isn't handled.
861          */
862         if (!(chip->flags & TPM_CHIP_FLAG_TPM2))
863                 tpm_do_selftest(chip);
864
865         return 0;
866 }
867 #endif
868
869 static SIMPLE_DEV_PM_OPS(tpm_tis_pm, tpm_pm_suspend, tpm_tis_resume);
870
871 #ifdef CONFIG_PNP
872 static int tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
873                             const struct pnp_device_id *pnp_id)
874 {
875         struct tpm_info tpm_info = {};
876         acpi_handle acpi_dev_handle = NULL;
877
878         tpm_info.start = pnp_mem_start(pnp_dev, 0);
879         tpm_info.len = pnp_mem_len(pnp_dev, 0);
880
881         if (pnp_irq_valid(pnp_dev, 0))
882                 tpm_info.irq = pnp_irq(pnp_dev, 0);
883         else
884                 tpm_info.irq = -1;
885
886 #ifdef CONFIG_ACPI
887         if (pnp_acpi_device(pnp_dev)) {
888                 if (is_itpm(pnp_acpi_device(pnp_dev)))
889                         itpm = true;
890
891                 acpi_dev_handle = pnp_acpi_device(pnp_dev)->handle;
892         }
893 #endif
894
895         return tpm_tis_init(&pnp_dev->dev, &tpm_info, acpi_dev_handle);
896 }
897
898 static struct pnp_device_id tpm_pnp_tbl[] = {
899         {"PNP0C31", 0},         /* TPM */
900         {"ATM1200", 0},         /* Atmel */
901         {"IFX0102", 0},         /* Infineon */
902         {"BCM0101", 0},         /* Broadcom */
903         {"BCM0102", 0},         /* Broadcom */
904         {"NSC1200", 0},         /* National */
905         {"ICO0102", 0},         /* Intel */
906         /* Add new here */
907         {"", 0},                /* User Specified */
908         {"", 0}                 /* Terminator */
909 };
910 MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl);
911
912 static void tpm_tis_pnp_remove(struct pnp_dev *dev)
913 {
914         struct tpm_chip *chip = pnp_get_drvdata(dev);
915
916         tpm_chip_unregister(chip);
917         tpm_tis_remove(chip);
918 }
919
920 static struct pnp_driver tis_pnp_driver = {
921         .name = "tpm_tis",
922         .id_table = tpm_pnp_tbl,
923         .probe = tpm_tis_pnp_init,
924         .remove = tpm_tis_pnp_remove,
925         .driver = {
926                 .pm = &tpm_tis_pm,
927         },
928 };
929
930 #define TIS_HID_USR_IDX sizeof(tpm_pnp_tbl)/sizeof(struct pnp_device_id) -2
931 module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id,
932                     sizeof(tpm_pnp_tbl[TIS_HID_USR_IDX].id), 0444);
933 MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe");
934 #endif
935
936 #ifdef CONFIG_ACPI
937 static int tpm_check_resource(struct acpi_resource *ares, void *data)
938 {
939         struct tpm_info *tpm_info = (struct tpm_info *) data;
940         struct resource res;
941
942         if (acpi_dev_resource_interrupt(ares, 0, &res)) {
943                 tpm_info->irq = res.start;
944         } else if (acpi_dev_resource_memory(ares, &res)) {
945                 tpm_info->start = res.start;
946                 tpm_info->len = resource_size(&res);
947         }
948
949         return 1;
950 }
951
952 static int tpm_tis_acpi_init(struct acpi_device *acpi_dev)
953 {
954         struct acpi_table_tpm2 *tbl;
955         acpi_status st;
956         struct list_head resources;
957         struct tpm_info tpm_info = {};
958         int ret;
959
960         st = acpi_get_table(ACPI_SIG_TPM2, 1,
961                             (struct acpi_table_header **) &tbl);
962         if (ACPI_FAILURE(st) || tbl->header.length < sizeof(*tbl)) {
963                 dev_err(&acpi_dev->dev,
964                         FW_BUG "failed to get TPM2 ACPI table\n");
965                 return -EINVAL;
966         }
967
968         if (tbl->start_method != ACPI_TPM2_MEMORY_MAPPED)
969                 return -ENODEV;
970
971         INIT_LIST_HEAD(&resources);
972         tpm_info.irq = -1;
973         ret = acpi_dev_get_resources(acpi_dev, &resources, tpm_check_resource,
974                                      &tpm_info);
975         if (ret < 0)
976                 return ret;
977
978         acpi_dev_free_resource_list(&resources);
979
980         if (tpm_info.start == 0 && tpm_info.len == 0) {
981                 dev_err(&acpi_dev->dev,
982                         FW_BUG "TPM2 ACPI table does not define a memory resource\n");
983                 return -EINVAL;
984         }
985
986         if (is_itpm(acpi_dev))
987                 itpm = true;
988
989         return tpm_tis_init(&acpi_dev->dev, &tpm_info, acpi_dev->handle);
990 }
991
992 static int tpm_tis_acpi_remove(struct acpi_device *dev)
993 {
994         struct tpm_chip *chip = dev_get_drvdata(&dev->dev);
995
996         tpm_chip_unregister(chip);
997         tpm_tis_remove(chip);
998
999         return 0;
1000 }
1001
1002 static struct acpi_device_id tpm_acpi_tbl[] = {
1003         {"MSFT0101", 0},        /* TPM 2.0 */
1004         /* Add new here */
1005         {"", 0},                /* User Specified */
1006         {"", 0}                 /* Terminator */
1007 };
1008 MODULE_DEVICE_TABLE(acpi, tpm_acpi_tbl);
1009
1010 static struct acpi_driver tis_acpi_driver = {
1011         .name = "tpm_tis",
1012         .ids = tpm_acpi_tbl,
1013         .ops = {
1014                 .add = tpm_tis_acpi_init,
1015                 .remove = tpm_tis_acpi_remove,
1016         },
1017         .drv = {
1018                 .pm = &tpm_tis_pm,
1019         },
1020 };
1021 #endif
1022
1023 static struct platform_driver tis_drv = {
1024         .driver = {
1025                 .name           = "tpm_tis",
1026                 .pm             = &tpm_tis_pm,
1027         },
1028 };
1029
1030 static struct platform_device *pdev;
1031
1032 static bool force;
1033 module_param(force, bool, 0444);
1034 MODULE_PARM_DESC(force, "Force device probe rather than using ACPI entry");
1035 static int __init init_tis(void)
1036 {
1037         int rc;
1038 #ifdef CONFIG_PNP
1039         if (!force) {
1040                 rc = pnp_register_driver(&tis_pnp_driver);
1041                 if (rc)
1042                         return rc;
1043         }
1044 #endif
1045 #ifdef CONFIG_ACPI
1046         if (!force) {
1047                 rc = acpi_bus_register_driver(&tis_acpi_driver);
1048                 if (rc) {
1049 #ifdef CONFIG_PNP
1050                         pnp_unregister_driver(&tis_pnp_driver);
1051 #endif
1052                         return rc;
1053                 }
1054         }
1055 #endif
1056         if (!force)
1057                 return 0;
1058
1059         rc = platform_driver_register(&tis_drv);
1060         if (rc < 0)
1061                 return rc;
1062         pdev = platform_device_register_simple("tpm_tis", -1, NULL, 0);
1063         if (IS_ERR(pdev)) {
1064                 rc = PTR_ERR(pdev);
1065                 goto err_dev;
1066         }
1067         rc = tpm_tis_init(&pdev->dev, &tis_default_info, NULL);
1068         if (rc)
1069                 goto err_init;
1070         return 0;
1071 err_init:
1072         platform_device_unregister(pdev);
1073 err_dev:
1074         platform_driver_unregister(&tis_drv);
1075         return rc;
1076 }
1077
1078 static void __exit cleanup_tis(void)
1079 {
1080         struct tpm_chip *chip;
1081 #if defined(CONFIG_PNP) || defined(CONFIG_ACPI)
1082         if (!force) {
1083 #ifdef CONFIG_ACPI
1084                 acpi_bus_unregister_driver(&tis_acpi_driver);
1085 #endif
1086 #ifdef CONFIG_PNP
1087                 pnp_unregister_driver(&tis_pnp_driver);
1088 #endif
1089                 return;
1090         }
1091 #endif
1092         chip = dev_get_drvdata(&pdev->dev);
1093         tpm_chip_unregister(chip);
1094         tpm_tis_remove(chip);
1095         platform_device_unregister(pdev);
1096         platform_driver_unregister(&tis_drv);
1097 }
1098
1099 module_init(init_tis);
1100 module_exit(cleanup_tis);
1101 MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
1102 MODULE_DESCRIPTION("TPM Driver");
1103 MODULE_VERSION("2.0");
1104 MODULE_LICENSE("GPL");