Re: [PATCH 2/2] usb: dwc3: gadget: set PCM1 field of isochronous-first TRBs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

yfw <nh26223@xxxxxxxxx> writes:
> On 2016/9/26 16:12, Felipe Balbi wrote:
>> In case of High-Speed, High-Bandwidth endpoints, we
>> need to tell DWC3 that we have more than one packet
>> per interval. We do that by setting PCM1 field of
>> Isochronous-First TRB.
>>
>> Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx>
>> ---
>>  drivers/usb/dwc3/gadget.c | 14 ++++++++++++--
>>  1 file changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
>> index 997e82dcc55e..5f7e39407892 100644
>> --- a/drivers/usb/dwc3/gadget.c
>> +++ b/drivers/usb/dwc3/gadget.c
>> @@ -793,6 +793,9 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
>>  		unsigned length, unsigned chain, unsigned node)
>>  {
>>  	struct dwc3_trb		*trb;
>> +	struct dwc3		*dwc = dep->dwc;
>> +	struct usb_gadget	*gadget = &dwc->gadget;
>> +	enum usb_device_speed	speed = gadget->speed;
>>
>>  	dwc3_trace(trace_dwc3_gadget, "%s: req %p dma %08llx length %d%s",
>>  			dep->name, req, (unsigned long long) dma,
>> @@ -819,10 +822,17 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
>>  		break;
>>
>>  	case USB_ENDPOINT_XFER_ISOC:
>> -		if (!node)
>> +		if (!node) {
>>  			trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS_FIRST;
>> -		else
>> +
>> +			if (speed == USB_SPEED_HIGH) {
>> +				struct usb_ep *ep = &dep->endpoint;
>> +				u8 pkts = usb_endpoint_isoc_maxp_mult(ep->desc);
>> +				trb->size |= DWC3_TRB_SIZE_PCM1(pkts - 1);
>> +			}
>> +		} else {
>>  			trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS;
>> +		}
>>
>>  		/* always enable Interrupt on Missed ISOC */
>>  		trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI;
>>
>
> Looks good to me. You could add
>     Reviewed-by: Fengwei Yin <nh26223@xxxxxxxxx>

looking at the wrong thread, please have a look at this one:

https://marc.info/?l=linux-usb&m=147506797611366&w=2

-- 
balbi

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux