[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e0cff643d684c15a352dbf956dd33a6d@codeaurora.org>
Date: Tue, 10 Jan 2017 17:02:57 -0800
From: Subhash Jadavani <subhashj@...eaurora.org>
To: Tomas Winkler <tomas.winkler@...el.com>
Cc: James Bottomley <James.Bottomley@...senpartnership.com>,
"Martin K . Petersen" <martin.petersen@...cle.com>,
Vinayak Holikatti <vinholikatti@...il.com>,
Christoph Hellwig <hch@....de>,
Yaniv Gardi <ygardi@...eaurora.org>,
linux-scsi@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [scsi 4/4] scsi: ufs: refactor device descriptor reading
On 2017-01-05 00:45, Tomas Winkler wrote:
> Pull device descriptor reading out of ufs quirk so it
> can be used also for other purposes.
>
> Revamp the fixup setup:
> 1. Rename ufs_device_info to ufs_dev_desc as very similar
> name ufs_dev_info is already in use.
> 2. Make the handlers static as they are not used out of the
> ufshdc.c file.
>
> Signed-off-by: Tomas Winkler <tomas.winkler@...el.com>
> ---
> drivers/scsi/ufs/ufs.h | 12 ++++++++++++
> drivers/scsi/ufs/ufs_quirks.h | 28 ++++++----------------------
> drivers/scsi/ufs/ufshcd.c | 40
> +++++++++++++++++++---------------------
> 3 files changed, 37 insertions(+), 43 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h
> index 8e6709a3fb6b..318e4a1f76c9 100644
> --- a/drivers/scsi/ufs/ufs.h
> +++ b/drivers/scsi/ufs/ufs.h
> @@ -523,4 +523,16 @@ 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 */
> diff --git a/drivers/scsi/ufs/ufs_quirks.h
> b/drivers/scsi/ufs/ufs_quirks.h
> index 08b799d4efcc..71f73d1d1ad1 100644
> --- a/drivers/scsi/ufs/ufs_quirks.h
> +++ b/drivers/scsi/ufs/ufs_quirks.h
> @@ -21,41 +21,28 @@
> #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_device_info card;
> + struct ufs_dev_desc card;
> unsigned int quirk;
> };
>
> #define END_FIX { { 0 }, 0 }
>
> /* add specific device quirk */
> -#define UFS_FIX(_vendor, _model, _quirk) \
> - { \
> - .card.wmanufacturerid = (_vendor),\
> - .card.model = (_model), \
> - .quirk = (_quirk), \
> - }
> +#define UFS_FIX(_vendor, _model, _quirk) { \
> + .card.wmanufacturerid = (_vendor),\
> + .card.model = (_model), \
> + .quirk = (_quirk), \
> +}
>
> /*
> * If UFS device is having issue in processing LCC (Line Control
> @@ -144,7 +131,4 @@ 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_ */
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index fdea08f79b7d..53b3ec40a7b0 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -5008,8 +5008,8 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba
> *hba)
> return ret;
> }
>
> -static int ufs_get_device_info(struct ufs_hba *hba,
> - struct ufs_device_info *card_data)
> +static int ufs_get_device_desc(struct ufs_hba *hba,
> + struct ufs_dev_desc *dev_desc)
> {
> int err;
> u8 model_index;
> @@ -5028,7 +5028,7 @@ static int ufs_get_device_info(struct ufs_hba
> *hba,
> * getting vendor (manufacturerID) and Bank Index in big endian
> * format
> */
> - card_data->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8
> |
> + dev_desc->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];
> @@ -5042,36 +5042,26 @@ static int ufs_get_device_info(struct ufs_hba
> *hba,
> }
>
> str_desc_buf[QUERY_DESC_STRING_MAX_SIZE] = '\0';
> - strlcpy(card_data->model, (str_desc_buf + QUERY_DESC_HDR_SIZE),
> + strlcpy(dev_desc->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 */
> - card_data->model[MAX_MODEL_LEN] = '\0';
> + dev_desc->model[MAX_MODEL_LEN] = '\0';
>
> out:
> return err;
> }
>
> -void ufs_advertise_fixup_device(struct ufs_hba *hba)
> +static void ufs_fixup_device_setup(struct ufs_hba *hba,
> + struct ufs_dev_desc *dev_desc)
> {
> - 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 == card_data.wmanufacturerid) ||
> - (f->card.wmanufacturerid == UFS_ANY_VENDOR)) &&
> - (STR_PRFX_EQUAL(f->card.model, card_data.model) ||
> + if ((f->card.wmanufacturerid == dev_desc->wmanufacturerid ||
> + f->card.wmanufacturerid == UFS_ANY_VENDOR) &&
> + (STR_PRFX_EQUAL(f->card.model, dev_desc->model) ||
> !strcmp(f->card.model, UFS_ANY_MODEL)))
> hba->dev_quirks |= f->quirk;
> }
> @@ -5249,6 +5239,7 @@ 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);
> @@ -5272,7 +5263,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
> if (ret)
> goto out;
>
> - ufs_advertise_fixup_device(hba);
> + 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);
> ufshcd_tune_unipro_params(hba);
>
> ret = ufshcd_set_vccq_rail_unused(hba,
Looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@...eaurora.org>
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
Powered by blists - more mailing lists