summaryrefslogtreecommitdiff
path: root/cmd/tpm-v2.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-11-18 14:22:27 -0700
committerSimon Glass <sjg@chromium.org>2018-11-29 09:30:06 -0700
commitabdc7b8a2d7f2b8527ce4f9133b777942af99126 (patch)
treee45abe92dc40db0d684f7ed82453504469b99cc3 /cmd/tpm-v2.c
parent51f00c1704e505f51a02a3687e4384231ce8ae20 (diff)
tpm: Convert to use a device parameter
At present many TPM calls assume there is only one TPM in the system and look up this TPM themselves. This is inconsistent with driver model, which expects all driver methods to have a device parameter. Update the code to correct this. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'cmd/tpm-v2.c')
-rw-r--r--cmd/tpm-v2.c78
1 files changed, 65 insertions, 13 deletions
diff --git a/cmd/tpm-v2.c b/cmd/tpm-v2.c
index ffbf35a75c..bb51834c47 100644
--- a/cmd/tpm-v2.c
+++ b/cmd/tpm-v2.c
@@ -16,7 +16,12 @@ static int do_tpm2_startup(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
enum tpm2_startup_types mode;
+ struct udevice *dev;
+ int ret;
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc != 2)
return CMD_RET_USAGE;
@@ -29,14 +34,19 @@ static int do_tpm2_startup(cmd_tbl_t *cmdtp, int flag, int argc,
return CMD_RET_FAILURE;
}
- return report_return_code(tpm2_startup(mode));
+ return report_return_code(tpm2_startup(dev, mode));
}
static int do_tpm2_self_test(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
enum tpm2_yes_no full_test;
+ struct udevice *dev;
+ int ret;
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc != 2)
return CMD_RET_USAGE;
@@ -49,7 +59,7 @@ static int do_tpm2_self_test(cmd_tbl_t *cmdtp, int flag, int argc,
return CMD_RET_FAILURE;
}
- return report_return_code(tpm2_self_test(full_test));
+ return report_return_code(tpm2_self_test(dev, full_test));
}
static int do_tpm2_clear(cmd_tbl_t *cmdtp, int flag, int argc,
@@ -58,6 +68,12 @@ static int do_tpm2_clear(cmd_tbl_t *cmdtp, int flag, int argc,
u32 handle = 0;
const char *pw = (argc < 3) ? NULL : argv[2];
const ssize_t pw_sz = pw ? strlen(pw) : 0;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc < 2 || argc > 3)
return CMD_RET_USAGE;
@@ -72,7 +88,7 @@ static int do_tpm2_clear(cmd_tbl_t *cmdtp, int flag, int argc,
else
return CMD_RET_USAGE;
- return report_return_code(tpm2_clear(handle, pw, pw_sz));
+ return report_return_code(tpm2_clear(dev, handle, pw, pw_sz));
}
static int do_tpm2_pcr_extend(cmd_tbl_t *cmdtp, int flag, int argc,
@@ -88,7 +104,7 @@ static int do_tpm2_pcr_extend(cmd_tbl_t *cmdtp, int flag, int argc,
if (argc != 3)
return CMD_RET_USAGE;
- ret = uclass_first_device_err(UCLASS_TPM, &dev);
+ ret = get_tpm(&dev);
if (ret)
return ret;
@@ -99,7 +115,7 @@ static int do_tpm2_pcr_extend(cmd_tbl_t *cmdtp, int flag, int argc,
if (index >= priv->pcr_count)
return -EINVAL;
- rc = tpm2_pcr_extend(index, digest);
+ rc = tpm2_pcr_extend(dev, index, digest);
unmap_sysmem(digest);
@@ -119,7 +135,7 @@ static int do_tpm_pcr_read(cmd_tbl_t *cmdtp, int flag, int argc,
if (argc != 3)
return CMD_RET_USAGE;
- ret = uclass_first_device_err(UCLASS_TPM, &dev);
+ ret = get_tpm(&dev);
if (ret)
return ret;
@@ -133,7 +149,7 @@ static int do_tpm_pcr_read(cmd_tbl_t *cmdtp, int flag, int argc,
data = map_sysmem(simple_strtoul(argv[2], NULL, 0), 0);
- rc = tpm2_pcr_read(index, priv->pcr_select_min, data, &updates);
+ rc = tpm2_pcr_read(dev, index, priv->pcr_select_min, data, &updates);
if (!rc) {
printf("PCR #%u content (%d known updates):\n", index, updates);
print_byte_string(data, TPM2_DIGEST_LEN);
@@ -151,6 +167,12 @@ static int do_tpm_get_capability(cmd_tbl_t *cmdtp, int flag, int argc,
u8 *data;
size_t count;
int i, j;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc != 5)
return CMD_RET_USAGE;
@@ -160,7 +182,7 @@ static int do_tpm_get_capability(cmd_tbl_t *cmdtp, int flag, int argc,
data = map_sysmem(simple_strtoul(argv[3], NULL, 0), 0);
count = simple_strtoul(argv[4], NULL, 0);
- rc = tpm2_get_capability(capability, property, data, count);
+ rc = tpm2_get_capability(dev, capability, property, data, count);
if (rc)
goto unmap_data;
@@ -186,6 +208,12 @@ static int do_tpm_dam_reset(cmd_tbl_t *cmdtp, int flag, int argc,
{
const char *pw = (argc < 2) ? NULL : argv[1];
const ssize_t pw_sz = pw ? strlen(pw) : 0;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc > 2)
return CMD_RET_USAGE;
@@ -193,7 +221,7 @@ static int do_tpm_dam_reset(cmd_tbl_t *cmdtp, int flag, int argc,
if (pw_sz > TPM2_DIGEST_LEN)
return -EINVAL;
- return report_return_code(tpm2_dam_reset(pw, pw_sz));
+ return report_return_code(tpm2_dam_reset(dev, pw, pw_sz));
}
static int do_tpm_dam_parameters(cmd_tbl_t *cmdtp, int flag, int argc,
@@ -208,6 +236,12 @@ static int do_tpm_dam_parameters(cmd_tbl_t *cmdtp, int flag, int argc,
unsigned long int max_tries;
unsigned long int recovery_time;
unsigned long int lockout_recovery;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc < 4 || argc > 5)
return CMD_RET_USAGE;
@@ -229,7 +263,7 @@ static int do_tpm_dam_parameters(cmd_tbl_t *cmdtp, int flag, int argc,
log(LOGC_NONE, LOGL_INFO, "- recoveryTime: %lu\n", recovery_time);
log(LOGC_NONE, LOGL_INFO, "- lockoutRecovery: %lu\n", lockout_recovery);
- return report_return_code(tpm2_dam_parameters(pw, pw_sz, max_tries,
+ return report_return_code(tpm2_dam_parameters(dev, pw, pw_sz, max_tries,
recovery_time,
lockout_recovery));
}
@@ -242,6 +276,12 @@ static int do_tpm_change_auth(cmd_tbl_t *cmdtp, int flag, int argc,
const char *oldpw = (argc == 3) ? NULL : argv[3];
const ssize_t newpw_sz = strlen(newpw);
const ssize_t oldpw_sz = oldpw ? strlen(oldpw) : 0;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (argc < 3 || argc > 4)
return CMD_RET_USAGE;
@@ -260,7 +300,7 @@ static int do_tpm_change_auth(cmd_tbl_t *cmdtp, int flag, int argc,
else
return CMD_RET_USAGE;
- return report_return_code(tpm2_change_auth(handle, newpw, newpw_sz,
+ return report_return_code(tpm2_change_auth(dev, handle, newpw, newpw_sz,
oldpw, oldpw_sz));
}
@@ -271,6 +311,12 @@ static int do_tpm_pcr_setauthpolicy(cmd_tbl_t *cmdtp, int flag, int argc,
char *key = argv[2];
const char *pw = (argc < 4) ? NULL : argv[3];
const ssize_t pw_sz = pw ? strlen(pw) : 0;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (strlen(key) != TPM2_DIGEST_LEN)
return -EINVAL;
@@ -278,7 +324,7 @@ static int do_tpm_pcr_setauthpolicy(cmd_tbl_t *cmdtp, int flag, int argc,
if (argc < 3 || argc > 4)
return CMD_RET_USAGE;
- return report_return_code(tpm2_pcr_setauthpolicy(pw, pw_sz, index,
+ return report_return_code(tpm2_pcr_setauthpolicy(dev, pw, pw_sz, index,
key));
}
@@ -290,6 +336,12 @@ static int do_tpm_pcr_setauthvalue(cmd_tbl_t *cmdtp, int flag,
const ssize_t key_sz = strlen(key);
const char *pw = (argc < 4) ? NULL : argv[3];
const ssize_t pw_sz = pw ? strlen(pw) : 0;
+ struct udevice *dev;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret)
+ return ret;
if (strlen(key) != TPM2_DIGEST_LEN)
return -EINVAL;
@@ -297,7 +349,7 @@ static int do_tpm_pcr_setauthvalue(cmd_tbl_t *cmdtp, int flag,
if (argc < 3 || argc > 4)
return CMD_RET_USAGE;
- return report_return_code(tpm2_pcr_setauthvalue(pw, pw_sz, index,
+ return report_return_code(tpm2_pcr_setauthvalue(dev, pw, pw_sz, index,
key, key_sz));
}