All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] usb: dwc3: Properly update ep0 for IN direction
@ 2018-01-10 21:10 Thinh Nguyen
  2018-01-10 21:11   ` [v2,1/2] " Thinh Nguyen
  2018-01-10 21:11   ` [v2,2/2] " Thinh Nguyen
  0 siblings, 2 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-10 21:10 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

This patch series fixes an issue with HS/FS 3-stage control read transfer where
DWC3 incorrectly check when to send ZLP.

Changes in v2:
 - Separate from "usb: dwc3: Add new updates for DWC_usb31" patch series
 - Add 'Cc' to stable mailing list


Thinh Nguyen (2):
  usb: dwc3: gadget: Set maxpacket size for ep0 IN
  usb: dwc3: ep0: Reset TRB counter for ep0 IN

 drivers/usb/dwc3/ep0.c    | 7 ++++++-
 drivers/usb/dwc3/gadget.c | 2 ++
 2 files changed, 8 insertions(+), 1 deletion(-)

-- 
2.11.0

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v2 1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-10 21:11   ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-10 21:11 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

There are 2 control endpoint structures for DWC3. However, the driver
only updates the OUT direction control endpoint structure during
ConnectDone event. DWC3 driver needs to update the endpoint max packet
size for control IN endpoint as well. If the max packet size is not
properly set, then the driver will incorrectly calculate the data
transfer size and fail to send ZLP for HS/FS 3-stage control read
transfer.

The fix is simply to update the max packet size for the ep0 IN direction
during ConnectDone event.

Cc: stable@vger.kernel.org
Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
---
 drivers/usb/dwc3/gadget.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 639dd1b163a0..21abea0ac622 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2744,6 +2744,8 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 		break;
 	}
 
