All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit
@ 2021-12-20 14:16 Yaqin Pan
  2021-12-20 14:16 ` [PATCH v2 1/2] " Yaqin Pan
  2021-12-20 14:16 ` [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3 Yaqin Pan
  0 siblings, 2 replies; 7+ messages in thread
From: Yaqin Pan @ 2021-12-20 14:16 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rob Herring, Felipe Balbi, linux-usb,
	devicetree, linux-kernel
  Cc: kernel, Yaqin Pan

Add a quirk to set dwc3 controller GUCTL.SPRSCTRLTRANSEN bit.

Changes in v2:
- modify Documentation/devicetree/bindings/usb/snps,dwc3.yaml

Yaqin Pan (2):
  usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit.
  dt-bindings: usb: document snps,dis_split_quirk property in dwc3

 Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++
 drivers/usb/dwc3/core.c                              | 4 ++++
 drivers/usb/dwc3/core.h                              | 3 +++
 3 files changed, 13 insertions(+)

-- 
2.17.1


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

* [PATCH v2 1/2] usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit.
  2021-12-20 14:16 [PATCH v2 0/2] usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit Yaqin Pan
@ 2021-12-20 14:16 ` Yaqin Pan
  2021-12-20 14:16 ` [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3 Yaqin Pan
  1 sibling, 0 replies; 7+ messages in thread
From: Yaqin Pan @ 2021-12-20 14:16 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rob Herring, Felipe Balbi, linux-usb,
	devicetree, linux-kernel
  Cc: kernel, Yaqin Pan

This quirk is only for dwc3 host mode.
the dwc3 controller can't emurate some devices successfully.
For example, TF card reader (aaaa:8816):
failed log
usb 1-1: new high-speed USB device number 2 using xhci-hcd
usb 1-1: device descriptor read/all, error -110
From the usb analyzer, always return NAK in the data phase.
if enable the GUCTL.SPRSCTRLTRANSEN bit. then the log is:
usb 2-1: new high-speed USB device number 3 using xhci-hcd
usb 2-1: New USB device found, idVendor=aaaa,
idProduct=8816, bcdDevice=13.08
usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1: Product: MXT USB Device
usb 2-1: Manufacturer: MXTronics
usb 2-1: SerialNumber: 150101v01
usb 2-1: New USB device found, VID=aaaa, PID=8816

Some devices are slow in responding to Control transfers.
Scheduling mulitiple transactions in one microframe/frame
can cause the devices to misbehave. if this qurik is enabled,
the host controller schedules transations for a Control transfer
in defferent microframes/frame.

Signed-off-by: Yaqin Pan <akingchen@vivo.com>
---
 drivers/usb/dwc3/core.c | 4 ++++
 drivers/usb/dwc3/core.h | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index ba74ad7f6995..93ac2c79a2c0 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1071,6 +1071,8 @@ static int dwc3_core_init(struct dwc3 *dwc)
 		 * packet with Retry=1 & Nump != 0)
 		 */
 		reg |= DWC3_GUCTL_HSTINAUTORETRY;
+		if (dwc->sprs_ctrl_trans_quirk)
+			reg |= DWC3_GUCTL_SPRSCTRLTRANSEN;
 
 		dwc3_writel(dwc->regs, DWC3_GUCTL, reg);
 	}
@@ -1377,6 +1379,8 @@ static void dwc3_get_properties(struct dwc3 *dwc)
 
 	dwc->dis_split_quirk = device_property_read_bool(dev,
 				"snps,dis-split-quirk");
+	dwc->sprs_ctrl_trans_quirk = device_property_read_bool(dev,
+				"snps,sprs-ctrl-trans-quirk");
 
 	dwc->lpm_nyet_threshold = lpm_nyet_threshold;
 	dwc->tx_de_emphasis = tx_de_emphasis;
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 5991766239ba..6048087df1d1 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -254,6 +254,7 @@
 
 /* Global User Control Register */
 #define DWC3_GUCTL_HSTINAUTORETRY	BIT(14)
