Skip to contentSkip to conversation

usb: dwc3: gadget: Report isoc transfer frame number

PATCH Superseded Felipe Balbi 1 participant 1 message Dec 5, 2018 USB

lore
Share & tools
lore
#0 lore raw

PATCH v3 2/2 usb: dwc3: gadget: Report isoc transfer frame number

Hi,

Quoted 38 lines · Thinh Nguyen

Implement the new frame_number API to report the isochronous interval frame number. This patch checks and reports the interval in which the isoc transfer was transmitted or received via the Isoc-First TRB SOF number field.

---
Change in v3:
- Implement the change with the redefined frame_number meaning Change in v2:
- Capture frame number at request cleanup

 drivers/usb/dwc3/core.h   |  1 +
 drivers/usb/dwc3/gadget.c | 13 +++++++++++++
 2 files changed, 14 insertions(+)
drivers/usb/dwc3/core.h +1 -0
index ed0359d1216d..2c9f7a93147a 100644
@@ -777,6 +777,7 @@ enum dwc3_link_state {
 #define DWC3_TRB_CTRL_ISP_IMI		BIT(10)
 #define DWC3_TRB_CTRL_IOC		BIT(11)
 #define DWC3_TRB_CTRL_SID_SOFN(n)	(((n) & 0xffff) << 14)
+#define DWC3_TRB_CTRL_GET_SID_SOFN(n)	(((n) & (0xffff << 14)) >> 14)
 
 #define DWC3_TRBCTL_TYPE(n)		((n) & (0x3f << 4))
 #define DWC3_TRBCTL_NORMAL		DWC3_TRB_CTRL_TRBCTL(1)
drivers/usb/dwc3/gadget.c +2 -0
index 679c12e14522..2de563124fc1 100644
@@ -2254,6 +2254,19 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep,
 	if (chain && (trb->ctrl & DWC3_TRB_CTRL_HWO))
 		trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
 
+	/*
+	 * For isochronous transfers, the first TRB in a service interval must

drivers/usb/dwc3/gadget.c static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep, · line 2268

Quoted 10 lines
drivers/usb/dwc3/gadget.c +10 -0
+	 * have the Isoc-First type. Track and report its interval frame number.
+	 */
+	if (usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
+	    (trb->ctrl & DWC3_TRBCTL_ISOCHRONOUS_FIRST)) {
+		unsigned int frame_number;
+
+		frame_number = DWC3_TRB_CTRL_GET_SID_SOFN(trb->ctrl);
+		frame_number &= ~(dep->interval - 1);
+		req->request.frame_number = frame_number;
+	}

could you refresh my memory on how this is going to be used?