* [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static
@ 2017-01-05 8:45 Tomas Winkler
2017-01-05 8:45 ` [scsi 2/4] scsi: ufs: unexport descritpor reading functions Tomas Winkler
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Tomas Winkler @ 2017-01-05 8:45 UTC (permalink / raw)
To: James Bottomley, Martin K . Petersen, Vinayak Holikatti
Cc: Christoph Hellwig, Yaniv Gardi, Subhash Jadavani, linux-scsi,
linux-kernel, Tomas Winkler
Fix the following compilation warning:
drivers/scsi/ufs/ufshcd.c:2076:5: warning: no previous prototype for
‘ufshcd_query_descriptor_retry’ [-Wmissing-prototypes]
Also do not export the function, it should not be used out of ufs
context.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
---
drivers/scsi/ufs/ufshcd.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 20e5e5fb048c..be3c2900b6bb 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2073,9 +2073,11 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba,
* The buf_len parameter will contain, on return, the length parameter
* received on the response.
*/
-int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
- enum query_opcode opcode, enum desc_idn idn, u8 index,
- u8 selector, u8 *desc_buf, int *buf_len)
+static int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
+ enum query_opcode opcode,
+ enum desc_idn idn, u8 index,
+ u8 selector,
+ u8 *desc_buf, int *buf_len)
{
int err;
int retries;
@@ -2089,7 +2091,6 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
return err;
}
-EXPORT_SYMBOL(ufshcd_query_descriptor_retry);
/**
* ufshcd_read_desc_param - read the specified descriptor parameter
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [scsi 2/4] scsi: ufs: unexport descritpor reading functions
2017-01-05 8:45 [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Tomas Winkler
@ 2017-01-05 8:45 ` Tomas Winkler
2017-01-11 0:55 ` Subhash Jadavani
2017-01-05 8:45 ` [scsi 3/4] scsi: ufs: ufshcd_get_max_icc_level fix endianity handling Tomas Winkler
` (3 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Tomas Winkler @ 2017-01-05 8:45 UTC (permalink / raw)
To: James Bottomley, Martin K . Petersen, Vinayak Holikatti
Cc: Christoph Hellwig, Yaniv Gardi, Subhash Jadavani, linux-scsi,
linux-kernel, Tomas Winkler
Unexport ufshcd_read_device_desc and ufshcd_read_string_desc
there is no really possibility to calling them directly
outside of UFS context.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
---
drivers/scsi/ufs/ufshcd.c | 9 ++++-----
drivers/scsi/ufs/ufshcd.h | 7 -------
2 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index be3c2900b6bb..63d7ae2c3be9 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2208,11 +2208,10 @@ static inline int ufshcd_read_power_desc(struct ufs_hba *hba,
return err;
}
-int ufshcd_read_device_desc(struct ufs_hba *hba, u8 *buf, u32 size)
+static int ufshcd_read_device_desc(struct ufs_hba *hba, u8 *buf, u32 size)
{
return ufshcd_read_desc(hba, QUERY_DESC_IDN_DEVICE, 0, buf, size);
}
-EXPORT_SYMBOL(ufshcd_read_device_desc);
/**
* ufshcd_read_string_desc - read string descriptor
@@ -2224,8 +2223,9 @@ EXPORT_SYMBOL(ufshcd_read_device_desc);
*
* Return 0 in case of success, non-zero otherwise
*/
-int ufshcd_read_string_desc(struct ufs_hba *hba, int desc_index, u8 *buf,
- u32 size, bool ascii)
+#define ASCII_STD true
+static int ufshcd_read_string_desc(struct ufs_hba *hba, int desc_index,
+ u8 *buf, u32 size, bool ascii)
{
int err = 0;
@@ -2281,7 +2281,6 @@ int ufshcd_read_string_desc(struct ufs_hba *hba, int desc_index, u8 *buf,
out:
return err;
}
-EXPORT_SYMBOL(ufshcd_read_string_desc);
/**
* ufshcd_read_unit_desc_param - read the specified unit descriptor parameter
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 08cd26ed2382..00fb82589895 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -713,8 +713,6 @@ static inline int ufshcd_dme_peer_get(struct ufs_hba *hba,
return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_PEER);
}
-int ufshcd_read_device_desc(struct ufs_hba *hba, u8 *buf, u32 size);
-
static inline bool ufshcd_is_hs_mode(struct ufs_pa_layer_attr *pwr_info)
{
return (pwr_info->pwr_rx == FAST_MODE ||
@@ -723,11 +721,6 @@ static inline bool ufshcd_is_hs_mode(struct ufs_pa_layer_attr *pwr_info)
pwr_info->pwr_tx == FASTAUTO_MODE);
}
-#define ASCII_STD true
-
-int ufshcd_read_string_desc(struct ufs_hba *hba, int desc_index, u8 *buf,
- u32 size, bool ascii);
-
/* Expose Query-Request API */
int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
enum flag_idn idn, bool *flag_res);
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [scsi 3/4] scsi: ufs: ufshcd_get_max_icc_level fix endianity handling
2017-01-05 8:45 [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Tomas Winkler
2017-01-05 8:45 ` [scsi 2/4] scsi: ufs: unexport descritpor reading functions Tomas Winkler
@ 2017-01-05 8:45 ` Tomas Winkler
2017-01-11 0:59 ` Subhash Jadavani
2017-01-05 8:45 ` [scsi 4/4] scsi: ufs: refactor device descriptor reading Tomas Winkler
` (2 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Tomas Winkler @ 2017-01-05 8:45 UTC (permalink / raw)
To: James Bottomley, Martin K . Petersen, Vinayak Holikatti
Cc: Christoph Hellwig, Yaniv Gardi, Subhash Jadavani, linux-scsi,
linux-kernel, Tomas Winkler
Reading big endian value from a buffer requires explicit cast.
Fix sparse warning:
drivers/scsi/ufs/ufshcd.c:4825:24: warning: cast to restricted __be16
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
---
drivers/scsi/ufs/ufshcd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 63d7ae2c3be9..fdea08f79b7d 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -4822,7 +4822,7 @@ static u32 ufshcd_get_max_icc_level(int sup_curr_uA, u32 start_scan, char *buff)
u16 unit;
for (i = start_scan; i >= 0; i--) {
- data = be16_to_cpu(*((u16 *)(buff + 2*i)));
+ data = be16_to_cpup((__be16 *)&buff[2 * i]);
unit = (data & ATTR_ICC_LVL_UNIT_MASK) >>
ATTR_ICC_LVL_UNIT_OFFSET;
curr_uA = data & ATTR_ICC_LVL_VALUE_MASK;
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [scsi 4/4] scsi: ufs: refactor device descriptor reading
2017-01-05 8:45 [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Tomas Winkler
2017-01-05 8:45 ` [scsi 2/4] scsi: ufs: unexport descritpor reading functions Tomas Winkler
2017-01-05 8:45 ` [scsi 3/4] scsi: ufs: ufshcd_get_max_icc_level fix endianity handling Tomas Winkler
@ 2017-01-05 8:45 ` Tomas Winkler
2017-01-11 1:02 ` Subhash Jadavani
2017-01-11 0:52 ` [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Subhash Jadavani
2017-01-11 4:04 ` Martin K. Petersen
4 siblings, 1 reply; 9+ messages in thread
From: Tomas Winkler @ 2017-01-05 8:45 UTC (permalink / raw)
To: James Bottomley, Martin K . Petersen, Vinayak Holikatti
Cc: Christoph Hellwig, Yaniv Gardi, Subhash Jadavani, linux-scsi,
linux-kernel, Tomas Winkler
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@intel.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,
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static
2017-01-05 8:45 [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Tomas Winkler
` (2 preceding siblings ...)
2017-01-05 8:45 ` [scsi 4/4] scsi: ufs: refactor device descriptor reading Tomas Winkler
@ 2017-01-11 0:52 ` Subhash Jadavani
2017-01-11 4:04 ` Martin K. Petersen
4 siblings, 0 replies; 9+ messages in thread
From: Subhash Jadavani @ 2017-01-11 0:52 UTC (permalink / raw)
To: Tomas Winkler
Cc: James Bottomley, Martin K . Petersen, Vinayak Holikatti,
Christoph Hellwig, Yaniv Gardi, linux-scsi, linux-kernel
On 2017-01-05 00:45, Tomas Winkler wrote:
> Fix the following compilation warning:
>
> drivers/scsi/ufs/ufshcd.c:2076:5: warning: no previous prototype for
> ‘ufshcd_query_descriptor_retry’ [-Wmissing-prototypes]
>
> Also do not export the function, it should not be used out of ufs
> context.
>
> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> ---
> drivers/scsi/ufs/ufshcd.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index 20e5e5fb048c..be3c2900b6bb 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -2073,9 +2073,11 @@ static int __ufshcd_query_descriptor(struct
> ufs_hba *hba,
> * The buf_len parameter will contain, on return, the length parameter
> * received on the response.
> */
> -int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
> - enum query_opcode opcode, enum desc_idn idn, u8 index,
> - u8 selector, u8 *desc_buf, int *buf_len)
> +static int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
> + enum query_opcode opcode,
> + enum desc_idn idn, u8 index,
> + u8 selector,
> + u8 *desc_buf, int *buf_len)
> {
> int err;
> int retries;
> @@ -2089,7 +2091,6 @@ int ufshcd_query_descriptor_retry(struct ufs_hba
> *hba,
>
> return err;
> }
> -EXPORT_SYMBOL(ufshcd_query_descriptor_retry);
>
> /**
> * ufshcd_read_desc_param - read the specified descriptor parameter
Looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [scsi 2/4] scsi: ufs: unexport descritpor reading functions
2017-01-05 8:45 ` [scsi 2/4] scsi: ufs: unexport descritpor reading functions Tomas Winkler
@ 2017-01-11 0:55 ` Subhash Jadavani
0 siblings, 0 replies; 9+ messages in thread
From: Subhash Jadavani @ 2017-01-11 0:55 UTC (permalink / raw)
To: Tomas Winkler
Cc: James Bottomley, Martin K . Petersen, Vinayak Holikatti,
Christoph Hellwig, Yaniv Gardi, linux-scsi, linux-kernel
On 2017-01-05 00:45, Tomas Winkler wrote:
> Unexport ufshcd_read_device_desc and ufshcd_read_string_desc
> there is no really possibility to calling them directly
> outside of UFS context.
>
> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> ---
> drivers/scsi/ufs/ufshcd.c | 9 ++++-----
> drivers/scsi/ufs/ufshcd.h | 7 -------
> 2 files changed, 4 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index be3c2900b6bb..63d7ae2c3be9 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -2208,11 +2208,10 @@ static inline int
> ufshcd_read_power_desc(struct ufs_hba *hba,
> return err;
> }
>
> -int ufshcd_read_device_desc(struct ufs_hba *hba, u8 *buf, u32 size)
> +static int ufshcd_read_device_desc(struct ufs_hba *hba, u8 *buf, u32
> size)
> {
> return ufshcd_read_desc(hba, QUERY_DESC_IDN_DEVICE, 0, buf, size);
> }
> -EXPORT_SYMBOL(ufshcd_read_device_desc);
>
> /**
> * ufshcd_read_string_desc - read string descriptor
> @@ -2224,8 +2223,9 @@ EXPORT_SYMBOL(ufshcd_read_device_desc);
> *
> * Return 0 in case of success, non-zero otherwise
> */
> -int ufshcd_read_string_desc(struct ufs_hba *hba, int desc_index, u8
> *buf,
> - u32 size, bool ascii)
> +#define ASCII_STD true
> +static int ufshcd_read_string_desc(struct ufs_hba *hba, int
> desc_index,
> + u8 *buf, u32 size, bool ascii)
> {
> int err = 0;
>
> @@ -2281,7 +2281,6 @@ int ufshcd_read_string_desc(struct ufs_hba *hba,
> int desc_index, u8 *buf,
> out:
> return err;
> }
> -EXPORT_SYMBOL(ufshcd_read_string_desc);
>
> /**
> * ufshcd_read_unit_desc_param - read the specified unit descriptor
> parameter
> diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
> index 08cd26ed2382..00fb82589895 100644
> --- a/drivers/scsi/ufs/ufshcd.h
> +++ b/drivers/scsi/ufs/ufshcd.h
> @@ -713,8 +713,6 @@ static inline int ufshcd_dme_peer_get(struct
> ufs_hba *hba,
> return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_PEER);
> }
>
> -int ufshcd_read_device_desc(struct ufs_hba *hba, u8 *buf, u32 size);
> -
> static inline bool ufshcd_is_hs_mode(struct ufs_pa_layer_attr
> *pwr_info)
> {
> return (pwr_info->pwr_rx == FAST_MODE ||
> @@ -723,11 +721,6 @@ static inline bool ufshcd_is_hs_mode(struct
> ufs_pa_layer_attr *pwr_info)
> pwr_info->pwr_tx == FASTAUTO_MODE);
> }
>
> -#define ASCII_STD true
> -
> -int ufshcd_read_string_desc(struct ufs_hba *hba, int desc_index, u8
> *buf,
> - u32 size, bool ascii);
> -
> /* Expose Query-Request API */
> int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
> enum flag_idn idn, bool *flag_res);
Looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [scsi 3/4] scsi: ufs: ufshcd_get_max_icc_level fix endianity handling
2017-01-05 8:45 ` [scsi 3/4] scsi: ufs: ufshcd_get_max_icc_level fix endianity handling Tomas Winkler
@ 2017-01-11 0:59 ` Subhash Jadavani
0 siblings, 0 replies; 9+ messages in thread
From: Subhash Jadavani @ 2017-01-11 0:59 UTC (permalink / raw)
To: Tomas Winkler
Cc: James Bottomley, Martin K . Petersen, Vinayak Holikatti,
Christoph Hellwig, Yaniv Gardi, linux-scsi, linux-kernel
On 2017-01-05 00:45, Tomas Winkler wrote:
> Reading big endian value from a buffer requires explicit cast.
> Fix sparse warning:
> drivers/scsi/ufs/ufshcd.c:4825:24: warning: cast to restricted __be16
>
> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> ---
> drivers/scsi/ufs/ufshcd.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index 63d7ae2c3be9..fdea08f79b7d 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -4822,7 +4822,7 @@ static u32 ufshcd_get_max_icc_level(int
> sup_curr_uA, u32 start_scan, char *buff)
> u16 unit;
>
> for (i = start_scan; i >= 0; i--) {
> - data = be16_to_cpu(*((u16 *)(buff + 2*i)));
> + data = be16_to_cpup((__be16 *)&buff[2 * i]);
> unit = (data & ATTR_ICC_LVL_UNIT_MASK) >>
> ATTR_ICC_LVL_UNIT_OFFSET;
> curr_uA = data & ATTR_ICC_LVL_VALUE_MASK;
Looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [scsi 4/4] scsi: ufs: refactor device descriptor reading
2017-01-05 8:45 ` [scsi 4/4] scsi: ufs: refactor device descriptor reading Tomas Winkler
@ 2017-01-11 1:02 ` Subhash Jadavani
0 siblings, 0 replies; 9+ messages in thread
From: Subhash Jadavani @ 2017-01-11 1:02 UTC (permalink / raw)
To: Tomas Winkler
Cc: James Bottomley, Martin K . Petersen, Vinayak Holikatti,
Christoph Hellwig, Yaniv Gardi, linux-scsi, linux-kernel
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@intel.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@codeaurora.org>
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static
2017-01-05 8:45 [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Tomas Winkler
` (3 preceding siblings ...)
2017-01-11 0:52 ` [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Subhash Jadavani
@ 2017-01-11 4:04 ` Martin K. Petersen
4 siblings, 0 replies; 9+ messages in thread
From: Martin K. Petersen @ 2017-01-11 4:04 UTC (permalink / raw)
To: Tomas Winkler
Cc: James Bottomley, Martin K . Petersen, Vinayak Holikatti,
Christoph Hellwig, Yaniv Gardi, Subhash Jadavani, linux-scsi,
linux-kernel
>>>>> "Tomas" == Tomas Winkler <tomas.winkler@intel.com> writes:
Tomas> Fix the following compilation warning:
Tomas> drivers/scsi/ufs/ufshcd.c:2076:5: warning: no previous prototype
Tomas> for ‘ufshcd_query_descriptor_retry’ [-Wmissing-prototypes]
Tomas> Also do not export the function, it should not be used out of ufs
Tomas> context.
Applied to 4.11/scsi-queue.
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2017-01-11 4:05 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-05 8:45 [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Tomas Winkler
2017-01-05 8:45 ` [scsi 2/4] scsi: ufs: unexport descritpor reading functions Tomas Winkler
2017-01-11 0:55 ` Subhash Jadavani
2017-01-05 8:45 ` [scsi 3/4] scsi: ufs: ufshcd_get_max_icc_level fix endianity handling Tomas Winkler
2017-01-11 0:59 ` Subhash Jadavani
2017-01-05 8:45 ` [scsi 4/4] scsi: ufs: refactor device descriptor reading Tomas Winkler
2017-01-11 1:02 ` Subhash Jadavani
2017-01-11 0:52 ` [scsi 1/4] scsi: ufs: ufshcd_query_descriptor_retry should be static Subhash Jadavani
2017-01-11 4:04 ` Martin K. Petersen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.