linux/drivers/char/tpm
Jason A. Donenfeld 1382999aa0 tpm: Allow system suspend to continue when TPM suspend fails
TPM 1 is sometimes broken across system suspends, due to races or
locking issues or something else that haven't been diagnosed or fixed
yet, most likely having to do with concurrent reads from the TPM's
hardware random number generator driver. These issues prevent the system
from actually suspending, with errors like:

  tpm tpm0: A TPM error (28) occurred continue selftest
  ...
  tpm tpm0: A TPM error (28) occurred attempting get random
  ...
  tpm tpm0: Error (28) sending savestate before suspend
  tpm_tis 00:08: PM: __pnp_bus_suspend(): tpm_pm_suspend+0x0/0x80 returns 28
  tpm_tis 00:08: PM: dpm_run_callback(): pnp_bus_suspend+0x0/0x10 returns 28
  tpm_tis 00:08: PM: failed to suspend: error 28
  PM: Some devices failed to suspend, or early wake event detected

This issue was partially fixed by 23393c6461 ("char: tpm: Protect
tpm_pm_suspend with locks"), in a last minute 6.1 commit that Linus took
directly because the TPM maintainers weren't available. However, it
seems like this just addresses the most common cases of the bug, rather
than addressing it entirely. So there are more things to fix still,
apparently.

In lieu of actually fixing the underlying bug, just allow system suspend
to continue, so that laptops still go to sleep fine. Later, this can be
reverted when the real bug is fixed.

Link: https://lore.kernel.org/lkml/7cbe96cf-e0b5-ba63-d1b4-f63d2e826efa@suse.cz/
Cc: stable@vger.kernel.org # 6.1+
Reported-by: Vlastimil Babka <vbabka@suse.cz>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Acked-by: Luigi Semenzato <semenzato@chromium.org>
Cc: Peter Huewe <peterhuewe@gmx.de>
Cc: Jarkko Sakkinen <jarkko@kernel.org>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Johannes Altmanninger <aclopte@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2023-01-06 14:25:19 -08:00
..
eventlog tpm: acpi: Call acpi_put_table() to fix memory leak 2022-12-08 16:20:47 +00:00
st33zp24 tpm: st33zp24: remove pointless checks on probe 2022-12-08 16:20:47 +00:00
Kconfig tpm: Add tpm_tis_i2c backend for tpm_tis_core 2022-08-03 23:56:20 +03:00
Makefile tpm: Add tpm_tis_i2c backend for tpm_tis_core 2022-08-03 23:56:20 +03:00
tpm1-cmd.c tpm: Add upgrade/reduced mode support for TPM1.2 modules 2022-08-03 23:56:19 +03:00
tpm2-cmd.c tpm: Add check for Failure mode for TPM2 modules 2022-08-03 23:56:20 +03:00
tpm2-space.c tpm: use try_get_ops() in tpm-space.c 2022-03-10 01:47:25 +02:00
tpm_atmel.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
tpm_atmel.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
tpm_crb.c ACPI updates for 6.2-rc1 2022-12-12 13:38:17 -08:00
tpm_ftpm_tee.c tpm/tpm_ftpm_tee: Fix error handling in ftpm_mod_init() 2022-12-08 16:20:47 +00:00
tpm_ftpm_tee.h tpm/tpm_ftpm_tee: A driver for firmware TPM running inside TEE 2019-09-02 17:08:35 +03:00
tpm_i2c_atmel.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tpm_i2c_infineon.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tpm_i2c_nuvoton.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tpm_ibmvtpm.c tpm: ibmvtpm: Correct the return value in tpm_ibmvtpm_probe() 2022-05-23 18:47:49 +03:00
tpm_ibmvtpm.h tpm: ibmvtpm: Avoid error message when process gets signal while waiting 2021-08-23 19:55:42 +03:00
tpm_infineon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
tpm_nsc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
tpm_ppi.c char: move from strlcpy with unused retval to strscpy 2022-10-05 00:25:56 +03:00
tpm_tis_core.c tpm: Add flag to use default cancellation policy 2022-12-08 16:20:47 +00:00
tpm_tis_core.h tpm: Add flag to use default cancellation policy 2022-12-08 16:20:47 +00:00
tpm_tis_i2c_cr50.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tpm_tis_i2c.c tpm: Add flag to use default cancellation policy 2022-12-08 16:20:47 +00:00
tpm_tis_spi_cr50.c tpm: Remove read16/read32/write32 calls from tpm_tis_phy_ops 2022-05-23 18:47:49 +03:00
tpm_tis_spi_main.c tpm: Remove read16/read32/write32 calls from tpm_tis_phy_ops 2022-05-23 18:47:49 +03:00
tpm_tis_spi.h tpm: Remove read16/read32/write32 calls from tpm_tis_phy_ops 2022-05-23 18:47:49 +03:00
tpm_tis_synquacer.c tpm: Remove read16/read32/write32 calls from tpm_tis_phy_ops 2022-05-23 18:47:49 +03:00
tpm_tis.c tpm: tpm_tis: Add the missed acpi_put_table() to fix memory leak 2022-12-08 16:20:47 +00:00
tpm_vtpm_proxy.c tpm: vtpm_proxy: Check length to avoid compiler warning 2022-02-27 10:58:04 -08:00
tpm-chip.c tpm: Avoid function type cast of put_device() 2022-12-08 16:20:46 +00:00
tpm-dev-common.c timers: Get rid of del_singleshot_timer_sync() 2022-11-24 15:09:10 +01:00
tpm-dev.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
tpm-dev.h tpm: Handle negative priv->response_len in tpm_common_read() 2020-01-08 18:11:09 +02:00
tpm-interface.c tpm: Allow system suspend to continue when TPM suspend fails 2023-01-06 14:25:19 -08:00
tpm-sysfs.c tpm: Add Upgrade/Reduced mode support for TPM2 modules 2022-01-09 00:18:47 +02:00
tpm.h tpm: Add upgrade/reduced mode support for TPM1.2 modules 2022-08-03 23:56:19 +03:00
tpmrm-dev.c tpm: Unify the mismatching TPM space buffer sizes 2020-07-24 09:26:23 +03:00
xen-tpmfront.c xen/tpmfront: use xenbus_setup_ring() and xenbus_teardown_ring() 2022-05-19 14:21:59 +02:00