UFS: PATCH [3/4]

Raz raziebe at gmail.com
Sun May 31 12:05:34 CEST 2026


>From cfc26be794ba0c6558a1fcabe54be74f013e3ec0 Mon Sep 17 00:00:00 2001
From: Raz Ben Yehuda <raz.benyehuda at mobileye.com>
Date: Thu, 28 May 2026 15:08:28 +0300
Subject: [PATCH 3/4] ufs: Extend the ufs user interface

Provide a user interface and help to ufs tool.
query [lun] [idn]:
(0h) Device desc
        (7h) Geometry desc
(8h) Power desc
(2h) Unit desc
(1h) Config desc

        set_lun [LUN] [parm]
                lu_enable
                boot_lun_id
                lu_write_protect
                memory_type
                data_reliability
                num_allocunits
                logical_block_size
                provisioning_type
                context_capabilities
                lu_num_write_booster_buffer_allocunits

set_dev_desc [parm] [value]
descriptor_idn, device, device_class
device_sub_class, number_lu, boot_enable
descr_access_en, init_power_mode, high_priority_lun
secure_removal_type, initactive_icc_level
queue_depth, write_booster_buffer_preserve_user_space_en
write_booster_buffer_type, spec_version, manufacturer_id
periodic_rtc_update, device_version, psa_max_data_size
extended_ufs_features_support,
num_shared_write_booster_buffer_allocunits
write_booster_buffer_preserve_user_space_en

set_cfg_desc [parm] [value]
length, descriptor_idn, conf_desc_continue
boot_enable, descr_access_en, initpower_mode
high_priority_lun, secure_removal_type, init_active_icc_level
periodic_rtc_update, reserved_HPB, rpmb_region_enable
rpmb_region1_size, rpmb_region2_size, rpmb_region3_size
write_booster_buffer_preserve_user_space_en
write_booster_buffer_type
num_shared_write_booster_buffer_allocunits

flag [flag name]
deviceinit, permanent_wpe, pwr_on_wpe, bkops_en, life_span_mode
purge_enable, fphy_resource_removal, busy_rtc
permanently_disable_fw_update, write_booster_en
wb_buf_flush_en, wb_buf_flush_h8

Examples:

To create lun 4 please:
use ufs set_lun 4 num_allocunits xxx to set size
ufs commit
scsi scan

To change some value in the configuration descriptor
ufs set_cfg_desc num_shared_write_booster_buffer_allocunits 100000
ufs set_cfg_desc write_booster_buffer_type 1
ufs commit

Signed-off-by: Raz Ben Yehuda <raz.benyehuda at mobileye.com>
---
 cmd/ufs.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 86 insertions(+), 8 deletions(-)

diff --git a/cmd/ufs.c b/cmd/ufs.c
index 790dab50f18..bb0e2fd3a67 100644
--- a/cmd/ufs.c
+++ b/cmd/ufs.c
@@ -8,31 +8,109 @@
 #include <command.h>
 #include <ufs.h>
 #include <vsprintf.h>
-#include <linux/string.h>

 static int do_ufs(struct cmd_tbl *cmdtp, int flag, int argc, char
*const argv[])
 {
- int dev, ret;
+ int dev;

  if (argc >= 2) {
  if (!strcmp(argv[1], "init")) {
  if (argc == 3) {
  dev = dectoul(argv[2], NULL);
- ret = ufs_probe_dev(dev);
- if (ret)
+ if (!ufs_probe_dev(dev))
  return CMD_RET_FAILURE;
  } else {
  ufs_probe();
  }
-
  return CMD_RET_SUCCESS;
  }
- }
+#if IS_ENABLED(CONFIG_UFS_TOOL)
+ if (!strcmp(argv[1], "query")) {
+ int lun = -1;
+ int idn = -1;
+
+ if (argc <= 3) {
+ printf("usage: lun idn");
+ return CMD_RET_FAILURE;
+ }
+
+ lun  = dectoul(argv[2], NULL);
+ idn  = dectoul(argv[3], NULL);
+
+ return ufs_tool_query(lun, idn);
+ }
+
+ if (!strcmp(argv[1], "set_lun")) {
+ int lun;
+ u32 val;
+
+ if (argc <= 4) {
+ ufs_tool_help();
+ return CMD_RET_FAILURE;
+ }
+ lun  = dectoul(argv[2], NULL);
+ val  = dectoul(argv[4], NULL);
+ return ufs_tool_set_lun(lun, argv[3], val);
+ }
+ if (!strcmp(argv[1], "set_dev_desc")) {
+ const char *name;
+ u32 val;

- return CMD_RET_USAGE;
+ if (argc <= 3) {
+ ufs_tool_help();
+ return CMD_RET_FAILURE;
+ }
+ name = argv[2];
+ val  = dectoul(argv[3], NULL);
+ return ufs_tool_set_device_desc(name, val);
+ }
+ if (!strcmp(argv[1], "set_cfg_desc")) {
+ const char *name;
+ u32 val;
+
+ if (argc <= 3) {
+ ufs_tool_help();
+ return CMD_RET_FAILURE;
+ }
+ name = argv[2];
+ val  = dectoul(argv[3], NULL);
+ return ufs_tool_set_config_desc(name, val);
+ }
+
+ if (!strcmp(argv[1], "flag")) {
+ if (argc == 2) {
+ printf("usage: flag [flag name]");
+ ufs_tool_help();
+ return CMD_RET_FAILURE;
+ }
+ return ufs_tool_query_flag(argv[2]);
+ }
+
+ if (!strcmp(argv[1], "commit"))
+ return ufs_tool_commit();
+
+ if (!strcmp(argv[1], "clearall"))
+ return ufs_tool_clearall();
+ if (!strcmp(argv[1], "luns")) {
+ ufs_tool_print_luns();
+ return 0;
+ }
+ }
+ ufs_tool_help();
+#endif
+ return CMD_RET_FAILURE;
 }

-U_BOOT_CMD(ufs, 3, 1, do_ufs,
+U_BOOT_CMD(ufs, 5, 1, do_ufs,
     "UFS sub-system",
     "init [dev] - init UFS subsystem\n"
+#if IS_ENABLED(CONFIG_UFS_TOOL)
+    "query [LUN] [IDN]\n"
+    "set_lun [LUN] [parm name] [value]\n"
+    "set_cfg_des   [parm name] [value]\n"
+    "set_dev_desc  [parm name] [value]\n"
+    "luns - prints luns\n"
+    "flag [flag name] Query Flags\n"
+    "commit - writes luns configuration\n"
+#endif
 );
-- 
2.43.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-ufs-Extend-the-ufs-user-interface.patch
Type: text/x-patch
Size: 5063 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20260531/deb1bef5/attachment.bin>


More information about the U-Boot mailing list