linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes
@ 2021-01-20  1:36 Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY Thinh Nguyen
                   ` (6 more replies)
  0 siblings, 7 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb,
	devicetree, Rob Herring
  Cc: John Youn

A USB SuperSpeed Plus device may operate at different speed and lane count
(i.e. gen2x2, gen1x2, or gen2x1). The DWC_usb32 IP supports SuperSpeed Plus
gen2x2. To support this, this series update a few things to the USB gadget
stack and dwc3 driver:

* Accept and parse new maximum_speed devicetree property strings
* Introduce enum usb_ssp_rate to describe the speed in SuperSpeed Plus genXxY
* Capture the connected and max supported usb_ssp_rate
* Report the device sublink speeds base on the usb_ssp_rate in the BOS
  descriptor
* Introduce gadget ops to select SuperSpeed Plus various transfer rate and lane
  count
* Update dwc3 driver to support the above changes

Changes in v7:
 - Greg picked up the first few patches of the series to his usb-testing
   branch. Rebase the remaining patches on Greg's usb-testing branch

Changes in v6:
 - Rebase on Greg's usb-testing branch
 - Update cover letter and title since there are many updates
   * Previous version 5: https://lore.kernel.org/linux-usb/cover.1601001199.git.Thinh.Nguyen@synopsys.com/
 - To simplify things, use usb_ssp_rate enum to specify the signaling rate
   generation and lane count instead of separately tracking them.
 - Convert the sublink speed attributes to macros and move it to uapi
 - Remove usb_sublink_speed struct
 - Remove "usb: dwc3: gadget: Report sublink speed capability"
 - Update dwc3 to support the new changes

Changes in v5:
 - Rebase on Felipe's testing/next branch
 - Changed Signed-off-by email to match From: email header
 - Add Rob's Reviewed-by

Changes in v4:
 - Instead of using a single function to parse "maximum-speed" property for
   speed, gen X, and number of lanes, split those tasks to separate common
   functions
 - Revise DWC3 driver to use those new common functions
 - Fix checkpatch warnings for using "unsigned" rather than "unsigned int" and
   missing identifier name in udc_set_num_lanes_and_speed gadget ops

Changes in v3:
 - Remove "num-lanes" and "lane-speed-mantissa-gbps" common properties
 - Remove "num-lanes" and "lane-speed-mantissa-gbps" properties validation in dwc3
 - Update "maximum-speed" to support variations of SSP Gen X x Y
 - Update common function to parse new strings for "maximum-speed"
 - Update commit messages for the new changes

Changes in v2:
 - Move usb_sublink_speed attribute struct and enum to include/linux/usb/ch9.h
 - Use "num-lanes" and "lane-speed-mantissa-gbps" as common properties instead
 - Add common functions to get num-lanes and lsm properties
 - Fix missing gen1x2 sublink speed attribute check report in dwc3


Thinh Nguyen (6):
  dt-binding: usb: Include USB SSP rates in GenXxY
  usb: common: Parse for USB SSP genXxY
  usb: dwc3: core: Check maximum_speed SSP genXxY
  usb: dwc3: gadget: Implement setting of SSP rate
  usb: dwc3: gadget: Track connected SSP rate and lane count
  usb: dwc3: gadget: Set speed only up to the max supported

 .../devicetree/bindings/usb/usb.yaml          |  3 +
 drivers/usb/common/common.c                   | 26 +++++-
 drivers/usb/dwc3/core.c                       | 37 +++++++++
 drivers/usb/dwc3/core.h                       |  9 +++
 drivers/usb/dwc3/gadget.c                     | 80 ++++++++++++++++++-
 include/linux/usb/ch9.h                       | 11 +++
 6 files changed, 162 insertions(+), 4 deletions(-)


base-commit: 7a79f1f7f7e75e532c5a803ab3ebf42a3e79497c
-- 
2.28.0


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

* [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
@ 2021-01-20  1:36 ` Thinh Nguyen
  2021-02-05  2:32   ` Thinh Nguyen
  2021-02-05 20:46   ` Rob Herring
  2021-01-20  1:36 ` [PATCH v7 2/6] usb: common: Parse for USB SSP genXxY Thinh Nguyen
                   ` (5 subsequent siblings)
  6 siblings, 2 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb,
	devicetree, Rob Herring
  Cc: John Youn

According to the USB 3.2 spec, a SuperSpeed Plus device can operate at
gen2x2, gen2x1, or gen1x2. If the USB controller device supports
multiple lanes at different transfer rates, the user can specify the HW
capability via these new speed strings:

"super-speed-plus-gen2x2"
"super-speed-plus-gen2x1"
"super-speed-plus-gen1x2"

If the argument is simply "super-speed-plus", USB controllers should
default to their maximum transfer rate and number of lanes.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
Changes in v7:
- Rebase on Greg's usb-testing branch
Changes in v6:
- Update the different maximum_speed enums to the usb.yaml
- Remove Reviewed-by: Rob Herring <robh@kernel.org> because the commit is updated
- Rebase on Greg's usb-testing branch
- Update commit message
Changes in v5:
- Add Reviewed-by: Rob Herring <robh@kernel.org>
- Rebase on Felipe's testing/next branch
- Changed Signed-off-by email to match From: email header
Changes in v4:
- None
Changes in v3:
- Use "maximum-speed" to include both the num-lane and transfer rate for SSP
- Remove "num-lanes" and "lane-speed-mantissa-gbps" properties
Changes in v2:
- Make "num-lanes" and "lane-speed-mantissa-gbps" common USB properties

 Documentation/devicetree/bindings/usb/usb.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/usb.yaml b/Documentation/devicetree/bindings/usb/usb.yaml
index ebe7f4275c59..78491e66ed24 100644
--- a/Documentation/devicetree/bindings/usb/usb.yaml
+++ b/Documentation/devicetree/bindings/usb/usb.yaml
@@ -54,6 +54,9 @@ properties:
       - high-speed
       - super-speed
       - super-speed-plus
+      - super-speed-plus-gen2x1
+      - super-speed-plus-gen1x2
+      - super-speed-plus-gen2x2
 
 additionalProperties: true
 
-- 
2.28.0


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

* [PATCH v7 2/6] usb: common: Parse for USB SSP genXxY
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY Thinh Nguyen
@ 2021-01-20  1:36 ` Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 3/6] usb: dwc3: core: Check maximum_speed " Thinh Nguyen
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb; +Cc: John Youn

The USB "maximum-speed" property can now take the SSP signaling rate
generation and lane count with these new strings:

"super-speed-plus-gen2x2"
"super-speed-plus-gen2x1"
"super-speed-plus-gen1x2"

Introduce usb_get_maximum_ssp_rate() to parse for the corresponding
usb_ssp_rate enum. The original usb_get_maximum_speed() will return
USB_SPEED_SUPER_PLUS if it matches one of these new strings.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
Changes in v7:
- Rebase on Greg's usb-testing branch
Changes in v6:
- Rebase on Greg's usb-testing branch
- Remove usb_get_ssp_num_lanes() and usb_get_ssp_phy_gen() and use
  usb_get_ssp_rate() to return the corresponding usb_ssp_rate enum instead
- Update commit message
Changes in v5:
- Rebase on Felipe's testing/next branch
- Changed Signed-off-by email to match From: email header
Changes in v4:
- Create 2 functions to get the SSP gen and number of lanes from "maximum-speed" property
- Update usb_get_maximum_speed() to check new SSP strings with genXxY
- Update commit message and subject title to reflect the new changes
Changes in v3:
- Add new function to parse "maximum-speed" for lanes and transfer rate
- Remove separate functions getting num_lanes and transfer rate properties
Changes in v2:
- New commit

 drivers/usb/common/common.c | 26 +++++++++++++++++++++++++-
 include/linux/usb/ch9.h     | 11 +++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index 1433260d99b4..fc21cf2d36f6 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -69,6 +69,13 @@ static const char *const speed_names[] = {
 	[USB_SPEED_SUPER_PLUS] = "super-speed-plus",
 };
 
+static const char *const ssp_rate[] = {
+	[USB_SSP_GEN_UNKNOWN] = "UNKNOWN",
+	[USB_SSP_GEN_2x1] = "super-speed-plus-gen2x1",
+	[USB_SSP_GEN_1x2] = "super-speed-plus-gen1x2",
+	[USB_SSP_GEN_2x2] = "super-speed-plus-gen2x2",
+};
+
 const char *usb_speed_string(enum usb_device_speed speed)
 {
 	if (speed < 0 || speed >= ARRAY_SIZE(speed_names))
@@ -86,12 +93,29 @@ enum usb_device_speed usb_get_maximum_speed(struct device *dev)
 	if (ret < 0)
 		return USB_SPEED_UNKNOWN;
 
-	ret = match_string(speed_names, ARRAY_SIZE(speed_names), maximum_speed);
+	ret = match_string(ssp_rate, ARRAY_SIZE(ssp_rate), maximum_speed);
+	if (ret > 0)
+		return USB_SPEED_SUPER_PLUS;
 
+	ret = match_string(speed_names, ARRAY_SIZE(speed_names), maximum_speed);
 	return (ret < 0) ? USB_SPEED_UNKNOWN : ret;
 }
 EXPORT_SYMBOL_GPL(usb_get_maximum_speed);
 
+enum usb_ssp_rate usb_get_maximum_ssp_rate(struct device *dev)
+{
+	const char *maximum_speed;
+	int ret;
+
+	ret = device_property_read_string(dev, "maximum-speed", &maximum_speed);
+	if (ret < 0)
+		return USB_SSP_GEN_UNKNOWN;
+
+	ret = match_string(ssp_rate, ARRAY_SIZE(ssp_rate), maximum_speed);
+	return (ret < 0) ? USB_SSP_GEN_UNKNOWN : ret;
+}
+EXPORT_SYMBOL_GPL(usb_get_maximum_ssp_rate);
+
 const char *usb_state_string(enum usb_device_state state)
 {
 	static const char *const names[] = {
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 86c50907634e..abdd310c77f0 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -71,6 +71,17 @@ extern const char *usb_speed_string(enum usb_device_speed speed);
  */
 extern enum usb_device_speed usb_get_maximum_speed(struct device *dev);
 
+/**
+ * usb_get_maximum_ssp_rate - Get the signaling rate generation and lane count
+ *	of a SuperSpeed Plus capable device.
+ * @dev: Pointer to the given USB controller device
+ *
+ * If the string from "maximum-speed" property is super-speed-plus-genXxY where
+ * 'X' is the generation number and 'Y' is the number of lanes, then this
+ * function returns the corresponding enum usb_ssp_rate.
+ */
+extern enum usb_ssp_rate usb_get_maximum_ssp_rate(struct device *dev);
+
 /**
  * usb_state_string - Returns human readable name for the state.
  * @state: The state to return a human-readable name for. If it's not
-- 
2.28.0


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

* [PATCH v7 3/6] usb: dwc3: core: Check maximum_speed SSP genXxY
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 2/6] usb: common: Parse for USB SSP genXxY Thinh Nguyen
@ 2021-01-20  1:36 ` Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 4/6] usb: dwc3: gadget: Implement setting of SSP rate Thinh Nguyen
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb; +Cc: John Youn

The DWC_usb32 controller supports dual-lane SuperSpeed Plus. Check the
maximum_speed property for any limitation in the HW to initialize and
validate the maximum number of lanes and speed the device will operate.

Currently the controller has no visibility into the HW parameter to
determine the maximum number of lanes the HW supports. If the number of
lanes is not specified for SSP, then set the default rate to gen2x2 for
DWC_usb32 and gen2x1 for DWC_usb31.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
Changes in v7:
- Rebase on Greg's usb-testing branch
Changes in v6:
- Rebase on Greg's usb-testing branch
- Update to check for lane count and gen# via usb_ssp_rate enum
- Update commit message
Changes in v5:
- Rebase on Felipe's testing/next branch
- Changed Signed-off-by email to match From: email header
Changes in v4:
- Use new common funtions to get SSP Gen and number of lanes
Changes in v3:
- Use new common function to get maximum-speed
- Remove num_lanes and lsm validation since they are no longer separate
  properties
