usb: dwc3: gadget: Report isoc transfer frame number
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. Signed-off-by: Thinh Nguyen <thinhn@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:

committed by
Felipe Balbi

parent
6b69753fa0
commit
6abfa0f5bb
@@ -784,6 +784,7 @@ enum dwc3_link_state {
|
|||||||
#define DWC3_TRB_CTRL_ISP_IMI BIT(10)
|
#define DWC3_TRB_CTRL_ISP_IMI BIT(10)
|
||||||
#define DWC3_TRB_CTRL_IOC BIT(11)
|
#define DWC3_TRB_CTRL_IOC BIT(11)
|
||||||
#define DWC3_TRB_CTRL_SID_SOFN(n) (((n) & 0xffff) << 14)
|
#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_TYPE(n) ((n) & (0x3f << 4))
|
||||||
#define DWC3_TRBCTL_NORMAL DWC3_TRB_CTRL_TRBCTL(1)
|
#define DWC3_TRBCTL_NORMAL DWC3_TRB_CTRL_TRBCTL(1)
|
||||||
|
@@ -2339,6 +2339,19 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep,
|
|||||||
if (chain && (trb->ctrl & DWC3_TRB_CTRL_HWO))
|
if (chain && (trb->ctrl & DWC3_TRB_CTRL_HWO))
|
||||||
trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
|
trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For isochronous transfers, the first TRB in a service interval must
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we're dealing with unaligned size OUT transfer, we will be left
|
* If we're dealing with unaligned size OUT transfer, we will be left
|
||||||
* with one TRB pending in the ring. We need to manually clear HWO bit
|
* with one TRB pending in the ring. We need to manually clear HWO bit
|
||||||
|
Reference in New Issue
Block a user