arm64: dts: qcom: x1e80100: enable OTG on USB-C controllers
PATCH v2 1/3 arm64: dts: qcom: x1e80100: enable OTG on USB-C controllers
These 3 controllers support OTG and the driver requires the usb-role-switch property to enable OTG. Add the property to enable OTG by default.
--- arch/arm64/boot/dts/qcom/x1e80100.dtsi | 6 ++++++ 1 file changed, 6 insertions(+)
arch/arm64/boot/dts/qcom/x1e80100.dtsi +6 -0
@@ -4199,6 +4199,8 @@ usb_1_ss2_dwc3: usb@a000000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;
@@ -4452,6 +4454,8 @@ usb_1_ss0_dwc3: usb@a600000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;
@@ -4550,6 +4554,8 @@ usb_1_ss1_dwc3: usb@a800000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;
Signature · 1 line
2.45.1
PATCH v2 2/3 arm64: dts: qcom: x1e80100-crd: enable otg on usb ports
The 3 USB ports on x1e80100-crd are OTG-capable, remove the dr_mode override to enable OTG.
--- arch/arm64/boot/dts/qcom/x1e80100-crd.dts | 12 ------------ 1 file changed, 12 deletions(-)
arch/arm64/boot/dts/qcom/x1e80100-crd.dts +0 -12
@@ -1568,10 +1568,6 @@ &usb_1_ss0 { status = "okay"; }; -&usb_1_ss0_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss0_dwc3_hs { remote-endpoint = <&pmic_glink_ss0_hs_in>; };
@@ -1600,10 +1596,6 @@ &usb_1_ss1 { status = "okay"; }; -&usb_1_ss1_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss1_dwc3_hs { remote-endpoint = <&pmic_glink_ss1_hs_in>; };
@@ -1632,10 +1624,6 @@ &usb_1_ss2 { status = "okay"; }; -&usb_1_ss2_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss2_dwc3_hs { remote-endpoint = <&pmic_glink_ss2_hs_in>; };
Signature · 1 line
2.45.1
Re: [PATCH v2 2/3] arm64: dts: qcom: x1e80100-crd: enable otg on usb ports
Quoted 7 lines · Jonathan Marek
The 3 USB ports on x1e80100-crd are OTG-capable, remove the
dr_modeoverride to enable OTG.Signed-off-by Jonathan Marek <[email protected]>--- arch/arm64/boot/dts/qcom/x1e80100-crd.dts | 12 ------------ 1 file changed, 12 deletions(-)
I can not verify this on the CRD, but at least it matches the data-role="dual".
Signature · 2 lines
With best wishes Dmitry
Re: [PATCH v2 2/3] arm64: dts: qcom: x1e80100-crd: enable otg on usb ports
In reply to Jonathan Marek+Cc Abel and Johan
FYI, this landed in qcom for-next last week for CRD and T14s.
Quoted 4 lines · Jonathan Marek
The 3 USB ports on x1e80100-crd are OTG-capable, remove the
dr_modeoverride to enable OTG.Signed-off-by Jonathan Marek <[email protected]>
This is a bit problematic, because dr_mode = "otg" seems to imply gadget/peripheral mode by default and we are currently unable to detect the role at runtime until the ADSP is started. Being in peripheral mode by default will break USB installers; they won't be able find the rootfs via USB. Unfortunately, they wouldn't be able to detect it once in the rootfs either, because usually you first need to copy the ADSP firmware from Windows (at least on the laptops).
I think the best quick fix would be to set
role-switch-default-mode = "host";
for now to restore the old behavior in initrd, while still allowing to switch to peripheral mode once detected by the ADSP later.
It would be nice to have gadget mode in initrd as well, since e.g. postmarketOS needs that to set up the USB debug shell. But I'm not sure how we could support that:
- We could designate some of the ports as "peripheral by default" and some as "host by default". E.g. usb_1_ss0 is also used for EDL and Fastboot on CRD, so it's more likely to be used in peripheral mode. But there still would be users confused about why they cannot plug in their USB installer into one of the ports...
- Long term, I wonder if there is any way we could reuse the reduced ADSP firmware from UEFI for USB detection until we start the full one later? Perhaps it provides a similar interface?
Thanks,
Stephan
Quoted 44 lines
--- arch/arm64/boot/dts/qcom/x1e80100-crd.dts | 12 ------------ 1 file changed, 12 deletions(-)arch/arm64/boot/dts/qcom/x1e80100-crd.dts +0
-12@@ -1568,10 +1568,6 @@ &usb_1_ss0 { status = "okay"; }; -&usb_1_ss0_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss0_dwc3_hs { remote-endpoint = <&pmic_glink_ss0_hs_in>; };@@ -1600,10 +1596,6 @@ &usb_1_ss1 { status = "okay"; }; -&usb_1_ss1_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss1_dwc3_hs { remote-endpoint = <&pmic_glink_ss1_hs_in>; };@@ -1632,10 +1624,6 @@ &usb_1_ss2 { status = "okay"; }; -&usb_1_ss2_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss2_dwc3_hs { remote-endpoint = <&pmic_glink_ss2_hs_in>; };Signature · 1 line
2.45.1
Re: [PATCH v2 2/3] arm64: dts: qcom: x1e80100-crd: enable otg on usb ports
Quoted 18 lines · Stephan Gerhold
+Cc Abel and Johan
FYI, this landed in qcom for-next last week for CRD and T14s.
Quoted 4 lines · Jonathan Marek
The 3 USB ports on x1e80100-crd are OTG-capable, remove the
dr_modeoverride to enable OTG.Signed-off-by Jonathan Marek <[email protected]>This is a bit problematic, because
dr_mode= "otg" seems to imply gadget/peripheral mode by default and we are currently unable to detect the role at runtime until the ADSP is started. Being in peripheral mode by default will break USB installers; they won't be able find the rootfs via USB. Unfortunately, they wouldn't be able to detect it once in the rootfs either, because usually you first need to copy the ADSP firmware from Windows (at least on the laptops).
Quoted 4 lines
I think the best quick fix would be to set
role-switch-default-mode = "host";
I have no objection to this but its a hack to workaround qcom's broken design and perhaps should include a comment along those lines. The situation is also the same on anything sm8350 and newer.
FYI upstream doesn't support a rootfs on USB because loading a new ADSP firmware breaks it (cuts off vbus for a moment I guess), but I guess that doesn't apply to the USB installer case. (maybe the people making these USB installers should just have to carry a patch with this?)
Quoted 13 lines
for now to restore the old behavior in initrd, while still allowing to switch to peripheral mode once detected by the ADSP later.
It would be nice to have gadget mode in initrd as well, since e.g. postmarketOS needs that to set up the USB debug shell. But I'm not sure how we could support that:
- We could designate some of the ports as "peripheral by default" and some as "host by default". E.g.
usb_1_ss0is also used for EDL and Fastboot on CRD, so it's more likely to be used in peripheral mode. But there still would be users confused about why they cannot plug in their USB installer into one of the ports...
Quoted 3 lines
- Long term, I wonder if there is any way we could reuse the reduced ADSP firmware from UEFI for USB detection until we start the full one later? Perhaps it provides a similar interface?
This is what I do (minus the "start the full one later" part), with a hack [1] to make the remoteproc driver skip loading any firmware and trying to boot the DSP. The UEFI-loaded ADSP firmware has the same charging/usb functionality as the full ADSP firmware.
[1] https://github.com/flto/linux/commit/36921742d28b55dc02d8e5a8d6598e567e7874ab
PATCH v2 3/3 arm64: dts: qcom: x1e78100-t14s: enable otg on usb-c ports
In reply to Jonathan MarekThe 2 USB-C ports on x1e78100-t14s are OTG-capable, remove the dr_mode override to enable OTG.
--- .../arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts | 8 -------- 1 file changed, 8 deletions(-)
arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +0 -8
@@ -1152,10 +1152,6 @@ &usb_1_ss0 { status = "okay"; }; -&usb_1_ss0_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss0_dwc3_hs { remote-endpoint = <&pmic_glink_ss0_hs_in>; };
@@ -1184,10 +1180,6 @@ &usb_1_ss1 { status = "okay"; }; -&usb_1_ss1_dwc3 { - dr_mode = "host"; -}; - &usb_1_ss1_dwc3_hs { remote-endpoint = <&pmic_glink_ss1_hs_in>; };
Signature · 1 line
2.45.1
Re: [PATCH v2 3/3] arm64: dts: qcom: x1e78100-t14s: enable otg on usb-c ports
Quoted 8 lines · Jonathan Marek
The 2 USB-C ports on x1e78100-t14s are OTG-capable, remove the
dr_modeoverride to enable OTG.Signed-off-by Jonathan Marek <[email protected]>--- .../arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts | 8 -------- 1 file changed, 8 deletions(-)
Same comment,
Signature · 2 lines
With best wishes Dmitry
Quoted 8 lines · Jonathan Marek
These 3 controllers support OTG and the driver requires the usb-role-switch property to enable OTG. Add the property to enable OTG by default.
Signed-off-by Jonathan Marek <[email protected]>--- arch/arm64/boot/dts/qcom/x1e80100.dtsi | 6 ++++++ 1 file changed, 6 insertions(+)
Signature · 2 lines
With best wishes Dmitry
Re: (subset) [PATCH v2 1/3] arm64: dts: qcom: x1e80100: enable OTG on USB-C controllers
In reply to Jonathan MarekQuoted 4 lines · Jonathan Marek
These 3 controllers support OTG and the driver requires the usb-role-switch property to enable OTG. Add the property to enable OTG by default.
Applied, thanks!
[1/3] arm64: dts: qcom: x1e80100: enable OTG on USB-C controllers
commit: f042bc234c2e00764b8aa2c9e2f8177cdc63f664
[2/3] arm64: dts: qcom: x1e80100-crd: enable otg on usb ports
commit: 2dd3250191bcfe93b0c9da46624af830310400a7
[3/3] arm64: dts: qcom: x1e78100-t14s: enable otg on usb-c ports
commit: 1a48dd7b9ac809d1bd0fd2fef509abba83433846Best regards,
Signature · 1 line
Bjorn Andersson <[email protected]>
Quoted 7 lines · Jonathan Marek
These 3 controllers support OTG and the driver requires the usb-role-switch property to enable OTG. Add the property to enable OTG by default.
Signed-off-by Jonathan Marek <[email protected]>--- arch/arm64/boot/dts/qcom/x1e80100.dtsi | 6 ++++++ 1 file changed, 6 insertions(+)
For some reason commit f042bc234c2e ("arm64: dts: qcom: x1e80100: enable OTG on USB-C controllers") seems to break UCSI on X1E80100 CRD:
[ 34.479352] ucsi_glink.pmic_glink_ucsi pmic_glink.ucsi.0: PPM init failed, stop trying
Quoted 35 lines
arch/arm64/boot/dts/qcom/x1e80100.dtsi +6
-0@@ -4199,6 +4199,8 @@ usb_1_ss2_dwc3: usb@a000000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;@@ -4452,6 +4454,8 @@ usb_1_ss0_dwc3: usb@a600000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;@@ -4550,6 +4554,8 @@ usb_1_ss1_dwc3: usb@a800000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;Signature · 1 line
2.45.1
Signature · 2 lines
With best wishes Dmitry
Quoted 9 lines · Dmitry Baryshkov
Quoted 7 lines · Jonathan Marek
These 3 controllers support OTG and the driver requires the usb-role-switch property to enable OTG. Add the property to enable OTG by default.
Signed-off-by Jonathan Marek <[email protected]>--- arch/arm64/boot/dts/qcom/x1e80100.dtsi | 6 ++++++ 1 file changed, 6 insertions(+)
Quoted 4 lines
For some reason commit
f042bc234c2e("arm64: dts: qcom: x1e80100: enable OTG on USB-C controllers") seems to break UCSI on X1E80100 CRD:[ 34.479352] ucsi_glink.pmic_glink_ucsi pmic_glink.ucsi.0: PPM init failed, stop trying
#regzbot ^introduced: f042bc234c2e
Quoted 40 lines
Quoted 36 lines
arch/arm64/boot/dts/qcom/x1e80100.dtsi +6
-0@@ -4199,6 +4199,8 @@ usb_1_ss2_dwc3: usb@a000000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;@@ -4452,6 +4454,8 @@ usb_1_ss0_dwc3: usb@a600000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;@@ -4550,6 +4554,8 @@ usb_1_ss1_dwc3: usb@a800000 { dma-coherent; + usb-role-switch; + ports { #address-cells = <1>; #size-cells = <0>;Signature · 1 line
2.45.1Signature · 2 lines
With best wishes Dmitry
Signature · 2 lines
With best wishes Dmitry