All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] dwc3-generic: Add Layerscape support
@ 2020-10-21 10:02 Ran Wang
  2020-10-21 10:02 ` [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk Ran Wang
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Hello,

The purpose of this patch set is to switch from driver xhci-fsl to
dwc3-generic for DWC3 IP on Layerscape platforms. Whith this change, now
user can enable USB device mode by merely updating property 'dr_mode'
accordingly.

I also port some DWC3's errata workaorunds from driver
xhci-fsl (by referring to Linux kernel mainline version implemenattion).

Besides that, I fixed a PHY init problem which observed on Lyerscape
platforms (such as LS1088ardb).

Regards,
Ran

Change in v2:
 - Remove [2/7] usb: dwc3: add disable receiver detection in P3 quirk, because
   I found it causes Linux kenrel fail to detect USB device, need further check.

Ran Wang (6):
  usb: dwc3: Add frame length adjustment quirk
  usb: dwc3: Enable undefined length INCR burst type
  usb: dwc3-generic: fix dwc3_setup_phy() return -ENOTSUPP causing init
    failure
  usb: dwc3-generic: Add support for the layerscape
  configs: ls1088a: add usb mass storage (device mode) support
  arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver

 arch/arm/dts/fsl-ls1088a.dtsi            |  38 ++++++---
 configs/ls1088aqds_defconfig             |   5 ++
 configs/ls1088aqds_qspi_defconfig        |   5 ++
 configs/ls1088aqds_sdcard_ifc_defconfig  |   5 ++
 configs/ls1088aqds_sdcard_qspi_defconfig |   5 ++
 configs/ls1088aqds_tfa_defconfig         |   5 ++
 configs/ls1088ardb_qspi_defconfig        |   5 ++
 configs/ls1088ardb_sdcard_qspi_defconfig |   5 ++
 configs/ls1088ardb_tfa_defconfig         |   5 ++
 drivers/usb/dwc3/core.c                  | 130 +++++++++++++++++++++++++++++++
 drivers/usb/dwc3/core.h                  |  20 +++++
 drivers/usb/dwc3/dwc3-generic.c          |   3 +-
 12 files changed, 220 insertions(+), 11 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk
  2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
@ 2020-10-21 10:02 ` Ran Wang
  2020-11-30  1:45   ` Ran Wang
  2020-10-21 10:02 ` [PATCH v2 2/6] usb: dwc3: Enable undefined length INCR burst type Ran Wang
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Register Global frame length adjustment is used to do frame length
adjustment for SOF/ITP counter which is running on the ref_clk. Allow
updating it could help on avoiding potential USB 2.0 devices time-out over
a longer run.

Refer to Linux commit db2be4e9e30c (?usb: dwc3: Add frame length adjustment quirk?)

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v2:
 - None

 drivers/usb/dwc3/core.c | 34 ++++++++++++++++++++++++++++++++++
 drivers/usb/dwc3/core.h |  7 +++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 2e00353..b3d4751 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -310,6 +310,25 @@ static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
 	kfree(dwc->scratchbuf);
 }
 
