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

Commit d77f4956 authored by Blagovest Kolenichev's avatar Blagovest Kolenichev
Browse files

Revert "scsi: ufs: refactor device descriptor reading"



This reverts commit be4d66d6.

[Sayali Lokhande]
Equivalent code delta is already presented on msm-4.9 as part of
commit [1]. There are few function/structure names different as
compared to the change which is reverted, but even that,
modifications are still doing the same thing.

Motivation to revert the change is because it is causing merge
conflicts on importing android-4.9.107 (42a730ad) into msm-4.9,
hence let's remove it before the merge.

[1] 344c16c9 scsi: ufs: read device descriptor once

Change-Id: I35d74c2663d98a9e5e8a4090f16e8054d2409896
Signed-off-by: default avatarBlagovest Kolenichev <bkolenichev@codeaurora.org>
parent 8c0b2155
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -522,16 +522,4 @@ struct ufs_dev_info {
	bool is_lu_power_on_wp;
};

#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;
	char model[MAX_MODEL_LEN + 1];
};

#endif /* End of Header */
+22 −6
Original line number Diff line number Diff line
@@ -21,24 +21,37 @@
#define UFS_ANY_VENDOR 0xFFFF
#define UFS_ANY_MODEL  "ANY_MODEL"

#define MAX_MODEL_LEN 16

#define UFS_VENDOR_TOSHIBA     0x198
#define UFS_VENDOR_SAMSUNG     0x1CE
#define UFS_VENDOR_SKHYNIX     0x1AD

/**
 * ufs_device_info - ufs device details
 * @wmanufacturerid: card details
 * @model: card model
 */
struct ufs_device_info {
	u16 wmanufacturerid;
	char model[MAX_MODEL_LEN + 1];
};

/**
 * ufs_dev_fix - ufs device quirk info
 * @card: ufs card details
 * @quirk: device quirk
 */
struct ufs_dev_fix {
	struct ufs_dev_desc card;
	struct ufs_device_info card;
	unsigned int quirk;
};

#define END_FIX { { 0 }, 0 }

/* add specific device quirk */
#define UFS_FIX(_vendor, _model, _quirk) { \
#define UFS_FIX(_vendor, _model, _quirk) \
		{					  \
			.card.wmanufacturerid = (_vendor),\
			.card.model = (_model),		  \
			.quirk = (_quirk),		  \
@@ -131,4 +144,7 @@ struct ufs_dev_fix {
 */
#define UFS_DEVICE_QUIRK_HOST_PA_SAVECONFIGTIME	(1 << 8)

struct ufs_hba;
void ufs_advertise_fixup_device(struct ufs_hba *hba);

#endif /* UFS_QUIRKS_H_ */
+21 −19
Original line number Diff line number Diff line
@@ -4935,8 +4935,8 @@ 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_info(struct ufs_hba *hba,
				struct ufs_device_info *card_data)
{
	int err;
	u8 model_index;
@@ -4955,7 +4955,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 |
	card_data->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
				     desc_buf[DEVICE_DESC_PARAM_MANF_ID + 1];

	model_index = desc_buf[DEVICE_DESC_PARAM_PRDCT_NAME];
@@ -4969,26 +4969,36 @@ static int ufs_get_device_desc(struct ufs_hba *hba,
	}

	str_desc_buf[QUERY_DESC_STRING_MAX_SIZE] = '\0';
	strlcpy(dev_desc->model, (str_desc_buf + QUERY_DESC_HDR_SIZE),
	strlcpy(card_data->model, (str_desc_buf + QUERY_DESC_HDR_SIZE),
		min_t(u8, str_desc_buf[QUERY_DESC_LENGTH_OFFSET],
		      MAX_MODEL_LEN));

	/* Null terminate the model string */
	dev_desc->model[MAX_MODEL_LEN] = '\0';
	card_data->model[MAX_MODEL_LEN] = '\0';

out:
	return err;
}

static void ufs_fixup_device_setup(struct ufs_hba *hba,
				   struct ufs_dev_desc *dev_desc)
void ufs_advertise_fixup_device(struct ufs_hba *hba)
{
	int err;
	struct ufs_dev_fix *f;
	struct ufs_device_info card_data;

	card_data.wmanufacturerid = 0;

	err = ufs_get_device_info(hba, &card_data);
	if (err) {
		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
			__func__, err);
		return;
	}

	for (f = ufs_fixups; f->quirk; f++) {
		if ((f->card.wmanufacturerid == dev_desc->wmanufacturerid ||
		     f->card.wmanufacturerid == UFS_ANY_VENDOR) &&
		    (STR_PRFX_EQUAL(f->card.model, dev_desc->model) ||
		if (((f->card.wmanufacturerid == card_data.wmanufacturerid) ||
		    (f->card.wmanufacturerid == UFS_ANY_VENDOR)) &&
		    (STR_PRFX_EQUAL(f->card.model, card_data.model) ||
		     !strcmp(f->card.model, UFS_ANY_MODEL)))
			hba->dev_quirks |= f->quirk;
	}
@@ -5166,7 +5176,6 @@ static void ufshcd_tune_unipro_params(struct ufs_hba *hba)
 */
static int ufshcd_probe_hba(struct ufs_hba *hba)
{
	struct ufs_dev_desc card = {0};
	int ret;

	ret = ufshcd_link_startup(hba);
@@ -5190,14 +5199,7 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
	if (ret)
		goto out;

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

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

	ret = ufshcd_set_vccq_rail_unused(hba,