[PATCH 1/1] usb: cdns3: fix super speed mass storage gadget device failure at imx8qm

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

 



The mass storage gadget has one IN and one OUT endpoint. The below (Fixes)
commit aimed to utilize all hardware FIFO to support composited gadget
devices. This resulted in an ep_buf_size of 15 when a single gadget was
enabled, such as the mass storage gadget.

However, it was found that there are unknown limitations on the imx8qm and
imx8qxp B0 platforms. The device would fail to work if ep_buf_size
exceeded 9.

To resolve this issue, this patch reverts to the old settings used before
the below commit for the imx8qm and imx8qxp B0 platforms.

Fixes: dce49449e04f ("usb: cdns3: allocate TX FIFO size according to composite EP number")

Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
---

I hope cdns engineer, such as pawell@xxxxxxxxxxx help identfy the root cause.
Look like old version ip use more memory then what ep_cfg show.

 drivers/usb/cdns3/cdns3-gadget.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c
index 5adcb349718c..497c8e87dabf 100644
--- a/drivers/usb/cdns3/cdns3-gadget.c
+++ b/drivers/usb/cdns3/cdns3-gadget.c
@@ -3005,6 +3005,17 @@ static int cdns3_gadget_check_config(struct usb_gadget *gadget)
 	priv_dev->ep_buf_size = priv_dev->ep_iso_burst =
 			(priv_dev->onchip_buffers - 2) / (n_in + 1);
 
+	/*
+	 * There are unknown hardware limition: when work at super speed mode,
+	 * ep_buffer_size can't bigger than 9 for one IN and OUT case at i.MX8QM
+	 * and i.MX8QXP B0, which report there are 32k memory.
+	 * Rollback to original settings for the these chipes.
+	 */
+	if (priv_dev->dev_ver < DEV_VER_V2) {
+		priv_dev->ep_buf_size = min_t(u8, priv_dev->ep_buf_size, 4);
+		priv_dev->ep_iso_burst = min_t(u8, priv_dev->ep_iso_burst, 3);
+	}
+
 	return 0;
 }
 
-- 
2.34.1




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

  Powered by Linux