diff mbox series

[v7] usb: dwc3: core: Workaround for CSR read timeout

Message ID 20240619114529.3441-1-joswang1221@gmail.com
State Superseded
Headers show
Series [v7] usb: dwc3: core: Workaround for CSR read timeout | expand

Commit Message

joswang June 19, 2024, 11:45 a.m. UTC
From: Jos Wang <joswang@lenovo.com>

This is a workaround for STAR 4846132, which only affects
DWC_usb31 version2.00a operating in host mode.

There is a problem in DWC_usb31 version 2.00a operating
in host mode that would cause a CSR read timeout When CSR
read coincides with RAM Clock Gating Entry. By disable
Clock Gating, sacrificing power consumption for normal
operation.

Cc: stable@vger.kernel.org
Signed-off-by: Jos Wang <joswang@lenovo.com>
---
v6 -> v7: code no change. Just add the v4->v5 and v5->v6
 version difference description
v5 -> v6: code no change. however, there were two v5
 patches, which confused the reviewers, so a v6 version
 was submitted.
v4 -> v5: code no change. Patches "1/3" and "2/3" of the
 patch series are under review, this patch is submitted
 independently.
v3 -> v4: modify commit message, add Cc: stable@vger.kernel.org
v2 -> v3:
- code refactor
- modify comment, add STAR number, workaround applied in host mode
- modify commit message, add STAR number, workaround applied in host mode
- modify Author Jos Wang
v1 -> v2: code no change. Add other case patches to the patch series

 drivers/usb/dwc3/core.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

Comments

Greg Kroah-Hartman June 20, 2024, 5:16 p.m. UTC | #1
On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> From: Jos Wang <joswang@lenovo.com>
> 
> This is a workaround for STAR 4846132, which only affects
> DWC_usb31 version2.00a operating in host mode.
> 
> There is a problem in DWC_usb31 version 2.00a operating
> in host mode that would cause a CSR read timeout When CSR
> read coincides with RAM Clock Gating Entry. By disable
> Clock Gating, sacrificing power consumption for normal
> operation.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Jos Wang <joswang@lenovo.com>

What commit id does this fix?  How far back should it be backported in
the stable releases?

thanks,

greg k-h
joswang June 21, 2024, 1:40 a.m. UTC | #2
On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > From: Jos Wang <joswang@lenovo.com>
> >
> > This is a workaround for STAR 4846132, which only affects
> > DWC_usb31 version2.00a operating in host mode.
> >
> > There is a problem in DWC_usb31 version 2.00a operating
> > in host mode that would cause a CSR read timeout When CSR
> > read coincides with RAM Clock Gating Entry. By disable
> > Clock Gating, sacrificing power consumption for normal
> > operation.
> >
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Jos Wang <joswang@lenovo.com>
>
> What commit id does this fix?  How far back should it be backported in
> the stable releases?
>
> thanks,
>
> greg k-h

Hello Greg Thinh

It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
Add DWC31 version 2.00a controller")
in 6.8.0-rc6 branch ?

Thanks

Jos Wang
Greg Kroah-Hartman June 21, 2024, 5:19 a.m. UTC | #3
On Fri, Jun 21, 2024 at 09:40:10AM +0800, joswang wrote:
> On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> >
> > On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > > From: Jos Wang <joswang@lenovo.com>
> > >
> > > This is a workaround for STAR 4846132, which only affects
> > > DWC_usb31 version2.00a operating in host mode.
> > >
> > > There is a problem in DWC_usb31 version 2.00a operating
> > > in host mode that would cause a CSR read timeout When CSR
> > > read coincides with RAM Clock Gating Entry. By disable
> > > Clock Gating, sacrificing power consumption for normal
> > > operation.
> > >
> > > Cc: stable@vger.kernel.org
> > > Signed-off-by: Jos Wang <joswang@lenovo.com>
> >
> > What commit id does this fix?  How far back should it be backported in
> > the stable releases?
> >
> > thanks,
> >
> > greg k-h
> 
> Hello Greg Thinh
> 
> It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
> Add DWC31 version 2.00a controller")
> in 6.8.0-rc6 branch ?

That commit showed up in 6.9, not 6.8.  And if so, please resend with a
proper "Fixes:" tag.

thanks,

greg k-h
Thinh Nguyen June 21, 2024, 5:42 a.m. UTC | #4
On Fri, Jun 21, 2024, Greg KH wrote:
> On Fri, Jun 21, 2024 at 09:40:10AM +0800, joswang wrote:
> > On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> > >
> > > On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > > > From: Jos Wang <joswang@lenovo.com>
> > > >
> > > > This is a workaround for STAR 4846132, which only affects
> > > > DWC_usb31 version2.00a operating in host mode.
> > > >
> > > > There is a problem in DWC_usb31 version 2.00a operating
> > > > in host mode that would cause a CSR read timeout When CSR
> > > > read coincides with RAM Clock Gating Entry. By disable
> > > > Clock Gating, sacrificing power consumption for normal
> > > > operation.
> > > >
> > > > Cc: stable@vger.kernel.org
> > > > Signed-off-by: Jos Wang <joswang@lenovo.com>
> > >
> > > What commit id does this fix?  How far back should it be backported in
> > > the stable releases?
> > >
> > > thanks,
> > >
> > > greg k-h
> > 
> > Hello Greg Thinh
> > 
> > It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
> > Add DWC31 version 2.00a controller")
> > in 6.8.0-rc6 branch ?
> 
> That commit showed up in 6.9, not 6.8.  And if so, please resend with a
> proper "Fixes:" tag.
> 

