cmd: Correct the 'md.q' command
[oweals/u-boot.git] / lib / tpm-common.c
index 33fa85926c30e83771221c02c82ae934e2475ff3..e4af87f76aa7aa13c47acd2109a42a755d7bef60 100644 (file)
@@ -4,12 +4,22 @@
  * Coypright (c) 2013 Guntermann & Drunck GmbH
  */
 
+#define LOG_CATEGORY UCLASS_TPM
+
 #include <common.h>
 #include <dm.h>
+#include <log.h>
 #include <asm/unaligned.h>
 #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;
@@ -110,6 +120,8 @@ int unpack_byte_string(const u8 *str, size_t size, const char *format, ...)
 
                if (offset + length > size) {
                        va_end(args);
+                       log_err("Failed to read: size=%zd, offset=%zx, len=%zx\n",
+                               size, offset, length);
                        return -1;
                }
 
@@ -147,9 +159,9 @@ u32 tpm_return_code(const void *response)
        return get_unaligned_be32(response + return_code_offset);
 }
 
-u32 tpm_sendrecv_command(const void *command, void *response, size_t *size_ptr)
+u32 tpm_sendrecv_command(struct udevice *dev, const void *command,
+                        void *response, size_t *size_ptr)
 {
-       struct udevice *dev;
        int err, ret;
        u8 response_buffer[COMMAND_BUFFER_SIZE];
        size_t response_length;
@@ -162,35 +174,26 @@ u32 tpm_sendrecv_command(const void *command, void *response, size_t *size_ptr)
                response_length = sizeof(response_buffer);
        }
 
-       ret = uclass_first_device_err(UCLASS_TPM, &dev);
-       if (ret)
-               return ret;
        err = tpm_xfer(dev, command, tpm_command_size(command),
                       response, &response_length);
 
        if (err < 0)
-               return TPM_LIB_ERROR;
+               return err;
+
        if (size_ptr)
                *size_ptr = response_length;
 
        ret = tpm_return_code(response);
 
-       log(LOGC_NONE, LOGL_DEBUG, "TPM response [ret:%d]: ", ret);
+       log_debug("TPM response [ret:%d]: ", ret);
        for (i = 0; i < response_length; i++)
-               log(LOGC_NONE, LOGL_DEBUG, "%02x ", ((u8 *)response)[i]);
-       log(LOGC_NONE, LOGL_DEBUG, "\n");
+               log_debug("%02x ", ((u8 *)response)[i]);
+       log_debug("\n");
 
        return ret;
 }
 
-int tpm_init(void)
+int tpm_init(struct udevice *dev)
 {
-       struct udevice *dev;
-       int err;
-
-       err = uclass_first_device_err(UCLASS_TPM, &dev);
-       if (err)
-               return err;
-
        return tpm_open(dev);
 }