OSDN Git Service

usb: dwc3: gadget: Ignore Packet Pending bit
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Tue, 13 Apr 2021 03:00:45 +0000 (20:00 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Apr 2021 13:57:44 +0000 (15:57 +0200)
Currently the controller handles single stream only. So, Ignore Packet
Pending bit for stream selection and don't search for another stream if
the host sends Data Packet with PP=0 (for OUT direction) or ACK with
NumP=0 and PP=0 (for IN direction). This slightly improves the stream
performance.

Acked-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/097ba9e104c143f7ba0195ebff29390ec3043692.1618282705.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/core.h
drivers/usb/dwc3/gadget.c

index 6e9abfb..5a9b56b 100644 (file)
 #define DWC3_DCFG_NUMP(n)      (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f)
 #define DWC3_DCFG_NUMP_MASK    (0x1f << DWC3_DCFG_NUMP_SHIFT)
 #define DWC3_DCFG_LPM_CAP      BIT(22)
+#define DWC3_DCFG_IGNSTRMPP    BIT(23)
 
 /* Device Control Register */
 #define DWC3_DCTL_RUN_STOP     BIT(31)
index e1b04c9..ec7aabb 100644 (file)
@@ -2399,6 +2399,17 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)
 
        dwc3_gadget_setup_nump(dwc);
 
+       /*
+        * Currently the controller handles single stream only. So, Ignore
+        * Packet Pending bit for stream selection and don't search for another
+        * stream if the host sends Data Packet with PP=0 (for OUT direction) or
+        * ACK with NumP=0 and PP=0 (for IN direction). This slightly improves
+        * the stream performance.
+        */
+       reg = dwc3_readl(dwc->regs, DWC3_DCFG);
+       reg |= DWC3_DCFG_IGNSTRMPP;
+       dwc3_writel(dwc->regs, DWC3_DCFG, reg);
+
        /* Start with SuperSpeed Default */
        dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);