Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76afd21e authored by Bean Huo's avatar Bean Huo Committed by Todd Kjos
Browse files

BACKPORT: scsi: ufs: Delete struct ufs_dev_desc

In consideration of UFS host driver uses parameters of struct ufs_dev_desc,
move its parameters to struct ufs_dev_info, delete struct ufs_dev_desc.

Link: https://lore.kernel.org/r/20200120130820.1737-3-huobean@gmail.com


Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Reviewed-by: default avatarAsutosh Das <asutoshd@codeaurora.org>
Reviewed-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
Reviewed-by: default avatarStanley Chu <stanley.chu@mediatek.com>
Signed-off-by: default avatarBean Huo <beanhuo@micron.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>

Bug: 150731199
Change-Id: I43899adc1f4112d1069d2a3b93333325e1bca119
(cherry picked from commit 097500666ec9912a9245160e0e53c1e3944d80d9)
[cang@codeaurora.org: fixed minor conflicts]
Signed-off-by: default avatarCan Guo <cang@codeaurora.org>
parent da3eb3b7
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -474,10 +474,11 @@ static void ufs_mtk_dbg_register_dump(struct ufs_hba *hba)
	ufshcd_dump_regs(hba, REG_UFS_PROBE, 0x4, "Debug Probe ");
}

static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba,
				    struct ufs_dev_desc *card)
static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba)
{
	if (card->wmanufacturerid == UFS_VENDOR_SAMSUNG)
	struct ufs_dev_info *dev_info = &hba->dev_info;

	if (dev_info->wmanufacturerid == UFS_VENDOR_SAMSUNG)
		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TACTIVATE), 6);

	return 0;
+1 −2
Original line number Diff line number Diff line
@@ -933,8 +933,7 @@ static int ufs_qcom_quirk_host_pa_saveconfigtime(struct ufs_hba *hba)
	return err;
}

static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba,
				     struct ufs_dev_desc *card)
static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba)
{
	int err = 0;

+3 −12
Original line number Diff line number Diff line
@@ -531,20 +531,11 @@ struct ufs_dev_info {
	bool f_power_on_wp_en;
	/* Keeps information if any of the LU is power on write protected */
	bool is_lu_power_on_wp;
	u16 spec_version;
	u32 clk_gating_wait_us;
};

#define MAX_MODEL_LEN 16
/**
 * ufs_dev_desc - ufs device details from the device descriptor
 *
 * @wmanufacturerid: card details
 * @model: card model
 */
struct ufs_dev_desc {
	u16 wmanufacturerid;
	/*UFS device Product Name */
	u8 *model;
	u16 spec_version;
	u32 clk_gating_wait_us;
};

/**
+5 −4
Original line number Diff line number Diff line
@@ -22,16 +22,17 @@
 * @quirk: device quirk
 */
struct ufs_dev_fix {
	struct ufs_dev_desc card;
	u16 wmanufacturerid;
	u8 *model;
	unsigned int quirk;
};

#define END_FIX { { 0 }, 0 }
#define END_FIX { }

/* add specific device quirk */
#define UFS_FIX(_vendor, _model, _quirk) { \
	.card.wmanufacturerid = (_vendor),\
	.card.model = (_model),		   \
	.wmanufacturerid = (_vendor),\
	.model = (_model),		   \
	.quirk = (_quirk),		   \
}

+22 −25
Original line number Diff line number Diff line
@@ -6679,16 +6679,13 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba)
	return ret;
}

static int ufs_get_device_desc(struct ufs_hba *hba,
			       struct ufs_dev_desc *dev_desc)
static int ufs_get_device_desc(struct ufs_hba *hba)
{
	int err;
	size_t buff_len;
	u8 model_index;
	u8 *desc_buf;

	if (!dev_desc)
		return -EINVAL;
	struct ufs_dev_info *dev_info = &hba->dev_info;

	buff_len = max_t(size_t, hba->desc_size.dev_desc,
			 QUERY_DESC_MAX_SIZE + 1);
@@ -6709,7 +6706,7 @@ static int ufs_get_device_desc(struct ufs_hba *hba,
	 * getting vendor (manufacturerID) and Bank Index in big endian
	 * format
	 */
	dev_desc->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
	dev_info->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
				     desc_buf[DEVICE_DESC_PARAM_MANF_ID + 1];

	/* getting Specification Version in big endian format */
@@ -6718,7 +6715,7 @@ static int ufs_get_device_desc(struct ufs_hba *hba,

	model_index = desc_buf[DEVICE_DESC_PARAM_PRDCT_NAME];
	err = ufshcd_read_string_desc(hba, model_index,
				      &dev_desc->model, SD_ASCII_STD);
				      &dev_info->model, SD_ASCII_STD);
	if (err < 0) {
		dev_err(hba->dev, "%s: Failed reading Product Name. err = %d\n",
			__func__, err);
@@ -6736,23 +6733,25 @@ static int ufs_get_device_desc(struct ufs_hba *hba,
	return err;
}

static void ufs_put_device_desc(struct ufs_dev_desc *dev_desc)
static void ufs_put_device_desc(struct ufs_hba *hba)
{
	kfree(dev_desc->model);
	dev_desc->model = NULL;
	struct ufs_dev_info *dev_info = &hba->dev_info;

	kfree(dev_info->model);
	dev_info->model = NULL;
}

static void ufs_fixup_device_setup(struct ufs_hba *hba,
				   struct ufs_dev_desc *dev_desc)
static void ufs_fixup_device_setup(struct ufs_hba *hba)
{
	struct ufs_dev_fix *f;
	struct ufs_dev_info *dev_info = &hba->dev_info;

	for (f = ufs_fixups; f->quirk; f++) {
		if ((f->card.wmanufacturerid == dev_desc->wmanufacturerid ||
		     f->card.wmanufacturerid == UFS_ANY_VENDOR) &&
		     ((dev_desc->model &&
		       STR_PRFX_EQUAL(f->card.model, dev_desc->model)) ||
		      !strcmp(f->card.model, UFS_ANY_MODEL)))
		if ((f->wmanufacturerid == dev_info->wmanufacturerid ||
		     f->wmanufacturerid == UFS_ANY_VENDOR) &&
		     ((dev_info->model &&
		       STR_PRFX_EQUAL(f->model, dev_info->model)) ||
		      !strcmp(f->model, UFS_ANY_MODEL)))
			hba->dev_quirks |= f->quirk;
	}
}
@@ -6904,8 +6903,7 @@ static int ufshcd_quirk_tune_host_pa_tactivate(struct ufs_hba *hba)
	return ret;
}

static void ufshcd_tune_unipro_params(struct ufs_hba *hba,
				      struct ufs_dev_desc *card)
static void ufshcd_tune_unipro_params(struct ufs_hba *hba)
{
	if (ufshcd_is_unipro_pa_params_tuning_req(hba)) {
		ufshcd_tune_pa_tactivate(hba);
@@ -6919,7 +6917,7 @@ static void ufshcd_tune_unipro_params(struct ufs_hba *hba,
	if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE)
		ufshcd_quirk_tune_host_pa_tactivate(hba);

	ufshcd_vops_apply_dev_quirks(hba, card);
	ufshcd_vops_apply_dev_quirks(hba);
}

static void ufshcd_clear_dbg_ufs_stats(struct ufs_hba *hba)
@@ -7045,7 +7043,6 @@ static int ufshcd_set_dev_ref_clk(struct ufs_hba *hba)
 */
static int ufshcd_probe_hba(struct ufs_hba *hba)
{
	struct ufs_dev_desc card = {0};
	int ret;
	ktime_t start = ktime_get();

@@ -7074,16 +7071,15 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
	/* Init check for device descriptor sizes */
	ufshcd_init_desc_sizes(hba);

	ret = ufs_get_device_desc(hba, &card);
	ret = ufs_get_device_desc(hba);
	if (ret) {
		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
			__func__, ret);
		goto out;
	}

	ufs_fixup_device_setup(hba, &card);
	ufshcd_tune_unipro_params(hba, &card);
	ufs_put_device_desc(&card);
	ufs_fixup_device_setup(hba);
	ufshcd_tune_unipro_params(hba);

	/* UFS device is also active now */
	ufshcd_set_ufs_dev_active(hba);
@@ -7676,6 +7672,7 @@ static void ufshcd_hba_exit(struct ufs_hba *hba)
		ufshcd_setup_clocks(hba, false);
		ufshcd_setup_hba_vreg(hba, false);
		hba->is_powered = false;
		ufs_put_device_desc(hba);
	}
}

Loading