From cfc26be794ba0c6558a1fcabe54be74f013e3ec0 Mon Sep 17 00:00:00 2001 From: Raz Ben Yehuda 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 --- 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 #include #include -#include 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