2017-04-04 16:29:11

by Paul Menzel

[permalink] [raw]
Subject: Regression between Linux 3.16 and 4.8/4.9 on Lenovo X60 with coreboot

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
([email protected]) (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
([email protected]) (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/


2017-04-04 17:15:45

by Jason Gunthorpe

[permalink] [raw]
Subject: Re: [tpmdd-devel] Regression between Linux 3.16 and 4.8/4.9 on Lenovo X60 with coreboot

On Tue, Apr 04, 2017 at 06:29:06PM +0200, Paul Menzel wrote:

> 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.

That old kernel did not check error codes when reading burst count,
the new one does. It is quite possible the older kernel is failing to
read burst count and subtly malfunctioning.

It would be helpful if you could prove/disprove this statement by
adding some debugging to 3.16.

As to why the burst count cannot be read.. I don't know, check if
increasing the retries helps, it could be this particular TPM is out
of spec for the cold startup process.

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

Is this really an 'itpm'? It doesn't look like it..

Jason

2017-04-04 17:44:28

by Paul Menzel

[permalink] [raw]
Subject: Re: [tpmdd-devel] Regression between Linux 3.16 and 4.8/4.9 on Lenovo X60 with coreboot

Dear Jason,


Thank you for your reply.


On 2017-04-04 19:15, Jason Gunthorpe wrote:
> On Tue, Apr 04, 2017 at 06:29:06PM +0200, Paul Menzel wrote:
>
>> 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.
>
> That old kernel did not check error codes when reading burst count,
> the new one does. It is quite possible the older kernel is failing to
> read burst count and subtly malfunctioning.

GNUtoo got the messages below. Unfortunately, I don’t know, what Linux
Kernel that is.

```
tpm_tis 00:07: 1.2 TPM (device-id 0x3202, rev-id 5)
tpm tpm0: A TPM error (38) occurred attempting to determine the timeouts
tpm tpm0: Issuing TPM_STARTUP
tpm tpm0: [Hardware Error]: Adjusting reported timeouts: A
10000->10000us B 10000->10000us C 0->750000us D 0->750000us
```

> It would be helpful if you could prove/disprove this statement by
> adding some debugging to 3.16.

Could you please help me with that? Can I enable certain options to get
more debugging information?

> As to why the burst count cannot be read.. I don't know, check if
> increasing the retries helps, it could be this particular TPM is out
> of spec for the cold startup process.

How can I increase the retry count?

>> Remove module and run `sudo modprobe tpm_tis itpm=1 force=1`.
>
> Is this really an 'itpm'? It doesn't look like it..

Sorry, I don’t know. Leaving that out, gives the same messages though.

```
tpm tpm0: Unable to read burstcount
tpm tpm0: tpm_transmit: tpm_send: error -16
tpm_tis tpm_tis: Could not get TPM timeouts and durations
```


Kind regards,

Paul Menzel