usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit
Subsystems (3)
v2 cover usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit
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(+)
Signature · 1 line
2.17.1
PATCH v2 1/2 usb: dwc3: Add a quirk to set GUCTL.SPRSCTRLTRANSEN bit.
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.
--- drivers/usb/dwc3/core.c | 4 ++++ drivers/usb/dwc3/core.h | 3 +++ 2 files changed, 7 insertions(+)
drivers/usb/dwc3/core.c +4 -0
@@ -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;
drivers/usb/dwc3/core.h +3 -0
@@ -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;
Signature · 1 line
2.17.1
PATCH v2 2/2 dt-bindings: usb: document snps,dis_split_quirk property in dwc3
In reply to Yaqin PanAdd snps,dis_split_quirk property for dwc3 controller
--- Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/usb/snps,dwc3.yaml +6 -0
@@ -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
Signature · 1 line
2.17.1
Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
Hello!
Quoted 1 line · Yaqin Pan
Add snps,dis_split_quirk property for dwc3 controller
The name doesn't match the prop itself anymore...
Quoted 14 lines
Signed-off-by Yaqin Pan <[email protected]>--- Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 6 ++++++ 1 file changed, 6 insertions(+)Documentation/devicetree/bindings/usb/snps,dwc3.yaml +0
-0@@ -226,6 +226,12 @@ properties: avoid -EPROTO errors with usbhid on some devices (Hikey 970). type: boolean
Documentation/devicetree/bindings/usb/snps,dwc3.yaml properties: · line 237
Quoted 10 lines
Documentation/devicetree/bindings/usb/snps,dwc3.yaml +6
-0+ 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
Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
Sorry, i make a mistake, and the snps,dis_split_quirk should be snps,sprs-ctrl-trans-quirk. And i will renew the patch.
Rob Herring
maintainerRe: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
In reply to Yaqin PanQuoted 7 lines · Yaqin Pan
Add snps,dis_split_quirk property for dwc3 controller
Signed-off-by Yaqin Pan <[email protected]>--- 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.
Re: [PATCH v2 2/2] dt-bindings: usb: document snps,dis_split_quirk property in dwc3
Quoted 29 lines
Quoted 7 lines
Add snps,dis_split_quirk property for dwc3 controller
Signed-off-by Yaqin Pan <[email protected]>--- 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_FLAGSis 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
returnconstructor.get_single_data()
File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 121, inget_single_data
returnself.construct_document(node)
File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 131, inconstruct_document
for_dummyin generator:
File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 674, inconstruct_yaml_map
value =self.construct_mapping(node)
File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 445, inconstruct_mapping
returnBaseConstructor.construct_mapping(self, node, deep=deep)
Quoted 8 lines
File "
/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 263, inconstruct_mapping
ifself.check_mapping_key(node, key_node, mapping, key, value):
File "/usr/local/lib/python3.8/dist-packages/ruamel/yaml/constructor.py", line 294, incheck_mapping_key
raiseDuplicateKeyError(*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.
Quoted 5 lines
To suppress this check see:
http://yaml.readthedocs.io/en/latest/api.html#duplicate-keysmake[1]: *** [
Documentation/devicetree/bindings/Makefile:25:Documentation/devicetree/bindings/usb/snps,dwc3.example.dts] Error 1 make[1]: *** Waiting for unfinished jobs....