TPM driver breaks S3 suspend

From: Chris Chiu
Date: Thu Dec 21 2017 - 03:05:04 EST

We have a desktop which has S3 suspend (to RAM) problem due to
error messages as follows.
[ 198.908282] tpm tpm0: Error (38) sending savestate before suspend
[ 198.908289] __pnp_bus_suspend(): tpm_pm_suspend+0x0/0x160 returns 38
[ 198.908293] dpm_run_callback(): pnp_bus_suspend+0x0/0x20 returns 38
[ 198.908298] PM: Device 00:0b failed to suspend: error 38

However, the first suspend after boot is working although it still
shows an interesting message during resume.
[ 155.789945] tpm tpm0: A TPM error (38) occurred continue selftest

The error code 38 in definition is TPM_ERR_INVALID_POSTINIT. I
found some explanations which said this error code means that this
command was received in the wrong sequence relative to a TPM_Startup
command. Don't really know what happens here and how should I deal
with this? Any suggestions? Please let me know what else information
should I provide. Thanks