2022-04-24 01:33:07

by Manivannan Sadhasivam

[permalink] [raw]
Subject: [PATCH v2 0/5] Qcom UFS driver updates

Hi,

This series has some cleanups and updates to the Qcom UFS driver. There
is also a patch that removes the redundant wmb() from
ufshcd_send_command() in ufshcd driver.

All these patches are tested on Qualcomm Robotics RB3 platform.

Thanks,
Mani

Changes in v2:

* Used dev_err_probe() instead of dev_err().
* Removed the wmb() from ufs_qcom_dev_ref_clk_ctrl() as that is not required.
* Added Reviewed-by tag from Bart for patch 4/5.

Manivannan Sadhasivam (5):
scsi: ufs: qcom: Fix acquiring the optional reset control line
scsi: ufs: qcom: Simplify handling of devm_phy_get()
scsi: ufs: qcom: Add a readl() to make sure ref_clk gets enabled
scsi: ufs: core: Remove redundant wmb() in ufshcd_send_command()
scsi: ufs: qcom: Enable RPM_AUTOSUSPEND for runtime PM

drivers/scsi/ufs/ufs-qcom.c | 44 ++++++++++++++-----------------------
drivers/scsi/ufs/ufshcd.c | 3 ---
2 files changed, 16 insertions(+), 31 deletions(-)

--
2.25.1


2022-04-24 13:03:39

by Manivannan Sadhasivam

[permalink] [raw]
Subject: [PATCH v2 2/5] scsi: ufs: qcom: Simplify handling of devm_phy_get()

There is no need to call devm_phy_get() if ACPI is used, so skip it.
The "host->generic_phy" pointer should already be NULL due to the kzalloc,
so no need to set it NULL again.

Also, don't print the error message in case of -EPROBE_DEFER and return
the error code directly.

While at it, also remove the comment that has no relationship with
devm_phy_get().

Signed-off-by: Manivannan Sadhasivam <[email protected]>
---
drivers/scsi/ufs/ufs-qcom.c | 26 +++++---------------------
1 file changed, 5 insertions(+), 21 deletions(-)

diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index bee81b45299e..6ee33cc0ad09 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -1022,28 +1022,12 @@ static int ufs_qcom_init(struct ufs_hba *hba)
err = 0;
}

