linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chris Chiu <chiu@endlessm.com>
To: Alexander Steffen <Alexander.Steffen@infineon.com>
Cc: Peter Huewe <peterhuewe@gmx.de>,
	Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	linux-integrity@vger.kernel.org,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	Linux Upstreaming Team <linux@endlessm.com>
Subject: Re: TPM driver breaks S3 suspend
Date: Fri, 22 Dec 2017 10:05:02 +0800	[thread overview]
Message-ID: <CAB4CAwc7GiyyPt+yRcNnoO7sORVXCQ4tA=szyOW4vP11EX8vPA@mail.gmail.com> (raw)
In-Reply-To: <5dbce6c25e7e499aaac05269ba3c0f73@infineon.com>

On Thu, Dec 21, 2017 at 6:19 PM,  <Alexander.Steffen@infineon.com> wrote:
>> Hi,
>>     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
>>
>> Chris
>
> Just from looking at the code, this seems to be an issue in tpm_tis_resume.
>
> When the device is not a TPM 2.0, it tries to execute the selftests, but ignores the results. In your case the selftests fail during resume, but since the error is ignored, the TPM device is still present (though non-functional) and so breaks the subsequent suspend.
>
> In addition, from the error code we can tell that it is not actually a selftest failure. INVALID_POSTINIT for a command other than TPM_Startup means that no TPM_Startup has been executed for that power cycle yet, so the TPM has to reject all other commands. Usually, the platform sends the TPM_Startup command, but not in your case apparently.
>
> The correct solution should be something like tpm2_auto_startup (execute selftests, if they fail because of the missing startup command, execute that and retry the selftests). Interestingly, tpm1_auto_startup (same purpose as tpm2_auto_startup, but for TPM 1.2 instead) does not use the same sequence, the startup-retry part is missing. Is there any reason this is done differently for TPM 1.2? Otherwise I'd propose to make tpm1_auto_startup follow the same sequence as tpm2_auto_startup and then call both from tpm_tis_resume, similar to what tpm_chip_register does.
>
> Alexander

You mean do tpm1(or 2)_auto_startup when I fail selftest with error
code 38? Then it should retry until the TPM state back to correct
state?

Chris

  parent reply	other threads:[~2017-12-22  2:05 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-21  8:04 TPM driver breaks S3 suspend Chris Chiu
2017-12-21  9:22 ` Paul Menzel
2017-12-21  9:43   ` Chris Chiu
2017-12-24 20:35     ` Jarkko Sakkinen
2017-12-21 10:19 ` Alexander.Steffen
2017-12-21 16:17   ` Jason Gunthorpe
2017-12-22  2:05   ` Chris Chiu [this message]
2017-12-22 13:34     ` Alexander.Steffen
2017-12-24 20:37   ` Jarkko Sakkinen
2017-12-24 20:33 ` Jarkko Sakkinen
2017-12-25  2:43   ` Chris Chiu
2018-01-02 14:43     ` Jarkko Sakkinen
2018-03-15 10:11       ` Daniel Drake
2018-03-16 13:44         ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAB4CAwc7GiyyPt+yRcNnoO7sORVXCQ4tA=szyOW4vP11EX8vPA@mail.gmail.com' \
    --to=chiu@endlessm.com \
    --cc=Alexander.Steffen@infineon.com \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=jgg@ziepe.ca \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@endlessm.com \
    --cc=peterhuewe@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).