+/*
+ * dwc3_frame_length_adjustment - Adjusts frame length if required
+ * @dwc3: Pointer to our controller context structure
+ * @val: Value of frame length
+ */
+static void dwc3_frame_length_adjustment(struct dwc3 *dwc, u32 val)
+{
+	u32 reg;
+	u32 dft;
+
+	reg = dwc3_readl(dwc->regs, DWC3_GFLADJ);
+	dft = reg & DWC3_GFLADJ_30MHZ_MASK;
+	if (dft != val) {
+		reg &= ~DWC3_GFLADJ_30MHZ_MASK;
+		reg |= DWC3_GFLADJ_30MHZ_SDBND_SEL | val;
+		dwc3_writel(dwc->regs, DWC3_GFLADJ, reg);
+	}
+}
+
 static void dwc3_core_num_eps(struct dwc3 *dwc)
 {
 	struct dwc3_hwparams	*parms = &dwc->hwparams;
@@ -569,6 +588,9 @@ static int dwc3_core_init(struct dwc3 *dwc)
 	if (ret)
 		goto err1;
 
+	if (dwc->fladj_quirk && dwc->revision >= DWC3_REVISION_250A)
+		dwc3_frame_length_adjustment(dwc, dwc->fladj);
+
 	return 0;
 
 err1:
@@ -958,6 +980,18 @@ void dwc3_of_parse(struct dwc3 *dwc)
 
 	dwc->hird_threshold = hird_threshold
 		| (dwc->is_utmi_l1_suspend << 4);
+
+	dwc->fladj_quirk = false;
+	if (!dev_read_u32(dev,
+			  "snps,quirk-frame-length-adjustment",
+			  &dwc->fladj)) {
+		if (dwc->fladj <=  DWC3_GFLADJ_30MHZ_MASK)
+			dwc->fladj_quirk = true;
+		else
+			dev_err(dev,
+				"snps,quirk-frame-length-adjustment invalid: 0x%x\n",
+				dwc->fladj);
+	}
 }
 
 int dwc3_init(struct dwc3 *dwc)
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 44533fd..4650216 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -115,6 +115,7 @@
 #define DWC3_GEVNTCOUNT(n)	(0xc40c + (n * 0x10))
 
 #define DWC3_GHWPARAMS8		0xc600
+#define DWC3_GFLADJ		0xc630
 
 /* Device Registers */
 #define DWC3_DCFG		0xc700
@@ -291,6 +292,10 @@
 #define DWC3_DCTL_ULSTCHNG_COMPLIANCE	(DWC3_DCTL_ULSTCHNGREQ(10))
 #define DWC3_DCTL_ULSTCHNG_LOOPBACK	(DWC3_DCTL_ULSTCHNGREQ(11))
 
+/* Global Frame Length Adjustment Register */
+#define DWC3_GFLADJ_30MHZ_SDBND_SEL	BIT(7)
+#define DWC3_GFLADJ_30MHZ_MASK		0x3f
+
 /* Device Event Enable Register */
 #define DWC3_DEVTEN_VNDRDEVTSTRCVEDEN	(1 << 12)
 #define DWC3_DEVTEN_EVNTOVERFLOWEN	(1 << 11)
@@ -764,6 +769,7 @@ struct dwc3 {
 	u32			num_event_buffers;
 	u32			u1u2;
 	u32			maximum_speed;
+	u32			fladj;
 	u32			revision;
 
 #define DWC3_REVISION_173A	0x5533173a
@@ -845,6 +851,7 @@ struct dwc3 {
 
 	unsigned		tx_de_emphasis_quirk:1;
 	unsigned		tx_de_emphasis:2;
+	unsigned		fladj_quirk:1;
 	int			index;
 	struct list_head        list;
 };
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 2/6] usb: dwc3: Enable undefined length INCR burst type
  2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
  2020-10-21 10:02 ` [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk Ran Wang
@ 2020-10-21 10:02 ` Ran Wang
  2020-10-21 10:02 ` [PATCH v2 3/6] usb: dwc3-generic: fix dwc3_setup_phy() return -ENOTSUPP causing init failure Ran Wang
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Enable the undefined length INCR burst type and set INCRx. Different
platforms may has the different burst size type. In order to get best
performance, we need to tune the burst size to one special value,
instead of the default value.

Refer to Linux commit (?usb: dwc3: Enable undefined length INCR burst type?)

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v2:
 - None, only context changed to fit removal of [v1 2/7] usb: dwc3: add
   disable receiver detection in P3 quirk

 drivers/usb/dwc3/core.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/usb/dwc3/core.h | 13 +++++++
 2 files changed, 109 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index b3d4751..6dc9781 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -310,6 +310,99 @@ static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
 	kfree(dwc->scratchbuf);
 }
 
+#if CONFIG_IS_ENABLED(DM_USB)
+/* set global incr burst type configuration registers */
+static void dwc3_set_incr_burst_type(struct dwc3 *dwc)
+{
+	struct udevice *dev = dwc->dev;
+	bool incrx_mode;
+	u32 incrx_size;
+	u32 *vals;
+	u32 cfg;
+	int ntype;
+	int ret;
+	int i;
+
+	cfg = dwc3_readl(dwc->regs, DWC3_GSBUSCFG0);
+
+	/*
+	 * Handle property "snps,incr-burst-type-adjustment".
+	 * Get the number of value from this property:
+	 * result <= 0, means this property is not supported.
+	 * result = 1, means INCRx burst mode supported.
+	 * result > 1, means undefined length burst mode supported.
+	 */
+	ntype = dev_read_size(dev, "snps,incr-burst-type-adjustment") / sizeof(u32);
+	if (ntype <= 0)
+		return;
+
+	vals = memalign(CONFIG_SYS_CACHELINE_SIZE, ntype * sizeof(u32));
+	if (!vals) {
+		dev_err(dev, "Error to get memory\n");
+		return;
+	}
+
+	/* Get INCR burst type, and parse it */
+	ret = dev_read_u32_array(dev, "snps,incr-burst-type-adjustment", vals, ntype);
+	if (ret) {
+		kfree(vals);
+		dev_err(dev, "Error to get property\n");
+		return;
+	}
+
+	incrx_size = *vals;
+
+	if (ntype > 1) {
+		/* INCRX (undefined length) burst mode */
+		incrx_mode = INCRX_UNDEF_LENGTH_BURST_MODE;
+		for (i = 1; i < ntype; i++) {
+			if (vals[i] > incrx_size)
+				incrx_size = vals[i];
+		}
+	} else {
+		/* INCRX burst mode */
+		incrx_mode = INCRX_BURST_MODE;
+	}
+
+	kfree(vals);
+
+	/* Enable Undefined Length INCR Burst and Enable INCRx Burst */
+	cfg &= ~DWC3_GSBUSCFG0_INCRBRST_MASK;
+	if (incrx_mode)
+		cfg |= DWC3_GSBUSCFG0_INCRBRSTENA;
+	switch (incrx_size) {
+	case 256:
+		cfg |= DWC3_GSBUSCFG0_INCR256BRSTENA;
+		break;
+	case 128:
+		cfg |= DWC3_GSBUSCFG0_INCR128BRSTENA;
+		break;
+	case 64:
+		cfg |= DWC3_GSBUSCFG0_INCR64BRSTENA;
+		break;
+	case 32:
+		cfg |= DWC3_GSBUSCFG0_INCR32BRSTENA;
+		break;
+	case 16:
+		cfg |= DWC3_GSBUSCFG0_INCR16BRSTENA;
+		break;
+	case 8:
+		cfg |= DWC3_GSBUSCFG0_INCR8BRSTENA;
+		break;
+	case 4:
+		cfg |= DWC3_GSBUSCFG0_INCR4BRSTENA;
+		break;
+	case 1:
+		break;
+	default:
+		dev_err(dev, "Invalid property\n");
+		break;
+	}
+
+	dwc3_writel(dwc->regs, DWC3_GSBUSCFG0, cfg);
+}
+#endif
+
 /*
  * dwc3_frame_length_adjustment - Adjusts frame length if required
  * @dwc3: Pointer to our controller context structure
@@ -591,6 +684,9 @@ static int dwc3_core_init(struct dwc3 *dwc)
 	if (dwc->fladj_quirk && dwc->revision >= DWC3_REVISION_250A)
 		dwc3_frame_length_adjustment(dwc, dwc->fladj);
 
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+	dwc3_set_incr_burst_type(dwc);
+#endif
 	return 0;
 
 err1:
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 4650216..3f9b8e5 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -139,6 +139,17 @@
 
 /* Bit fields */
 
+/* Global SoC Bus Configuration INCRx Register 0 */
+#define DWC3_GSBUSCFG0_INCR256BRSTENA	BIT(7) /* INCR256 burst */
+#define DWC3_GSBUSCFG0_INCR128BRSTENA	BIT(6) /* INCR128 burst */
+#define DWC3_GSBUSCFG0_INCR64BRSTENA	BIT(5) /* INCR64 burst */
+#define DWC3_GSBUSCFG0_INCR32BRSTENA	BIT(4) /* INCR32 burst */
+#define DWC3_GSBUSCFG0_INCR16BRSTENA	BIT(3) /* INCR16 burst */
+#define DWC3_GSBUSCFG0_INCR8BRSTENA	BIT(2) /* INCR8 burst */
+#define DWC3_GSBUSCFG0_INCR4BRSTENA	BIT(1) /* INCR4 burst */
+#define DWC3_GSBUSCFG0_INCRBRSTENA	BIT(0) /* undefined length enable */
+#define DWC3_GSBUSCFG0_INCRBRST_MASK	0xff
+
 /* Global Configuration Register */
 #define DWC3_GCTL_PWRDNSCALE(n)	((n) << 19)
 #define DWC3_GCTL_U2RSTECN	(1 << 16)
@@ -856,6 +867,8 @@ struct dwc3 {
 	struct list_head        list;
 };
 
+#define INCRX_BURST_MODE 0
+#define INCRX_UNDEF_LENGTH_BURST_MODE 1
 /* -------------------------------------------------------------------------- */
 
 /* -------------------------------------------------------------------------- */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 3/6] usb: dwc3-generic: fix dwc3_setup_phy() return -ENOTSUPP causing init failure
  2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
  2020-10-21 10:02 ` [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk Ran Wang
  2020-10-21 10:02 ` [PATCH v2 2/6] usb: dwc3: Enable undefined length INCR burst type Ran Wang
@ 2020-10-21 10:02 ` Ran Wang
  2020-10-21 10:02 ` [PATCH v2 4/6] usb: dwc3-generic: Add support for the layerscape Ran Wang
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Some SoC such as Layerscape serials which don't require PHY related
programming in dwc3-generic.c. In this case (CONFIG_PHY is not set), the
dwc3_setup_phy() will return -ENOTSUPP, causing the whole init fail.
That should be avoided.

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v2:
 - None

 drivers/usb/dwc3/dwc3-generic.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 36fa16a..d949083 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -74,7 +74,7 @@ static int dwc3_generic_probe(struct udevice *dev,
 	}
 
 	rc = dwc3_setup_phy(dev, &priv->phys);
-	if (rc)
+	if (rc && (rc != -ENOTSUPP))
 		return rc;
 
 	if (device_is_compatible(dev->parent, "rockchip,rk3399-dwc3"))
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 4/6] usb: dwc3-generic: Add support for the layerscape
  2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
                   ` (2 preceding siblings ...)
  2020-10-21 10:02 ` [PATCH v2 3/6] usb: dwc3-generic: fix dwc3_setup_phy() return -ENOTSUPP causing init failure Ran Wang
@ 2020-10-21 10:02 ` Ran Wang
  2020-10-21 10:02 ` [PATCH v2 5/6] configs: ls1088a: add usb mass storage (device mode) support Ran Wang
  2020-10-21 10:02 ` [PATCH v2 6/6] arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver Ran Wang
  5 siblings, 0 replies; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v2:
 - None

 drivers/usb/dwc3/dwc3-generic.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index d949083..66c878a 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -449,6 +449,7 @@ static const struct udevice_id dwc3_glue_ids[] = {
 	{ .compatible = "rockchip,rk3328-dwc3" },
 	{ .compatible = "rockchip,rk3399-dwc3" },
 	{ .compatible = "qcom,dwc3" },
+	{ .compatible = "nxp,layerscape-dwc3" },
 	{ }
 };
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 5/6] configs: ls1088a: add usb mass storage (device mode) support
  2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
                   ` (3 preceding siblings ...)
  2020-10-21 10:02 ` [PATCH v2 4/6] usb: dwc3-generic: Add support for the layerscape Ran Wang
