Re: [PATCH v4 06/10] phy: qcom: Add M31 based eUSB2 PHY driver

From: Wesley Cheng
Date: Mon May 19 2025 - 18:05:33 EST


Hi Konrad,

On 5/17/2025 11:28 AM, Konrad Dybcio wrote:
On 5/14/25 8:24 PM, Wesley Cheng wrote:
Hi Vinod,

On 5/14/2025 1:33 AM, Vinod Koul wrote:
On 16-04-25, 15:45, Wesley Cheng wrote:
Hi Vinod,

On 4/10/2025 4:53 AM, Vinod Koul wrote:
On 09-04-25, 10:48, Melody Olvera wrote:

+static int m31eusb2_phy_write_readback(void __iomem *base, u32 offset,
+ const u32 mask, u32 val)
+{
+ u32 write_val;
+ u32 tmp;
+
+ tmp = readl_relaxed(base + offset);
+ tmp &= ~mask;
+ write_val = tmp | val;
+
+ writel_relaxed(write_val, base + offset);
+
+ tmp = readl_relaxed(base + offset);

Why are you using _relaxed version here?


No particular reason. I think someone pointed this out previously, and I
was open to use the non-relaxed variants, but I assume using the relaxed vs
non-relaxed apis comes down to preference in this case.

Nope you cant! There _needs_ to be a specific reasons!
When you are doing read, modify, write, it is very important to know the
right version to use...


I mean, its a write readback, which ensures the bus transaction is complete
based on [1], hence why **in this situation** it is up to preference.

Otherwise, w/o the readback then we'd need to ensure writes are made
depending on the required sequencing (in spots where the sequence is
strictly defined), and that can be enforced using barriers. If you feel
like using the non-relaxed variant is preferred let me know. I can replace
it and remove the readback.

Readback is stronger on arm64, as otherwise the writes may be buffered and
not observable at the other endpoint even though the instruction has been
issued, even if a barrier has been issued

Some resources:

https://youtu.be/i6DayghhA8Q
https://lore.kernel.org/linux-arm-msm/20240618153419.GC2354@willie-the-truck/
https://developer.arm.com/documentation/ddi0487/latest sec B2.6.9

There's been a real bug observed (pun not intended):
Commit 2f8cf2c3f3e3 ("clk: qcom: reset: Ensure write completion on reset de/assertion")


Thanks for sharing. Useful info...The way I interpret it, even between relaxed and non-relaxed variants, a readback is always desired.

Thanks
Wesley Cheng