UPSTREAM: usb: dwc3: drop FIFO resizing logic
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 4 Feb 2016 12:18:01 +0000 (14:18 +0200)
committerHuang, Tao <huangtao@rock-chips.com>
Tue, 16 Aug 2016 12:48:19 +0000 (20:48 +0800)
That FIFO resizing logic was added to support OMAP5
ES1.0 which had a bogus default FIFO size. I can't
remember the exact size of default FIFO, but it was
less than one bulk superspeed packet (<1024) which
would prevent USB3 from ever working on OMAP5 ES1.0.

However, OMAP5 ES1.0 support has been dropped by
commit aa2f4b16f830 ("ARM: OMAP5: id: Remove ES1.0
support") which renders FIFO resizing unnecessary.

Change-Id: I0c5843d4da7ab9ed975a723075b4b31b6c2fcc54
Tested-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Wu Liang feng <wulf@rock-chips.com>
(cherry picked from commit bc5081617faeb3b2f0c126dc37264b87af7da47f)

Documentation/devicetree/bindings/usb/dwc3.txt
Documentation/devicetree/bindings/usb/qcom,dwc3.txt
drivers/usb/dwc3/core.c
drivers/usb/dwc3/core.h
drivers/usb/dwc3/ep0.c
drivers/usb/dwc3/gadget.c
drivers/usb/dwc3/platform_data.h

index fb2ad0acedbdbe0db4253b0fe4c2818f13f8ef71..15695682a480776adbc951fcb7e16dc75e80d73f 100644 (file)
@@ -14,7 +14,6 @@ Optional properties:
    the second element is expected to be a handle to the USB3/SS PHY
  - phys: from the *Generic PHY* bindings
  - phy-names: from the *Generic PHY* bindings
- - tx-fifo-resize: determines if the FIFO *has* to be reallocated.
  - snps,usb3_lpm_capable: determines if platform is USB3 LPM capable
  - snps,disable_scramble_quirk: true when SW should disable data scrambling.
        Only really useful for FPGA builds.
@@ -47,6 +46,8 @@ Optional properties:
        register for post-silicon frame length adjustment when the
        fladj_30mhz_sdbnd signal is invalid or incorrect.
 
+ - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated.
+
 This is usually a subnode to DWC3 glue to which it is connected.
 
 dwc3@4a030000 {
@@ -54,5 +55,4 @@ dwc3@4a030000 {
        reg = <0x4a030000 0xcfff>;
        interrupts = <0 92 4>
        usb-phy = <&usb2_phy>, <&usb3,phy>;
-       tx-fifo-resize;
 };
index ca164e71dd508f730ab3c1b523de96cd7dc6c622..39acb084bce96989cd86e023e1450b3b0fb536f0 100644 (file)
@@ -59,7 +59,6 @@ Example device nodes:
                                interrupts = <0 205 0x4>;
                                phys = <&hs_phy>, <&ss_phy>;
                                phy-names = "usb2-phy", "usb3-phy";
-                               tx-fifo-resize;
                                dr_mode = "host";
                        };
                };
index 22416426868e2042cad8a11feb50a782dc7054be..51a0eac7c8ff9b518a7bc604f7a99c6b02217d9b 100644 (file)
@@ -897,9 +897,6 @@ static int dwc3_probe(struct platform_device *pdev)
        dwc->usb3_lpm_capable = device_property_read_bool(dev,
                                "snps,usb3_lpm_capable");
 
-       dwc->needs_fifo_resize = device_property_read_bool(dev,
-                               "tx-fifo-resize");
-
        dwc->disable_scramble_quirk = device_property_read_bool(dev,
                                "snps,disable_scramble_quirk");
        dwc->u2exit_lfps_quirk = device_property_read_bool(dev,
@@ -941,7 +938,6 @@ static int dwc3_probe(struct platform_device *pdev)
                if (pdata->hird_threshold)
                        hird_threshold = pdata->hird_threshold;
 
-               dwc->needs_fifo_resize = pdata->tx_fifo_resize;
                dwc->usb3_lpm_capable = pdata->usb3_lpm_capable;
                dwc->dr_mode = pdata->dr_mode;
 
index 1b941ee9e5d88040ca7fe28813fe090a2cb5d6f1..dc653676927621cd420460713b3cbfc6efa62c5d 100644 (file)
@@ -707,9 +707,7 @@ struct dwc3_scratchpad_array {
  *     0       - utmi_sleep_n
  *     1       - utmi_l1_suspend_n
  * @is_fpga: true when we are using the FPGA board
- * @needs_fifo_resize: not all users might want fifo resizing, flag it
  * @pullups_connected: true when Run/Stop bit is set
- * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes.
  * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround
  * @start_config_issued: true when StartConfig command has been issued
  * @three_stage_setup: set if we perform a three phase setup
@@ -853,9 +851,7 @@ struct dwc3 {
        unsigned                has_lpm_erratum:1;
        unsigned                is_utmi_l1_suspend:1;
        unsigned                is_fpga:1;
-       unsigned                needs_fifo_resize:1;
        unsigned                pullups_connected:1;
-       unsigned                resize_fifos:1;
        unsigned                setup_packet_pending:1;
        unsigned                three_stage_setup:1;
        unsigned                usb3_lpm_capable:1;
@@ -1023,7 +1019,6 @@ struct dwc3_gadget_ep_cmd_params {
 
 /* prototypes */
 void dwc3_set_mode(struct dwc3 *dwc, u32 mode);
-int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc);
 
 /* check whether we are on the DWC_usb31 core */
 static inline bool dwc3_is_usb31(struct dwc3 *dwc)
index 8d6b75c2f53b2e0d0991ca3dddc784f6dccecadb..8e5150ac4194a1aebe1576a900312dbc1b8280ad 100644 (file)
@@ -583,9 +583,6 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
                        reg = dwc3_readl(dwc->regs, DWC3_DCTL);
                        reg |= (DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA);
                        dwc3_writel(dwc->regs, DWC3_DCTL, reg);
-
-                       dwc->resize_fifos = true;
-                       dwc3_trace(trace_dwc3_ep0, "resize FIFOs flag SET");
                }
                break;
 
@@ -1024,12 +1021,6 @@ static int dwc3_ep0_start_control_status(struct dwc3_ep *dep)
 
 static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep)
 {
-       if (dwc->resize_fifos) {
-               dwc3_trace(trace_dwc3_ep0, "Resizing FIFOs");
-               dwc3_gadget_resize_tx_fifos(dwc);
-               dwc->resize_fifos = 0;
-       }
-
        WARN_ON(dwc3_ep0_start_control_status(dep));
 }
 
index a46b533f4f40563a22b37b42937dda223fa1d611..de1d21867ffe7f145d0ef752eb70c8d271ff6ad0 100644 (file)
@@ -145,92 +145,6 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state)
        return -ETIMEDOUT;
 }
 