+#define DWC3_GUCTL_SPRSCTRLTRANSEN	BIT(17)
 
 /* Global User Control 1 Register */
 #define DWC3_GUCTL1_PARKMODE_DISABLE_SS	BIT(17)
@@ -1077,6 +1078,7 @@ struct dwc3_scratchpad_array {
  *	3	- Reserved
  * @dis_metastability_quirk: set to disable metastability quirk.
  * @dis_split_quirk: set to disable split boundary.
+ * @sprs_ctrl_trans_quirk: set to enable sparse control transaction quirk.
  * @imod_interval: set the interrupt moderation interval in 250ns
  *			increments or 0 to disable.
  */
@@ -1279,6 +1281,7 @@ struct dwc3 {
 	unsigned		dis_metastability_quirk:1;
 
 	unsigned		dis_split_quirk:1;
+	unsigned		sprs_ctrl_trans_quirk:1;
 	unsigned		async_callbacks:1;
 
 	u16			imod_interval;
-- 
2.17.1


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

* [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
  2021-12-20 14:16 [PATCH v2 0/2] usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit Yaqin Pan
  2021-12-20 14:16 ` [PATCH v2 1/2] " Yaqin Pan
@ 2021-12-20 14:16 ` Yaqin Pan
  2021-12-20 18:36   ` Sergey Shtylyov
  2021-12-20 21:05   ` Rob Herring
  1 sibling, 2 replies; 7+ messages in thread
From: Yaqin Pan @ 2021-12-20 14:16 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rob Herring, Felipe Balbi, linux-usb,
	devicetree, linux-kernel
  Cc: kernel, Yaqin Pan

Add snps,dis_split_quirk property for dwc3 controller

Signed-off-by: Yaqin Pan <akingchen@vivo.com>
---
 Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml
index 41416fbd92aa..e9615ca8f447 100644
--- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml
+++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml
@@ -226,6 +226,12 @@ properties:
       avoid -EPROTO errors with usbhid on some devices (Hikey 970).
     type: boolean
 
+  snps,dis-split-quirk:
+    description:
+      When set, change the way host controller schedules transations for a Control transfer.
+      Avoid failing to enumerate some devices due to usb compatibility issues.
+    type: boolean
+
   snps,is-utmi-l1-suspend:
     description:
       True when DWC3 asserts output signal utmi_l1_suspend_n, false when
-- 
2.17.1


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

* Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
  2021-12-20 14:16 ` [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3 Yaqin Pan
@ 2021-12-20 18:36   ` Sergey Shtylyov
  2021-12-21 14:38     ` Yaqin Pan
  2021-12-20 21:05   ` Rob Herring
  1 sibling, 1 reply; 7+ messages in thread
From: Sergey Shtylyov @ 2021-12-20 18:36 UTC (permalink / raw)
  To: Yaqin Pan, Greg Kroah-Hartman, Rob Herring, Felipe Balbi,
	linux-usb, devicetree, linux-kernel
  Cc: kernel

Hello!

On 12/20/21 5:16 PM, Yaqin Pan wrote:

> Add snps,dis_split_quirk property for dwc3 controller

   The name doesn't match the prop itself anymore...

> 
> Signed-off-by: Yaqin Pan <akingchen@vivo.com>
> ---
>  Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml
> index 41416fbd92aa..e9615ca8f447 100644
> --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml
> +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml
> @@ -226,6 +226,12 @@ properties:
>        avoid -EPROTO errors with usbhid on some devices (Hikey 970).
>      type: boolean
>  
> +  snps,dis-split-quirk:
> +    description:
> +      When set, change the way host controller schedules transations for a Control transfer.
> +      Avoid failing to enumerate some devices due to usb compatibility issues.
> +    type: boolean
> +
>    snps,is-utmi-l1-suspend:
>      description:
>        True when DWC3 asserts output signal utmi_l1_suspend_n, false when
> 

MBR, Sergey

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

* Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
  2021-12-20 14:16 ` [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3 Yaqin Pan
  2021-12-20 18:36   ` Sergey Shtylyov
@ 2021-12-20 21:05   ` Rob Herring
  2021-12-21 14:45     ` Yaqin Pan
  1 sibling, 1 reply; 7+ messages in thread
From: Rob Herring @ 2021-12-20 21:05 UTC (permalink / raw)
  To: Yaqin Pan
  Cc: linux-usb, devicetree, linux-kernel, Greg Kroah-Hartman,
	Felipe Balbi, kernel, Rob Herring

On Mon, 20 Dec 2021 22:16:29 +0800, Yaqin Pan wrote:
> Add snps,dis_split_quirk property for dwc3 controller
> 
> Signed-off-by: Yaqin Pan <akingchen@vivo.com>
> ---
>  Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++
>  1 file changed, 6 insertions(+)
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:
./Documentation/devicetree/bindings/usb/snps,dwc3.yaml:229:3: [error] duplication of key "snps,dis-split-quirk" in mapping (key-duplicates)

dtschema/dtc warnings/errors:
make[1]: *** Deleting file 'Documentation/devicetree/bindings/usb/snps,dwc3.example.dts'
Traceback (most recent call last):
  File "/usr/local/bin/dt-extract-example", line 45, in <module>
    binding = yaml.load(open(args.yamlfile, encoding='utf-8').read())
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/main.py", line 434, in load
    return constructor.get_single_data()
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 121, in get_single_data
    return self.construct_document(node)
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 131, in construct_document
    for _dummy in generator:
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 674, in construct_yaml_map
    value = self.construct_mapping(node)
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 445, in construct_mapping
    return BaseConstructor.construct_mapping(self, node, deep=deep)
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 263, in construct_mapping
    if self.check_mapping_key(node, key_node, mapping, key, value):
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 294, in check_mapping_key
    raise DuplicateKeyError(*args)
ruamel.yaml.constructor.DuplicateKeyError: while constructing a mapping
  in "<unicode string>", line 32, column 3
found duplicate key "snps,dis-split-quirk" with value "{}" (original value: "{}")
  in "<unicode string>", line 229, column 3

To suppress this check see:
    http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys

make[1]: *** [Documentation/devicetree/bindings/Makefile:25: Documentation/devicetree/bindings/usb/snps,dwc3.example.dts] Error 1
make[1]: *** Waiting for unfinished jobs....
schemas/usb/snps,dwc3.yaml: ignoring, error parsing file
Traceback (most recent call last):
  File "/usr/local/bin/dt-doc-validate", line 25, in check_doc
    testtree = dtschema.load(filename, line_number=line_number)
  File "/usr/local/lib/python3.8/dist-packages/dtschema/lib.py", line 656, in load
    return yaml.load(f.read())
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/main.py", line 434, in load
    return constructor.get_single_data()
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 121, in get_single_data
    return self.construct_document(node)
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 131, in construct_document
    for _dummy in generator:
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 674, in construct_yaml_map
    value = self.construct_mapping(node)
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 445, in construct_mapping
    return BaseConstructor.construct_mapping(self, node, deep=deep)
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 263, in construct_mapping
    if self.check_mapping_key(node, key_node, mapping, key, value):
  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 294, in check_mapping_key
    raise DuplicateKeyError(*args)
ruamel.yaml.constructor.DuplicateKeyError: while constructing a mapping
  in "<unicode string>", line 32, column 3
found duplicate key "snps,dis-split-quirk" with value "{}" (original value: "{}")
  in "<unicode string>", line 229, column 3

To suppress this check see:
    http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/dt-doc-validate", line 67, in <module>
    ret = check_doc(f)
  File "/usr/local/bin/dt-doc-validate", line 30, in check_doc
    print(filename + ":", exc.path[-1], exc.message, file=sys.stderr)
AttributeError: 'DuplicateKeyError' object has no attribute 'path'
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/usb/snps,dwc3.yaml: ignoring, error parsing file
warning: no schema found in file: ./Documentation/devicetree/bindings/usb/snps,dwc3.yaml
make: *** [Makefile:1413: dt_binding_check] Error 2

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/1571063

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit.


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

* Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
  2021-12-20 18:36   ` Sergey Shtylyov
@ 2021-12-21 14:38     ` Yaqin Pan
  0 siblings, 0 replies; 7+ messages in thread
From: Yaqin Pan @ 2021-12-21 14:38 UTC (permalink / raw)
  To: s.shtylyov
  Cc: akingchen, balbi, devicetree, gregkh, kernel, linux-kernel,
	linux-usb, robh+dt

Sorry, i make a mistake, and the snps,dis_split_quirk should be snps,sprs-ctrl-trans-quirk.
And i will renew the patch.

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

* Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
  2021-12-20 21:05   ` Rob Herring
@ 2021-12-21 14:45     ` Yaqin Pan
  0 siblings, 0 replies; 7+ messages in thread
From: Yaqin Pan @ 2021-12-21 14:45 UTC (permalink / raw)
  To: robh
  Cc: akingchen, balbi, devicetree, gregkh, kernel, linux-kernel,
	linux-usb, robh+dt

>> Add snps,dis_split_quirk property for dwc3 controller
>> 
>> Signed-off-by: Yaqin Pan <akingchen@vivo.com>
>> ---
>>  Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++
>>  1 file changed, 6 insertions(+)
>> 
>
>My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
>on your patch (DT_CHECKER_FLAGS is new in v5.13):
>
>yamllint warnings/errors:
>./Documentation/devicetree/bindings/usb/snps,dwc3.yaml:229:3: [error] duplication of key "snps,dis-split-quirk" in mapping (key-duplicates)
>
>dtschema/dtc warnings/errors:
>make[1]: *** Deleting file 'Documentation/devicetree/bindings/usb/snps,dwc3.example.dts'
>Traceback (most recent call last):
>  File "/usr/local/bin/dt-extract-example", line 45, in <module>
>    binding = yaml.load(open(args.yamlfile, encoding='utf-8').read())
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/main.py", line 434, in load
>    return constructor.get_single_data()
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 121, in get_single_data
>    return self.construct_document(node)
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 131, in construct_document
>    for _dummy in generator:
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 674, in construct_yaml_map
>    value = self.construct_mapping(node)
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 445, in construct_mapping
>    return BaseConstructor.construct_mapping(self, node, deep=deep)
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 263, in construct_mapping
>    if self.check_mapping_key(node, key_node, mapping, key, value):
>  File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 294, in check_mapping_key
>    raise DuplicateKeyError(*args)
>ruamel.yaml.constructor.DuplicateKeyError: while constructing a mapping
>  in "<unicode string>", line 32, column 3
>found duplicate key "snps,dis-split-quirk" with value "{}" (original value: "{}")
>  in "<unicode string>", line 229, column 3

Sorry, i make a mistake, and the snps,dis_split_quirk should be snps,sprs-ctrl-trans-quirk.
And i will renew the patch.

>To suppress this check see:
>    http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys
>
>make[1]: *** [Documentation/devicetree/bindings/Makefile:25: Documentation/devicetree/bindings/usb/snps,dwc3.example.dts] Error 1
>make[1]: *** Waiting for unfinished jobs....


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

end of thread, other threads:[~2021-12-21 14:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-20 14:16 [PATCH v2 0/2] usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit Yaqin Pan
2021-12-20 14:16 ` [PATCH v2 1/2] " Yaqin Pan
2021-12-20 14:16 ` [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3 Yaqin Pan
2021-12-20 18:36   ` Sergey Shtylyov
2021-12-21 14:38     ` Yaqin Pan
2021-12-20 21:05   ` Rob Herring
2021-12-21 14:45     ` Yaqin Pan

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.