RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] Sent: Monday, December 11, 2017 4:52 PM To: Yinbo Zhu <yinbo@nxp.com>; Greg Kroah-Hartman <gre...@linuxfoundation.org> Cc: Mathias Nyman <mathias.ny...@intel.com>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-...@vger.kernel.org>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-o...@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; Xiaobo Xie <xiaobo@nxp.com>; Jerry Huang <jerry.hu...@nxp.com>; Ran Wang <ran.wan...@nxp.com> Subject: RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 >>Hi, >>(please break your lines at 80-characters) >>Yinbo Zhu <yinbo@nxp.com> writes: I had check it. Every line is less than 80-characters. >>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >>> 5cb3f6795b0b..071e7cea8cbb 100644 >>> --- a/drivers/usb/dwc3/core.c >>> +++ b/drivers/usb/dwc3/core.c >>> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 >>> *dwc) >>> >>> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >>> "snps,quirk_reverse_in_out"); > >>This was generated on vendor tree. This quirk doesn't exist in dwc3. >>Also, > >update your tree and review MAINTAINERS file. It has been almost 2 > years since I left TI :-) > >>-- >>Balbi > > Hi Balbi, > > The quirk that I had add it in dwc3. Your meaning is that I can't use > quirk to enable or disable the erratum, isn't it? The tree is > git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git, I had > updated it. >-*- mode: grep; default-directory: "~/workspace/linux/" -*- Grep started at >Mon Dec 11 10:50:47 >git --no-pager grep --color -nH -e quirk_reverse_in_out >Grep finished with no matches found at Mon Dec 11 10:50:48 >-- >balbi Hi Balbi, You can't find the quirk that it is normal. There's no one in the previous code. The quirk that I added to control the new erratum Please you note. Thanks. Yinbo.
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] Sent: Monday, December 11, 2017 4:52 PM To: Yinbo Zhu ; Greg Kroah-Hartman Cc: Mathias Nyman ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list ; Xiaobo Xie ; Jerry Huang ; Ran Wang Subject: RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 >>Hi, >>(please break your lines at 80-characters) >>Yinbo Zhu writes: I had check it. Every line is less than 80-characters. >>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >>> 5cb3f6795b0b..071e7cea8cbb 100644 >>> --- a/drivers/usb/dwc3/core.c >>> +++ b/drivers/usb/dwc3/core.c >>> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 >>> *dwc) >>> >>> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >>> "snps,quirk_reverse_in_out"); > >>This was generated on vendor tree. This quirk doesn't exist in dwc3. >>Also, > >update your tree and review MAINTAINERS file. It has been almost 2 > years since I left TI :-) > >>-- >>Balbi > > Hi Balbi, > > The quirk that I had add it in dwc3. Your meaning is that I can't use > quirk to enable or disable the erratum, isn't it? The tree is > git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git, I had > updated it. >-*- mode: grep; default-directory: "~/workspace/linux/" -*- Grep started at >Mon Dec 11 10:50:47 >git --no-pager grep --color -nH -e quirk_reverse_in_out >Grep finished with no matches found at Mon Dec 11 10:50:48 >-- >balbi Hi Balbi, You can't find the quirk that it is normal. There's no one in the previous code. The quirk that I added to control the new erratum Please you note. Thanks. Yinbo.
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
Hi, (please break your lines at 80-characters) Yinbo Zhuwrites: >>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >>> 5cb3f6795b0b..071e7cea8cbb 100644 >>> --- a/drivers/usb/dwc3/core.c >>> +++ b/drivers/usb/dwc3/core.c >>> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 >>> *dwc) >>> >>> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >>> "snps,quirk_reverse_in_out"); > >>This was generated on vendor tree. This quirk doesn't exist in dwc3. Also, > >update your tree and review MAINTAINERS file. It has been almost 2 years > since I left TI :-) > >>-- >>Balbi > > Hi Balbi, > > The quirk that I had add it in dwc3. Your meaning is that I can't use > quirk to enable or disable the erratum, isn't it? The tree is > git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git, I had > updated it. -*- mode: grep; default-directory: "~/workspace/linux/" -*- Grep started at Mon Dec 11 10:50:47 git --no-pager grep --color -nH -e quirk_reverse_in_out Grep finished with no matches found at Mon Dec 11 10:50:48 -- balbi signature.asc Description: PGP signature
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
Hi, (please break your lines at 80-characters) Yinbo Zhu writes: >>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >>> 5cb3f6795b0b..071e7cea8cbb 100644 >>> --- a/drivers/usb/dwc3/core.c >>> +++ b/drivers/usb/dwc3/core.c >>> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 >>> *dwc) >>> >>> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >>> "snps,quirk_reverse_in_out"); > >>This was generated on vendor tree. This quirk doesn't exist in dwc3. Also, > >update your tree and review MAINTAINERS file. It has been almost 2 years > since I left TI :-) > >>-- >>Balbi > > Hi Balbi, > > The quirk that I had add it in dwc3. Your meaning is that I can't use > quirk to enable or disable the erratum, isn't it? The tree is > git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git, I had > updated it. -*- mode: grep; default-directory: "~/workspace/linux/" -*- Grep started at Mon Dec 11 10:50:47 git --no-pager grep --color -nH -e quirk_reverse_in_out Grep finished with no matches found at Mon Dec 11 10:50:48 -- balbi signature.asc Description: PGP signature
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Greg Kroah-Hartman [mailto:gre...@linuxfoundation.org] Sent: Friday, December 08, 2017 6:21 PM To: Yinbo Zhu <yinbo@nxp.com> Cc: Felipe Balbi <ba...@ti.com>; Mathias Nyman <mathias.ny...@intel.com>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-...@vger.kernel.org>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-o...@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; Xiaobo Xie <xiaobo@nxp.com>; Jerry Huang <jerry.hu...@nxp.com>; Ran Wang <ran.wan...@nxp.com> Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > From: "yinbo.zhu" <yinbo@nxp.com> > > Description: This is a occasional problem where the software >No need for a "Description:" word. That's just assumed here, right? > issues an End Transfer command while a USB transfer is in progress, > resulting in the TxFIFO being flushed when the lower layer is waiting > for data,causing the super speed (SS) transmit to get blocked. > If the End Transfer command is issued on an IN endpoint to flush out > the pending transfers when the same IN endpoint is doing transfers on > the USB, then depending upon the timing of the End Transfer (and the > resulting internal FIFO flush),the lower layer (U3PTL/U3MAC) could get > stuck waiting for data indefinitely. This blocks the transmission path > on the SS, and no DP/ACK/ERDY/DEVNOTIF packets can be sent from the > device. > Impact: If this issue happens and the transmission gets blocked, then > the USB host aborts and resets/re-enumerates the device. > This unblocks the transmitt engine and the device functions normally. > > Workaround: Software must wait for all existing TRBs to complete > before issuing End transfer command. > > Configs Affected: > LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > LX2160-2120-2080A-R1. What are these Configs? That doesn't seem to match up with anything that is in the kernel tree that I can see. > > Signed-off-by: yinbo.zhu <yinbo@nxp.com> > --- > drivers/usb/dwc3/core.c | 3 +++ > drivers/usb/dwc3/core.h | 3 +++ > drivers/usb/dwc3/host.c | 3 +++ > drivers/usb/host/xhci-plat.c | 4 > drivers/usb/host/xhci.c | 24 ++-- > drivers/usb/host/xhci.h | 1 + > 6 files changed, 32 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index > 5cb3f6795b0b..071e7cea8cbb 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 > *dwc) > > dwc->quirk_reverse_in_out = device_property_read_bool(dev, > "snps,quirk_reverse_in_out"); > + dwc->quirk_stop_transfer_in_block = device_property_read_bool(dev, > + "snps,quirk_stop_transfer_in_block"); >Have you documented this new DT value somewhere? I had add some description in drivers/usb/dwc3/core.h. Is it okay? " + * @quirk_stop_transfer_in_block: prevent block transmission from being + *interrupted." > + > dwc->needs_fifo_resize = of_property_read_bool(node, > "tx-fifo-resize"); > > dwc->configure_gfladj = > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index > 6c530cbedf49..b2425799ecb6 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -900,6 +900,8 @@ struct dwc3_scratchpad_array { > * 3 - Reserved > * @disable_devinit_u1u2_quirk: disable device-initiated U1/U2 request. > * @quirk_reverse_in_out: prevent tx fifo reverse the data direction. > + * @quirk_stop_transfer_in_block: prevent block transmission from being > + *interrupted. > * @imod_interval: set the interrupt moderation interval in 250ns > * increments or 0 to disable. > */ > @@ -1063,6 +1065,7 @@ struct dwc3 { > unsignedtx_de_emphasis:2; > unsigneddisable_devinit_u1u2_quirk:1; > unsignedquirk_reverse_in_out:1; > + unsignedquirk_stop_transfer_in_block:1; > > u16 imod_interval; > }; > diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c index > 2cd48633d3fa..a9ccbf1b9871 100644 > --- a/drivers/usb/dwc3/host.c > +++ b/drivers/usb/dwc3/host.c > @@ -110,6 +110,9 @@ int dwc3_host_init(struct dwc3 *dwc) > if (dwc->quirk_reverse_in_out) > props[prop_idx++].name = "qu
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Greg Kroah-Hartman [mailto:gre...@linuxfoundation.org] Sent: Friday, December 08, 2017 6:21 PM To: Yinbo Zhu Cc: Felipe Balbi ; Mathias Nyman ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list ; Xiaobo Xie ; Jerry Huang ; Ran Wang Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > From: "yinbo.zhu" > > Description: This is a occasional problem where the software >No need for a "Description:" word. That's just assumed here, right? > issues an End Transfer command while a USB transfer is in progress, > resulting in the TxFIFO being flushed when the lower layer is waiting > for data,causing the super speed (SS) transmit to get blocked. > If the End Transfer command is issued on an IN endpoint to flush out > the pending transfers when the same IN endpoint is doing transfers on > the USB, then depending upon the timing of the End Transfer (and the > resulting internal FIFO flush),the lower layer (U3PTL/U3MAC) could get > stuck waiting for data indefinitely. This blocks the transmission path > on the SS, and no DP/ACK/ERDY/DEVNOTIF packets can be sent from the > device. > Impact: If this issue happens and the transmission gets blocked, then > the USB host aborts and resets/re-enumerates the device. > This unblocks the transmitt engine and the device functions normally. > > Workaround: Software must wait for all existing TRBs to complete > before issuing End transfer command. > > Configs Affected: > LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > LX2160-2120-2080A-R1. What are these Configs? That doesn't seem to match up with anything that is in the kernel tree that I can see. > > Signed-off-by: yinbo.zhu > --- > drivers/usb/dwc3/core.c | 3 +++ > drivers/usb/dwc3/core.h | 3 +++ > drivers/usb/dwc3/host.c | 3 +++ > drivers/usb/host/xhci-plat.c | 4 > drivers/usb/host/xhci.c | 24 ++-- > drivers/usb/host/xhci.h | 1 + > 6 files changed, 32 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index > 5cb3f6795b0b..071e7cea8cbb 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 > *dwc) > > dwc->quirk_reverse_in_out = device_property_read_bool(dev, > "snps,quirk_reverse_in_out"); > + dwc->quirk_stop_transfer_in_block = device_property_read_bool(dev, > + "snps,quirk_stop_transfer_in_block"); >Have you documented this new DT value somewhere? I had add some description in drivers/usb/dwc3/core.h. Is it okay? " + * @quirk_stop_transfer_in_block: prevent block transmission from being + *interrupted." > + > dwc->needs_fifo_resize = of_property_read_bool(node, > "tx-fifo-resize"); > > dwc->configure_gfladj = > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index > 6c530cbedf49..b2425799ecb6 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -900,6 +900,8 @@ struct dwc3_scratchpad_array { > * 3 - Reserved > * @disable_devinit_u1u2_quirk: disable device-initiated U1/U2 request. > * @quirk_reverse_in_out: prevent tx fifo reverse the data direction. > + * @quirk_stop_transfer_in_block: prevent block transmission from being > + *interrupted. > * @imod_interval: set the interrupt moderation interval in 250ns > * increments or 0 to disable. > */ > @@ -1063,6 +1065,7 @@ struct dwc3 { > unsignedtx_de_emphasis:2; > unsigneddisable_devinit_u1u2_quirk:1; > unsignedquirk_reverse_in_out:1; > + unsignedquirk_stop_transfer_in_block:1; > > u16 imod_interval; > }; > diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c index > 2cd48633d3fa..a9ccbf1b9871 100644 > --- a/drivers/usb/dwc3/host.c > +++ b/drivers/usb/dwc3/host.c > @@ -110,6 +110,9 @@ int dwc3_host_init(struct dwc3 *dwc) > if (dwc->quirk_reverse_in_out) > props[prop_idx++].name = "quirk-reverse-in-out"; > > + if (dwc->quirk_stop_transfer_in_block) > + props[prop_idx++].name = "quirk-stop-transfer-in-block"; > + > if (dwc->usb3_lpm_capable) > props[prop_idx++].name = "usb3-lpm-capable"; >
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Greg Kroah-Hartman [mailto:gre...@linuxfoundation.org] Sent: Monday, December 11, 2017 3:35 PM To: Yinbo Zhu <yinbo@nxp.com> Cc: Felipe Balbi <felipe.ba...@linux.intel.com>; Mathias Nyman <mathias.ny...@intel.com>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-...@vger.kernel.org>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-o...@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; Xiaobo Xie <xiaobo@nxp.com>; Jerry Huang <jerry.hu...@nxp.com>; Ran Wang <ran.wan...@nxp.com> Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 On Mon, Dec 11, 2017 at 03:15:37AM +, Yinbo Zhu wrote: > > > -Original Message- > From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] > Sent: Friday, December 08, 2017 6:44 PM > To: Greg Kroah-Hartman <gre...@linuxfoundation.org>; Yinbo Zhu > <yinbo@nxp.com> > Cc: Mathias Nyman <mathias.ny...@intel.com>; open list:DESIGNWARE USB3 > DRD IP DRIVER <linux-...@vger.kernel.org>; open list:DESIGNWARE USB3 > DRD IP DRIVER <linux-o...@vger.kernel.org>; open list > <linux-kernel@vger.kernel.org>; Xiaobo Xie <xiaobo....@nxp.com>; Jerry > Huang <jerry.hu...@nxp.com>; Ran Wang <ran.wan...@nxp.com> > Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum > A-009611 > > > >Hi, > > >Greg Kroah-Hartman <gre...@linuxfoundation.org> writes: > > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > >> From: "yinbo.zhu" <yinbo@nxp.com> > >> > >> Description: This is a occasional problem where the software > > > > No need for a "Description:" word. That's just assumed here, right? > > I will remove "Description:" thanks. > >> issues an End Transfer command while a USB transfer is in progress, > >> resulting in the TxFIFO being flushed when the lower layer is > >> waiting for data,causing the super speed (SS) transmit to get blocked. > >> If the End Transfer command is issued on an IN endpoint to flush > >> out the pending transfers when the same IN endpoint is doing > >> transfers on the USB, then depending upon the timing of the End > >> Transfer (and the resulting internal FIFO flush),the lower layer > >> (U3PTL/U3MAC) could get stuck waiting for data indefinitely. This > >> blocks the transmission path on the SS, and no DP/ACK/ERDY/DEVNOTIF > >> packets can be sent from the device. > >> Impact: If this issue happens and the transmission gets blocked, > >> then the USB host aborts and resets/re-enumerates the device. > >> This unblocks the transmitt engine and the device functions normally. > >> > >> Workaround: Software must wait for all existing TRBs to complete > >> before issuing End transfer command. > >> > >> Configs Affected: > >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > >> LX2160-2120-2080A-R1. > > > > What are these Configs? That doesn't seem to match up with anything > > that is in the kernel tree that I can see. > > These configs is soc information, I don't enable it on these platform dts. > Although the erratum issue can't be reproduced. >I do not understand what this means, please explain it a bit better. >thanks, >greg k-h Maybe I have a problem with your words, Your meaning is that you want to ask me why I didn't add an attribute in the device tree to match kernel for every platform, right?
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Greg Kroah-Hartman [mailto:gre...@linuxfoundation.org] Sent: Monday, December 11, 2017 3:35 PM To: Yinbo Zhu Cc: Felipe Balbi ; Mathias Nyman ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list ; Xiaobo Xie ; Jerry Huang ; Ran Wang Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 On Mon, Dec 11, 2017 at 03:15:37AM +, Yinbo Zhu wrote: > > > -Original Message- > From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] > Sent: Friday, December 08, 2017 6:44 PM > To: Greg Kroah-Hartman ; Yinbo Zhu > > Cc: Mathias Nyman ; open list:DESIGNWARE USB3 > DRD IP DRIVER ; open list:DESIGNWARE USB3 > DRD IP DRIVER ; open list > ; Xiaobo Xie ; Jerry > Huang ; Ran Wang > Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum > A-009611 > > > >Hi, > > >Greg Kroah-Hartman writes: > > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > >> From: "yinbo.zhu" > >> > >> Description: This is a occasional problem where the software > > > > No need for a "Description:" word. That's just assumed here, right? > > I will remove "Description:" thanks. > >> issues an End Transfer command while a USB transfer is in progress, > >> resulting in the TxFIFO being flushed when the lower layer is > >> waiting for data,causing the super speed (SS) transmit to get blocked. > >> If the End Transfer command is issued on an IN endpoint to flush > >> out the pending transfers when the same IN endpoint is doing > >> transfers on the USB, then depending upon the timing of the End > >> Transfer (and the resulting internal FIFO flush),the lower layer > >> (U3PTL/U3MAC) could get stuck waiting for data indefinitely. This > >> blocks the transmission path on the SS, and no DP/ACK/ERDY/DEVNOTIF > >> packets can be sent from the device. > >> Impact: If this issue happens and the transmission gets blocked, > >> then the USB host aborts and resets/re-enumerates the device. > >> This unblocks the transmitt engine and the device functions normally. > >> > >> Workaround: Software must wait for all existing TRBs to complete > >> before issuing End transfer command. > >> > >> Configs Affected: > >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > >> LX2160-2120-2080A-R1. > > > > What are these Configs? That doesn't seem to match up with anything > > that is in the kernel tree that I can see. > > These configs is soc information, I don't enable it on these platform dts. > Although the erratum issue can't be reproduced. >I do not understand what this means, please explain it a bit better. >thanks, >greg k-h Maybe I have a problem with your words, Your meaning is that you want to ask me why I didn't add an attribute in the device tree to match kernel for every platform, right?
Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
On Mon, Dec 11, 2017 at 03:15:37AM +, Yinbo Zhu wrote: > > > -Original Message- > From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] > Sent: Friday, December 08, 2017 6:44 PM > To: Greg Kroah-Hartman <gre...@linuxfoundation.org>; Yinbo Zhu > <yinbo@nxp.com> > Cc: Mathias Nyman <mathias.ny...@intel.com>; open list:DESIGNWARE USB3 DRD IP > DRIVER <linux-...@vger.kernel.org>; open list:DESIGNWARE USB3 DRD IP DRIVER > <linux-o...@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; > Xiaobo Xie <xiaobo@nxp.com>; Jerry Huang <jerry.hu...@nxp.com>; Ran Wang > <ran.wan...@nxp.com> > Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 > > > >Hi, > > >Greg Kroah-Hartman <gre...@linuxfoundation.org> writes: > > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > >> From: "yinbo.zhu" <yinbo@nxp.com> > >> > >> Description: This is a occasional problem where the software > > > > No need for a "Description:" word. That's just assumed here, right? > > I will remove "Description:" thanks. > >> issues an End Transfer command while a USB transfer is in progress, > >> resulting in the TxFIFO being flushed when the lower layer is > >> waiting for data,causing the super speed (SS) transmit to get blocked. > >> If the End Transfer command is issued on an IN endpoint to flush out > >> the pending transfers when the same IN endpoint is doing transfers on > >> the USB, then depending upon the timing of the End Transfer (and the > >> resulting internal FIFO flush),the lower layer (U3PTL/U3MAC) could > >> get stuck waiting for data indefinitely. This blocks the transmission > >> path on the SS, and no DP/ACK/ERDY/DEVNOTIF packets can be sent from > >> the device. > >> Impact: If this issue happens and the transmission gets blocked, then > >> the USB host aborts and resets/re-enumerates the device. > >> This unblocks the transmitt engine and the device functions normally. > >> > >> Workaround: Software must wait for all existing TRBs to complete > >> before issuing End transfer command. > >> > >> Configs Affected: > >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > >> LX2160-2120-2080A-R1. > > > > What are these Configs? That doesn't seem to match up with anything > > that is in the kernel tree that I can see. > > These configs is soc information, I don't enable it on these platform dts. > Although the erratum issue can't be reproduced. I do not understand what this means, please explain it a bit better. thanks, greg k-h
Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
On Mon, Dec 11, 2017 at 03:15:37AM +, Yinbo Zhu wrote: > > > -Original Message- > From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] > Sent: Friday, December 08, 2017 6:44 PM > To: Greg Kroah-Hartman ; Yinbo Zhu > > Cc: Mathias Nyman ; open list:DESIGNWARE USB3 DRD IP > DRIVER ; open list:DESIGNWARE USB3 DRD IP DRIVER > ; open list ; > Xiaobo Xie ; Jerry Huang ; Ran Wang > > Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 > > > >Hi, > > >Greg Kroah-Hartman writes: > > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > >> From: "yinbo.zhu" > >> > >> Description: This is a occasional problem where the software > > > > No need for a "Description:" word. That's just assumed here, right? > > I will remove "Description:" thanks. > >> issues an End Transfer command while a USB transfer is in progress, > >> resulting in the TxFIFO being flushed when the lower layer is > >> waiting for data,causing the super speed (SS) transmit to get blocked. > >> If the End Transfer command is issued on an IN endpoint to flush out > >> the pending transfers when the same IN endpoint is doing transfers on > >> the USB, then depending upon the timing of the End Transfer (and the > >> resulting internal FIFO flush),the lower layer (U3PTL/U3MAC) could > >> get stuck waiting for data indefinitely. This blocks the transmission > >> path on the SS, and no DP/ACK/ERDY/DEVNOTIF packets can be sent from > >> the device. > >> Impact: If this issue happens and the transmission gets blocked, then > >> the USB host aborts and resets/re-enumerates the device. > >> This unblocks the transmitt engine and the device functions normally. > >> > >> Workaround: Software must wait for all existing TRBs to complete > >> before issuing End transfer command. > >> > >> Configs Affected: > >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > >> LX2160-2120-2080A-R1. > > > > What are these Configs? That doesn't seem to match up with anything > > that is in the kernel tree that I can see. > > These configs is soc information, I don't enable it on these platform dts. > Although the erratum issue can't be reproduced. I do not understand what this means, please explain it a bit better. thanks, greg k-h
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] Sent: Friday, December 08, 2017 6:44 PM To: Greg Kroah-Hartman <gre...@linuxfoundation.org>; Yinbo Zhu <yinbo@nxp.com> Cc: Mathias Nyman <mathias.ny...@intel.com>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-...@vger.kernel.org>; open list:DESIGNWARE USB3 DRD IP DRIVER <linux-o...@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; Xiaobo Xie <xiaobo@nxp.com>; Jerry Huang <jerry.hu...@nxp.com>; Ran Wang <ran.wan...@nxp.com> Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 >Hi, >Greg Kroah-Hartman <gre...@linuxfoundation.org> writes: > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: >> From: "yinbo.zhu" <yinbo@nxp.com> >> >> Description: This is a occasional problem where the software > > No need for a "Description:" word. That's just assumed here, right? I will remove "Description:" thanks. >> issues an End Transfer command while a USB transfer is in progress, >> resulting in the TxFIFO being flushed when the lower layer is >> waiting for data,causing the super speed (SS) transmit to get blocked. >> If the End Transfer command is issued on an IN endpoint to flush out >> the pending transfers when the same IN endpoint is doing transfers on >> the USB, then depending upon the timing of the End Transfer (and the >> resulting internal FIFO flush),the lower layer (U3PTL/U3MAC) could >> get stuck waiting for data indefinitely. This blocks the transmission >> path on the SS, and no DP/ACK/ERDY/DEVNOTIF packets can be sent from >> the device. >> Impact: If this issue happens and the transmission gets blocked, then >> the USB host aborts and resets/re-enumerates the device. >> This unblocks the transmitt engine and the device functions normally. >> >> Workaround: Software must wait for all existing TRBs to complete >> before issuing End transfer command. >> >> Configs Affected: >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, >> LX2160-2120-2080A-R1. > > What are these Configs? That doesn't seem to match up with anything > that is in the kernel tree that I can see. These configs is soc information, I don't enable it on these platform dts. Although the erratum issue can't be reproduced. >> >> Signed-off-by: yinbo.zhu <yinbo@nxp.com> >> --- >> drivers/usb/dwc3/core.c | 3 +++ >> drivers/usb/dwc3/core.h | 3 +++ >> drivers/usb/dwc3/host.c | 3 +++ >> drivers/usb/host/xhci-plat.c | 4 >> drivers/usb/host/xhci.c | 24 ++-- >> drivers/usb/host/xhci.h | 1 + >> 6 files changed, 32 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >> 5cb3f6795b0b..071e7cea8cbb 100644 >> --- a/drivers/usb/dwc3/core.c >> +++ b/drivers/usb/dwc3/core.c >> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 >> *dwc) >> >> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >> "snps,quirk_reverse_in_out"); >This was generated on vendor tree. This quirk doesn't exist in dwc3. Also, >update your tree and review MAINTAINERS file. It has been almost 2 years >since I left TI :-) >-- >Balbi Hi Balbi, The quirk that I had add it in dwc3. Your meaning is that I can't use quirk to enable or disable the erratum, isn't it? The tree is git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git, I had updated it. Thanks. Yinbo
RE: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
-Original Message- From: Felipe Balbi [mailto:felipe.ba...@linux.intel.com] Sent: Friday, December 08, 2017 6:44 PM To: Greg Kroah-Hartman ; Yinbo Zhu Cc: Mathias Nyman ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list:DESIGNWARE USB3 DRD IP DRIVER ; open list ; Xiaobo Xie ; Jerry Huang ; Ran Wang Subject: Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611 >Hi, >Greg Kroah-Hartman writes: > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: >> From: "yinbo.zhu" >> >> Description: This is a occasional problem where the software > > No need for a "Description:" word. That's just assumed here, right? I will remove "Description:" thanks. >> issues an End Transfer command while a USB transfer is in progress, >> resulting in the TxFIFO being flushed when the lower layer is >> waiting for data,causing the super speed (SS) transmit to get blocked. >> If the End Transfer command is issued on an IN endpoint to flush out >> the pending transfers when the same IN endpoint is doing transfers on >> the USB, then depending upon the timing of the End Transfer (and the >> resulting internal FIFO flush),the lower layer (U3PTL/U3MAC) could >> get stuck waiting for data indefinitely. This blocks the transmission >> path on the SS, and no DP/ACK/ERDY/DEVNOTIF packets can be sent from >> the device. >> Impact: If this issue happens and the transmission gets blocked, then >> the USB host aborts and resets/re-enumerates the device. >> This unblocks the transmitt engine and the device functions normally. >> >> Workaround: Software must wait for all existing TRBs to complete >> before issuing End transfer command. >> >> Configs Affected: >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, >> LX2160-2120-2080A-R1. > > What are these Configs? That doesn't seem to match up with anything > that is in the kernel tree that I can see. These configs is soc information, I don't enable it on these platform dts. Although the erratum issue can't be reproduced. >> >> Signed-off-by: yinbo.zhu >> --- >> drivers/usb/dwc3/core.c | 3 +++ >> drivers/usb/dwc3/core.h | 3 +++ >> drivers/usb/dwc3/host.c | 3 +++ >> drivers/usb/host/xhci-plat.c | 4 >> drivers/usb/host/xhci.c | 24 ++-- >> drivers/usb/host/xhci.h | 1 + >> 6 files changed, 32 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >> 5cb3f6795b0b..071e7cea8cbb 100644 >> --- a/drivers/usb/dwc3/core.c >> +++ b/drivers/usb/dwc3/core.c >> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 >> *dwc) >> >> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >> "snps,quirk_reverse_in_out"); >This was generated on vendor tree. This quirk doesn't exist in dwc3. Also, >update your tree and review MAINTAINERS file. It has been almost 2 years >since I left TI :-) >-- >Balbi Hi Balbi, The quirk that I had add it in dwc3. Your meaning is that I can't use quirk to enable or disable the erratum, isn't it? The tree is git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git, I had updated it. Thanks. Yinbo
Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
Hi, Greg Kroah-Hartmanwrites: > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: >> From: "yinbo.zhu" >> >> Description: This is a occasional problem where the software > > No need for a "Description:" word. That's just assumed here, right? > >> issues an End Transfer command while a USB transfer is in progress, >> resulting in the TxFIFO being flushed when the lower layer is waiting >> for data,causing the super speed (SS) transmit to get blocked. >> If the End Transfer command is issued on an IN endpoint to >> flush out the pending transfers when the same IN endpoint >> is doing transfers on the USB, then depending upon the timing >> of the End Transfer (and the resulting internal FIFO flush),the >> lower layer (U3PTL/U3MAC) could get stuck waiting for data >> indefinitely. This blocks the transmission path on the SS, and no >> DP/ACK/ERDY/DEVNOTIF packets can be sent from the device. >> Impact: If this issue happens and the transmission gets blocked, >> then the USB host aborts and resets/re-enumerates the device. >> This unblocks the transmitt engine and the device functions normally. >> >> Workaround: Software must wait for all existing TRBs to complete before >> issuing End transfer command. >> >> Configs Affected: >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, >> LX2160-2120-2080A-R1. > > What are these Configs? That doesn't seem to match up with anything > that is in the kernel tree that I can see. > >> >> Signed-off-by: yinbo.zhu >> --- >> drivers/usb/dwc3/core.c | 3 +++ >> drivers/usb/dwc3/core.h | 3 +++ >> drivers/usb/dwc3/host.c | 3 +++ >> drivers/usb/host/xhci-plat.c | 4 >> drivers/usb/host/xhci.c | 24 ++-- >> drivers/usb/host/xhci.h | 1 + >> 6 files changed, 32 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c >> index 5cb3f6795b0b..071e7cea8cbb 100644 >> --- a/drivers/usb/dwc3/core.c >> +++ b/drivers/usb/dwc3/core.c >> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) >> >> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >> "snps,quirk_reverse_in_out"); This was generated on vendor tree. This quirk doesn't exist in dwc3. Also, update your tree and review MAINTAINERS file. It has been almost 2 years since I left TI :-) -- balbi signature.asc Description: PGP signature
Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
Hi, Greg Kroah-Hartman writes: > On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: >> From: "yinbo.zhu" >> >> Description: This is a occasional problem where the software > > No need for a "Description:" word. That's just assumed here, right? > >> issues an End Transfer command while a USB transfer is in progress, >> resulting in the TxFIFO being flushed when the lower layer is waiting >> for data,causing the super speed (SS) transmit to get blocked. >> If the End Transfer command is issued on an IN endpoint to >> flush out the pending transfers when the same IN endpoint >> is doing transfers on the USB, then depending upon the timing >> of the End Transfer (and the resulting internal FIFO flush),the >> lower layer (U3PTL/U3MAC) could get stuck waiting for data >> indefinitely. This blocks the transmission path on the SS, and no >> DP/ACK/ERDY/DEVNOTIF packets can be sent from the device. >> Impact: If this issue happens and the transmission gets blocked, >> then the USB host aborts and resets/re-enumerates the device. >> This unblocks the transmitt engine and the device functions normally. >> >> Workaround: Software must wait for all existing TRBs to complete before >> issuing End transfer command. >> >> Configs Affected: >> LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, >> LX2160-2120-2080A-R1. > > What are these Configs? That doesn't seem to match up with anything > that is in the kernel tree that I can see. > >> >> Signed-off-by: yinbo.zhu >> --- >> drivers/usb/dwc3/core.c | 3 +++ >> drivers/usb/dwc3/core.h | 3 +++ >> drivers/usb/dwc3/host.c | 3 +++ >> drivers/usb/host/xhci-plat.c | 4 >> drivers/usb/host/xhci.c | 24 ++-- >> drivers/usb/host/xhci.h | 1 + >> 6 files changed, 32 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c >> index 5cb3f6795b0b..071e7cea8cbb 100644 >> --- a/drivers/usb/dwc3/core.c >> +++ b/drivers/usb/dwc3/core.c >> @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) >> >> dwc->quirk_reverse_in_out = device_property_read_bool(dev, >> "snps,quirk_reverse_in_out"); This was generated on vendor tree. This quirk doesn't exist in dwc3. Also, update your tree and review MAINTAINERS file. It has been almost 2 years since I left TI :-) -- balbi signature.asc Description: PGP signature
Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > From: "yinbo.zhu"> > Description: This is a occasional problem where the software No need for a "Description:" word. That's just assumed here, right? > issues an End Transfer command while a USB transfer is in progress, > resulting in the TxFIFO being flushed when the lower layer is waiting > for data,causing the super speed (SS) transmit to get blocked. > If the End Transfer command is issued on an IN endpoint to > flush out the pending transfers when the same IN endpoint > is doing transfers on the USB, then depending upon the timing > of the End Transfer (and the resulting internal FIFO flush),the > lower layer (U3PTL/U3MAC) could get stuck waiting for data > indefinitely. This blocks the transmission path on the SS, and no > DP/ACK/ERDY/DEVNOTIF packets can be sent from the device. > Impact: If this issue happens and the transmission gets blocked, > then the USB host aborts and resets/re-enumerates the device. > This unblocks the transmitt engine and the device functions normally. > > Workaround: Software must wait for all existing TRBs to complete before > issuing End transfer command. > > Configs Affected: > LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > LX2160-2120-2080A-R1. What are these Configs? That doesn't seem to match up with anything that is in the kernel tree that I can see. > > Signed-off-by: yinbo.zhu > --- > drivers/usb/dwc3/core.c | 3 +++ > drivers/usb/dwc3/core.h | 3 +++ > drivers/usb/dwc3/host.c | 3 +++ > drivers/usb/host/xhci-plat.c | 4 > drivers/usb/host/xhci.c | 24 ++-- > drivers/usb/host/xhci.h | 1 + > 6 files changed, 32 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 5cb3f6795b0b..071e7cea8cbb 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) > > dwc->quirk_reverse_in_out = device_property_read_bool(dev, > "snps,quirk_reverse_in_out"); > + dwc->quirk_stop_transfer_in_block = device_property_read_bool(dev, > + "snps,quirk_stop_transfer_in_block"); Have you documented this new DT value somewhere? > + > dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize"); > > dwc->configure_gfladj = > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h > index 6c530cbedf49..b2425799ecb6 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -900,6 +900,8 @@ struct dwc3_scratchpad_array { > * 3 - Reserved > * @disable_devinit_u1u2_quirk: disable device-initiated U1/U2 request. > * @quirk_reverse_in_out: prevent tx fifo reverse the data direction. > + * @quirk_stop_transfer_in_block: prevent block transmission from being > + *interrupted. > * @imod_interval: set the interrupt moderation interval in 250ns > * increments or 0 to disable. > */ > @@ -1063,6 +1065,7 @@ struct dwc3 { > unsignedtx_de_emphasis:2; > unsigneddisable_devinit_u1u2_quirk:1; > unsignedquirk_reverse_in_out:1; > + unsignedquirk_stop_transfer_in_block:1; > > u16 imod_interval; > }; > diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c > index 2cd48633d3fa..a9ccbf1b9871 100644 > --- a/drivers/usb/dwc3/host.c > +++ b/drivers/usb/dwc3/host.c > @@ -110,6 +110,9 @@ int dwc3_host_init(struct dwc3 *dwc) > if (dwc->quirk_reverse_in_out) > props[prop_idx++].name = "quirk-reverse-in-out"; > > + if (dwc->quirk_stop_transfer_in_block) > + props[prop_idx++].name = "quirk-stop-transfer-in-block"; > + > if (dwc->usb3_lpm_capable) > props[prop_idx++].name = "usb3-lpm-capable"; > > diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c > index d1c1e882e6d7..5721d4ece625 100644 > --- a/drivers/usb/host/xhci-plat.c > +++ b/drivers/usb/host/xhci-plat.c > @@ -272,6 +272,10 @@ static int xhci_plat_probe(struct platform_device *pdev) > if (device_property_read_bool(>dev, "quirk-reverse-in-out")) > xhci->quirks |= XHCI_REVERSE_IN_OUT; > > + if (device_property_read_bool(>dev, > + "quirk-stop-transfer-in-block")) > + xhci->quirks |= XHCI_STOP_TRANSFER_IN_BLOCK; > + > if (device_property_read_bool(>dev, "quirk-broken-port-ped")) > xhci->quirks |= XHCI_BROKEN_PORT_PED; > > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 21dd1d98508f..925c8d171c0b 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -1515,13 +1515,25 @@ static int xhci_urb_dequeue(struct usb_hcd *hcd, > struct
Re: [PATCH v2] usb: host: Implement workaround for Erratum A-009611
On Fri, Dec 08, 2017 at 05:49:41PM +0800, yinbo@nxp.com wrote: > From: "yinbo.zhu" > > Description: This is a occasional problem where the software No need for a "Description:" word. That's just assumed here, right? > issues an End Transfer command while a USB transfer is in progress, > resulting in the TxFIFO being flushed when the lower layer is waiting > for data,causing the super speed (SS) transmit to get blocked. > If the End Transfer command is issued on an IN endpoint to > flush out the pending transfers when the same IN endpoint > is doing transfers on the USB, then depending upon the timing > of the End Transfer (and the resulting internal FIFO flush),the > lower layer (U3PTL/U3MAC) could get stuck waiting for data > indefinitely. This blocks the transmission path on the SS, and no > DP/ACK/ERDY/DEVNOTIF packets can be sent from the device. > Impact: If this issue happens and the transmission gets blocked, > then the USB host aborts and resets/re-enumerates the device. > This unblocks the transmitt engine and the device functions normally. > > Workaround: Software must wait for all existing TRBs to complete before > issuing End transfer command. > > Configs Affected: > LS1088-48A-R1.0, LS2081A-R1.1, LS2088-48A-R1.0, LS2088-48A-R1.1, > LX2160-2120-2080A-R1. What are these Configs? That doesn't seem to match up with anything that is in the kernel tree that I can see. > > Signed-off-by: yinbo.zhu > --- > drivers/usb/dwc3/core.c | 3 +++ > drivers/usb/dwc3/core.h | 3 +++ > drivers/usb/dwc3/host.c | 3 +++ > drivers/usb/host/xhci-plat.c | 4 > drivers/usb/host/xhci.c | 24 ++-- > drivers/usb/host/xhci.h | 1 + > 6 files changed, 32 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 5cb3f6795b0b..071e7cea8cbb 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1106,6 +1106,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) > > dwc->quirk_reverse_in_out = device_property_read_bool(dev, > "snps,quirk_reverse_in_out"); > + dwc->quirk_stop_transfer_in_block = device_property_read_bool(dev, > + "snps,quirk_stop_transfer_in_block"); Have you documented this new DT value somewhere? > + > dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize"); > > dwc->configure_gfladj = > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h > index 6c530cbedf49..b2425799ecb6 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -900,6 +900,8 @@ struct dwc3_scratchpad_array { > * 3 - Reserved > * @disable_devinit_u1u2_quirk: disable device-initiated U1/U2 request. > * @quirk_reverse_in_out: prevent tx fifo reverse the data direction. > + * @quirk_stop_transfer_in_block: prevent block transmission from being > + *interrupted. > * @imod_interval: set the interrupt moderation interval in 250ns > * increments or 0 to disable. > */ > @@ -1063,6 +1065,7 @@ struct dwc3 { > unsignedtx_de_emphasis:2; > unsigneddisable_devinit_u1u2_quirk:1; > unsignedquirk_reverse_in_out:1; > + unsignedquirk_stop_transfer_in_block:1; > > u16 imod_interval; > }; > diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c > index 2cd48633d3fa..a9ccbf1b9871 100644 > --- a/drivers/usb/dwc3/host.c > +++ b/drivers/usb/dwc3/host.c > @@ -110,6 +110,9 @@ int dwc3_host_init(struct dwc3 *dwc) > if (dwc->quirk_reverse_in_out) > props[prop_idx++].name = "quirk-reverse-in-out"; > > + if (dwc->quirk_stop_transfer_in_block) > + props[prop_idx++].name = "quirk-stop-transfer-in-block"; > + > if (dwc->usb3_lpm_capable) > props[prop_idx++].name = "usb3-lpm-capable"; > > diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c > index d1c1e882e6d7..5721d4ece625 100644 > --- a/drivers/usb/host/xhci-plat.c > +++ b/drivers/usb/host/xhci-plat.c > @@ -272,6 +272,10 @@ static int xhci_plat_probe(struct platform_device *pdev) > if (device_property_read_bool(>dev, "quirk-reverse-in-out")) > xhci->quirks |= XHCI_REVERSE_IN_OUT; > > + if (device_property_read_bool(>dev, > + "quirk-stop-transfer-in-block")) > + xhci->quirks |= XHCI_STOP_TRANSFER_IN_BLOCK; > + > if (device_property_read_bool(>dev, "quirk-broken-port-ped")) > xhci->quirks |= XHCI_BROKEN_PORT_PED; > > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 21dd1d98508f..925c8d171c0b 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -1515,13 +1515,25 @@ static int xhci_urb_dequeue(struct usb_hcd *hcd, > struct urb *urb, int status) >