Re: [PATCH v2 10/11] scsi: ufs: ufs-qcom: Implement vops apply_tx_eqtr_settings()

From: Manivannan Sadhasivam

Date: Wed Mar 04 2026 - 10:46:00 EST


On Wed, Mar 04, 2026 at 05:53:12AM -0800, Can Guo wrote:
> On some platforms, when Host Software triggers TX Equalization Training,
> HW does not take TX EQTR settings programmed in PA_TxEQTRSetting, instead
> HW takes TX EQTR settings from PA_TxEQG1Setting. Implement vops
> apply_tx_eqtr_setting() to work around it by programming TX EQTR settings
> to PA_TxEQG1Setting during TX EQTR procedure.
>
> Signed-off-by: Can Guo <can.guo@xxxxxxxxxxxxxxxx>
> ---
> drivers/ufs/host/ufs-qcom.c | 33 +++++++++++++++++++++++++++++++++
> drivers/ufs/host/ufs-qcom.h | 2 ++
> 2 files changed, 35 insertions(+)
>
> diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c
> index b8fa4670ddd6..89bea823a08b 100644
> --- a/drivers/ufs/host/ufs-qcom.c
> +++ b/drivers/ufs/host/ufs-qcom.c
> @@ -2848,6 +2848,28 @@ static int ufs_qcom_get_rx_fom(struct ufs_hba *hba,
> return ret;
> }
>
> +static int ufs_qcom_apply_tx_eqtr_settings(struct ufs_hba *hba,
> + struct ufs_pa_layer_attr *pwr_mode,
> + struct tx_eqtr_iter *h_iter,
> + struct tx_eqtr_iter *d_iter)
> +{
> + struct ufs_qcom_host *host = ufshcd_get_variant(hba);
> + u32 setting = 0;
> + int lane, ret;
> +
> + if (host->hw_ver.major != 0x7 || host->hw_ver.minor > 0x1)
> + return 0;
> +
> + for (lane = 0; lane < h_iter->num_lanes; lane++) {
> + setting |= TX_HS_PRESHOOT_BITS(lane, h_iter->preshoot);
> + setting |= TX_HS_DEEMPHASIS_BITS(lane, h_iter->deemphasis);
> + }
> +
> + ret = ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TXEQG1SETTING), setting);

nit: return ...

- Mani

--
மணிவண்ணன் சதாசிவம்