summaryrefslogtreecommitdiff
path: root/lib/tpm.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-08-22 18:31:32 -0600
committerSimon Glass <sjg@chromium.org>2015-08-31 07:57:28 -0600
commitc8a8c51039d83149a93fccb6e325bfdb8f63fa66 (patch)
tree800d397e9b950d551f895f419c7afc892055fdac /lib/tpm.c
parentf255d31f9063e50b56208fff439b63039cfd7ac6 (diff)
downloadu-boot-imx-c8a8c51039d83149a93fccb6e325bfdb8f63fa66.zip
u-boot-imx-c8a8c51039d83149a93fccb6e325bfdb8f63fa66.tar.gz
u-boot-imx-c8a8c51039d83149a93fccb6e325bfdb8f63fa66.tar.bz2
dm: tpm: Convert the TPM command and library to driver model
Add driver model support to the TPM command and the TPM library. Both support only a single TPM at present. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Christophe Ricard<christophe-h.ricard@st.com> Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'lib/tpm.c')
-rw-r--r--lib/tpm.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/lib/tpm.c b/lib/tpm.c
index d9789b0..19bf0b5 100644
--- a/lib/tpm.c
+++ b/lib/tpm.c
@@ -6,10 +6,11 @@
*/
#include <common.h>
-#include <stdarg.h>
-#include <u-boot/sha1.h>
+#include <dm.h>
+#include <tis.h>
#include <tpm.h>
#include <asm/unaligned.h>
+#include <u-boot/sha1.h>
/* Internal error of TPM command library */
#define TPM_LIB_ERROR ((uint32_t)~0u)
@@ -240,9 +241,20 @@ static uint32_t tpm_sendrecv_command(const void *command,
response = response_buffer;
response_length = sizeof(response_buffer);
}
+#ifdef CONFIG_DM_TPM
+ struct udevice *dev;
+ int ret;
+
+ ret = uclass_first_device(UCLASS_TPM, &dev);
+ if (ret)
+ return ret;
+ err = tpm_xfer(dev, command, tpm_command_size(command),
+ response, &response_length);
+#else
err = tis_sendrecv(command, tpm_command_size(command),
response, &response_length);
- if (err)
+#endif
+ if (err < 0)
return TPM_LIB_ERROR;
if (size_ptr)
*size_ptr = response_length;
@@ -250,15 +262,24 @@ static uint32_t tpm_sendrecv_command(const void *command,
return tpm_return_code(response);
}
-uint32_t tpm_init(void)
+int tpm_init(void)
{
- uint32_t err;
+ int err;
+#ifdef CONFIG_DM_TPM
+ struct udevice *dev;
+
+ err = uclass_first_device(UCLASS_TPM, &dev);
+ if (err)
+ return err;
+ return tpm_open(dev);
+#else
err = tis_init();
if (err)
return err;
return tis_open();
+#endif
}
uint32_t tpm_startup(enum tpm_startup_type mode)