- Replace dwc->maxmum_lsm field with dwc->maximum_ssp_rate for gen1/gen2
Changes in v2:
- Use common functions to get num_lanes and lsm properties

 drivers/usb/dwc3/core.c   | 37 +++++++++++++++++++++++++++++++++++++
 drivers/usb/dwc3/core.h   |  2 ++
 drivers/usb/dwc3/gadget.c |  1 +
 3 files changed, 40 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 6969196fccd6..931ccf93eabd 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1252,6 +1252,7 @@ static void dwc3_get_properties(struct dwc3 *dwc)
 	hird_threshold = 12;
 
 	dwc->maximum_speed = usb_get_maximum_speed(dev);
+	dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev);
 	dwc->dr_mode = usb_get_dr_mode(dev);
 	dwc->hsphy_mode = of_usb_get_phy_mode(dev->of_node);
 
@@ -1423,6 +1424,42 @@ static void dwc3_check_params(struct dwc3 *dwc)
 		}
 		break;
 	}
+
+	/*
+	 * Currently the controller does not have visibility into the HW
+	 * parameter to determine the maximum number of lanes the HW supports.
+	 * If the number of lanes is not specified in the device property, then
+	 * set the default to support dual-lane for DWC_usb32 and single-lane
+	 * for DWC_usb31 for super-speed-plus.
+	 */
+	if (dwc->maximum_speed == USB_SPEED_SUPER_PLUS) {
+		switch (dwc->max_ssp_rate) {
+		case USB_SSP_GEN_2x1:
+			if (hwparam_gen == DWC3_GHWPARAMS3_SSPHY_IFC_GEN1)
+				dev_warn(dev, "UDC only supports Gen 1\n");
+			break;
+		case USB_SSP_GEN_1x2:
+		case USB_SSP_GEN_2x2:
+			if (DWC3_IP_IS(DWC31))
+				dev_warn(dev, "UDC only supports single lane\n");
+			break;
+		case USB_SSP_GEN_UNKNOWN:
+		default:
+			switch (hwparam_gen) {
+			case DWC3_GHWPARAMS3_SSPHY_IFC_GEN2:
+				if (DWC3_IP_IS(DWC32))
+					dwc->max_ssp_rate = USB_SSP_GEN_2x2;
+				else
+					dwc->max_ssp_rate = USB_SSP_GEN_2x1;
+				break;
+			case DWC3_GHWPARAMS3_SSPHY_IFC_GEN1:
+				if (DWC3_IP_IS(DWC32))
+					dwc->max_ssp_rate = USB_SSP_GEN_1x2;
+				break;
+			}
+			break;
+		}
+	}
 }
 
 static int dwc3_probe(struct platform_device *pdev)
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index eec1cf4ba268..a482f4e954cb 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -964,6 +964,7 @@ struct dwc3_scratchpad_array {
  * @nr_scratch: number of scratch buffers
  * @u1u2: only used on revisions <1.83a for workaround
  * @maximum_speed: maximum speed requested (mainly for testing purposes)
+ * @max_ssp_rate: SuperSpeed Plus maximum signaling rate and lane count
  * @gadget_max_speed: maximum gadget speed requested
  * @ip: controller's ID
  * @revision: controller's version of an IP
@@ -1128,6 +1129,7 @@ struct dwc3 {
 	u32			u1u2;
 	u32			maximum_speed;
 	u32			gadget_max_speed;
+	enum usb_ssp_rate	max_ssp_rate;
 
 	u32			ip;
 
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 86f257f12d45..00ba8f11ca32 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -3888,6 +3888,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
 				dwc->revision);
 
 	dwc->gadget->max_speed		= dwc->maximum_speed;
+	dwc->gadget->max_ssp_rate	= dwc->max_ssp_rate;
 
 	/*
 	 * REVISIT: Here we should clear all pending IRQs to be
-- 
2.28.0


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

* [PATCH v7 4/6] usb: dwc3: gadget: Implement setting of SSP rate
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
                   ` (2 preceding siblings ...)
  2021-01-20  1:36 ` [PATCH v7 3/6] usb: dwc3: core: Check maximum_speed " Thinh Nguyen
@ 2021-01-20  1:36 ` Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 5/6] usb: dwc3: gadget: Track connected SSP rate and lane count Thinh Nguyen
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb; +Cc: John Youn

Implement gadget ops udc_set_ssp_rate(). This allows the gadget/core
driver to select SSP signaling rate and number of lanes to for DWC_usb32
controller.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
Changes in v7:
- Rebase on Greg's usb-testing branch
Changes in v6:
- Update to use usb_ssp_rate enum
- Rebase on Greg's usb-testing branch
- Update to match with the latest flow in dwc3 for setting speed
Changes in v5:
- Rebase on Felipe's testing/next branch
- Changed Signed-off-by email to match From: email header
Changes in v4:
- None
Changes in v3:
- None
Changes in v2:
- None

 drivers/usb/dwc3/core.h   |  5 +++++
 drivers/usb/dwc3/gadget.c | 47 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index a482f4e954cb..61ac298f3e8e 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -386,6 +386,8 @@
 #define DWC3_GUCTL3_SPLITDISABLE		BIT(14)
 
 /* Device Configuration Register */
+#define DWC3_DCFG_NUMLANES(n)	(((n) & 0x3) << 30) /* DWC_usb32 only */
+
 #define DWC3_DCFG_DEVADDR(addr)	((addr) << 3)
 #define DWC3_DCFG_DEVADDR_MASK	DWC3_DCFG_DEVADDR(0x7f)
 
@@ -966,6 +968,8 @@ struct dwc3_scratchpad_array {
  * @maximum_speed: maximum speed requested (mainly for testing purposes)
  * @max_ssp_rate: SuperSpeed Plus maximum signaling rate and lane count
  * @gadget_max_speed: maximum gadget speed requested
+ * @gadget_ssp_rate: Gadget driver's maximum supported SuperSpeed Plus signaling
+ *			rate and lane count.
  * @ip: controller's ID
  * @revision: controller's version of an IP
  * @version_type: VERSIONTYPE register contents, a sub release of a revision
@@ -1130,6 +1134,7 @@ struct dwc3 {
 	u32			maximum_speed;
 	u32			gadget_max_speed;
 	enum usb_ssp_rate	max_ssp_rate;
+	enum usb_ssp_rate	gadget_ssp_rate;
 
 	u32			ip;
 
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 00ba8f11ca32..14ab5594a595 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2038,10 +2038,40 @@ static void dwc3_stop_active_transfers(struct dwc3 *dwc)
 	}
 }
 
+static void __dwc3_gadget_set_ssp_rate(struct dwc3 *dwc)
+{
+	enum usb_ssp_rate	ssp_rate = dwc->gadget_ssp_rate;
+	u32			reg;
+
+	if (ssp_rate == USB_SSP_GEN_UNKNOWN)
+		ssp_rate = dwc->max_ssp_rate;
+
+	reg = dwc3_readl(dwc->regs, DWC3_DCFG);
+	reg &= ~DWC3_DCFG_SPEED_MASK;
+	reg &= ~DWC3_DCFG_NUMLANES(~0);
+
+	if (ssp_rate == USB_SSP_GEN_1x2)
+		reg |= DWC3_DCFG_SUPERSPEED;
+	else if (dwc->max_ssp_rate != USB_SSP_GEN_1x2)
+		reg |= DWC3_DCFG_SUPERSPEED_PLUS;
+
+	if (ssp_rate != USB_SSP_GEN_2x1 &&
+	    dwc->max_ssp_rate != USB_SSP_GEN_2x1)
+		reg |= DWC3_DCFG_NUMLANES(1);
+
+	dwc3_writel(dwc->regs, DWC3_DCFG, reg);
+}
+
 static void __dwc3_gadget_set_speed(struct dwc3 *dwc)
 {
 	u32			reg;
 
+	if (dwc->gadget_max_speed == USB_SPEED_SUPER_PLUS &&
+	    DWC3_IP_IS(DWC32)) {
+		__dwc3_gadget_set_ssp_rate(dwc);
+		return;
+	}
+
 	reg = dwc3_readl(dwc->regs, DWC3_DCFG);
 	reg &= ~(DWC3_DCFG_SPEED_MASK);
 
@@ -2475,6 +2505,17 @@ static void dwc3_gadget_set_speed(struct usb_gadget *g,
 	spin_unlock_irqrestore(&dwc->lock, flags);
 }
 
+static void dwc3_gadget_set_ssp_rate(struct usb_gadget *g,
+				     enum usb_ssp_rate rate)
+{
+	struct dwc3		*dwc = gadget_to_dwc(g);
+	unsigned long		flags;
+
+	spin_lock_irqsave(&dwc->lock, flags);
+	dwc->gadget_ssp_rate = rate;
+	spin_unlock_irqrestore(&dwc->lock, flags);
+}
+
 static int dwc3_gadget_vbus_draw(struct usb_gadget *g, unsigned int mA)
 {
 	struct dwc3		*dwc = gadget_to_dwc(g);
@@ -2493,6 +2534,7 @@ static const struct usb_gadget_ops dwc3_gadget_ops = {
 	.udc_start		= dwc3_gadget_start,
 	.udc_stop		= dwc3_gadget_stop,
 	.udc_set_speed		= dwc3_gadget_set_speed,
+	.udc_set_ssp_rate	= dwc3_gadget_set_ssp_rate,
 	.get_config_params	= dwc3_gadget_config_params,
 	.vbus_draw		= dwc3_gadget_vbus_draw,
 };
@@ -3905,7 +3947,10 @@ int dwc3_gadget_init(struct dwc3 *dwc)
 		goto err5;
 	}
 
-	dwc3_gadget_set_speed(dwc->gadget, dwc->maximum_speed);
+	if (DWC3_IP_IS(DWC32) && dwc->maximum_speed == USB_SPEED_SUPER_PLUS)
+		dwc3_gadget_set_ssp_rate(dwc->gadget, dwc->max_ssp_rate);
+	else
+		dwc3_gadget_set_speed(dwc->gadget, dwc->maximum_speed);
 
 	return 0;
 
-- 
2.28.0


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

* [PATCH v7 5/6] usb: dwc3: gadget: Track connected SSP rate and lane count
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
                   ` (3 preceding siblings ...)
  2021-01-20  1:36 ` [PATCH v7 4/6] usb: dwc3: gadget: Implement setting of SSP rate Thinh Nguyen
@ 2021-01-20  1:36 ` Thinh Nguyen
  2021-01-20  1:36 ` [PATCH v7 6/6] usb: dwc3: gadget: Set speed only up to the max supported Thinh Nguyen
  2021-02-05  2:39 ` [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
  6 siblings, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb; +Cc: John Youn

Track the number of connected lanes and speed in corresponding enum
usb_ssp_rate for SuperSpeed Plus capable device.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
Changes in v7:
- Rebase on Greg's usb-testing branch
Changes in v6:
- Rebase on Greg's usb-testing branch
- Update commmit message
- Update to report the rate and lane count in usb_ssp_rate enum
Changes in v5:
- Rebase on Felipe's testing/next branch
- Changed Signed-off-by email to match From: email header
Changes in v4:
- None
Changes in v3:
- Update commit with updated field name
- No longer use DWC3_LSM_5/10_GBPS macros
Changes in v2:
- Fix missing check for gen1x2 when writing to sublink speed attributes
- Minor fix in commit message (first commit sentence ended with comma)

 drivers/usb/dwc3/core.h   |  2 ++
 drivers/usb/dwc3/gadget.c | 23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 61ac298f3e8e..052b20d52651 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -461,6 +461,8 @@
 #define DWC3_DEVTEN_USBRSTEN		BIT(1)
 #define DWC3_DEVTEN_DISCONNEVTEN	BIT(0)
 
+#define DWC3_DSTS_CONNLANES(n)		(((n) >> 30) & 0x3) /* DWC_usb32 only */
+
 /* Device Status Register */
 #define DWC3_DSTS_DCNRD			BIT(29)
 
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 14ab5594a595..0aa89e704a55 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2120,6 +2120,12 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc)
 				reg |= DWC3_DCFG_SUPERSPEED_PLUS;
 		}
 	}
+
+	if (DWC3_IP_IS(DWC32) &&
+	    dwc->gadget_max_speed > USB_SPEED_UNKNOWN &&
+	    dwc->gadget_max_speed < USB_SPEED_SUPER_PLUS)
+		reg &= ~DWC3_DCFG_NUMLANES(~0);
+
 	dwc3_writel(dwc->regs, DWC3_DCFG, reg);
 }
 
@@ -3369,12 +3375,18 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 	struct dwc3_ep		*dep;
 	int			ret;
 	u32			reg;
+	u8			lanes = 1;
 	u8			speed;
 
 	reg = dwc3_readl(dwc->regs, DWC3_DSTS);
 	speed = reg & DWC3_DSTS_CONNECTSPD;
 	dwc->speed = speed;
 
+	if (DWC3_IP_IS(DWC32))
+		lanes = DWC3_DSTS_CONNLANES(reg) + 1;
+
+	dwc->gadget->ssp_rate = USB_SSP_GEN_UNKNOWN;
+
 	/*
 	 * RAMClkSel is reset to 0 after USB reset, so it must be reprogrammed
 	 * each time on Connect Done.
@@ -3389,6 +3401,11 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 		dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
 		dwc->gadget->ep0->maxpacket = 512;
 		dwc->gadget->speed = USB_SPEED_SUPER_PLUS;
+
+		if (lanes > 1)
+			dwc->gadget->ssp_rate = USB_SSP_GEN_2x2;
+		else
+			dwc->gadget->ssp_rate = USB_SSP_GEN_2x1;
 		break;
 	case DWC3_DSTS_SUPERSPEED:
 		/*
@@ -3410,6 +3427,11 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 		dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
 		dwc->gadget->ep0->maxpacket = 512;
 		dwc->gadget->speed = USB_SPEED_SUPER;
+
+		if (lanes > 1) {
+			dwc->gadget->speed = USB_SPEED_SUPER_PLUS;
+			dwc->gadget->ssp_rate = USB_SSP_GEN_1x2;
+		}
 		break;
 	case DWC3_DSTS_HIGHSPEED:
 		dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
@@ -3904,6 +3926,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
 	dev->platform_data		= dwc;
 	dwc->gadget->ops		= &dwc3_gadget_ops;
 	dwc->gadget->speed		= USB_SPEED_UNKNOWN;
+	dwc->gadget->ssp_rate		= USB_SSP_GEN_UNKNOWN;
 	dwc->gadget->sg_supported	= true;
 	dwc->gadget->name		= "dwc3-gadget";
 	dwc->gadget->lpm_capable	= true;
-- 
2.28.0


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

* [PATCH v7 6/6] usb: dwc3: gadget: Set speed only up to the max supported
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
                   ` (4 preceding siblings ...)
  2021-01-20  1:36 ` [PATCH v7 5/6] usb: dwc3: gadget: Track connected SSP rate and lane count Thinh Nguyen
@ 2021-01-20  1:36 ` Thinh Nguyen
  2021-02-05  2:39 ` [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
  6 siblings, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-01-20  1:36 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Thinh.Nguyen, linux-usb; +Cc: John Youn

The setting of the device speed should be limited by the device's
maximum_speed. Check and prevent the driver from attempting to configure
higher than the maximum_speed.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
---
Changes in v7:
- Rebase on Greg's usb-testing branch
Changes in v6:
- Rebase on Greg's usb-testing branch
- Update to follow the latest change of dwc3 on Greg's usb-testing branch
- Update commit message
Changes in v5:
- Rebase on Felipe's testing/next branch
- Changed Signed-off-by email to match From: email header
Changes in v4:
- None
Changes in v3:
- None
Changes in v2:
- None

 drivers/usb/dwc3/gadget.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 0aa89e704a55..9acf515f6a67 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2064,9 +2064,14 @@ static void __dwc3_gadget_set_ssp_rate(struct dwc3 *dwc)
 
 static void __dwc3_gadget_set_speed(struct dwc3 *dwc)
 {
+	enum usb_device_speed	speed;
 	u32			reg;
 
-	if (dwc->gadget_max_speed == USB_SPEED_SUPER_PLUS &&
+	speed = dwc->gadget_max_speed;
+	if (speed > dwc->maximum_speed)
+		speed = dwc->maximum_speed;
+
+	if (speed == USB_SPEED_SUPER_PLUS &&
 	    DWC3_IP_IS(DWC32)) {
 		__dwc3_gadget_set_ssp_rate(dwc);
 		return;
@@ -2092,7 +2097,7 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc)
 	    !dwc->dis_metastability_quirk) {
 		reg |= DWC3_DCFG_SUPERSPEED;
 	} else {
-		switch (dwc->gadget_max_speed) {
+		switch (speed) {
 		case USB_SPEED_LOW:
 			reg |= DWC3_DCFG_LOWSPEED;
 			break;
@@ -2112,7 +2117,7 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc)
 				reg |= DWC3_DCFG_SUPERSPEED_PLUS;
 			break;
 		default:
-			dev_err(dwc->dev, "invalid speed (%d)\n", dwc->gadget_max_speed);
+			dev_err(dwc->dev, "invalid speed (%d)\n", speed);
 
 			if (DWC3_IP_IS(DWC3))
 				reg |= DWC3_DCFG_SUPERSPEED;
@@ -2122,8 +2127,8 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc)
 	}
 
 	if (DWC3_IP_IS(DWC32) &&
-	    dwc->gadget_max_speed > USB_SPEED_UNKNOWN &&
-	    dwc->gadget_max_speed < USB_SPEED_SUPER_PLUS)
+	    speed > USB_SPEED_UNKNOWN &&
+	    speed < USB_SPEED_SUPER_PLUS)
 		reg &= ~DWC3_DCFG_NUMLANES(~0);
 
 	dwc3_writel(dwc->regs, DWC3_DCFG, reg);
-- 
2.28.0


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

* Re: [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY
  2021-01-20  1:36 ` [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY Thinh Nguyen
@ 2021-02-05  2:32   ` Thinh Nguyen
  2021-02-05 20:46   ` Rob Herring
  1 sibling, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-02-05  2:32 UTC (permalink / raw)
  To: Thinh Nguyen, Felipe Balbi, Greg Kroah-Hartman, linux-usb,
	devicetree, Rob Herring
  Cc: John Youn

Hi Rob,

Thinh Nguyen wrote:
> According to the USB 3.2 spec, a SuperSpeed Plus device can operate at
> gen2x2, gen2x1, or gen1x2. If the USB controller device supports
> multiple lanes at different transfer rates, the user can specify the HW
> capability via these new speed strings:
>
> "super-speed-plus-gen2x2"
> "super-speed-plus-gen2x1"
> "super-speed-plus-gen1x2"
>
> If the argument is simply "super-speed-plus", USB controllers should
> default to their maximum transfer rate and number of lanes.
>
> Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
> ---
> Changes in v7:
> - Rebase on Greg's usb-testing branch
> Changes in v6:
> - Update the different maximum_speed enums to the usb.yaml
> - Remove Reviewed-by: Rob Herring <robh@kernel.org> because the commit is updated
> - Rebase on Greg's usb-testing branch
> - Update commit message
> Changes in v5:
> - Add Reviewed-by: Rob Herring <robh@kernel.org>
> - Rebase on Felipe's testing/next branch
> - Changed Signed-off-by email to match From: email header
> Changes in v4:
> - None
> Changes in v3:
> - Use "maximum-speed" to include both the num-lane and transfer rate for SSP
> - Remove "num-lanes" and "lane-speed-mantissa-gbps" properties
> Changes in v2:
> - Make "num-lanes" and "lane-speed-mantissa-gbps" common USB properties
>
>  Documentation/devicetree/bindings/usb/usb.yaml | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/usb/usb.yaml b/Documentation/devicetree/bindings/usb/usb.yaml
> index ebe7f4275c59..78491e66ed24 100644
> --- a/Documentation/devicetree/bindings/usb/usb.yaml
> +++ b/Documentation/devicetree/bindings/usb/usb.yaml
> @@ -54,6 +54,9 @@ properties:
>        - high-speed
>        - super-speed
>        - super-speed-plus
> +      - super-speed-plus-gen2x1
> +      - super-speed-plus-gen1x2
> +      - super-speed-plus-gen2x2
>  
>  additionalProperties: true
>  

Can I have your Reviewed-by again? Had to drop it previously because the
change needed to be rebased and added to the yaml file instead.

Thanks,
Thinh

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

* Re: [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes
  2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
                   ` (5 preceding siblings ...)
  2021-01-20  1:36 ` [PATCH v7 6/6] usb: dwc3: gadget: Set speed only up to the max supported Thinh Nguyen
@ 2021-02-05  2:39 ` Thinh Nguyen
  2021-02-05  6:49   ` Greg Kroah-Hartman
  6 siblings, 1 reply; 12+ messages in thread
From: Thinh Nguyen @ 2021-02-05  2:39 UTC (permalink / raw)
  To: Thinh Nguyen, Felipe Balbi, Greg Kroah-Hartman, linux-usb,
	devicetree, Rob Herring
  Cc: John Youn

Hi Felipe, Greg,

Thinh Nguyen wrote:
> A USB SuperSpeed Plus device may operate at different speed and lane count
> (i.e. gen2x2, gen1x2, or gen2x1). The DWC_usb32 IP supports SuperSpeed Plus
> gen2x2. To support this, this series update a few things to the USB gadget
> stack and dwc3 driver:
>
> * Accept and parse new maximum_speed devicetree property strings
> * Introduce enum usb_ssp_rate to describe the speed in SuperSpeed Plus genXxY
> * Capture the connected and max supported usb_ssp_rate
> * Report the device sublink speeds base on the usb_ssp_rate in the BOS
>   descriptor
> * Introduce gadget ops to select SuperSpeed Plus various transfer rate and lane
>   count
> * Update dwc3 driver to support the above changes
>
> Changes in v7:
>  - Greg picked up the first few patches of the series to his usb-testing
>    branch. Rebase the remaining patches on Greg's usb-testing branch
>
> Changes in v6:
>  - Rebase on Greg's usb-testing branch
>  - Update cover letter and title since there are many updates
>    * Previous version 5: https://lore.kernel.org/linux-usb/cover.1601001199.git.Thinh.Nguyen@synopsys.com/
>  - To simplify things, use usb_ssp_rate enum to specify the signaling rate
>    generation and lane count instead of separately tracking them.
>  - Convert the sublink speed attributes to macros and move it to uapi
>  - Remove usb_sublink_speed struct
>  - Remove "usb: dwc3: gadget: Report sublink speed capability"
>  - Update dwc3 to support the new changes
>
> Changes in v5:
>  - Rebase on Felipe's testing/next branch
>  - Changed Signed-off-by email to match From: email header
>  - Add Rob's Reviewed-by
>
> Changes in v4:
>  - Instead of using a single function to parse "maximum-speed" property for
>    speed, gen X, and number of lanes, split those tasks to separate common
>    functions
>  - Revise DWC3 driver to use those new common functions
>  - Fix checkpatch warnings for using "unsigned" rather than "unsigned int" and
>    missing identifier name in udc_set_num_lanes_and_speed gadget ops
>
> Changes in v3:
>  - Remove "num-lanes" and "lane-speed-mantissa-gbps" common properties
>  - Remove "num-lanes" and "lane-speed-mantissa-gbps" properties validation in dwc3
>  - Update "maximum-speed" to support variations of SSP Gen X x Y
>  - Update common function to parse new strings for "maximum-speed"
>  - Update commit messages for the new changes
>
> Changes in v2:
>  - Move usb_sublink_speed attribute struct and enum to include/linux/usb/ch9.h
>  - Use "num-lanes" and "lane-speed-mantissa-gbps" as common properties instead
>  - Add common functions to get num-lanes and lsm properties
>  - Fix missing gen1x2 sublink speed attribute check report in dwc3
>
>
> Thinh Nguyen (6):
>   dt-binding: usb: Include USB SSP rates in GenXxY
>   usb: common: Parse for USB SSP genXxY
>   usb: dwc3: core: Check maximum_speed SSP genXxY
>   usb: dwc3: gadget: Implement setting of SSP rate
>   usb: dwc3: gadget: Track connected SSP rate and lane count
>   usb: dwc3: gadget: Set speed only up to the max supported
>
>  .../devicetree/bindings/usb/usb.yaml          |  3 +
>  drivers/usb/common/common.c                   | 26 +++++-
>  drivers/usb/dwc3/core.c                       | 37 +++++++++
>  drivers/usb/dwc3/core.h                       |  9 +++
>  drivers/usb/dwc3/gadget.c                     | 80 ++++++++++++++++++-
>  include/linux/usb/ch9.h                       | 11 +++
>  6 files changed, 162 insertions(+), 4 deletions(-)
>
>
> base-commit: 7a79f1f7f7e75e532c5a803ab3ebf42a3e79497c

Let me know if there's any issue with these remaining patches. It'd be
great if they can go on the "next" branch at some point.

Thanks,
Thinh

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

* Re: [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes
  2021-02-05  2:39 ` [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
@ 2021-02-05  6:49   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 12+ messages in thread
From: Greg Kroah-Hartman @ 2021-02-05  6:49 UTC (permalink / raw)
  To: Thinh Nguyen; +Cc: Felipe Balbi, linux-usb, devicetree, Rob Herring, John Youn

On Fri, Feb 05, 2021 at 02:39:41AM +0000, Thinh Nguyen wrote:
> Hi Felipe, Greg,
> 
> Thinh Nguyen wrote:
> > A USB SuperSpeed Plus device may operate at different speed and lane count
> > (i.e. gen2x2, gen1x2, or gen2x1). The DWC_usb32 IP supports SuperSpeed Plus
> > gen2x2. To support this, this series update a few things to the USB gadget
> > stack and dwc3 driver:
> >
> > * Accept and parse new maximum_speed devicetree property strings
> > * Introduce enum usb_ssp_rate to describe the speed in SuperSpeed Plus genXxY
> > * Capture the connected and max supported usb_ssp_rate
> > * Report the device sublink speeds base on the usb_ssp_rate in the BOS
> >   descriptor
> > * Introduce gadget ops to select SuperSpeed Plus various transfer rate and lane
> >   count
> > * Update dwc3 driver to support the above changes
> >
> > Changes in v7:
> >  - Greg picked up the first few patches of the series to his usb-testing
> >    branch. Rebase the remaining patches on Greg's usb-testing branch
> >
> > Changes in v6:
> >  - Rebase on Greg's usb-testing branch
> >  - Update cover letter and title since there are many updates
> >    * Previous version 5: https://lore.kernel.org/linux-usb/cover.1601001199.git.Thinh.Nguyen@synopsys.com/
> >  - To simplify things, use usb_ssp_rate enum to specify the signaling rate
> >    generation and lane count instead of separately tracking them.
> >  - Convert the sublink speed attributes to macros and move it to uapi
> >  - Remove usb_sublink_speed struct
> >  - Remove "usb: dwc3: gadget: Report sublink speed capability"
> >  - Update dwc3 to support the new changes
> >
> > Changes in v5:
> >  - Rebase on Felipe's testing/next branch
> >  - Changed Signed-off-by email to match From: email header
> >  - Add Rob's Reviewed-by
> >
> > Changes in v4:
> >  - Instead of using a single function to parse "maximum-speed" property for
> >    speed, gen X, and number of lanes, split those tasks to separate common
> >    functions
> >  - Revise DWC3 driver to use those new common functions
> >  - Fix checkpatch warnings for using "unsigned" rather than "unsigned int" and
> >    missing identifier name in udc_set_num_lanes_and_speed gadget ops
> >
> > Changes in v3:
> >  - Remove "num-lanes" and "lane-speed-mantissa-gbps" common properties
> >  - Remove "num-lanes" and "lane-speed-mantissa-gbps" properties validation in dwc3
> >  - Update "maximum-speed" to support variations of SSP Gen X x Y
> >  - Update common function to parse new strings for "maximum-speed"
> >  - Update commit messages for the new changes
> >
> > Changes in v2:
> >  - Move usb_sublink_speed attribute struct and enum to include/linux/usb/ch9.h
> >  - Use "num-lanes" and "lane-speed-mantissa-gbps" as common properties instead
> >  - Add common functions to get num-lanes and lsm properties
> >  - Fix missing gen1x2 sublink speed attribute check report in dwc3
> >
> >
> > Thinh Nguyen (6):
> >   dt-binding: usb: Include USB SSP rates in GenXxY
> >   usb: common: Parse for USB SSP genXxY
> >   usb: dwc3: core: Check maximum_speed SSP genXxY
> >   usb: dwc3: gadget: Implement setting of SSP rate
> >   usb: dwc3: gadget: Track connected SSP rate and lane count
> >   usb: dwc3: gadget: Set speed only up to the max supported
> >
> >  .../devicetree/bindings/usb/usb.yaml          |  3 +
> >  drivers/usb/common/common.c                   | 26 +++++-
> >  drivers/usb/dwc3/core.c                       | 37 +++++++++
> >  drivers/usb/dwc3/core.h                       |  9 +++
> >  drivers/usb/dwc3/gadget.c                     | 80 ++++++++++++++++++-
> >  include/linux/usb/ch9.h                       | 11 +++
> >  6 files changed, 162 insertions(+), 4 deletions(-)
> >
> >
> > base-commit: 7a79f1f7f7e75e532c5a803ab3ebf42a3e79497c
> 
> Let me know if there's any issue with these remaining patches. It'd be
> great if they can go on the "next" branch at some point.

I was waiting for Rob's review of the dt changes...

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

* Re: [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY
  2021-01-20  1:36 ` [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY Thinh Nguyen
  2021-02-05  2:32   ` Thinh Nguyen
@ 2021-02-05 20:46   ` Rob Herring
  2021-02-06  3:14     ` Thinh Nguyen
  1 sibling, 1 reply; 12+ messages in thread
From: Rob Herring @ 2021-02-05 20:46 UTC (permalink / raw)
  To: Thinh Nguyen
  Cc: Felipe Balbi, Greg Kroah-Hartman, linux-usb, John Youn,
	Rob Herring, devicetree

On Tue, 19 Jan 2021 17:36:08 -0800, Thinh Nguyen wrote:
> According to the USB 3.2 spec, a SuperSpeed Plus device can operate at
> gen2x2, gen2x1, or gen1x2. If the USB controller device supports
> multiple lanes at different transfer rates, the user can specify the HW
> capability via these new speed strings:
> 
> "super-speed-plus-gen2x2"
> "super-speed-plus-gen2x1"
> "super-speed-plus-gen1x2"
> 
> If the argument is simply "super-speed-plus", USB controllers should
> default to their maximum transfer rate and number of lanes.
> 
> Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
> ---
> Changes in v7:
> - Rebase on Greg's usb-testing branch
> Changes in v6:
> - Update the different maximum_speed enums to the usb.yaml
> - Remove Reviewed-by: Rob Herring <robh@kernel.org> because the commit is updated
> - Rebase on Greg's usb-testing branch
> - Update commit message
> Changes in v5:
> - Add Reviewed-by: Rob Herring <robh@kernel.org>
> - Rebase on Felipe's testing/next branch
> - Changed Signed-off-by email to match From: email header
> Changes in v4:
> - None
> Changes in v3:
> - Use "maximum-speed" to include both the num-lane and transfer rate for SSP
> - Remove "num-lanes" and "lane-speed-mantissa-gbps" properties
> Changes in v2:
> - Make "num-lanes" and "lane-speed-mantissa-gbps" common USB properties
> 
>  Documentation/devicetree/bindings/usb/usb.yaml | 3 +++
>  1 file changed, 3 insertions(+)
> 

Reviewed-by: Rob Herring <robh@kernel.org>

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

* Re: [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY
  2021-02-05 20:46   ` Rob Herring
@ 2021-02-06  3:14     ` Thinh Nguyen
  0 siblings, 0 replies; 12+ messages in thread
From: Thinh Nguyen @ 2021-02-06  3:14 UTC (permalink / raw)
  To: Rob Herring, Thinh Nguyen
  Cc: Felipe Balbi, Greg Kroah-Hartman, linux-usb, John Youn,
	Rob Herring, devicetree

Rob Herring wrote:
> On Tue, 19 Jan 2021 17:36:08 -0800, Thinh Nguyen wrote:
>> According to the USB 3.2 spec, a SuperSpeed Plus device can operate at
>> gen2x2, gen2x1, or gen1x2. If the USB controller device supports
>> multiple lanes at different transfer rates, the user can specify the HW
>> capability via these new speed strings:
>>
>> "super-speed-plus-gen2x2"
>> "super-speed-plus-gen2x1"
>> "super-speed-plus-gen1x2"
>>
>> If the argument is simply "super-speed-plus", USB controllers should
>> default to their maximum transfer rate and number of lanes.
>>
>> Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
>> ---
>> Changes in v7:
>> - Rebase on Greg's usb-testing branch
>> Changes in v6:
>> - Update the different maximum_speed enums to the usb.yaml
>> - Remove Reviewed-by: Rob Herring <robh@kernel.org> because the commit is updated
>> - Rebase on Greg's usb-testing branch
>> - Update commit message
>> Changes in v5:
>> - Add Reviewed-by: Rob Herring <robh@kernel.org>
>> - Rebase on Felipe's testing/next branch
>> - Changed Signed-off-by email to match From: email header
>> Changes in v4:
>> - None
>> Changes in v3:
>> - Use "maximum-speed" to include both the num-lane and transfer rate for SSP
>> - Remove "num-lanes" and "lane-speed-mantissa-gbps" properties
>> Changes in v2:
>> - Make "num-lanes" and "lane-speed-mantissa-gbps" common USB properties
>>
>>  Documentation/devicetree/bindings/usb/usb.yaml | 3 +++
>>  1 file changed, 3 insertions(+)
>>
> Reviewed-by: Rob Herring <robh@kernel.org>

Thanks!
Thinh

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

end of thread, other threads:[~2021-02-06  3:29 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-20  1:36 [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
2021-01-20  1:36 ` [PATCH v7 1/6] dt-binding: usb: Include USB SSP rates in GenXxY Thinh Nguyen
2021-02-05  2:32   ` Thinh Nguyen
2021-02-05 20:46   ` Rob Herring
2021-02-06  3:14     ` Thinh Nguyen
2021-01-20  1:36 ` [PATCH v7 2/6] usb: common: Parse for USB SSP genXxY Thinh Nguyen
2021-01-20  1:36 ` [PATCH v7 3/6] usb: dwc3: core: Check maximum_speed " Thinh Nguyen
2021-01-20  1:36 ` [PATCH v7 4/6] usb: dwc3: gadget: Implement setting of SSP rate Thinh Nguyen
2021-01-20  1:36 ` [PATCH v7 5/6] usb: dwc3: gadget: Track connected SSP rate and lane count Thinh Nguyen
2021-01-20  1:36 ` [PATCH v7 6/6] usb: dwc3: gadget: Set speed only up to the max supported Thinh Nguyen
2021-02-05  2:39 ` [PATCH v7 0/6] usb: Support USB 3.2 multi-lanes Thinh Nguyen
2021-02-05  6:49   ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).