Re: [PATCH v4 1/2] ufs: core: Configure only active lanes during link

From: Palash Kambar

Date: Wed Apr 22 2026 - 07:43:37 EST




On 4/20/2026 3:10 PM, Manivannan Sadhasivam wrote:
> 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.
>

Ok Mani, will address the comments.

>