diff options
-rw-r--r-- | drivers/char/tpm/tpm.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index 0a475c7fe5ce..533ae359cb28 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c | |||
@@ -534,6 +534,7 @@ void tpm_get_timeouts(struct tpm_chip *chip) | |||
534 | struct duration_t *duration_cap; | 534 | struct duration_t *duration_cap; |
535 | ssize_t rc; | 535 | ssize_t rc; |
536 | u32 timeout; | 536 | u32 timeout; |
537 | unsigned int scale = 1; | ||
537 | 538 | ||
538 | tpm_cmd.header.in = tpm_getcap_header; | 539 | tpm_cmd.header.in = tpm_getcap_header; |
539 | tpm_cmd.params.getcap_in.cap = TPM_CAP_PROP; | 540 | tpm_cmd.params.getcap_in.cap = TPM_CAP_PROP; |
@@ -553,17 +554,21 @@ void tpm_get_timeouts(struct tpm_chip *chip) | |||
553 | timeout_cap = &tpm_cmd.params.getcap_out.cap.timeout; | 554 | timeout_cap = &tpm_cmd.params.getcap_out.cap.timeout; |
554 | /* Don't overwrite default if value is 0 */ | 555 | /* Don't overwrite default if value is 0 */ |
555 | timeout = be32_to_cpu(timeout_cap->a); | 556 | timeout = be32_to_cpu(timeout_cap->a); |
557 | if (timeout && timeout < 1000) { | ||
558 | /* timeouts in msec rather usec */ | ||
559 | scale = 1000; | ||
560 | } | ||
556 | if (timeout) | 561 | if (timeout) |
557 | chip->vendor.timeout_a = usecs_to_jiffies(timeout); | 562 | chip->vendor.timeout_a = usecs_to_jiffies(timeout * scale); |
558 | timeout = be32_to_cpu(timeout_cap->b); | 563 | timeout = be32_to_cpu(timeout_cap->b); |
559 | if (timeout) | 564 | if (timeout) |
560 | chip->vendor.timeout_b = usecs_to_jiffies(timeout); | 565 | chip->vendor.timeout_b = usecs_to_jiffies(timeout * scale); |
561 | timeout = be32_to_cpu(timeout_cap->c); | 566 | timeout = be32_to_cpu(timeout_cap->c); |
562 | if (timeout) | 567 | if (timeout) |
563 | chip->vendor.timeout_c = usecs_to_jiffies(timeout); | 568 | chip->vendor.timeout_c = usecs_to_jiffies(timeout * scale); |
564 | timeout = be32_to_cpu(timeout_cap->d); | 569 | timeout = be32_to_cpu(timeout_cap->d); |
565 | if (timeout) | 570 | if (timeout) |
566 | chip->vendor.timeout_d = usecs_to_jiffies(timeout); | 571 | chip->vendor.timeout_d = usecs_to_jiffies(timeout * scale); |
567 | 572 | ||
568 | duration: | 573 | duration: |
569 | tpm_cmd.header.in = tpm_getcap_header; | 574 | tpm_cmd.header.in = tpm_getcap_header; |