Re: [PATCH 1/2] usb: dwc3: drop FIFO resizing logic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Felipe,

On Thursday 04 February 2016 05:48 PM, Felipe Balbi wrote:
> 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.
> 
> Signed-off-by: Felipe Balbi <balbi@xxxxxxxxxx>

tested this series on both dra7-evm and dra72-evm using mass storage gadget and
msc.sh

dra72-evm: http://pastebin.ubuntu.com/14887997/
dra7-evm: http://pastebin.ubuntu.com/14887975/

Tested-by: Kishon Vijay Abraham I <kishon@xxxxxx>

Let me know if you want me to do any other testing on dra7.

Thanks
Kishon

> ---
>  Documentation/devicetree/bindings/usb/dwc3.txt     |  4 +-
>  .../devicetree/bindings/usb/qcom,dwc3.txt          |  1 -
>  drivers/usb/dwc3/core.c                            |  4 -
>  drivers/usb/dwc3/core.h                            |  5 --
>  drivers/usb/dwc3/ep0.c                             |  9 ---
>  drivers/usb/dwc3/gadget.c                          | 86 ----------------------
>  drivers/usb/dwc3/platform_data.h                   |  1 -
>  7 files changed, 2 insertions(+), 108 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
> index fb2ad0acedbd..15695682a480 100644
> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
> @@ -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;
>  };
> diff --git a/Documentation/devicetree/bindings/usb/qcom,dwc3.txt b/Documentation/devicetree/bindings/usb/qcom,dwc3.txt
> index ca164e71dd50..39acb084bce9 100644
> --- a/Documentation/devicetree/bindings/usb/qcom,dwc3.txt
> +++ b/Documentation/devicetree/bindings/usb/qcom,dwc3.txt
> @@ -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";
>  			};
>  		};
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index de5e01f41bc2..ed03820ebedd 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -894,9 +894,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,
> @@ -938,7 +935,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;
>  
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 29130682e547..c6960541c38c 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -706,9 +706,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
> @@ -852,9 +850,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		start_config_issued:1;
>  	unsigned		three_stage_setup: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);
>  
>  #if IS_ENABLED(CONFIG_USB_DWC3_HOST) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
>  int dwc3_host_init(struct dwc3 *dwc);
> diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
> index 3a9354abcb68..2916a7f8f285 100644
> --- a/drivers/usb/dwc3/ep0.c
> +++ b/drivers/usb/dwc3/ep0.c
> @@ -584,9 +584,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;
>  
> @@ -1029,12 +1026,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));
>  }
>  
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 7d1dd82a95ac..a5c783dfbbd6 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -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)
>  {
> diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
> index 2bb4d3ad0e6b..aaa6f00df755 100644
> --- a/drivers/usb/dwc3/platform_data.h
> +++ b/drivers/usb/dwc3/platform_data.h
> @@ -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;
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux