2019-12-09 22:01:46

by Evan Green

[permalink] [raw]
Subject: [PATCH] phy: ufs-qcom: Invert PCS ready logic for SDM845 UFS

The SDM845 UFS phy seems to want to do a low transition to become
ready, rather than a high transition. Without this, I am unable to
enumerate UFS on SDM845 when booted from USB.

Fixes: 14ced7e3a1a ('phy: qcom-qmp: Correct ready status, again')

Signed-off-by: Evan Green <[email protected]>
---

Bjorn,
At this point I'm super confused on what the correct behavior
should be. Lack of documentation doesn't help. I'm worried that this
change breaks UFS on some other platforms, so I'm hoping you or some
PHY folks might have some advice on what the right thing to do is.

---
drivers/phy/qualcomm/phy-qcom-qmp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
index 091e20303a14d..c4f4294360b6e 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
@@ -1657,7 +1657,7 @@ static int qcom_qmp_phy_enable(struct phy *phy)
if (cfg->type == PHY_TYPE_UFS) {
status = pcs + cfg->regs[QPHY_PCS_READY_STATUS];
mask = PCS_READY;
- ready = PCS_READY;
+ ready = 0;
} else {
status = pcs + cfg->regs[QPHY_PCS_STATUS];
mask = PHYSTATUS;
--
2.21.0


2019-12-10 18:51:38

by Evan Green

[permalink] [raw]
Subject: Re: [PATCH] phy: ufs-qcom: Invert PCS ready logic for SDM845 UFS

On Mon, Dec 9, 2019 at 2:00 PM Evan Green <[email protected]> wrote:
>
> The SDM845 UFS phy seems to want to do a low transition to become
> ready, rather than a high transition. Without this, I am unable to
> enumerate UFS on SDM845 when booted from USB.
>
> Fixes: 14ced7e3a1a ('phy: qcom-qmp: Correct ready status, again')
>
> Signed-off-by: Evan Green <[email protected]>
> ---
>
> Bjorn,
> At this point I'm super confused on what the correct behavior
> should be. Lack of documentation doesn't help. I'm worried that this
> change breaks UFS on some other platforms, so I'm hoping you or some
> PHY folks might have some advice on what the right thing to do is.

Disregard this patch. Bjorn pointed me to the patch below, which is
the right fix for my issue:
https://lore.kernel.org/linux-arm-msm/[email protected]/

2019-12-10 19:03:15

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH] phy: ufs-qcom: Invert PCS ready logic for SDM845 UFS

On Mon 09 Dec 14:00 PST 2019, Evan Green wrote:

> The SDM845 UFS phy seems to want to do a low transition to become
> ready, rather than a high transition. Without this, I am unable to
> enumerate UFS on SDM845 when booted from USB.
>
> Fixes: 14ced7e3a1a ('phy: qcom-qmp: Correct ready status, again')
>
> Signed-off-by: Evan Green <[email protected]>

As concluded offline, the current logic is correct, but for some reason
we need a longer timeout on this particular device.

Regards,
Bjorn

> ---
>
> Bjorn,
> At this point I'm super confused on what the correct behavior
> should be. Lack of documentation doesn't help. I'm worried that this
> change breaks UFS on some other platforms, so I'm hoping you or some
> PHY folks might have some advice on what the right thing to do is.
>
> ---
> drivers/phy/qualcomm/phy-qcom-qmp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
> index 091e20303a14d..c4f4294360b6e 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
> @@ -1657,7 +1657,7 @@ static int qcom_qmp_phy_enable(struct phy *phy)
> if (cfg->type == PHY_TYPE_UFS) {
> status = pcs + cfg->regs[QPHY_PCS_READY_STATUS];
> mask = PCS_READY;
> - ready = PCS_READY;
> + ready = 0;
> } else {
> status = pcs + cfg->regs[QPHY_PCS_STATUS];
> mask = PHYSTATUS;
> --
> 2.21.0
>