Re: [PATCH v4 1/2] ufs: core: Configure only active lanes during link
From: Manivannan Sadhasivam
Date: Mon Apr 20 2026 - 05:41:05 EST
On Fri, Apr 17, 2026 at 10:26:01AM +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>
One comment below. With that fixed,
Reviewed-by: Manivannan Sadhasivam <mani@xxxxxxxxxx>
> ---
> drivers/ufs/core/ufshcd.c | 38 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index 31950fc51a4c..10f8d2b552be 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -5035,6 +5035,40 @@ 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, val;
> +
> + ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_CONNECTEDTXDATALANES),
> + &val);
> + if (ret)
> + goto out;
Return 'ret' directly, here and below.
> +
> + 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;
Odd indent.
- Mani
--
மணிவண்ணன் சதாசிவம்