@@ -19,11 +19,18 @@
#include <linux/string.h>
#include <linux/errno.h>
+/* Static device pointer set by tkey connect command */
+static struct udevice *tkey_dev;
+
static struct udevice *tkey_get_device(void)
{
struct udevice *dev;
int ret;
+ /* If a device was set by tkey connect, return it */
+ if (tkey_dev)
+ return tkey_dev;
+
ret = uclass_first_device_err(UCLASS_TKEY, &dev);
if (ret) {
printf("No device found (err %dE)\n", ret);
@@ -47,10 +54,28 @@ static int do_tkey_connect(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
struct udevice *dev;
+ int ret;
- dev = tkey_get_device();
- if (!dev)
- return CMD_RET_FAILURE;
+ /* Check if device name is provided as optional first argument */
+ if (argc > 1) {
+ const char *dev_name = argv[1];
+
+ ret = uclass_get_device_by_name(UCLASS_TKEY, dev_name, &dev);
+ if (ret) {
+ printf("Failed to find TKey device '%s' (err %dE)\n",
+ dev_name, ret);
+ return CMD_RET_FAILURE;
+ }
+ } else {
+ ret = uclass_first_device_err(UCLASS_TKEY, &dev);
+ if (ret) {
+ printf("No device found (err %dE)\n", ret);
+ return CMD_RET_FAILURE;
+ }
+ }
+
+ /* Set the static device pointer for subsequent commands */
+ tkey_dev = dev;
printf("Connected to TKey device\n");
@@ -276,7 +301,8 @@ static int do_tkey_loadapp(struct cmd_tbl *cmdtp, int flag, int argc,
}
U_BOOT_LONGHELP(tkey,
- "connect - Connect to TKey device\n"
+ "connect [device-name] - Connect to TKey device\n"
+ " Optional device-name to connect to specific TKey device\n"
"tkey fwmode - Check if device is in firmware or app mode\n"
"tkey getkey <uss> [verify-hash] - Get disk encryption key\n"
" Loads app with USS, derives key. Same USS always produces same key.\n"
@@ -289,7 +315,7 @@ U_BOOT_LONGHELP(tkey,
U_BOOT_CMD_WITH_SUBCMDS(tkey, "Tillitis TKey security token operations",
tkey_help_text,
- U_BOOT_SUBCMD_MKENT(connect, 1, 1, do_tkey_connect),
+ U_BOOT_SUBCMD_MKENT(connect, 2, 1, do_tkey_connect),
U_BOOT_SUBCMD_MKENT(fwmode, 1, 1, do_tkey_fwmode),
U_BOOT_SUBCMD_MKENT(getkey, 3, 1, do_tkey_getkey),
U_BOOT_SUBCMD_MKENT(info, 1, 1, do_tkey_info),
@@ -11,7 +11,7 @@ Synopsis
::
- tkey connect
+ tkey connect [device-name]
tkey fwmode
tkey getkey <uss> [verify-hash]
tkey info
@@ -46,8 +46,19 @@ internal UDI to generate deterministic encryption keys.
tkey connect
~~~~~~~~~~~~
-Test connectivity to a TKey device. This command attempts to find and connect
-to the first available TKey device in the system.
+Test connectivity to a TKey device and optionally select a specific device for
+subsequent commands.
+
+When called without arguments, this command connects to the first available TKey
+device in the system. When a device name is provided, it connects to that
+specific device.
+
+Once connected, the selected device is remembered and will be used by all
+subsequent tkey commands (info, getkey, loadapp, etc.) until a different device
+is selected with another connect command.
+
+device-name
+ Optional name of a specific TKey device to connect to
tkey fwmode
@@ -160,11 +171,16 @@ password
Example
-------
-Connect to device::
+Connect to the first available device::
=> tkey connect
Connected to TKey device
+Connect to a specific device by name::
+
+ => tkey connect tkey@0
+ Connected to TKey device
+
Check device mode::
=> tkey fwmode