From: Petr Hodina <[email protected]> Dump the key UFS device properties (manufacturer, model, fw revision, spec version, negotiated gear/lane/power, and the applied device quirks) at the end of ufs_start().
Signed-off-by: Petr Hodina <[email protected]> --- drivers/ufs/ufs-uclass.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/drivers/ufs/ufs-uclass.c b/drivers/ufs/ufs-uclass.c index 7dfba3ac1ac..3cc4fd6bde3 100644 --- a/drivers/ufs/ufs-uclass.c +++ b/drivers/ufs/ufs-uclass.c @@ -2218,6 +2218,58 @@ static void ufshcd_def_desc_sizes(struct ufs_hba *hba) hba->desc_size.hlth_desc = QUERY_DESC_HEALTH_DEF_SIZE; } +/* Map a JEDEC UFS manufacturer id to a human-readable vendor name */ +static const char *ufshcd_vendor_name(u16 mid) +{ + switch (mid) { + case UFS_VENDOR_TOSHIBA: return "Toshiba/Kioxia"; + case UFS_VENDOR_SAMSUNG: return "Samsung"; + case UFS_VENDOR_SKHYNIX: return "SK Hynix"; + case UFS_VENDOR_MICRON: return "Micron"; + case UFS_VENDOR_WDC: return "Western Digital"; + default: return NULL; + } +} + +static void ufshcd_rtrim(char *s) +{ + size_t n = strlen(s); + + while (n && s[n - 1] == ' ') + s[--n] = '\0'; +} + +static void ufshcd_print_dev_info(struct ufs_hba *hba, + struct ufs_dev_desc *card) +{ + const char *vendor = ufshcd_vendor_name(card->wmanufacturerid); + + ufshcd_rtrim(card->model); + ufshcd_rtrim(card->revision); + + printf("UFS Device Information (%s)\n", hba->dev->name); + if (vendor) + printf(" Manufacturer: %s (0x%04x)\n", vendor, + card->wmanufacturerid); + else + printf(" Manufacturer ID: 0x%04x\n", card->wmanufacturerid); + printf(" Model: %s\n", + card->model[0] ? card->model : "(unset)"); + printf(" Revision: %s\n", + card->revision[0] ? card->revision : "(unset)"); + printf(" Spec Version: 0x%04x\n", card->wspecversion); + printf(" Gear - RX: %u, TX: %u\n", + hba->pwr_info.gear_rx, hba->pwr_info.gear_tx); + printf(" Lane - RX: %u, TX: %u\n", + hba->pwr_info.lane_rx, hba->pwr_info.lane_tx); + printf(" Power - RX: %u, TX: %u, HS rate: %u\n", + hba->pwr_info.pwr_rx, hba->pwr_info.pwr_tx, + hba->pwr_info.hs_rate); + printf(" Device Quirks: 0x%08x\n", hba->dev_quirks); + printf(" NO_PURGE Quirk: %s\n", + (hba->dev_quirks & UFS_DEVICE_QUIRK_NO_PURGE) ? "Yes" : "No"); +} + static int ufs_start(struct ufs_hba *hba) { struct ufs_dev_desc card = {0}; @@ -2268,6 +2320,8 @@ static int ufs_start(struct ufs_hba *hba) ufshcd_print_pwr_info(hba); } + ufshcd_print_dev_info(hba, &card); + return 0; } -- 2.55.0
