usb: dwc3: gadget: combine unaligned and zero flags
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Wed, 1 Aug 2018 10:15:05 +0000 (13:15 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Mon, 26 Nov 2018 07:08:29 +0000 (09:08 +0200)
Both flags are used for the same purpose in dwc3: appending an extra
TRB at the end to deal with controller requirements. By combining both
flags into one, we make it clear that the situation is the same and
that they should be treated equally.

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/core.h
drivers/usb/dwc3/gadget.c

index 0136aa7766e1a9fa34ca2f54cb5e6efdb2f3a78e..b89d312320285ed1475d9a19330ce512d0ed9a74 100644 (file)
@@ -865,11 +865,11 @@ struct dwc3_hwparams {
  * @epnum: endpoint number to which this request refers
  * @trb: pointer to struct dwc3_trb
  * @trb_dma: DMA address of @trb
- * @unaligned: true for OUT endpoints with length not divisible by maxp
+ * @needs_extra_trb: true when request needs one extra TRB (either due to ZLP
+ *     or unaligned OUT)
  * @direction: IN or OUT direction flag
  * @mapped: true when request has been dma-mapped
  * @started: request is started
- * @zero: wants a ZLP
  */
 struct dwc3_request {
        struct usb_request      request;
@@ -885,11 +885,10 @@ struct dwc3_request {
        struct dwc3_trb         *trb;
        dma_addr_t              trb_dma;
 
-       unsigned                unaligned:1;
+       unsigned                needs_extra_trb:1;
        unsigned                direction:1;
        unsigned                mapped:1;
        unsigned                started:1;
-       unsigned                zero:1;
 };
 
 /*
index c48ea78341a4e1fb43035a193bd91ee7ac81abdc..3d5bd2a4c07f57642378225f8a3d5c402f827321 100644 (file)
@@ -1073,7 +1073,7 @@ static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep,
                        struct dwc3     *dwc = dep->dwc;
                        struct dwc3_trb *trb;
 
-                       req->unaligned = true;
+                       req->needs_extra_trb = true;
 
                        /* prepare normal TRB */
                        dwc3_prepare_one_trb(dep, req, true, i);
@@ -1117,7 +1117,7 @@ static void dwc3_prepare_one_trb_linear(struct dwc3_ep *dep,
                struct dwc3     *dwc = dep->dwc;
                struct dwc3_trb *trb;
 
-               req->unaligned = true;
+               req->needs_extra_trb = true;
 
                /* prepare normal TRB */
                dwc3_prepare_one_trb(dep, req, true, 0);
@@ -1133,7 +1133,7 @@ static void dwc3_prepare_one_trb_linear(struct dwc3_ep *dep,
                struct dwc3     *dwc = dep->dwc;
                struct dwc3_trb *trb;
 
-               req->zero = true;
+               req->needs_extra_trb = true;
 
                /* prepare normal TRB */
                dwc3_prepare_one_trb(dep, req, true, 0);
@@ -1544,7 +1544,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
                                        dwc3_ep_inc_deq(dep);
                                }
 
-                               if (r->unaligned || r->zero) {
+                               if (r->needs_extra_trb) {
                                        trb = r->trb + r->num_pending_sgs + 1;
                                        trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
                                        dwc3_ep_inc_deq(dep);
@@ -1555,7 +1555,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
                                trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
                                dwc3_ep_inc_deq(dep);
 
-                               if (r->unaligned || r->zero) {
+                               if (r->needs_extra_trb) {
                                        trb = r->trb + 1;
                                        trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
                                        dwc3_ep_inc_deq(dep);
@@ -2390,7 +2390,8 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep,
         * with one TRB pending in the ring. We need to manually clear HWO bit
         * from that TRB.
         */
-       if ((req->zero || req->unaligned) && !(trb->ctrl & DWC3_TRB_CTRL_CHN)) {
+
+       if (req->needs_extra_trb && !(trb->ctrl & DWC3_TRB_CTRL_CHN)) {
                trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
                return 1;
        }
@@ -2467,11 +2468,10 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
                ret = dwc3_gadget_ep_reclaim_trb_linear(dep, req, event,
                                status);
 
-       if (req->unaligned || req->zero) {
+       if (req->needs_extra_trb) {
                ret = dwc3_gadget_ep_reclaim_trb_linear(dep, req, event,
                                status);
-               req->unaligned = false;
-               req->zero = false;
+               req->needs_extra_trb = false;
        }
 
        req->request.actual = req->request.length - req->remaining;