2023-05-16 21:48:01

by Bhupesh Sharma

[permalink] [raw]
Subject: [PATCH v5 0/5] Add Qualcomm SM6115 / SM4250 EUD dt-bindings & driver support

Changes since v4:
----------------
- v4 can be viewed here: https://lore.kernel.org/linux-arm-msm/[email protected]/
- Addressed Konrad's review comments regarding EUD driver code.
- Also collected his R-B for [PATCH 4/5 and 5/5].
- Fixed the dt-bindings as per Krzysztof's comments.

Changes since v3:
----------------
- v3 can be viewed here: https://www.spinics.net/lists/linux-arm-msm/msg137025.html
- Addressed Konrad's review comments regarding mainly the driver code.
Also fixed the .dtsi as per his comments.
- Also collected his R-B for [PATCH 1/5].

Changes since v2:
----------------
- v2 can be viewed here: https://www.spinics.net/lists/linux-arm-msm/msg137025.html
- Addressed Bjorn and Krzysztof's comments.
- Added [PATCH 1/5] which fixes the 'qcom_eud' sysfs path.
- Added [PATCH 5/5] to enable EUD for Qualcomm QRB4210-RB2 boards.

Changes since v1:
----------------
- v1 can be viewed here: https://lore.kernel.org/linux-arm-msm/[email protected]
- Added Krzysztof in Cc list.
- Fixed the following issue reported by kernel test bot:
>> ERROR: modpost: "qcom_scm_io_writel" [drivers/usb/misc/qcom_eud.ko] undefined!

This series adds the dt-binding and driver support for SM6115 / SM4250
EUD (Embedded USB Debugger) block available on Qualcomm SoCs.

It also enables the same for QRB4210-RB2 boards by default (the user
still needs to enable the same via sysfs).

The EUD is a mini-USB hub implemented on chip to support the USB-based debug
and trace capabilities.

EUD driver listens to events like USB attach or detach and then
informs the USB about these events via ROLE-SWITCH.

Bhupesh Sharma (5):
usb: misc: eud: Fix eud sysfs path (use 'qcom_eud')
dt-bindings: soc: qcom: eud: Add SM6115 / SM4250 support
usb: misc: eud: Add driver support for SM6115 / SM4250
arm64: dts: qcom: sm6115: Add EUD dt node and dwc3 connector
arm64: dts: qcom: qrb4210-rb2: Enable EUD debug peripheral

Documentation/ABI/testing/sysfs-driver-eud | 2 +-
.../bindings/soc/qcom/qcom,eud.yaml | 42 ++++++++++-
arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 27 +++++++-
arch/arm64/boot/dts/qcom/sm6115.dtsi | 50 ++++++++++++++
drivers/usb/misc/Kconfig | 1 +
drivers/usb/misc/qcom_eud.c | 69 +++++++++++++++++--
6 files changed, 179 insertions(+), 12 deletions(-)

--
2.38.1



2023-05-16 21:50:32

by Bhupesh Sharma

[permalink] [raw]
Subject: [PATCH v5 5/5] arm64: dts: qcom: qrb4210-rb2: Enable EUD debug peripheral

Since the USB-C type port on the Qualcomm QRB4210-RB2 board
can be set primarily in a 'device' configuration (with the default
DIP switch settings), it makes sense to enable the EUD debug
peripheral on the board by default by setting the USB 'dr_mode' property
as 'otg'.

Now, the EUD debug peripheral can be enabled by executing:
$ echo 1 > /sys/bus/platform/drivers/qcom_eud/1610000.eud/enable

Reviewed-by: Konrad Dybcio <[email protected]>
Signed-off-by: Bhupesh Sharma <[email protected]>
---
arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 27 +++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts
index 1a0776a0cfd0..0ce72f1ebc10 100644
--- a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts
+++ b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts
@@ -30,6 +30,10 @@ vph_pwr: vph-pwr-regulator {
};
};

