diff options
author | Simon Glass <sjg@chromium.org> | 2018-11-23 21:29:32 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2018-12-05 06:01:34 -0700 |
commit | 0a60a0a65fa98f265c79f3928d8628aabcba8a92 (patch) | |
tree | 5a7c28336bc8ab523acbff7c67d56478f9aef249 | |
parent | 40e9ede1dcd852a97d772b8d592e36195c5d8b80 (diff) |
tpm: Remove use of build-time TPM versions
There is only one place in the code which assumes at build-time that we
are using either a v1 or a v2 TPM. Fix this up and add a new function to
return the version of a TPM.
Supported TPM versions (v1 and v2) can be enabled independently and it is
possible to use both versions at once. This is useful for sandbox when
running tests.
Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | include/tpm-common.h | 11 | ||||
-rw-r--r-- | lib/tpm-common.c | 7 | ||||
-rw-r--r-- | lib/tpm-v1.c | 22 |
3 files changed, 29 insertions, 11 deletions
diff --git a/include/tpm-common.h b/include/tpm-common.h index 3d88b44db7..91a1484b3d 100644 --- a/include/tpm-common.h +++ b/include/tpm-common.h @@ -274,4 +274,15 @@ static inline cmd_tbl_t *get_tpm2_commands(unsigned int *size) } #endif +/** + * tpm_get_version() - Find the version of a TPM + * + * This checks the uclass data for a TPM device and returns the version number + * it supports. + * + * @dev: TPM device + * @return version number (TPM_V1 or TPMV2) + */ +enum tpm_version tpm_get_version(struct udevice *dev); + #endif /* __TPM_COMMON_H */ diff --git a/lib/tpm-common.c b/lib/tpm-common.c index 6afe59b1fe..2bf0b41e26 100644 --- a/lib/tpm-common.c +++ b/lib/tpm-common.c @@ -12,6 +12,13 @@ #include <tpm-common.h> #include "tpm-utils.h" +enum tpm_version tpm_get_version(struct udevice *dev) +{ + struct tpm_chip_priv *priv = dev_get_uclass_priv(dev); + + return priv->version; +} + int pack_byte_string(u8 *str, size_t size, const char *format, ...) { va_list args; diff --git a/lib/tpm-v1.c b/lib/tpm-v1.c index f29e62ff7b..3e89f84544 100644 --- a/lib/tpm-v1.c +++ b/lib/tpm-v1.c @@ -79,19 +79,19 @@ u32 tpm_clear_and_reenable(struct udevice *dev) return ret; } -#if IS_ENABLED(CONFIG_TPM_V1) - ret = tpm_physical_enable(dev); - if (ret != TPM_SUCCESS) { - log_err("TPM: Can't set enabled state\n"); - return ret; - } + if (tpm_get_version(dev) == TPM_V1) { + ret = tpm_physical_enable(dev); + if (ret != TPM_SUCCESS) { + log_err("TPM: Can't set enabled state\n"); + return ret; + } - ret = tpm_physical_set_deactivated(dev, 0); - if (ret != TPM_SUCCESS) { - log_err("TPM: Can't set deactivated state\n"); - return ret; + ret = tpm_physical_set_deactivated(dev, 0); + if (ret != TPM_SUCCESS) { + log_err("TPM: Can't set deactivated state\n"); + return ret; + } } -#endif return TPM_SUCCESS; } |