-/**
- * dwc3_gadget_resize_tx_fifos - reallocate fifo spaces for current use-case
- * @dwc: pointer to our context structure
- *
- * This function will a best effort FIFO allocation in order
- * to improve FIFO usage and throughput, while still allowing
- * us to enable as many endpoints as possible.
- *
- * Keep in mind that this operation will be highly dependent
- * on the configured size for RAM1 - which contains TxFifo -,
- * the amount of endpoints enabled on coreConsultant tool, and
- * the width of the Master Bus.
- *
- * In the ideal world, we would always be able to satisfy the
- * following equation:
- *
- * ((512 + 2 * MDWIDTH-Bytes) + (Number of IN Endpoints - 1) * \
- * (3 * (1024 + MDWIDTH-Bytes) + MDWIDTH-Bytes)) / MDWIDTH-Bytes
- *
- * Unfortunately, due to many variables that's not always the case.
- */
-int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc)
-{
-       int             last_fifo_depth = 0;
-       int             ram1_depth;
-       int             fifo_size;
-       int             mdwidth;
-       int             num;
-
-       if (!dwc->needs_fifo_resize)
-               return 0;
-
-       ram1_depth = DWC3_RAM1_DEPTH(dwc->hwparams.hwparams7);
-       mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0);
-
-       /* MDWIDTH is represented in bits, we need it in bytes */
-       mdwidth >>= 3;
-
-       /*
-        * FIXME For now we will only allocate 1 wMaxPacketSize space
-        * for each enabled endpoint, later patches will come to
-        * improve this algorithm so that we better use the internal
-        * FIFO space
-        */
-       for (num = 0; num < dwc->num_in_eps; num++) {
-               /* bit0 indicates direction; 1 means IN ep */
-               struct dwc3_ep  *dep = dwc->eps[(num << 1) | 1];
-               int             mult = 1;
-               int             tmp;
-
-               if (!(dep->flags & DWC3_EP_ENABLED))
-                       continue;
-
-               if (usb_endpoint_xfer_bulk(dep->endpoint.desc)
-                               || usb_endpoint_xfer_isoc(dep->endpoint.desc))
-                       mult = 3;
-
-               /*
-                * REVISIT: the following assumes we will always have enough
-                * space available on the FIFO RAM for all possible use cases.
-                * Make sure that's true somehow and change FIFO allocation
-                * accordingly.
-                *
-                * If we have Bulk or Isochronous endpoints, we want
-                * them to be able to be very, very fast. So we're giving
-                * those endpoints a fifo_size which is enough for 3 full
-                * packets
-                */
-               tmp = mult * (dep->endpoint.maxpacket + mdwidth);
-               tmp += mdwidth;
-
-               fifo_size = DIV_ROUND_UP(tmp, mdwidth);
-
-               fifo_size |= (last_fifo_depth << 16);
-
-               dwc3_trace(trace_dwc3_gadget, "%s: Fifo Addr %04x Size %d",
-                               dep->name, last_fifo_depth, fifo_size & 0xffff);
-
-               dwc3_writel(dwc->regs, DWC3_GTXFIFOSIZ(num), fifo_size);
-
-               last_fifo_depth += (fifo_size & 0xffff);
-       }
-
-       return 0;
-}
-
 void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
                int status)
 {
index 2bb4d3ad0e6b724d71ceae0261955a2551c6859b..aaa6f00df755ba76cd49b87207ba55bcaf840b6c 100644 (file)
@@ -23,7 +23,6 @@
 struct dwc3_platform_data {
        enum usb_device_speed maximum_speed;
        enum usb_dr_mode dr_mode;
-       bool tx_fifo_resize;
        bool usb3_lpm_capable;
 
        unsigned is_utmi_l1_suspend:1;