|
@@ -827,10 +827,10 @@ EXPORT_SYMBOL_GPL(tpm_pcr_extend);
|
|
|
int tpm_do_selftest(struct tpm_chip *chip)
|
|
|
{
|
|
|
int rc;
|
|
|
- u8 digest[TPM_DIGEST_SIZE];
|
|
|
unsigned int loops;
|
|
|
unsigned int delay_msec = 1000;
|
|
|
unsigned long duration;
|
|
|
+ struct tpm_cmd_t cmd;
|
|
|
|
|
|
duration = tpm_calc_ordinal_duration(chip,
|
|
|
TPM_ORD_CONTINUE_SELFTEST);
|
|
@@ -845,7 +845,15 @@ int tpm_do_selftest(struct tpm_chip *chip)
|
|
|
return rc;
|
|
|
|
|
|
do {
|
|
|
- rc = __tpm_pcr_read(chip, 0, digest);
|
|
|
+ /* Attempt to read a PCR value */
|
|
|
+ cmd.header.in = pcrread_header;
|
|
|
+ cmd.params.pcrread_in.pcr_idx = cpu_to_be32(0);
|
|
|
+ rc = tpm_transmit(chip, (u8 *) &cmd, READ_PCR_RESULT_SIZE);
|
|
|
+
|
|
|
+ if (rc < TPM_HEADER_SIZE)
|
|
|
+ return -EFAULT;
|
|
|
+
|
|
|
+ rc = be32_to_cpu(cmd.header.out.return_code);
|
|
|
if (rc == TPM_ERR_DISABLED || rc == TPM_ERR_DEACTIVATED) {
|
|
|
dev_info(chip->dev,
|
|
|
"TPM is disabled/deactivated (0x%X)\n", rc);
|