summaryrefslogtreecommitdiffstats
path: root/drivers/char/tpm/tpm_vtpm_proxy.c
diff options
context:
space:
mode:
authorJason Gunthorpe <jgunthorpe@obsidianresearch.com>2016-07-12 11:41:49 -0600
committerJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>2016-07-19 17:43:38 +0300
commitcae8b441fc20812d7260dc3b45e05ee98fcfff1b (patch)
tree25c43fb7bd96f438d00cdf6b6ca233a4e4995257 /drivers/char/tpm/tpm_vtpm_proxy.c
parent2b88cd96eb85d2f07873e6050e531df45d8a0cc8 (diff)
tpm: Factor out common startup code
The TCG standard startup sequence (get timeouts, tpm startup, etc) for TPM and TPM2 chips is being open coded in many drivers, move it into the core code. tpm_tis and tpm_crb are used as the basis for the core code implementation and the easy drivers are converted. In the process several small drivers bugs relating to error handling this flow are fixed. For now the flag TPM_OPS_AUTO_STARTUP is optional to allow a staged driver roll out, but ultimately all drivers should use this flow and the flag removed. Some drivers still do not implement the startup sequence at all and will need to be tested with it enabled. Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> Tested-by: Andrew Zamansky <andrew.zamansky@nuvoton.com> Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Diffstat (limited to 'drivers/char/tpm/tpm_vtpm_proxy.c')
-rw-r--r--drivers/char/tpm/tpm_vtpm_proxy.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c b/drivers/char/tpm/tpm_vtpm_proxy.c
index 86e27e823d4d..9a940332c157 100644
--- a/drivers/char/tpm/tpm_vtpm_proxy.c
+++ b/drivers/char/tpm/tpm_vtpm_proxy.c
@@ -346,6 +346,7 @@ static bool vtpm_proxy_tpm_req_canceled(struct tpm_chip *chip, u8 status)
}
static const struct tpm_class_ops vtpm_proxy_tpm_ops = {
+ .flags = TPM_OPS_AUTO_STARTUP,
.recv = vtpm_proxy_tpm_op_recv,
.send = vtpm_proxy_tpm_op_send,
.cancel = vtpm_proxy_tpm_op_cancel,
@@ -366,14 +367,6 @@ static void vtpm_proxy_work(struct work_struct *work)
work);
int rc;
- if (proxy_dev->flags & VTPM_PROXY_FLAG_TPM2)
- rc = tpm2_startup(proxy_dev->chip, TPM2_SU_CLEAR);
- else
- rc = tpm_get_timeouts(proxy_dev->chip);
-
- if (rc)
- goto err;
-
rc = tpm_chip_register(proxy_dev->chip);
if (rc)
goto err;