Re: [PATCH] scsi: ufs: Remove .get_hba_mac()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2024-04-12 at 10:41 -0700, Bart Van Assche wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  Simplify the UFSHCI core and also the UFSHCI host drivers by
> removing
> the .get_hba_mac() callback and by reading the NUTRS register field
> instead.
> 
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> ---
>  drivers/ufs/core/ufs-mcq.c      | 14 +++++---------
>  drivers/ufs/core/ufshcd-priv.h  |  8 --------
>  drivers/ufs/host/ufs-mediatek.c | 13 -------------
>  drivers/ufs/host/ufs-qcom.c     |  7 -------
>  drivers/ufs/host/ufs-qcom.h     |  1 -
>  include/ufs/ufshcd.h            |  2 --
>  include/ufs/ufshci.h            |  2 +-
>  7 files changed, 6 insertions(+), 41 deletions(-)
> 
> diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c
> index 768bf87cd80d..228975caf68e 100644
> --- a/drivers/ufs/core/ufs-mcq.c
> +++ b/drivers/ufs/core/ufs-mcq.c
> @@ -125,20 +125,16 @@ struct ufs_hw_queue
> *ufshcd_mcq_req_to_hwq(struct ufs_hba *hba,
>   *
>   * MAC - Max. Active Command of the Host Controller (HC)
>   * HC wouldn't send more than this commands to the device.
> - * It is mandatory to implement get_hba_mac() to enable MCQ mode.
>   * Calculates and adjusts the queue depth based on the depth
>   * supported by the HC and ufs device.
>   */
>  int ufshcd_mcq_decide_queue_depth(struct ufs_hba *hba)
>  {
> -	int mac;
> +	int nutrs;
>  
> -	/* Mandatory to implement get_hba_mac() */
> -	mac = ufshcd_mcq_vops_get_hba_mac(hba);
> -	if (mac < 0) {
> -		dev_err(hba->dev, "Failed to get mac, err=%d\n", mac);
> -		return mac;
> -	}
> +	WARN_ON_ONCE(!hba->mcq_enabled);
> +	nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
> 

Hi Bart,

Mediatek some platform read nutrs in MCQ mode is 0x1F, not 0x3F.
Which means we still need this ops to get correct MAC.


> +	WARN_ONCE(nutrs < 32, "nutrs: %d < 32\n", nutrs);
>  
>  	WARN_ON_ONCE(!hba->dev_info.bqueuedepth);
>  	/*
> @@ -146,7 +142,7 @@ int ufshcd_mcq_decide_queue_depth(struct ufs_hba
> *hba)
>  	 * It is mandatory for UFS device to define bQueueDepth if
>  	 * shared queuing architecture is enabled.
>  	 */
> -	return min_t(int, mac, hba->dev_info.bqueuedepth);
> +	return min_t(int, nutrs, hba->dev_info.bqueuedepth);
>  }
>  
>  static int ufshcd_mcq_config_nr_queues(struct ufs_hba *hba)
> diff --git a/drivers/ufs/core/ufshcd-priv.h
> b/drivers/ufs/core/ufshcd-priv.h
> index f42d99ce5bf1..a1add22205db 100644
> --- a/drivers/ufs/core/ufshcd-priv.h
> +++ b/drivers/ufs/core/ufshcd-priv.h
> @@ -255,14 +255,6 @@ static inline int
> ufshcd_vops_mcq_config_resource(struct ufs_hba *hba)
>  	return -EOPNOTSUPP;
>  }
>  
> -static inline int ufshcd_mcq_vops_get_hba_mac(struct ufs_hba *hba)
> -{
> -	if (hba->vops && hba->vops->get_hba_mac)
> -		return hba->vops->get_hba_mac(hba);
> -
> -	return -EOPNOTSUPP;
> -}
> -
>  static inline int ufshcd_mcq_vops_op_runtime_config(struct ufs_hba
> *hba)
>  {
>  	if (hba->vops && hba->vops->op_runtime_config)
> diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-
> mediatek.c
> index c4f997196c57..0a52917e7fe6 100644
> --- a/drivers/ufs/host/ufs-mediatek.c
> +++ b/drivers/ufs/host/ufs-mediatek.c
> @@ -34,7 +34,6 @@ static int  ufs_mtk_config_mcq(struct ufs_hba *hba,
> bool irq);
>  #include "ufs-mediatek-trace.h"
>  #undef CREATE_TRACE_POINTS
>  
> -#define MAX_SUPP_MAC 64
>  #define MCQ_QUEUE_OFFSET(c) ((((c) >> 16) & 0xFF) * 0x200)
>  
>  static const struct ufs_dev_quirk ufs_mtk_dev_fixups[] = {
> @@ -1656,17 +1655,6 @@ static int ufs_mtk_clk_scale_notify(struct
> ufs_hba *hba, bool scale_up,
>  	return 0;
>  }
>  
> -static int ufs_mtk_get_hba_mac(struct ufs_hba *hba)
> -{
> -	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
> -
> -	/* MCQ operation not permitted */
> -	if (host->caps & UFS_MTK_CAP_DISABLE_MCQ)
> -		return -EPERM;
> -
> 

Beside, mediatek also have a host caps to disable MCQ even hw support.

Thanks.
Peter



> -	return MAX_SUPP_MAC;
> -}
> -
>  static int ufs_mtk_op_runtime_config(struct ufs_hba *hba)
>  {
>  	struct ufshcd_mcq_opr_info_t *opr;
> @@ -1801,7 +1789,6 @@ static const struct ufs_hba_variant_ops
> ufs_hba_mtk_vops = {
>  	.config_scaling_param = ufs_mtk_config_scaling_param,
>  	.clk_scale_notify    = ufs_mtk_clk_scale_notify,
>  	/* mcq vops */
> -	.get_hba_mac         = ufs_mtk_get_hba_mac,
>  	.op_runtime_config   = ufs_mtk_op_runtime_config,
>  	.mcq_config_resource = ufs_mtk_mcq_config_resource,
>  	.config_esi          = ufs_mtk_config_esi,
> diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-
> qcom.c
> index 0b02e697ea5b..100f5f0b9da6 100644
> --- a/drivers/ufs/host/ufs-qcom.c
> +++ b/drivers/ufs/host/ufs-qcom.c
> @@ -1673,12 +1673,6 @@ static int ufs_qcom_op_runtime_config(struct
> ufs_hba *hba)
>  	return 0;
>  }
>  
> -static int ufs_qcom_get_hba_mac(struct ufs_hba *hba)
> -{
> -	/* Qualcomm HC supports up to 64 */
> -	return MAX_SUPP_MAC;
> -}
> -
>  static int ufs_qcom_get_outstanding_cqs(struct ufs_hba *hba,
>  					unsigned long *ocqs)
>  {
> @@ -1798,7 +1792,6 @@ static const struct ufs_hba_variant_ops
> ufs_hba_qcom_vops = {
>  	.program_key		= ufs_qcom_ice_program_key,
>  	.reinit_notify		= ufs_qcom_reinit_notify,
>  	.mcq_config_resource	= ufs_qcom_mcq_config_resource,
> -	.get_hba_mac		= ufs_qcom_get_hba_mac,
>  	.op_runtime_config	= ufs_qcom_op_runtime_config,
>  	.get_outstanding_cqs	= ufs_qcom_get_outstanding_cqs,
>  	.config_esi		= ufs_qcom_config_esi,
> diff --git a/drivers/ufs/host/ufs-qcom.h b/drivers/ufs/host/ufs-
> qcom.h
> index b9de170983c9..7951421b9921 100644
> --- a/drivers/ufs/host/ufs-qcom.h
> +++ b/drivers/ufs/host/ufs-qcom.h
> @@ -14,7 +14,6 @@
>  #define TX_FSM_HIBERN8          0x1
>  #define HBRN8_POLL_TOUT_MS      100
>  #define DEFAULT_CLK_RATE_HZ     1000000
> -#define MAX_SUPP_MAC		64
>  #define MAX_ESI_VEC		32
>  
>  #define UFS_HW_VER_MAJOR_MASK	GENMASK(31, 28)
> diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
> index bad88bd91995..3f50621b8564 100644
> --- a/include/ufs/ufshcd.h
> +++ b/include/ufs/ufshcd.h
> @@ -324,7 +324,6 @@ struct ufs_pwr_mode_info {
>   * @event_notify: called to notify important events
>   * @reinit_notify: called to notify reinit of UFSHCD during max gear
> switch
>   * @mcq_config_resource: called to configure MCQ platform resources
> - * @get_hba_mac: called to get vendor specific mac value, mandatory
> for mcq mode
>   * @op_runtime_config: called to config Operation and runtime regs
> Pointers
>   * @get_outstanding_cqs: called to get outstanding completion queues
>   * @config_esi: called to config Event Specific Interrupt
> @@ -369,7 +368,6 @@ struct ufs_hba_variant_ops {
>  				enum ufs_event_type evt, void *data);
>  	void	(*reinit_notify)(struct ufs_hba *);
>  	int	(*mcq_config_resource)(struct ufs_hba *hba);
> -	int	(*get_hba_mac)(struct ufs_hba *hba);
>  	int	(*op_runtime_config)(struct ufs_hba *hba);
>  	int	(*get_outstanding_cqs)(struct ufs_hba *hba,
>  				       unsigned long *ocqs);
> diff --git a/include/ufs/ufshci.h b/include/ufs/ufshci.h
> index 385e1c6b8d60..6c28177113e1 100644
> --- a/include/ufs/ufshci.h
> +++ b/include/ufs/ufshci.h
> @@ -67,7 +67,7 @@ enum {
>  
>  /* Controller capability masks */
>  enum {
> -	MASK_TRANSFER_REQUESTS_SLOTS		= 0x0000001F,
> +	MASK_TRANSFER_REQUESTS_SLOTS		= 0x000000FF,
>  	MASK_TASK_MANAGEMENT_REQUEST_SLOTS	= 0x00070000,
>  	MASK_EHSLUTRD_SUPPORTED			= 0x00400000,
>  	MASK_AUTO_HIBERN8_SUPPORT		= 0x00800000,




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux