Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8e4de6e authored by Mayank Rana's avatar Mayank Rana
Browse files

Revert "usb: dwc3: drop FIFO resizing logic"



This reverts commit bc508161 ("usb: dwc3: drop FIFO resizing
logic") to bring back resizing of TXFIFO functionality with USB IN
endpoints. This helps to improve througput based on fine tuning
available RAM size with USB controller on different platforms.

Change-Id: I81064459f208ca59514ae1642c14bf617ac028fa
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
parent 11a4004d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ Optional properties:
 - phys: from the *Generic PHY* bindings
 - phy-names: from the *Generic PHY* bindings; supported names are "usb2-phy"
	or "usb3-phy".
 - 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.
@@ -54,8 +55,6 @@ 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 {
@@ -63,4 +62,5 @@ dwc3@4a030000 {
	reg = <0x4a030000 0xcfff>;
	interrupts = <0 92 4>
	usb-phy = <&usb2_phy>, <&usb3,phy>;
	tx-fifo-resize;
};
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ Example device nodes:
				interrupts = <0 205 0x4>;
				phys = <&hs_phy>, <&ss_phy>;
				phy-names = "usb2-phy", "usb3-phy";
				tx-fifo-resize;
				dr_mode = "host";
			};
		};
+3 −0
Original line number Diff line number Diff line
@@ -1208,6 +1208,9 @@ 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,
+5 −0
Original line number Diff line number Diff line
@@ -852,7 +852,9 @@ struct dwc3_scratchpad_array {
 * 	1	- utmi_l1_suspend_n
 * @is_fpga: true when we are using the FPGA board
 * @pending_events: true when we have pending IRQs to be handled
 * @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
@@ -1020,7 +1022,9 @@ struct dwc3 {
	unsigned		is_utmi_l1_suspend:1;
	unsigned		is_fpga:1;
	unsigned		pending_events: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;
@@ -1227,6 +1231,7 @@ struct dwc3_gadget_ep_cmd_params {
/* prototypes */
void dwc3_set_mode(struct dwc3 *dwc, u32 mode);
u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type);
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)
+9 −0
Original line number Diff line number Diff line
@@ -593,6 +593,9 @@ 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;

@@ -1031,6 +1034,12 @@ 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));
}

Loading