mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Can Guo <quic_cang@quicinc.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: <bvanassche@acm.org>, <mani@kernel.org>,
	<adrian.hunter@intel.com>, <beanhuo@micron.com>,
	<avri.altman@wdc.com>, <junwoo80.lee@samsung.com>,
	<martin.petersen@oracle.com>, <linux-scsi@vger.kernel.org>,
	<linux-arm-msm@vger.kernel.org>, Andy Gross <agross@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Vinod Koul <vkoul@kernel.org>,
	Kishon Vijay Abraham I <kishon@kernel.org>,
	"open list:GENERIC PHY FRAMEWORK" <linux-phy@lists.infradead.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 09/10] phy: qualcomm: phy-qcom-qmp-ufs: Add High Speed Gear 5 support for SM8550
Date: Fri, 24 Nov 2023 09:55:31 +0800	[thread overview]
Message-ID: <c19dee05-a08d-4793-85a9-4527f85ad5ee@quicinc.com> (raw)
In-Reply-To: <CAA8EJpouw-tu+Kz7ExQo+x1p5+fxqRzj=8fZY8GCM6fxB_USYw@mail.gmail.com>



On 11/23/2023 8:35 PM, Dmitry Baryshkov wrote:
> On Thu, 23 Nov 2023 at 10:47, Can Guo <quic_cang@quicinc.com> wrote:
>>
>> On SM8550, two sets of UFS PHY settings are provided, one set is to support
>> HS-G5, another set is to support HS-G4 and lower gears. The two sets of PHY
>> settings are programming different values to different registers, mixing
>> the two sets and/or overwriting one set with another set is definitely not
>> blessed by UFS PHY designers.
>>
>> To add HS-G5 support for SM8550, split the two sets of PHY settings into
>> their dedicated overlay tables, only the common parts of the two sets of
>> PHY settings are left in the .tbls.
>>
>> Consider we are going to add even higher gear support in future, to avoid
>> adding more tables with different names, rename the .tbls_hs_g4 and make it
>> an array, a size of 2 is enough as of now.
>>
>> In this case, .tbls alone is not a complete set of PHY settings, so either
>> tbls_hs_overlay[0] or tbls_hs_overlay[1] must be applied on top of the
>> .tbls to become a complete set of PHY settings.
>>
>> Signed-off-by: Can Guo <quic_cang@quicinc.com>
>>
>> -static void qmp_ufs_init_registers(struct qmp_ufs *qmp, const struct qmp_phy_cfg *cfg)
>> +static bool qmp_ufs_match_gear_overlay(struct qmp_ufs *qmp, const struct qmp_phy_cfg *cfg, int *i)
> 
> You can simply return int from this function. -EINVAL would mean that
> the setting was not found. Also this can make max_supported_gear
> unused.

I will return int in next version, but I'd like to keep the 
max_support_gear, because for platforms which only .tbls is provided (no 
overlay case), we need the max_supported_gear to tell whether the 
requested submode is exceeding the capability provided by the PHY settings.