- /*
- * voting/devoting device ref_clk source is time consuming hence
- * skip devoting it during aggressive clock gating. This clock
- * will still be gated off during runtime suspend.
- */
- host->generic_phy = devm_phy_get(dev, "ufsphy");
-
- if (host->generic_phy == ERR_PTR(-EPROBE_DEFER)) {
- /*
- * UFS driver might be probed before the phy driver does.
- * In that case we would like to return EPROBE_DEFER code.
- */
- err = -EPROBE_DEFER;
- dev_warn(dev, "%s: required phy device. hasn't probed yet. err = %d\n",
- __func__, err);
- goto out_variant_clear;
- } else if (IS_ERR(host->generic_phy)) {
- if (has_acpi_companion(dev)) {
- host->generic_phy = NULL;
- } else {
+ if (!has_acpi_companion(dev)) {
+ host->generic_phy = devm_phy_get(dev, "ufsphy");
+ if (IS_ERR(host->generic_phy)) {
err = PTR_ERR(host->generic_phy);
- dev_err(dev, "%s: PHY get failed %d\n", __func__, err);
+ if (err != -EPROBE_DEFER)
+ dev_err_probe(dev, err, "Failed to get PHY\n");
goto out_variant_clear;
}
}
--
2.25.1

2022-04-24 13:17:02

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH v2 2/5] scsi: ufs: qcom: Simplify handling of devm_phy_get()

On Sat 23 Apr 07:02 PDT 2022, Manivannan Sadhasivam wrote:

> There is no need to call devm_phy_get() if ACPI is used, so skip it.
> The "host->generic_phy" pointer should already be NULL due to the kzalloc,
> so no need to set it NULL again.
>
> Also, don't print the error message in case of -EPROBE_DEFER and return
> the error code directly.
>
> While at it, also remove the comment that has no relationship with
> devm_phy_get().
>
> Signed-off-by: Manivannan Sadhasivam <[email protected]>
> ---
> drivers/scsi/ufs/ufs-qcom.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
> index bee81b45299e..6ee33cc0ad09 100644
> --- a/drivers/scsi/ufs/ufs-qcom.c
> +++ b/drivers/scsi/ufs/ufs-qcom.c
> @@ -1022,28 +1022,12 @@ static int ufs_qcom_init(struct ufs_hba *hba)
> err = 0;
> }
>
> - /*
> - * voting/devoting device ref_clk source is time consuming hence
> - * skip devoting it during aggressive clock gating. This clock
> - * will still be gated off during runtime suspend.
> - */
> - host->generic_phy = devm_phy_get(dev, "ufsphy");
> -
> - if (host->generic_phy == ERR_PTR(-EPROBE_DEFER)) {
> - /*
> - * UFS driver might be probed before the phy driver does.
> - * In that case we would like to return EPROBE_DEFER code.
> - */
> - err = -EPROBE_DEFER;
> - dev_warn(dev, "%s: required phy device. hasn't probed yet. err = %d\n",
> - __func__, err);
> - goto out_variant_clear;
> - } else if (IS_ERR(host->generic_phy)) {
> - if (has_acpi_companion(dev)) {
> - host->generic_phy = NULL;
> - } else {
> + if (!has_acpi_companion(dev)) {
> + host->generic_phy = devm_phy_get(dev, "ufsphy");
> + if (IS_ERR(host->generic_phy)) {
> err = PTR_ERR(host->generic_phy);
> - dev_err(dev, "%s: PHY get failed %d\n", __func__, err);
> + if (err != -EPROBE_DEFER)
> + dev_err_probe(dev, err, "Failed to get PHY\n");

I believe the idiomatic form is:
err = dev_err_probe(dev, PTR_ERR(host->generic_phy), "Failed to get PHY\n");


But as with the previous patch, please remove the condition and you have
my:

Reviewed-by: Bjorn Andersson <[email protected]>

Regards,
Bjorn

> goto out_variant_clear;
> }
> }
> --
> 2.25.1
>

2022-04-26 05:43:01

by Andrew Halaney

[permalink] [raw]
Subject: Re: [PATCH v2 2/5] scsi: ufs: qcom: Simplify handling of devm_phy_get()

On Sat, Apr 23, 2022 at 08:16:55AM -0700, Bjorn Andersson wrote:
> On Sat 23 Apr 07:02 PDT 2022, Manivannan Sadhasivam wrote:
>
> > There is no need to call devm_phy_get() if ACPI is used, so skip it.
> > The "host->generic_phy" pointer should already be NULL due to the kzalloc,
> > so no need to set it NULL again.
> >
> > Also, don't print the error message in case of -EPROBE_DEFER and return
> > the error code directly.
> >
> > While at it, also remove the comment that has no relationship with
> > devm_phy_get().
> >
> > Signed-off-by: Manivannan Sadhasivam <[email protected]>
> > ---
> > drivers/scsi/ufs/ufs-qcom.c | 26 +++++---------------------
> > 1 file changed, 5 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
> > index bee81b45299e..6ee33cc0ad09 100644
> > --- a/drivers/scsi/ufs/ufs-qcom.c
> > +++ b/drivers/scsi/ufs/ufs-qcom.c
> > @@ -1022,28 +1022,12 @@ static int ufs_qcom_init(struct ufs_hba *hba)
> > err = 0;
> > }
> >
> > - /*
> > - * voting/devoting device ref_clk source is time consuming hence
> > - * skip devoting it during aggressive clock gating. This clock
> > - * will still be gated off during runtime suspend.
> > - */
> > - host->generic_phy = devm_phy_get(dev, "ufsphy");
> > -
> > - if (host->generic_phy == ERR_PTR(-EPROBE_DEFER)) {
> > - /*
> > - * UFS driver might be probed before the phy driver does.
> > - * In that case we would like to return EPROBE_DEFER code.
> > - */
> > - err = -EPROBE_DEFER;
> > - dev_warn(dev, "%s: required phy device. hasn't probed yet. err = %d\n",
> > - __func__, err);
> > - goto out_variant_clear;
> > - } else if (IS_ERR(host->generic_phy)) {
> > - if (has_acpi_companion(dev)) {
> > - host->generic_phy = NULL;
> > - } else {
> > + if (!has_acpi_companion(dev)) {
> > + host->generic_phy = devm_phy_get(dev, "ufsphy");
> > + if (IS_ERR(host->generic_phy)) {
> > err = PTR_ERR(host->generic_phy);
> > - dev_err(dev, "%s: PHY get failed %d\n", __func__, err);
> > + if (err != -EPROBE_DEFER)
> > + dev_err_probe(dev, err, "Failed to get PHY\n");
>
> I believe the idiomatic form is:
> err = dev_err_probe(dev, PTR_ERR(host->generic_phy), "Failed to get PHY\n");
>
>
> But as with the previous patch, please remove the condition and you have
> my:
>
> Reviewed-by: Bjorn Andersson <[email protected]>
>
> Regards,
> Bjorn

With the Bjorn's suggested change applied:
Reviewed-by: Andrew Halaney <[email protected]>

Thanks,
Andrew

>
> > goto out_variant_clear;
> > }
> > }
> > --
> > 2.25.1
> >
>