Re: [PATCH] tpm: fix (ACPI S3) suspend regression

From: Rajiv Andrade
Date: Wed Jan 18 2012 - 06:21:34 EST


Thanks Stefan,

Acked-by: Rajiv Andrade <srajiv@xxxxxxxxxxxxxxxxxx>

On Tue, 17 Jan 2012, Stefan Berger wrote:

> This patch fixes an (ACPI S3) suspend regression introduced in commit
> 68d6e6713fcb2ea6278661aaaf5f1c9c821b3751 and occurring with an Infineon
> TPM and tpm_tis and tpm_infineon drivers active. Further, the suspend problem
> occurred if the TPM was disabled and/or deactivated and therefore the
> TPM_PCRRead checking the result of the (asynchronous) self test returned
> an error code which then caused the tpm_tis driver to become inactive and
> this then seemed to have negatively influenced the suspend support by the
> tpm_infineon driver...
> Besides that the tpm_tis drive may stay active even if the TPM is disabled
> and/or deactivated.
>
> Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxxxxxxxxxx>
> Tested-by: Rafael J. Wysocki <rjw@xxxxxxx>
>
> ---
> drivers/char/tpm/tpm.c | 9 +++++++++
> drivers/char/tpm/tpm.h | 3 +++
> 2 files changed, 12 insertions(+)
>
> Index: linux-2.6/drivers/char/tpm/tpm.c
> ===================================================================
> --- linux-2.6.orig/drivers/char/tpm/tpm.c
> +++ linux-2.6/drivers/char/tpm/tpm.c
> @@ -846,6 +846,15 @@ int tpm_do_selftest(struct tpm_chip *chi
>
> do {
> rc = __tpm_pcr_read(chip, 0, digest);
> + if (rc == TPM_ERR_DISABLED || rc == TPM_ERR_DEACTIVATED) {
> + dev_info(chip->dev,
> + "TPM is disabled/deactivated (0x%X)\n", rc);
> + /* TPM is disabled and/or deactivated; driver can
> + * proceed and TPM does handle commands for
> + * suspend/resume correctly
> + */
> + return 0;
> + }
> if (rc != TPM_WARN_DOING_SELFTEST)
> return rc;
> msleep(delay_msec);
> Index: linux-2.6/drivers/char/tpm/tpm.h
> ===================================================================
> --- linux-2.6.orig/drivers/char/tpm/tpm.h
> +++ linux-2.6/drivers/char/tpm/tpm.h
> @@ -39,6 +39,9 @@ enum tpm_addr {
> };
>
> #define TPM_WARN_DOING_SELFTEST 0x802
> +#define TPM_ERR_DEACTIVATED 0x6
> +#define TPM_ERR_DISABLED 0x7
> +
> #define TPM_HEADER_SIZE 10
> extern ssize_t tpm_show_pubek(struct device *, struct device_attribute *attr,
> char *);
>
>

--
Rajiv Andrade
Security Development
IBM Linux Technology Center

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/