> 
>> +{
>> +       u32 max_gear, floor_max_gear = cfg->max_supported_gear;
>> +       bool found = false;
>> +       int j;
>> +
>> +       for (j = 0; j < NUM_OVERLAY; j ++) {
>> +               max_gear = cfg->tbls_hs_overlay[j].max_gear;
>> +
>> +               if (max_gear == 0)
>> +                       continue;
>> +
>> +               /* Direct matching, bail */
>> +               if (qmp->submode == max_gear) {
>> +                       *i = j;
>> +                       return true;
>> +               }
>> +
>> +               /* If no direct matching, the lowest gear is the best matching */
>> +               if (max_gear < floor_max_gear) {
>> +                       *i = j;
>> +                       found = true;
>> +                       floor_max_gear = max_gear;
>> +               }
> 
> We know that the table is sorted. So we can return an index of the
> first setting that fits.

For SM8550, it is OK, because no-G5 settings are in overlay[0] and G5 
settings are in overlay[1], applying one overlay is a must.
.tbls                        | support nothing as it is incomplete
.tbls + .tbls_hs_overlay[0]  | support G4 and lower gears
.tb.s + .tbls_hs_overlay[1]  | support G5

But for previously added platforms, no. I put it this way for two reasons -

1. In case the tables are not sorted.
2. For previously added targets, whose configs support G4 and no-G4:
.tbls                        | support G3 and lower gears
.tbls + .tbls_hs_overlay     | support G4
if we anways return an index of the first setting that fits, for these 
targets, the G4 settings would always be programmed, no matter UFS 
driver requests for G2/G3/G4. On these targets, as dual UFS init is 
there to find the most power saving PHY settings, when UFS driver 
requests for G2/G3, .tbls_hs_overlay should NOT be applied. Otherwise, 
it defeats all the efforts which Mani had spent for the dual UFS init.

Thanks,
Can Guo.
> 
>> +       }
>> +
>> +       return found;
>> +}
>> +
>> +static int qmp_ufs_init_registers(struct qmp_ufs *qmp, const struct qmp_phy_cfg *cfg)
>>   {
>> +       bool apply_overlay;
>> +       int i;
>> +
>> +       if (qmp->submode > cfg->max_supported_gear || qmp->submode == 0) {
>> +               dev_err(qmp->dev, "Invalid PHY submode %u\n", qmp->submode);
>> +               return -EINVAL;
>> +       }
>> +
>> +       apply_overlay = qmp_ufs_match_gear_overlay(qmp, cfg, &i);
>> +
>>          qmp_ufs_serdes_init(qmp, &cfg->tbls);
>> +       if (apply_overlay)
>> +               qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_overlay[i]);
>> +
>>          if (qmp->mode == PHY_MODE_UFS_HS_B)
>>                  qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_b);
>> +
>>          qmp_ufs_lanes_init(qmp, &cfg->tbls);
>> -       if (qmp->submode == UFS_HS_G4)
>> -               qmp_ufs_lanes_init(qmp, &cfg->tbls_hs_g4);
>> +       if (apply_overlay)
>> +               qmp_ufs_lanes_init(qmp, &cfg->tbls_hs_overlay[i]);
>> +
>>          qmp_ufs_pcs_init(qmp, &cfg->tbls);
>> -       if (qmp->submode == UFS_HS_G4)
>> -               qmp_ufs_pcs_init(qmp, &cfg->tbls_hs_g4);
>> +       if (apply_overlay)
>> +               qmp_ufs_pcs_init(qmp, &cfg->tbls_hs_overlay[i]);
>> +
>> +       return 0;
>>   }
>>
>>   static int qmp_ufs_com_init(struct qmp_ufs *qmp)
>> @@ -1331,7 +1461,9 @@ static int qmp_ufs_power_on(struct phy *phy)
>>          unsigned int val;
>>          int ret;
>>
>> -       qmp_ufs_init_registers(qmp, cfg);
>> +       ret = qmp_ufs_init_registers(qmp, cfg);
>> +       if (ret)
>> +               return ret;
>>
>>          ret = reset_control_deassert(qmp->ufs_reset);
>>          if (ret)
>> --
>> 2.7.4
>>
>>
> 
> 

  reply	other threads:[~2023-11-24  1:56 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-23  8:46 [PATCH v5 00/10] Enable HS-G5 support on SM8550 Can Guo
2023-11-23  8:46 ` [PATCH v5 01/10] scsi: ufs: host: Rename structure ufs_dev_params to ufs_host_params Can Guo
2023-11-28  5:19   ` Manivannan Sadhasivam
2023-11-28  5:31     ` Manivannan Sadhasivam
2023-11-28  7:49       ` Can Guo
2023-11-28  5:31   ` Nitin Rawat
2023-11-23  8:46 ` [PATCH v5 02/10] scsi: ufs: ufs-qcom: No need to set hs_rate after ufshcd_init_host_param() Can Guo
2023-11-28  5:10   ` Nitin Rawat
2023-11-28  5:22   ` Manivannan Sadhasivam
2023-11-23  8:46 ` [PATCH v5 03/10] scsi: ufs: ufs-qcom: Setup host power mode during init Can Guo
2023-11-28  5:06   ` Nitin Rawat
2023-11-28  5:24   ` Manivannan Sadhasivam
2023-11-23  8:46 ` [PATCH v5 04/10] scsi: ufs: ufs-qcom: Limit negotiated gear to selected PHY gear Can Guo
2023-11-28  5:45   ` Manivannan Sadhasivam
2023-11-28  8:05     ` Can Guo
2023-11-28 10:52       ` Manivannan Sadhasivam
2023-11-28 11:03         ` Can Guo
2023-11-28 11:20           ` Manivannan Sadhasivam
2023-11-23  8:46 ` [PATCH v5 05/10] scsi: ufs: ufs-qcom: Allow the first init start with the maximum supported gear Can Guo
2023-11-23  8:46 ` [PATCH v5 06/10] scsi: ufs: ufs-qcom: Limit HS-G5 Rate-A to hosts with HW version 5 Can Guo
2023-11-28  5:15   ` Nitin Rawat
2023-11-28  5:55   ` Manivannan Sadhasivam
2023-11-28  7:48     ` Can Guo
2023-11-28 10:55       ` Manivannan Sadhasivam
2023-11-28 10:59         ` Can Guo
2023-11-28 11:24           ` Manivannan Sadhasivam
2023-11-23  8:46 ` [PATCH v5 07/10] scsi: ufs: ufs-qcom: Set initial PHY gear to max HS gear for HW ver 5 and newer Can Guo
2023-11-28  6:00   ` Manivannan Sadhasivam
2023-11-28  7:58     ` Can Guo
2023-11-28 10:59       ` Manivannan Sadhasivam
2023-11-28 11:01         ` Can Guo
2023-11-28 11:22           ` Manivannan Sadhasivam
2023-11-23  8:46 ` [PATCH v5 08/10] phy: qualcomm: phy-qcom-qmp-ufs: Rectify SM8550 UFS HS-G4 PHY Settings Can Guo
2023-11-27 11:07   ` Vinod Koul
2023-11-28  1:50     ` Can Guo
2023-11-28  6:02   ` Manivannan Sadhasivam
2023-11-23  8:46 ` [PATCH v5 09/10] phy: qualcomm: phy-qcom-qmp-ufs: Add High Speed Gear 5 support for SM8550 Can Guo
2023-11-23 12:35   ` Dmitry Baryshkov
2023-11-24  1:55     ` Can Guo [this message]
2023-11-28  6:47   ` Manivannan Sadhasivam
2023-11-28  9:00     ` Can Guo
2023-11-28  9:59   ` neil.armstrong
2023-11-28 10:03     ` Can Guo
2023-11-23  8:46 ` [PATCH v5 10/10] scsi: ufs: ufs-qcom: Add support for UFS device version detection Can Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c19dee05-a08d-4793-85a9-4527f85ad5ee@quicinc.com \
    --to=quic_cang@quicinc.com \
    --cc=adrian.hunter@intel.com \
    --cc=agross@kernel.org \
    --cc=andersson@kernel.org \
    --cc=avri.altman@wdc.com \
    --cc=beanhuo@micron.com \
    --cc=bvanassche@acm.org \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=junwoo80.lee@samsung.com \
    --cc=kishon@kernel.org \
    --cc=konrad.dybcio@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mani@kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®