Loading drivers/scsi/ufs/ufshcd.c +37 −18 Original line number Diff line number Diff line Loading @@ -81,6 +81,9 @@ /* Task management command timeout */ #define TM_CMD_TIMEOUT 100 /* msecs */ /* maximum number of retries for a general UIC command */ #define UFS_UIC_COMMAND_RETRIES 3 /* maximum number of link-startup retries */ #define DME_LINKSTARTUP_RETRIES 3 Loading Loading @@ -1943,6 +1946,7 @@ int ufshcd_dme_set_attr(struct ufs_hba *hba, u32 attr_sel, }; const char *set = action[!!peer]; int ret; int retries = UFS_UIC_COMMAND_RETRIES; uic_cmd.command = peer ? UIC_CMD_DME_PEER_SET : UIC_CMD_DME_SET; Loading @@ -1950,15 +1954,24 @@ int ufshcd_dme_set_attr(struct ufs_hba *hba, u32 attr_sel, uic_cmd.argument2 = UIC_ARG_ATTR_TYPE(attr_set); uic_cmd.argument3 = mib_val; do { /* for stability purposes */ if (hba->quirks & UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS) usleep_range(1000, 1100); /* for peer attributes we retry upon failure */ ret = ufshcd_send_uic_cmd(hba, &uic_cmd); if (ret) dev_err(hba->dev, "%s: attr-id 0x%x val 0x%x error code %d\n", dev_dbg(hba->dev, "%s: attr-id 0x%x val 0x%x error code %d\n", set, UIC_GET_ATTR_ID(attr_sel), mib_val, ret); } while (ret && peer && --retries); if (!retries) dev_err(hba->dev, "%s: attr-id 0x%x val 0x%x failed %d retries\n", set, UIC_GET_ATTR_ID(attr_sel), mib_val, retries); return ret; } EXPORT_SYMBOL_GPL(ufshcd_dme_set_attr); Loading @@ -1982,25 +1995,31 @@ int ufshcd_dme_get_attr(struct ufs_hba *hba, u32 attr_sel, }; const char *get = action[!!peer]; int ret; int retries = UFS_UIC_COMMAND_RETRIES; uic_cmd.command = peer ? UIC_CMD_DME_PEER_GET : UIC_CMD_DME_GET; uic_cmd.argument1 = attr_sel; do { /* for stability purposes */ if (hba->quirks & UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS) usleep_range(1000, 1100); /* for peer attributes we retry upon failure */ ret = ufshcd_send_uic_cmd(hba, &uic_cmd); if (ret) { dev_err(hba->dev, "%s: attr-id 0x%x error code %d\n", if (ret) dev_dbg(hba->dev, "%s: attr-id 0x%x error code %d\n", get, UIC_GET_ATTR_ID(attr_sel), ret); goto out; } } while (ret && peer && --retries); if (mib_val) if (!retries) dev_err(hba->dev, "%s: attr-id 0x%x failed %d retries\n", get, UIC_GET_ATTR_ID(attr_sel), retries); if (mib_val && !ret) *mib_val = uic_cmd.argument3; out: return ret; } EXPORT_SYMBOL_GPL(ufshcd_dme_get_attr); Loading Loading
drivers/scsi/ufs/ufshcd.c +37 −18 Original line number Diff line number Diff line Loading @@ -81,6 +81,9 @@ /* Task management command timeout */ #define TM_CMD_TIMEOUT 100 /* msecs */ /* maximum number of retries for a general UIC command */ #define UFS_UIC_COMMAND_RETRIES 3 /* maximum number of link-startup retries */ #define DME_LINKSTARTUP_RETRIES 3 Loading Loading @@ -1943,6 +1946,7 @@ int ufshcd_dme_set_attr(struct ufs_hba *hba, u32 attr_sel, }; const char *set = action[!!peer]; int ret; int retries = UFS_UIC_COMMAND_RETRIES; uic_cmd.command = peer ? UIC_CMD_DME_PEER_SET : UIC_CMD_DME_SET; Loading @@ -1950,15 +1954,24 @@ int ufshcd_dme_set_attr(struct ufs_hba *hba, u32 attr_sel, uic_cmd.argument2 = UIC_ARG_ATTR_TYPE(attr_set); uic_cmd.argument3 = mib_val; do { /* for stability purposes */ if (hba->quirks & UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS) usleep_range(1000, 1100); /* for peer attributes we retry upon failure */ ret = ufshcd_send_uic_cmd(hba, &uic_cmd); if (ret) dev_err(hba->dev, "%s: attr-id 0x%x val 0x%x error code %d\n", dev_dbg(hba->dev, "%s: attr-id 0x%x val 0x%x error code %d\n", set, UIC_GET_ATTR_ID(attr_sel), mib_val, ret); } while (ret && peer && --retries); if (!retries) dev_err(hba->dev, "%s: attr-id 0x%x val 0x%x failed %d retries\n", set, UIC_GET_ATTR_ID(attr_sel), mib_val, retries); return ret; } EXPORT_SYMBOL_GPL(ufshcd_dme_set_attr); Loading @@ -1982,25 +1995,31 @@ int ufshcd_dme_get_attr(struct ufs_hba *hba, u32 attr_sel, }; const char *get = action[!!peer]; int ret; int retries = UFS_UIC_COMMAND_RETRIES; uic_cmd.command = peer ? UIC_CMD_DME_PEER_GET : UIC_CMD_DME_GET; uic_cmd.argument1 = attr_sel; do { /* for stability purposes */ if (hba->quirks & UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS) usleep_range(1000, 1100); /* for peer attributes we retry upon failure */ ret = ufshcd_send_uic_cmd(hba, &uic_cmd); if (ret) { dev_err(hba->dev, "%s: attr-id 0x%x error code %d\n", if (ret) dev_dbg(hba->dev, "%s: attr-id 0x%x error code %d\n", get, UIC_GET_ATTR_ID(attr_sel), ret); goto out; } } while (ret && peer && --retries); if (mib_val) if (!retries) dev_err(hba->dev, "%s: attr-id 0x%x failed %d retries\n", get, UIC_GET_ATTR_ID(attr_sel), retries); if (mib_val && !ret) *mib_val = uic_cmd.argument3; out: return ret; } EXPORT_SYMBOL_GPL(ufshcd_dme_get_attr); Loading