+	dwc->eps[1]->endpoint.maxpacket = dwc->gadget.ep0->maxpacket;
+
 	/* Enable USB2 LPM Capability */
 
 	if ((dwc->revision > DWC3_REVISION_194A) &&
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [v2,1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-10 21:11   ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-10 21:11 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

There are 2 control endpoint structures for DWC3. However, the driver
only updates the OUT direction control endpoint structure during
ConnectDone event. DWC3 driver needs to update the endpoint max packet
size for control IN endpoint as well. If the max packet size is not
properly set, then the driver will incorrectly calculate the data
transfer size and fail to send ZLP for HS/FS 3-stage control read
transfer.

The fix is simply to update the max packet size for the ep0 IN direction
during ConnectDone event.

Cc: stable@vger.kernel.org
Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
---
 drivers/usb/dwc3/gadget.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 639dd1b163a0..21abea0ac622 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2744,6 +2744,8 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 		break;
 	}
 
+	dwc->eps[1]->endpoint.maxpacket = dwc->gadget.ep0->maxpacket;
+
 	/* Enable USB2 LPM Capability */
 
 	if ((dwc->revision > DWC3_REVISION_194A) &&

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN
@ 2018-01-10 21:11   ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-10 21:11 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

In control read transfer completion handler, the driver needs to reset
the TRB enqueue counter. Since there is one control endpoint structure
for each direction, we must also track the TRB enqueue counter for each
direction. Currently the driver only resets the TRB counter for control
OUT endpoint only. Check for the data direction and properly reset the
TRB counter from correct control endpoint.

Cc: stable@vger.kernel.org
Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
---
 drivers/usb/dwc3/ep0.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index fd3e7ad2eb0e..618b4260f0d9 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -858,7 +858,12 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
 		trb++;
 		trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
 		trace_dwc3_complete_trb(ep0, trb);
-		ep0->trb_enqueue = 0;
+
+		if (r->direction)
+			dwc->eps[1]->trb_enqueue = 0;
+		else
+			dwc->eps[0]->trb_enqueue = 0;
+
 		dwc->ep0_bounced = false;
 	}
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [v2,2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN
@ 2018-01-10 21:11   ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-10 21:11 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

In control read transfer completion handler, the driver needs to reset
the TRB enqueue counter. Since there is one control endpoint structure
for each direction, we must also track the TRB enqueue counter for each
direction. Currently the driver only resets the TRB counter for control
OUT endpoint only. Check for the data direction and properly reset the
TRB counter from correct control endpoint.

Cc: stable@vger.kernel.org
Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
---
 drivers/usb/dwc3/ep0.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index fd3e7ad2eb0e..618b4260f0d9 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -858,7 +858,12 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
 		trb++;
 		trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
 		trace_dwc3_complete_trb(ep0, trb);
-		ep0->trb_enqueue = 0;
+
+		if (r->direction)
+			dwc->eps[1]->trb_enqueue = 0;
+		else
+			dwc->eps[0]->trb_enqueue = 0;
+
 		dwc->ep0_bounced = false;
 	}
 

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-11  8:16     ` Felipe Balbi
  0 siblings, 0 replies; 15+ messages in thread
From: Felipe Balbi @ 2018-01-11  8:16 UTC (permalink / raw)
  To: Thinh Nguyen, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

[-- Attachment #1: Type: text/plain, Size: 725 bytes --]


Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> There are 2 control endpoint structures for DWC3. However, the driver
> only updates the OUT direction control endpoint structure during
> ConnectDone event. DWC3 driver needs to update the endpoint max packet
> size for control IN endpoint as well. If the max packet size is not
> properly set, then the driver will incorrectly calculate the data
> transfer size and fail to send ZLP for HS/FS 3-stage control read
> transfer.
>
> The fix is simply to update the max packet size for the ep0 IN direction
> during ConnectDone event.
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>

missing Fixes tag

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [v2,1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-11  8:16     ` Felipe Balbi
  0 siblings, 0 replies; 15+ messages in thread
From: Felipe Balbi @ 2018-01-11  8:16 UTC (permalink / raw)
  To: Thinh Nguyen; +Cc: John Youn, stable

Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> There are 2 control endpoint structures for DWC3. However, the driver
> only updates the OUT direction control endpoint structure during
> ConnectDone event. DWC3 driver needs to update the endpoint max packet
> size for control IN endpoint as well. If the max packet size is not
> properly set, then the driver will incorrectly calculate the data
> transfer size and fail to send ZLP for HS/FS 3-stage control read
> transfer.
>
> The fix is simply to update the max packet size for the ep0 IN direction
> during ConnectDone event.
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>

missing Fixes tag

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN
@ 2018-01-11  8:16     ` Felipe Balbi
  0 siblings, 0 replies; 15+ messages in thread
From: Felipe Balbi @ 2018-01-11  8:16 UTC (permalink / raw)
  To: Thinh Nguyen, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

[-- Attachment #1: Type: text/plain, Size: 598 bytes --]


Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> In control read transfer completion handler, the driver needs to reset
> the TRB enqueue counter. Since there is one control endpoint structure
> for each direction, we must also track the TRB enqueue counter for each
> direction. Currently the driver only resets the TRB counter for control
> OUT endpoint only. Check for the data direction and properly reset the
> TRB counter from correct control endpoint.
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>

missing Fixes tag

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [v2,2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN
@ 2018-01-11  8:16     ` Felipe Balbi
  0 siblings, 0 replies; 15+ messages in thread
From: Felipe Balbi @ 2018-01-11  8:16 UTC (permalink / raw)
  To: Thinh Nguyen; +Cc: John Youn, stable

Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> In control read transfer completion handler, the driver needs to reset
> the TRB enqueue counter. Since there is one control endpoint structure
> for each direction, we must also track the TRB enqueue counter for each
> direction. Currently the driver only resets the TRB counter for control
> OUT endpoint only. Check for the data direction and properly reset the
> TRB counter from correct control endpoint.
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>

missing Fixes tag

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-11 19:57       ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-11 19:57 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

Hi,

On 1/11/2018 12:16 AM, Felipe Balbi wrote:
> 
> Hi,
> 
> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>> There are 2 control endpoint structures for DWC3. However, the driver
>> only updates the OUT direction control endpoint structure during
>> ConnectDone event. DWC3 driver needs to update the endpoint max packet
>> size for control IN endpoint as well. If the max packet size is not
>> properly set, then the driver will incorrectly calculate the data
>> transfer size and fail to send ZLP for HS/FS 3-stage control read
>> transfer.
>>
>> The fix is simply to update the max packet size for the ep0 IN direction
>> during ConnectDone event.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
> 
> missing Fixes tag

This bug has been there since the beginning. There's no particular 
commit that it fixes.

BR,
Thinh

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [v2,1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-11 19:57       ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-11 19:57 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

Hi,

On 1/11/2018 12:16 AM, Felipe Balbi wrote:
> 
> Hi,
> 
> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>> There are 2 control endpoint structures for DWC3. However, the driver
>> only updates the OUT direction control endpoint structure during
>> ConnectDone event. DWC3 driver needs to update the endpoint max packet
>> size for control IN endpoint as well. If the max packet size is not
>> properly set, then the driver will incorrectly calculate the data
>> transfer size and fail to send ZLP for HS/FS 3-stage control read
>> transfer.
>>
>> The fix is simply to update the max packet size for the ep0 IN direction
>> during ConnectDone event.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
> 
> missing Fixes tag

This bug has been there since the beginning. There's no particular 
commit that it fixes.

BR,
Thinh
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN
@ 2018-01-11 20:57       ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-11 20:57 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

Hi,

On 1/11/2018 12:16 AM, Felipe Balbi wrote:
> 
> Hi,
> 
> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>> In control read transfer completion handler, the driver needs to reset
>> the TRB enqueue counter. Since there is one control endpoint structure
>> for each direction, we must also track the TRB enqueue counter for each
>> direction. Currently the driver only resets the TRB counter for control
>> OUT endpoint only. Check for the data direction and properly reset the
>> TRB counter from correct control endpoint.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
> 
> missing Fixes tag

Same with this patch. There's no particular commit that it fixes.

BR,
Thinh

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [v2,2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN
@ 2018-01-11 20:57       ` Thinh Nguyen
  0 siblings, 0 replies; 15+ messages in thread
From: Thinh Nguyen @ 2018-01-11 20:57 UTC (permalink / raw)
  To: Felipe Balbi, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

Hi,

On 1/11/2018 12:16 AM, Felipe Balbi wrote:
> 
> Hi,
> 
> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>> In control read transfer completion handler, the driver needs to reset
>> the TRB enqueue counter. Since there is one control endpoint structure
>> for each direction, we must also track the TRB enqueue counter for each
>> direction. Currently the driver only resets the TRB counter for control
>> OUT endpoint only. Check for the data direction and properly reset the
>> TRB counter from correct control endpoint.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
> 
> missing Fixes tag

Same with this patch. There's no particular commit that it fixes.

BR,
Thinh
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-12  8:25         ` Felipe Balbi
  0 siblings, 0 replies; 15+ messages in thread
From: Felipe Balbi @ 2018-01-12  8:25 UTC (permalink / raw)
  To: Thinh Nguyen, Thinh Nguyen, linux-usb; +Cc: John Youn, stable

[-- Attachment #1: Type: text/plain, Size: 1023 bytes --]


Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> Hi,
>
> On 1/11/2018 12:16 AM, Felipe Balbi wrote:
>> 
>> Hi,
>> 
>> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>>> There are 2 control endpoint structures for DWC3. However, the driver
>>> only updates the OUT direction control endpoint structure during
>>> ConnectDone event. DWC3 driver needs to update the endpoint max packet
>>> size for control IN endpoint as well. If the max packet size is not
>>> properly set, then the driver will incorrectly calculate the data
>>> transfer size and fail to send ZLP for HS/FS 3-stage control read
>>> transfer.
>>>
>>> The fix is simply to update the max packet size for the ep0 IN direction
>>> during ConnectDone event.
>>>
>>> Cc: stable@vger.kernel.org
>>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>> 
>> missing Fixes tag
>
> This bug has been there since the beginning. There's no particular 
> commit that it fixes.

yes there is; the very first one ;-)

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [v2,1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN
@ 2018-01-12  8:25         ` Felipe Balbi
  0 siblings, 0 replies; 15+ messages in thread
From: Felipe Balbi @ 2018-01-12  8:25 UTC (permalink / raw)
  To: Thinh Nguyen; +Cc: John Youn, stable

Hi,

Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> Hi,
>
> On 1/11/2018 12:16 AM, Felipe Balbi wrote:
>> 
>> Hi,
>> 
>> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>>> There are 2 control endpoint structures for DWC3. However, the driver
>>> only updates the OUT direction control endpoint structure during
>>> ConnectDone event. DWC3 driver needs to update the endpoint max packet
>>> size for control IN endpoint as well. If the max packet size is not
>>> properly set, then the driver will incorrectly calculate the data
>>> transfer size and fail to send ZLP for HS/FS 3-stage control read
>>> transfer.
>>>
>>> The fix is simply to update the max packet size for the ep0 IN direction
>>> during ConnectDone event.
>>>
>>> Cc: stable@vger.kernel.org
>>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>> 
>> missing Fixes tag
>
> This bug has been there since the beginning. There's no particular 
> commit that it fixes.

yes there is; the very first one ;-)

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2018-01-12  8:26 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-10 21:10 [PATCH v2 0/2] usb: dwc3: Properly update ep0 for IN direction Thinh Nguyen
2018-01-10 21:11 ` [PATCH v2 1/2] usb: dwc3: gadget: Set maxpacket size for ep0 IN Thinh Nguyen
2018-01-10 21:11   ` [v2,1/2] " Thinh Nguyen
2018-01-11  8:16   ` [PATCH v2 1/2] " Felipe Balbi
2018-01-11  8:16     ` [v2,1/2] " Felipe Balbi
2018-01-11 19:57     ` [PATCH v2 1/2] " Thinh Nguyen
2018-01-11 19:57       ` [v2,1/2] " Thinh Nguyen
2018-01-12  8:25       ` [PATCH v2 1/2] " Felipe Balbi
2018-01-12  8:25         ` [v2,1/2] " Felipe Balbi
2018-01-10 21:11 ` [PATCH v2 2/2] usb: dwc3: ep0: Reset TRB counter " Thinh Nguyen
2018-01-10 21:11   ` [v2,2/2] " Thinh Nguyen
2018-01-11  8:16   ` [PATCH v2 2/2] " Felipe Balbi
2018-01-11  8:16     ` [v2,2/2] " Felipe Balbi
2018-01-11 20:57     ` [PATCH v2 2/2] " Thinh Nguyen
2018-01-11 20:57       ` [v2,2/2] " Thinh Nguyen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.