Regression between Linux 3.16 and 4.8/4.9 on Lenovo X60 with coreboot

From: Paul Menzel
Date: Tue Apr 04 2017 - 12:29:14 EST


Dear Linux folks,


Currently, TPM support is added to the coreboot project for the Lenovo X60 [1].

Unfortunately, there seems to have been a regression between Linux 3.16 and 4.8 and 4.9, so that the Linux kernel doesnât create the TPM device.

```
$ more /proc/version Linux version 3.16.0-4-686-pae (debian-kernel@xxxxxxxxxxxxxxxx) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07)
$ journalctl -k -o cat | grep -i tpm
tpm_tis 00:08: 1.2 TPM (device-id 0x3202, rev-id 5)
tpm_tis 00:08: Issuing TPM_STARTUP
```

The device `/dev/tpm0` is present.

Here are the results with Linux 4.8.15.

```
kernel: [ 0.000000] Linux version 4.8.0-0.bpo.2-686-pae (debian-kernel@xxxxxxxxxxxxxxxx) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Debian 4.8.15-2~bpo8+2 (2017-01-17)
[â]
kernel: [ 11.302522] tpm tpm0: tpm_transmit: tpm_send: error -5
kernel: [ 11.302598] tpm_tis 00:08: Could not get TPM timeouts and durations
```

Remove module and run `sudo modprobe tpm_tis itpm=1 force=1`.

```
kernel: [ 35.024386] tpm_tis tpm_tis: 1.2 TPM (device-id 0x3202, rev-id 5)
kernel: [ 49.160752] tpm_tis 00:08: can't request region for resource [mem 0xfed40000-0xfed44fff]
kernel: [ 49.160865] tpm_tis: probe of 00:08 failed with error -16
```

And here with Linux 4.9.13.

```
kernel: [ 7.813547] tpm_tis 00:08: 1.2 TPM (device-id 0x3202, rev-id 5)
kernel: [ 7.891026] tpm tpm0: Issuing TPM_STARTUP
kernel: [ 8.042783] tpm tpm0: Unable to read burstcount
kernel: [ 8.042893] tpm tpm0: tpm_transmit: tpm_send: error -16
kernel: [ 8.042900] tpm_tis 00:08: Could not get TPM timeouts and duration
```

If I am not mistaken, the error code 16 is for the macro `EBUSY`.

Itâd be great, if the TPM would also be created in the newer Linux Kernel versions, so that Debian users can upgrade to the upcoming stable release, which ships Linux 4.9.

Unfortunately, I wonât be able to bisect the commit introducing the regression. Could you please tell me how to debug, why the burstcount cannot be read.


Kind regards,

Paul


[1] https://review.coreboot.org/13410/