Re: [PATCH V3 1/2] ufs: core: Configure only active lanes during link
From: Manivannan Sadhasivam
Date: Thu Apr 16 2026 - 07:12:50 EST
On Tue, Apr 14, 2026 at 03:01:34PM +0530, palash.kambar@xxxxxxxxxxxxxxxx wrote:
> From: Palash Kambar <palash.kambar@xxxxxxxxxxxxxxxx>
>
> The number of connected lanes detected during UFS link startup can be
> fewer than the lanes specified in the device tree. The current driver
> logic attempts to configure all lanes defined in the device tree,
> regardless of their actual availability. This mismatch may cause
> failures during power mode changes.
>
> Hence, Add a check during link startup to ensure that only the lanes
> actually discovered are considered valid. If a mismatch is detected,
> fail the initialization early, preventing the driver from entering
> an unsupported configuration that could cause power mode transition
> failures.
>
> Signed-off-by: Palash Kambar <palash.kambar@xxxxxxxxxxxxxxxx>
> ---
> drivers/ufs/core/ufshcd.c | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index 31950fc51a4c..754bf4df3016 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -5035,6 +5035,38 @@ void ufshcd_update_evt_hist(struct ufs_hba *hba, u32 id, u32 val)
> }
> EXPORT_SYMBOL_GPL(ufshcd_update_evt_hist);
>
> +static int ufshcd_validate_link_params(struct ufs_hba *hba)
> +{
> + int ret;
> + int val;
ret, val
> +
> + ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_CONNECTEDTXDATALANES),
> + &val);
> + if (ret)
> + goto out;
> +
> + if (val != hba->lanes_per_direction) {
> + dev_err(hba->dev, "Tx lane mismatch [config,reported] [%d,%d]\n",
> + hba->lanes_per_direction, val);
> + ret = -ENOLINK;
> + goto out;
> + }
> +
> + ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_CONNECTEDRXDATALANES),
> + &val);
> + if (ret)
> + goto out;
> +
> + if (val != hba->lanes_per_direction) {
> + dev_err(hba->dev, "Rx lane mismatch [config,reported] [%d,%d]\n",
> + hba->lanes_per_direction, val);
> + ret = -ENOLINK;
goto out;
> + }
> +
return 0;
> +out:
> + return ret;
> +}
> +
> /**
> * ufshcd_link_startup - Initialize unipro link startup
> * @hba: per adapter instance
> @@ -5108,6 +5140,11 @@ static int ufshcd_link_startup(struct ufs_hba *hba)
> goto out;
> }
>
> + /* Check successfully detected lanes */
Drop the comment.
- Mani
--
மணிவண்ணன் சதாசிவம்