@ 2020-10-21 10:02 ` Ran Wang
  2020-10-21 10:02 ` [PATCH v2 6/6] arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver Ran Wang
  5 siblings, 0 replies; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Enable support for one of USB gadget function: ums. Also enable related
dependency items.

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v2:
 - None

 configs/ls1088aqds_defconfig             | 5 +++++
 configs/ls1088aqds_qspi_defconfig        | 5 +++++
 configs/ls1088aqds_sdcard_ifc_defconfig  | 5 +++++
 configs/ls1088aqds_sdcard_qspi_defconfig | 5 +++++
 configs/ls1088aqds_tfa_defconfig         | 5 +++++
 configs/ls1088ardb_qspi_defconfig        | 5 +++++
 configs/ls1088ardb_sdcard_qspi_defconfig | 5 +++++
 configs/ls1088ardb_tfa_defconfig         | 5 +++++
 8 files changed, 40 insertions(+)

diff --git a/configs/ls1088aqds_defconfig b/configs/ls1088aqds_defconfig
index 9642de2..d0668a9 100644
--- a/configs/ls1088aqds_defconfig
+++ b/configs/ls1088aqds_defconfig
@@ -67,8 +67,13 @@ CONFIG_SPI=y
 CONFIG_DM_SPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
diff --git a/configs/ls1088aqds_qspi_defconfig b/configs/ls1088aqds_qspi_defconfig
index fcb7678..b53a103 100644
--- a/configs/ls1088aqds_qspi_defconfig
+++ b/configs/ls1088aqds_qspi_defconfig
@@ -70,8 +70,13 @@ CONFIG_FSL_DSPI=y
 CONFIG_FSL_QSPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
 CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
diff --git a/configs/ls1088aqds_sdcard_ifc_defconfig b/configs/ls1088aqds_sdcard_ifc_defconfig
index 1f8398c..ed75364 100644
--- a/configs/ls1088aqds_sdcard_ifc_defconfig
+++ b/configs/ls1088aqds_sdcard_ifc_defconfig
@@ -75,8 +75,13 @@ CONFIG_DM_SCSI=y
 CONFIG_SYS_NS16550=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
diff --git a/configs/ls1088aqds_sdcard_qspi_defconfig b/configs/ls1088aqds_sdcard_qspi_defconfig
index 6558c16..8acc0ac 100644
--- a/configs/ls1088aqds_sdcard_qspi_defconfig
+++ b/configs/ls1088aqds_sdcard_qspi_defconfig
@@ -80,7 +80,12 @@ CONFIG_FSL_DSPI=y
 CONFIG_FSL_QSPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
diff --git a/configs/ls1088aqds_tfa_defconfig b/configs/ls1088aqds_tfa_defconfig
index 582cd85..6e6d45a 100644
--- a/configs/ls1088aqds_tfa_defconfig
+++ b/configs/ls1088aqds_tfa_defconfig
@@ -95,8 +95,13 @@ CONFIG_FSL_DSPI=y
 CONFIG_FSL_QSPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
 CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
diff --git a/configs/ls1088ardb_qspi_defconfig b/configs/ls1088ardb_qspi_defconfig
index d7ecff2..884672a 100644
--- a/configs/ls1088ardb_qspi_defconfig
+++ b/configs/ls1088ardb_qspi_defconfig
@@ -72,8 +72,13 @@ CONFIG_FSL_DSPI=y
 CONFIG_FSL_QSPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
 CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
diff --git a/configs/ls1088ardb_sdcard_qspi_defconfig b/configs/ls1088ardb_sdcard_qspi_defconfig
index 6adfadf..9af3d3a 100644
--- a/configs/ls1088ardb_sdcard_qspi_defconfig
+++ b/configs/ls1088ardb_sdcard_qspi_defconfig
@@ -82,7 +82,12 @@ CONFIG_FSL_DSPI=y
 CONFIG_FSL_QSPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
diff --git a/configs/ls1088ardb_tfa_defconfig b/configs/ls1088ardb_tfa_defconfig
index c6c860c..f55d60f 100644
--- a/configs/ls1088ardb_tfa_defconfig
+++ b/configs/ls1088ardb_tfa_defconfig
@@ -83,12 +83,17 @@ CONFIG_FSL_DSPI=y
 CONFIG_FSL_QSPI=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
+CONFIG_DM_USB_GADGET=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
 CONFIG_USB_HOST_ETHER=y
 CONFIG_USB_ETHER_ASIX=y
 CONFIG_USB_ETHER_ASIX88179=y
 CONFIG_USB_ETHER_RTL8152=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_MISC=y
 CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 6/6] arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver
  2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
                   ` (4 preceding siblings ...)
  2020-10-21 10:02 ` [PATCH v2 5/6] configs: ls1088a: add usb mass storage (device mode) support Ran Wang
@ 2020-10-21 10:02 ` Ran Wang
  2021-10-03 17:23   ` Michael Walle
  5 siblings, 1 reply; 9+ messages in thread
From: Ran Wang @ 2020-10-21 10:02 UTC (permalink / raw)
  To: u-boot

Benefit is, besides host mode, now user can choose device mode with
setting of dr_mode = ?peripheral?;

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v2:
 - Remove property 'snps,dis_rxdet_inp3_quirk' due to its side effect to Linux
   kernel (USB device no detected) 

 arch/arm/dts/fsl-ls1088a.dtsi | 38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/arch/arm/dts/fsl-ls1088a.dtsi b/arch/arm/dts/fsl-ls1088a.dtsi
index 6653794..9d4f40c 100644
--- a/arch/arm/dts/fsl-ls1088a.dtsi
+++ b/arch/arm/dts/fsl-ls1088a.dtsi
@@ -121,18 +121,36 @@
 		interrupts = <0 21 0x4>; /* Level high type */
 	};
 
