tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt()
Subsystems (3)
Jarkko Sakkinen
maintainerPATCH 1/2 tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt()
The earlier fix (linked) only partially fixed the locality handling bug in tpm_tis_gen_interrupt(), i.e. only for TPM 1.x.
Extend the locality handling to cover TPM2.
---
v1:
* Testing done with Intel NUC5i5MYHE with SLB9665 TPM2 chip.
drivers/char/tpm/tpm_tis_core.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/char/tpm/tpm_tis_core.c +4 -6
@@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)cap_t cap;int ret; -/* TPM 2.0 */ -if (chip->flags &TPM_CHIP_FLAG_TPM2 ) -return tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); - -/* TPM 1.2 */ ret =request_locality (chip,0 );if (ret <0 )return ret; - ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 ); +if (chip->flags &TPM_CHIP_FLAG_TPM2 ) + ret =tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); +else + ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 );release_locality (chip,0 );
Signature · 1 line
2.31.1
Jarkko Sakkinen
maintainerPATCH 2/2 tpm, tpm_tis: Reserve locality in tpm_tis_resume()
Reserve locality in tpm_tis_resume(), as it could be unsert after waking up from a sleep state.
---
v1:
* Testing done with Intel NUC5i5MYHE containing SLB9665 TPM 2.0 chip.
* The used test case: "echo mee | sudo tee /sys/power/state" executed without issues.
drivers/char/tpm/tpm_tis_core.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/char/tpm/tpm_tis_core.c +10 -2
@@ -1125,12 +1125,20 @@ int tpm_tis_resume(struct device *dev)if (ret)return ret; -/* TPM 1.2 requires self-test on resume. This function actually returns +/* +* TPM 1.2 requires self-test on resume. This function actually returns * an error code but for unknown reason it isn't handled. */ -if (!(chip->flags &TPM_CHIP_FLAG_TPM2 )) +if (!(chip->flags &TPM_CHIP_FLAG_TPM2 )) { + ret =request_locality (chip,0 ); +if (ret <0 ) +return ret; +tpm1_do_selftest (chip); +release_locality (chip,0 ); + } +return 0 ; }EXPORT_SYMBOL_GPL (tpm_tis_resume);
Signature · 1 line
2.31.1
Hi,
Quoted 35 lines · Jarkko Sakkinen
The earlier fix (linked) only partially fixed the locality handling bug in
tpm_tis_gen_interrupt(), i.e. only for TPM 1.x.Extend the locality handling to cover TPM2.
Cc Hans de Goede <[email protected]>Fixes a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")Reported-by Lino Sanfilippo <[email protected]>Signed-off-by Jarkko Sakkinen <[email protected]>---
v1:
* Testing done with Intel NUC5i5MYHE with SLB9665 TPM2 chip.drivers/char/tpm/tpm_tis_core.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)drivers/char/tpm/tpm_tis_core.c +0
-5@@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)cap_t cap;int ret; -/* TPM 2.0 */ -if (chip->flags &TPM_CHIP_FLAG_TPM2 ) -return tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); - -/* TPM 1.2 */ ret =request_locality (chip,0 );if (ret <0 )
drivers/char/tpm/tpm_tis_core.c static int tpm_tis_gen_interrupt(struct tpm_chip *chip) · line 722
Quoted 10 lines
drivers/char/tpm/tpm_tis_core.c +4
-1return ret; - ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 ); +if (chip->flags &TPM_CHIP_FLAG_TPM2 ) + ret =tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); +else + ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 );release_locality (chip,0 );
This fix works for me. Tested on a SLB9670vq2.0 and the warning message is gone.
Regards,
Lino
Jarkko Sakkinen
maintainerQuoted 51 lines · Lino Sanfilippo
Hi,
Quoted 35 lines · Jarkko Sakkinen
The earlier fix (linked) only partially fixed the locality handling bug in
tpm_tis_gen_interrupt(), i.e. only for TPM 1.x.Extend the locality handling to cover TPM2.
Cc Hans de Goede <[email protected]>Fixes a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")Reported-by Lino Sanfilippo <[email protected]>Signed-off-by Jarkko Sakkinen <[email protected]>---
v1:
* Testing done with Intel NUC5i5MYHE with SLB9665 TPM2 chip.drivers/char/tpm/tpm_tis_core.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)drivers/char/tpm/tpm_tis_core.c +0
-5@@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)cap_t cap;int ret; -/* TPM 2.0 */ -if (chip->flags &TPM_CHIP_FLAG_TPM2 ) -return tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); - -/* TPM 1.2 */ ret =request_locality (chip,0 );if (ret <0 )drivers/char/tpm/tpm_tis_core.c static int tpm_tis_gen_interrupt(struct tpm_chip *chip) · line 722
Quoted 10 lines
drivers/char/tpm/tpm_tis_core.c +4
-1return ret; - ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 ); +if (chip->flags &TPM_CHIP_FLAG_TPM2 ) + ret =tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); +else + ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 );release_locality (chip,0 );This fix works for me. Tested on a SLB9670vq2.0 and the warning message is gone.
Quoted 4 lines
Tested-by Lino Sanfilippo <[email protected]>Regards,
Lino
Thanks a lot, I'll add your tag.
/Jarkko