2010-12-20 18:10:26

by Andrew Lutomirski

[permalink] [raw]
Subject: 2.6.36.2 regression: suspend on Lenovo X200s broken due to TPM

The change "PNPACPI: cope with invalid device IDs", added in 2.6.36.2,
makes the kernel detect my TPM (it used to not work at all), but the
TPM driver doesn't work because it can't autodetect the iTPM
workaround. This breaks suspend without actually fixing my TPM.

On boot, I get:

[ 11.159923] tpm_tis 00:0a: 1.2 TPM (device-id 0x1020, rev-id 6)
[ 11.165033] tpm_tis 00:0a: tpm_transmit: tpm_send: error -5
[ 11.171020] tpm_tis 00:0a: tpm_transmit: tpm_send: error -5
[ 11.177021] tpm_tis 00:0a: tpm_transmit: tpm_send: error -5

and on suspend I get:

[ 67.918108] tpm_tis 00:0a: tpm_transmit: tpm_send: error -5
[ 67.918116] legacy_suspend(): pnp_bus_suspend+0x0/0x85 returns -5
[ 67.918120] PM: Device 00:0a failed to suspend: error -5
[ 68.174167] PM: Some devices failed to suspend

tpm_tis.itpm=1 fixes it, as does upstream commit
3f0d3d016d89a5efb8b926d4707eb21fa13f3d27 (tpm: Autodetect itpm
devices)

Greg (and mjg): can you either revert the PNPACPI fix in 2.6.36.3 or
add the upstream fix?

The offending commit is:

commit 47bbe7b5e827946c7b560b1917cd8cbdbe6d84b7
Author: Dmitry Torokhov <[email protected]>
Date: Sat Sep 18 10:11:09 2010 -0700

PNPACPI: cope with invalid device IDs

commit 420a0f66378c84b00b0e603e4d38210102dbe367 upstream.

If primary ID (HID) is invalid try locating first valid ID on compatible
ID list before giving up.

This helps, for example, to recognize i8042 AUX port on Sony Vaio VPCZ1
which uses SNYSYN0003 as HID. Without the patch users are forced to
boot with i8042.nopnp to make use of their touchpads.

Tested-by: Jan-Hendrik Zab <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
Signed-off-by: Len Brown <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

The fix is:

commit 3f0d3d016d89a5efb8b926d4707eb21fa13f3d27
Author: Matthew Garrett <[email protected]>
Date: Thu Oct 21 17:42:40 2010 -0400

tpm: Autodetect itpm devices

Some Lenovos have TPMs that require a quirk to function correctly. This can
be autodetected by checking whether the device has a _HID of INTC0102. This
is an invalid PNPid, and as such is discarded by the pnp layer - however
it's still present in the ACPI code, so we can pull it out that way. This
means that the quirk won't be automatically applied on non-ACPI systems,
but without ACPI we don't have any way to identify the chip anyway so I
don't think that's a great concern.

Signed-off-by: Matthew Garrett <[email protected]>
Acked-by: Rajiv Andrade <[email protected]>
Tested-by: Jiri Kosina <[email protected]>
Tested-by: Andy Isaacson <[email protected]>
Signed-off-by: James Morris <[email protected]>

This applies cleanly to 2.6.36.2, reports "tpm_tis 00:0a: Intel iTPM
workaround enabled" and makes my laptop suspend again.

Thanks,
Andy


2010-12-20 18:22:53

by Matthew Garrett

[permalink] [raw]
Subject: Re: 2.6.36.2 regression: suspend on Lenovo X200s broken due to TPM

On Mon, Dec 20, 2010 at 01:10:03PM -0500, Andrew Lutomirski wrote:
> The change "PNPACPI: cope with invalid device IDs", added in 2.6.36.2,
> makes the kernel detect my TPM (it used to not work at all), but the
> TPM driver doesn't work because it can't autodetect the iTPM
> workaround. This breaks suspend without actually fixing my TPM.

I hadn't realised that patch went back to stable. Greg, you'll want to
pull 3f0d3d016d89a5efb8b926d4707eb21fa13f3d27 as well.

--
Matthew Garrett | [email protected]