-	usb0: usb3 at 3100000 {
-		compatible = "fsl,layerscape-dwc3";
-		reg = <0x0 0x3100000 0x0 0x10000>;
-		interrupts = <0 80 0x4>; /* Level high type */
-		dr_mode = "host";
+	usb0: usb at 3100000 {
+		compatible = "nxp,layerscape-dwc3";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+		dwc3 {
+			compatible = "snps,dwc3";
+			reg = <0x0 0x3100000 0x0 0x10000>;
+			interrupts = <0 80 0x4>; /* Level high type */
+			dr_mode = "host";
+			maximum-speed = "super-speed";
+			snps,quirk-frame-length-adjustment = <0x20>;
+			snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+		};
 	};
 
-	usb1: usb3 at 3110000 {
-		compatible = "fsl,layerscape-dwc3";
-		reg = <0x0 0x3110000 0x0 0x10000>;
-		interrupts = <0 81 0x4>; /* Level high type */
-		dr_mode = "host";
+	usb1: usb at 3110000 {
+		compatible = "nxp,layerscape-dwc3";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+		dwc3 {
+			compatible = "snps,dwc3";
+			reg = <0x0 0x3110000 0x0 0x10000>;
+			interrupts = <0 81 0x4>; /* Level high type */
+			dr_mode = "host";
+			maximum-speed = "super-speed";
+			snps,quirk-frame-length-adjustment = <0x20>;
+			snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+		};
 	};
 
 	pcie at 3400000 {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk
  2020-10-21 10:02 ` [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk Ran Wang
@ 2020-11-30  1:45   ` Ran Wang
  0 siblings, 0 replies; 9+ messages in thread
From: Ran Wang @ 2020-11-30  1:45 UTC (permalink / raw)
  To: u-boot

Hi Bin, Marek,

  Any comment for this serial? Thanks in advance.

Regards,
Ran

On Wednesday, October 21, 2020 6:02 PM, Ran Wang wrote:
> 
> Register Global frame length adjustment is used to do frame length adjustment
> for SOF/ITP counter which is running on the ref_clk. Allow updating it could help
> on avoiding potential USB 2.0 devices time-out over a longer run.
> 
> Refer to Linux commit db2be4e9e30c (?usb: dwc3: Add frame length
> adjustment quirk?)
> 
> Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
> ---
> Change in v2:
>  - None
> 
>  drivers/usb/dwc3/core.c | 34 ++++++++++++++++++++++++++++++++++
>  drivers/usb/dwc3/core.h |  7 +++++++
>  2 files changed, 41 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index
> 2e00353..b3d4751 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -310,6 +310,25 @@ static void dwc3_free_scratch_buffers(struct dwc3
> *dwc)
>  	kfree(dwc->scratchbuf);
>  }
> 
> +/*
> + * dwc3_frame_length_adjustment - Adjusts frame length if required
> + * @dwc3: Pointer to our controller context structure
> + * @val: Value of frame length
> + */
> +static void dwc3_frame_length_adjustment(struct dwc3 *dwc, u32 val) {
> +	u32 reg;
> +	u32 dft;
> +
> +	reg = dwc3_readl(dwc->regs, DWC3_GFLADJ);
> +	dft = reg & DWC3_GFLADJ_30MHZ_MASK;
> +	if (dft != val) {
> +		reg &= ~DWC3_GFLADJ_30MHZ_MASK;
> +		reg |= DWC3_GFLADJ_30MHZ_SDBND_SEL | val;
> +		dwc3_writel(dwc->regs, DWC3_GFLADJ, reg);
> +	}
> +}
> +
>  static void dwc3_core_num_eps(struct dwc3 *dwc)  {
>  	struct dwc3_hwparams	*parms = &dwc->hwparams;
> @@ -569,6 +588,9 @@ static int dwc3_core_init(struct dwc3 *dwc)
>  	if (ret)
>  		goto err1;
> 
> +	if (dwc->fladj_quirk && dwc->revision >= DWC3_REVISION_250A)
> +		dwc3_frame_length_adjustment(dwc, dwc->fladj);
> +
>  	return 0;
> 
>  err1:
> @@ -958,6 +980,18 @@ void dwc3_of_parse(struct dwc3 *dwc)
> 
>  	dwc->hird_threshold = hird_threshold
>  		| (dwc->is_utmi_l1_suspend << 4);
> +
> +	dwc->fladj_quirk = false;
> +	if (!dev_read_u32(dev,
> +			  "snps,quirk-frame-length-adjustment",
> +			  &dwc->fladj)) {
> +		if (dwc->fladj <=  DWC3_GFLADJ_30MHZ_MASK)
> +			dwc->fladj_quirk = true;
> +		else
> +			dev_err(dev,
> +				"snps,quirk-frame-length-adjustment invalid: 0x%x\n",
> +				dwc->fladj);
> +	}
>  }
> 
>  int dwc3_init(struct dwc3 *dwc)
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index
> 44533fd..4650216 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -115,6 +115,7 @@
>  #define DWC3_GEVNTCOUNT(n)	(0xc40c + (n * 0x10))
> 
>  #define DWC3_GHWPARAMS8		0xc600
> +#define DWC3_GFLADJ		0xc630
> 
>  /* Device Registers */
>  #define DWC3_DCFG		0xc700
> @@ -291,6 +292,10 @@
>  #define DWC3_DCTL_ULSTCHNG_COMPLIANCE
> 	(DWC3_DCTL_ULSTCHNGREQ(10))
>  #define DWC3_DCTL_ULSTCHNG_LOOPBACK
> 	(DWC3_DCTL_ULSTCHNGREQ(11))
> 
> +/* Global Frame Length Adjustment Register */
> +#define DWC3_GFLADJ_30MHZ_SDBND_SEL	BIT(7)
> +#define DWC3_GFLADJ_30MHZ_MASK		0x3f
> +
>  /* Device Event Enable Register */
>  #define DWC3_DEVTEN_VNDRDEVTSTRCVEDEN	(1 << 12)
>  #define DWC3_DEVTEN_EVNTOVERFLOWEN	(1 << 11)
> @@ -764,6 +769,7 @@ struct dwc3 {
>  	u32			num_event_buffers;
>  	u32			u1u2;
>  	u32			maximum_speed;
> +	u32			fladj;
>  	u32			revision;
> 
>  #define DWC3_REVISION_173A	0x5533173a
> @@ -845,6 +851,7 @@ struct dwc3 {
> 
>  	unsigned		tx_de_emphasis_quirk:1;
>  	unsigned		tx_de_emphasis:2;
> +	unsigned		fladj_quirk:1;
>  	int			index;
>  	struct list_head        list;
>  };
> --
> 2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 6/6] arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver
  2020-10-21 10:02 ` [PATCH v2 6/6] arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver Ran Wang
@ 2021-10-03 17:23   ` Michael Walle
  0 siblings, 0 replies; 9+ messages in thread
From: Michael Walle @ 2021-10-03 17:23 UTC (permalink / raw)
  To: ran.wang_1; +Cc: u-boot, Marek Vasut, Michael Walle

> Benefit is, besides host mode, now user can choose device mode with
> setting of dr_mode = ?peripheral?;
> 
> Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
> ---
> Change in v2:
>  - Remove property 'snps,dis_rxdet_inp3_quirk' due to its side effect to Linux
>    kernel (USB device no detected) 
> 
>  arch/arm/dts/fsl-ls1088a.dtsi | 38 ++++++++++++++++++++++++++++----------
>  1 file changed, 28 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/arm/dts/fsl-ls1088a.dtsi b/arch/arm/dts/fsl-ls1088a.dtsi
> index 6653794..9d4f40c 100644
> --- a/arch/arm/dts/fsl-ls1088a.dtsi
> +++ b/arch/arm/dts/fsl-ls1088a.dtsi
> @@ -121,18 +121,36 @@
>  		interrupts = <0 21 0x4>; /* Level high type */
>  	};
>  
> -	usb0: usb3 at 3100000 {
> -		compatible = "fsl,layerscape-dwc3";
> -		reg = <0x0 0x3100000 0x0 0x10000>;
> -		interrupts = <0 80 0x4>; /* Level high type */
> -		dr_mode = "host";
> +	usb0: usb at 3100000 {
> +		compatible = "nxp,layerscape-dwc3";
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		ranges;
> +		dwc3 {
> +			compatible = "snps,dwc3";
> +			reg = <0x0 0x3100000 0x0 0x10000>;
> +			interrupts = <0 80 0x4>; /* Level high type */
> +			dr_mode = "host";
> +			maximum-speed = "super-speed";
> +			snps,quirk-frame-length-adjustment = <0x20>;
> +			snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
> +		};

NAK. This is not the official device tree binding for this controller.
Please use the same binding as specified in linux.

NB. I'm working on this.

-michael

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-10-03 17:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-21 10:02 [PATCH v2 0/6] dwc3-generic: Add Layerscape support Ran Wang
2020-10-21 10:02 ` [PATCH v2 1/6] usb: dwc3: Add frame length adjustment quirk Ran Wang
2020-11-30  1:45   ` Ran Wang
2020-10-21 10:02 ` [PATCH v2 2/6] usb: dwc3: Enable undefined length INCR burst type Ran Wang
2020-10-21 10:02 ` [PATCH v2 3/6] usb: dwc3-generic: fix dwc3_setup_phy() return -ENOTSUPP causing init failure Ran Wang
2020-10-21 10:02 ` [PATCH v2 4/6] usb: dwc3-generic: Add support for the layerscape Ran Wang
2020-10-21 10:02 ` [PATCH v2 5/6] configs: ls1088a: add usb mass storage (device mode) support Ran Wang
2020-10-21 10:02 ` [PATCH v2 6/6] arm: dts: ls1088a: change dwc3 compatible to match dwc3-generic driver Ran Wang
2021-10-03 17:23   ` Michael Walle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.