Messages in this thread | | | Date | Tue, 15 Sep 2020 01:49:24 -0700 | From | nguyenb@codeauro ... | Subject | Re: [PATCH v1 1/1] scsi: ufshcd: Properly set the device Icc Level |
| |
On 2020-09-14 19:54, Bjorn Andersson wrote: > On Tue 01 Sep 01:19 UTC 2020, Bao D. Nguyen wrote: > >> UFS version 3.0 and later devices require Vcc and Vccq power supplies >> with Vccq2 being optional. While earlier UFS version 2.0 and 2.1 >> devices, the Vcc and Vccq2 are required with Vccq being optional. >> Check the required power supplies used by the device >> and set the device's supported Icc level properly. >> >> Signed-off-by: Can Guo <cang@codeaurora.org> >> Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> >> Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org> >> --- >> drivers/scsi/ufs/ufshcd.c | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c >> index 06e2439..fdd1d3e 100644 >> --- a/drivers/scsi/ufs/ufshcd.c >> +++ b/drivers/scsi/ufs/ufshcd.c >> @@ -6845,8 +6845,9 @@ static u32 >> ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba, >> { >> u32 icc_level = 0; >> >> - if (!hba->vreg_info.vcc || !hba->vreg_info.vccq || >> - !hba->vreg_info.vccq2) { >> + if (!hba->vreg_info.vcc || > > How did you test this? > > devm_regulator_get() never returns NULL, so afaict this conditional > will > never be taken with either the old or new version of the code. Thanks for your comment. The call flow is as follows: ufshcd_pltfrm_init->ufshcd_parse_regulator_info->ufshcd_populate_vreg In the ufshcd_populate_vreg() function, it looks for DT entries "%s-supply" For UFS3.0+ devices, "vccq2-supply" is optional, so the vendor may choose not to provide vccq2-supply in the DT. As a result, a NULL is returned to hba->vreg_info.vccq2. Same for UFS2.0 and UFS2.1 devices, a NULL may be returned to hba->vreg_info.vccq if vccq-supply is not provided in the DT. The current code only checks for !hba->vreg_info.vccq OR !hba->vreg_info.vccq2. It will skip the setting for icc_level if either vccq or vccq2 is not provided in the DT. > > Regards, > Bjorn > >> + (!hba->vreg_info.vccq && hba->dev_info.wspecversion >= 0x300) || >> + (!hba->vreg_info.vccq2 && hba->dev_info.wspecversion < 0x300)) { >> dev_err(hba->dev, >> "%s: Regulator capability was not set, actvIccLevel=%d", >> __func__, icc_level); >> -- >> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora >> Forum, >> a Linux Foundation Collaborative Project >>
| |