This patch workarounds the controller's issue. It doesn't resolve any
particular commit that requires a "Fixes" tag. So, this should go on
"next". It can be backported as needed. If it's to be backported, it can
probably go back to as far as v4.3, to commit 690fb3718a70 ("usb: dwc3:
Support Synopsys USB 3.1 IP"). But you'd need to collect all the
dependencies including the commit mention above.

BR,
Thinh
Greg Kroah-Hartman June 21, 2024, 5:49 a.m. UTC | #5
On Fri, Jun 21, 2024 at 05:42:42AM +0000, Thinh Nguyen wrote:
> On Fri, Jun 21, 2024, Greg KH wrote:
> > On Fri, Jun 21, 2024 at 09:40:10AM +0800, joswang wrote:
> > > On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> > > >
> > > > On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > > > > From: Jos Wang <joswang@lenovo.com>
> > > > >
> > > > > This is a workaround for STAR 4846132, which only affects
> > > > > DWC_usb31 version2.00a operating in host mode.
> > > > >
> > > > > There is a problem in DWC_usb31 version 2.00a operating
> > > > > in host mode that would cause a CSR read timeout When CSR
> > > > > read coincides with RAM Clock Gating Entry. By disable
> > > > > Clock Gating, sacrificing power consumption for normal
> > > > > operation.
> > > > >
> > > > > Cc: stable@vger.kernel.org
> > > > > Signed-off-by: Jos Wang <joswang@lenovo.com>
> > > >
> > > > What commit id does this fix?  How far back should it be backported in
> > > > the stable releases?
> > > >
> > > > thanks,
> > > >
> > > > greg k-h
> > > 
> > > Hello Greg Thinh
> > > 
> > > It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
> > > Add DWC31 version 2.00a controller")
> > > in 6.8.0-rc6 branch ?
> > 
> > That commit showed up in 6.9, not 6.8.  And if so, please resend with a
> > proper "Fixes:" tag.
> > 
> 
> This patch workarounds the controller's issue.

So it fixes a bug?  Or does not fix a bug?  I'm confused.

> It doesn't resolve any
> particular commit that requires a "Fixes" tag. So, this should go on
> "next". It can be backported as needed.

Who would do the backporting and when?

> If it's to be backported, it can
> probably go back to as far as v4.3, to commit 690fb3718a70 ("usb: dwc3:
> Support Synopsys USB 3.1 IP"). But you'd need to collect all the
> dependencies including the commit mention above.

I don't understand, sorry.  Is this just a normal "evolve the driver to
work better" change, or is it a "fix broken code" change, or is it
something else?

In other words, what do you want to see happen to this?  What tree(s)
would you want it applied to?

thanks,

greg k-h
Thinh Nguyen June 21, 2024, 6:20 a.m. UTC | #6
On Fri, Jun 21, 2024, Greg KH wrote:
> On Fri, Jun 21, 2024 at 05:42:42AM +0000, Thinh Nguyen wrote:
> > On Fri, Jun 21, 2024, Greg KH wrote:
> > > On Fri, Jun 21, 2024 at 09:40:10AM +0800, joswang wrote:
> > > > On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> > > > >
> > > > > On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > > > > > From: Jos Wang <joswang@lenovo.com>
> > > > > >
> > > > > > This is a workaround for STAR 4846132, which only affects
> > > > > > DWC_usb31 version2.00a operating in host mode.
> > > > > >
> > > > > > There is a problem in DWC_usb31 version 2.00a operating
> > > > > > in host mode that would cause a CSR read timeout When CSR
> > > > > > read coincides with RAM Clock Gating Entry. By disable
> > > > > > Clock Gating, sacrificing power consumption for normal
> > > > > > operation.
> > > > > >
> > > > > > Cc: stable@vger.kernel.org
> > > > > > Signed-off-by: Jos Wang <joswang@lenovo.com>
> > > > >
> > > > > What commit id does this fix?  How far back should it be backported in
> > > > > the stable releases?
> > > > >
> > > > > thanks,
> > > > >
> > > > > greg k-h
> > > > 
> > > > Hello Greg Thinh
> > > > 
> > > > It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
> > > > Add DWC31 version 2.00a controller")
> > > > in 6.8.0-rc6 branch ?
> > > 
> > > That commit showed up in 6.9, not 6.8.  And if so, please resend with a
> > > proper "Fixes:" tag.
> > > 
> > 
> > This patch workarounds the controller's issue.
> 
> So it fixes a bug?  Or does not fix a bug?  I'm confused.

The bug is not a driver's bug. The fix applies to a hardware bug and not
any particular commit that can be referenced with a "Fixes" tag.

> 
> > It doesn't resolve any
> > particular commit that requires a "Fixes" tag. So, this should go on
> > "next". It can be backported as needed.
> 
> Who would do the backporting and when?

For anyone who doesn't use mainline kernel that needs this patch
backported to their kernel version.

> 
> > If it's to be backported, it can
> > probably go back to as far as v4.3, to commit 690fb3718a70 ("usb: dwc3:
> > Support Synopsys USB 3.1 IP"). But you'd need to collect all the
> > dependencies including the commit mention above.
> 
> I don't understand, sorry.  Is this just a normal "evolve the driver to
> work better" change, or is it a "fix broken code" change, or is it
> something else?
> 
> In other words, what do you want to see happen to this?  What tree(s)
> would you want it applied to?
> 

It's up to you, but it seems to fit "usb-testing" branch more since it
doesn't have a "Fixes" tag. The severity of this fix is debatable since
it doesn't apply to every DWC_usb31 configuration or every scenario.

Thanks,
Thinh
Greg Kroah-Hartman June 21, 2024, 7:09 a.m. UTC | #7
On Fri, Jun 21, 2024 at 06:20:38AM +0000, Thinh Nguyen wrote:
> On Fri, Jun 21, 2024, Greg KH wrote:
> > On Fri, Jun 21, 2024 at 05:42:42AM +0000, Thinh Nguyen wrote:
> > > On Fri, Jun 21, 2024, Greg KH wrote:
> > > > On Fri, Jun 21, 2024 at 09:40:10AM +0800, joswang wrote:
> > > > > On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> > > > > >
> > > > > > On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > > > > > > From: Jos Wang <joswang@lenovo.com>
> > > > > > >
> > > > > > > This is a workaround for STAR 4846132, which only affects
> > > > > > > DWC_usb31 version2.00a operating in host mode.
> > > > > > >
> > > > > > > There is a problem in DWC_usb31 version 2.00a operating
> > > > > > > in host mode that would cause a CSR read timeout When CSR
> > > > > > > read coincides with RAM Clock Gating Entry. By disable
> > > > > > > Clock Gating, sacrificing power consumption for normal
> > > > > > > operation.
> > > > > > >
> > > > > > > Cc: stable@vger.kernel.org
> > > > > > > Signed-off-by: Jos Wang <joswang@lenovo.com>
> > > > > >
> > > > > > What commit id does this fix?  How far back should it be backported in
> > > > > > the stable releases?
> > > > > >
> > > > > > thanks,
> > > > > >
> > > > > > greg k-h
> > > > > 
> > > > > Hello Greg Thinh
> > > > > 
> > > > > It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
> > > > > Add DWC31 version 2.00a controller")
> > > > > in 6.8.0-rc6 branch ?
> > > > 
> > > > That commit showed up in 6.9, not 6.8.  And if so, please resend with a
> > > > proper "Fixes:" tag.
> > > > 
> > > 
> > > This patch workarounds the controller's issue.
> > 
> > So it fixes a bug?  Or does not fix a bug?  I'm confused.
> 
> The bug is not a driver's bug. The fix applies to a hardware bug and not
> any particular commit that can be referenced with a "Fixes" tag.

So it's a bug that the kernel needs to work around, that's fine.  But
that implies it should go to "all" stable kernels that it can, right?

> > > It doesn't resolve any
> > > particular commit that requires a "Fixes" tag. So, this should go on
> > > "next". It can be backported as needed.
> > 
> > Who would do the backporting and when?
> 
> For anyone who doesn't use mainline kernel that needs this patch
> backported to their kernel version.

I can not poarse this, sorry.  We can't do anything about people who
don't use our kernel trees, so what does this mean?

> > > If it's to be backported, it can
> > > probably go back to as far as v4.3, to commit 690fb3718a70 ("usb: dwc3:
> > > Support Synopsys USB 3.1 IP"). But you'd need to collect all the
> > > dependencies including the commit mention above.
> > 
> > I don't understand, sorry.  Is this just a normal "evolve the driver to
> > work better" change, or is it a "fix broken code" change, or is it
> > something else?
> > 
> > In other words, what do you want to see happen to this?  What tree(s)
> > would you want it applied to?
> > 
> 
> It's up to you, but it seems to fit "usb-testing" branch more since it
> doesn't have a "Fixes" tag. The severity of this fix is debatable since
> it doesn't apply to every DWC_usb31 configuration or every scenario.

As it is "cc: stable" that implies that it should get to Linus for
6.10-final, not wait for 6.11-rc1 as the 6.11 release is months away,
and anyone who has this issue would want it fixed sooner.

still confused,

greg k-h
Thinh Nguyen June 21, 2024, 11:09 p.m. UTC | #8
On Fri, Jun 21, 2024, Greg KH wrote:
> On Fri, Jun 21, 2024 at 06:20:38AM +0000, Thinh Nguyen wrote:
> > On Fri, Jun 21, 2024, Greg KH wrote:
> > > On Fri, Jun 21, 2024 at 05:42:42AM +0000, Thinh Nguyen wrote:
> > > > On Fri, Jun 21, 2024, Greg KH wrote:
> > > > > On Fri, Jun 21, 2024 at 09:40:10AM +0800, joswang wrote:
> > > > > > On Fri, Jun 21, 2024 at 1:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> > > > > > >
> > > > > > > On Wed, Jun 19, 2024 at 07:45:29PM +0800, joswang wrote:
> > > > > > > > From: Jos Wang <joswang@lenovo.com>
> > > > > > > >
> > > > > > > > This is a workaround for STAR 4846132, which only affects
> > > > > > > > DWC_usb31 version2.00a operating in host mode.
> > > > > > > >
> > > > > > > > There is a problem in DWC_usb31 version 2.00a operating
> > > > > > > > in host mode that would cause a CSR read timeout When CSR
> > > > > > > > read coincides with RAM Clock Gating Entry. By disable
> > > > > > > > Clock Gating, sacrificing power consumption for normal
> > > > > > > > operation.
> > > > > > > >
> > > > > > > > Cc: stable@vger.kernel.org
> > > > > > > > Signed-off-by: Jos Wang <joswang@lenovo.com>
> > > > > > >
> > > > > > > What commit id does this fix?  How far back should it be backported in
> > > > > > > the stable releases?
> > > > > > >
> > > > > > > thanks,
> > > > > > >
> > > > > > > greg k-h
> > > > > > 
> > > > > > Hello Greg Thinh
> > > > > > 
> > > > > > It seems first begin from the commit 1e43c86d84fb ("usb: dwc3: core:
> > > > > > Add DWC31 version 2.00a controller")
> > > > > > in 6.8.0-rc6 branch ?
> > > > > 
> > > > > That commit showed up in 6.9, not 6.8.  And if so, please resend with a
> > > > > proper "Fixes:" tag.
> > > > > 
> > > > 
> > > > This patch workarounds the controller's issue.
> > > 
> > > So it fixes a bug?  Or does not fix a bug?  I'm confused.
> > 
> > The bug is not a driver's bug. The fix applies to a hardware bug and not
> > any particular commit that can be referenced with a "Fixes" tag.
> 
> So it's a bug that the kernel needs to work around, that's fine.  But
> that implies it should go to "all" stable kernels that it can, right?

Yes. That's right.

> 
> > > > It doesn't resolve any
> > > > particular commit that requires a "Fixes" tag. So, this should go on
> > > > "next". It can be backported as needed.
> > > 
> > > Who would do the backporting and when?
> > 
> > For anyone who doesn't use mainline kernel that needs this patch
> > backported to their kernel version.
> 
> I can not poarse this, sorry.  We can't do anything about people who
> don't use our kernel trees, so what does this mean?

Sorry, I wasn't being clear. What I meant is that it needs some work to
backport to stable version prior to v6.9. Anyone who needs to backport
this prior to this will need to resolve these dependencies.

> 
> > > > If it's to be backported, it can
> > > > probably go back to as far as v4.3, to commit 690fb3718a70 ("usb: dwc3:
> > > > Support Synopsys USB 3.1 IP"). But you'd need to collect all the
> > > > dependencies including the commit mention above.
> > > 
> > > I don't understand, sorry.  Is this just a normal "evolve the driver to
> > > work better" change, or is it a "fix broken code" change, or is it
> > > something else?
> > > 
> > > In other words, what do you want to see happen to this?  What tree(s)
> > > would you want it applied to?
> > > 
> > 
> > It's up to you, but it seems to fit "usb-testing" branch more since it
> > doesn't have a "Fixes" tag. The severity of this fix is debatable since
> > it doesn't apply to every DWC_usb31 configuration or every scenario.
> 
> As it is "cc: stable" that implies that it should get to Linus for
> 6.10-final, not wait for 6.11-rc1 as the 6.11 release is months away,
> and anyone who has this issue would want it fixed sooner.
> 
> still confused,
> 

Ok. I may have misunderstood what can go into rc2 and beyond then. If we
don't have to wait for the next rc1 for it to be picked up for stable,
then can we add it to "usb-linus" branch?

There won't be a Fixes tag, but we can backport it up to 5.10.x:

Cc: <stable@vger.kernel.org> # 5.10.x: 1e43c86d: usb: dwc3: core: Add DWC31 version 2.00a controller
Cc: <stable@vger.kernel.org> # 5.10.x

This can go after the versioning scheme in dwc3 in the 5.10.x lts. I did
not check what other dependencies are needed in addition to the change
above.

Thanks,
Thinh
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 7ee61a89520b..2a3adc80fe0f 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -957,12 +957,16 @@  static bool dwc3_core_is_valid(struct dwc3 *dwc)
 
 static void dwc3_core_setup_global_control(struct dwc3 *dwc)
 {
+	unsigned int power_opt;
+	unsigned int hw_mode;
 	u32 reg;
 
 	reg = dwc3_readl(dwc->regs, DWC3_GCTL);
 	reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
+	hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
+	power_opt = DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1);
 
-	switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
+	switch (power_opt) {
 	case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
 		/**
 		 * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
@@ -995,6 +999,20 @@  static void dwc3_core_setup_global_control(struct dwc3 *dwc)
 		break;
 	}
 
+	/*
+	 * This is a workaround for STAR#4846132, which only affects
+	 * DWC_usb31 version2.00a operating in host mode.
+	 *
+	 * There is a problem in DWC_usb31 version 2.00a operating
+	 * in host mode that would cause a CSR read timeout When CSR
+	 * read coincides with RAM Clock Gating Entry. By disable
+	 * Clock Gating, sacrificing power consumption for normal
+	 * operation.
+	 */
+	if (power_opt != DWC3_GHWPARAMS1_EN_PWROPT_NO &&
+	    hw_mode != DWC3_GHWPARAMS0_MODE_GADGET && DWC3_VER_IS(DWC31, 200A))
+		reg |= DWC3_GCTL_DSBLCLKGTNG;
+
 	/* check if current dwc3 is on simulation board */
 	if (dwc->hwparams.hwparams6 & DWC3_GHWPARAMS6_EN_FPGA) {
 		dev_info(dwc->dev, "Running with FPGA optimizations\n");