+&eud {
+ status = "okay";
+};
+
&qupv3_id_0 {
status = "okay";
};
@@ -253,7 +257,28 @@ &usb {

&usb_dwc3 {
maximum-speed = "super-speed";
- dr_mode = "peripheral";
+
+ /*
+ * There is only one USB DWC3 controller on QRB4210 board and it is connected
+ * via a DIP Switch:
+ * - to either an USB - C type connector or an USB - A type connector
+ * (via a GL3590-S hub), and
+ * - to either an USB - A type connector (via a GL3590-S hub) or a connector
+ * for further connection with a mezzanine board.
+ *
+ * All of the above hardware muxes would allow us to hook things up in
+ * different ways to some potential benefit for static configurations (for e.g.
+ * on one hand we can have two USB - A type connectors and a USB - Ethernet
+ * connection available and on the other we can use the USB - C type in
+ * peripheral mode).
+ *
+ * Note that since the USB - C type can be used only in peripehral mode,
+ * so hardcoding the mode to 'peripheral' here makes sense.
+ *
+ * However since we want to use the EUD debug device, we set the mode as
+ * 'otg' here.
+ */
+ dr_mode = "otg";
};

&usb_hsphy {
--
2.38.1


2023-05-16 21:51:19

by Bhupesh Sharma

[permalink] [raw]
Subject: [PATCH v5 4/5] arm64: dts: qcom: sm6115: Add EUD dt node and dwc3 connector

Add the Embedded USB Debugger(EUD) device tree node for
SM6115 / SM4250 SoC.

The node contains EUD base register region, EUD mode manager
register region and TCSR Base register region along with the
interrupt entry.

Also add the typec connector node for EUD which is attached to
EUD node via port. EUD is also attached to DWC3 node via port.

To enable the role switch, we need to set dr_mode = "otg" property
for 'usb_dwc3' sub-node in the board dts file.

Also the EUD device can be enabled on a board once linux is boot'ed
by setting:
$ echo 1 > /sys/bus/platform/drivers/qcom_eud/../enable

Reviewed-by: Konrad Dybcio <[email protected]>
Signed-off-by: Bhupesh Sharma <[email protected]>
---
arch/arm64/boot/dts/qcom/sm6115.dtsi | 50 ++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sm6115.dtsi b/arch/arm64/boot/dts/qcom/sm6115.dtsi
index f67863561f3f..92a82d7172ca 100644
--- a/arch/arm64/boot/dts/qcom/sm6115.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm6115.dtsi
@@ -180,6 +180,18 @@ core3 {
};
};

+ eud_typec: connector {
+ compatible = "usb-c-connector";
+
+ ports {
+ port@0 {
+ con_eud: endpoint {
+ remote-endpoint = <&eud_con>;
+ };
+ };
+ };
+ };
+
firmware {
scm: scm {
compatible = "qcom,scm-sm6115", "qcom,scm";
@@ -647,6 +659,37 @@ gcc: clock-controller@1400000 {
#power-domain-cells = <1>;
};

+ eud: eud@1610000 {
+ compatible = "qcom,sm6115-eud", "qcom,eud";
+ reg = <0x0 0x01610000 0x0 0x2000>,
+ <0x0 0x01612000 0x0 0x1000>,
+ <0x0 0x003c0000 0x0 0x40000>;
+ reg-names = "eud-base", "eud-mode-mgr", "tcsr-base";
+ interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ eud_ep: endpoint {
+ remote-endpoint = <&usb2_role_switch>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ eud_con: endpoint {
+ remote-endpoint = <&con_eud>;
+ };
+ };
+ };
+ };
+
usb_hsphy: phy@1613000 {
compatible = "qcom,sm6115-qusb2-phy";
reg = <0x0 0x01613000 0x0 0x180>;
@@ -1144,6 +1187,13 @@ usb_dwc3: usb@4e00000 {
snps,has-lpm-erratum;
snps,hird-threshold = /bits/ 8 <0x10>;
snps,usb3_lpm_capable;
+ usb-role-switch;
+
+ port {
+ usb2_role_switch: endpoint {
+ remote-endpoint = <&eud_ep>;
+ };
+ };
};
};

--
2.38.1