Linux ARM-MSM sub-architecture
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Add Devicetree support for USB controllers on QCS8300
@ 2024-11-05 16:49 Krishna Kurapati
  2024-11-05 16:49 ` [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes " Krishna Kurapati
  2024-11-05 16:49 ` [PATCH v3 2/2] arm64: dts: qcom: Enable USB controllers for QCS8300 Krishna Kurapati
  0 siblings, 2 replies; 6+ messages in thread
From: Krishna Kurapati @ 2024-11-05 16:49 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Rob Herring, Bjorn Andersson, Konrad Dybcio,
	Conor Dooley, Dmitry Baryshkov
  Cc: linux-kernel, linux-arm-msm, devicetree, quic_ppratap, quic_jackp,
	Krishna Kurapati

This series aims at enabling USB on QCS8300 which has 2 USB controllers.
The primary controller is SuperSpeed capable and secondary one is
High Speed only capable. Both the High Speed Phys are Femto phys and the
SuperSpeed Phy is a QMP Uni Phy.

Base DT Support has been added for both controllers while only one has
been enabled on Ride Platform. The primary controller has been configured
in device mode. The secondary controller will be enabled in host mode post
addition of SPMI Node which allows control over PMIC Gpios for providing
vbus to connected peripherals.

This series depends on the following series ACKed by upstream maintainers:
Base DT: https://lore.kernel.org/all/20240925-qcs8300_initial_dtsi-v2-0-494c40fa2a42@quicinc.com/

Bindings patches posted at:
https://lore.kernel.org/all/20241009195348.2649368-1-quic_kriskura@quicinc.com/

Link to v1:
https://lore.kernel.org/all/20241009195636.2649952-1-quic_kriskura@quicinc.com/

Link to v2:
https://lore.kernel.org/all/20241011074619.796580-1-quic_kriskura@quicinc.com/

v3 has only been compile tested since only cosmetic changes have been done.

Changes in v3:
Updated commit text for patch-2.
Added dwc3 controller quirks that are applicable.
Fixed nits pointed out in v2.

Changes in v2:
Added quirk to use pipe clk as utmi clk for second controller.
Added wakeup source for second controller.
Modified commit text for DTS change.

Krishna Kurapati (2):
  arm64: dts: qcom: Add support for usb nodes on QCS8300
  arm64: dts: qcom: Enable USB controllers for QCS8300

 arch/arm64/boot/dts/qcom/qcs8300-ride.dts |  23 +++
 arch/arm64/boot/dts/qcom/qcs8300.dtsi     | 181 ++++++++++++++++++++++
 2 files changed, 204 insertions(+)

-- 
2.34.1


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

* [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes on QCS8300
  2024-11-05 16:49 [PATCH v3 0/2] Add Devicetree support for USB controllers on QCS8300 Krishna Kurapati
@ 2024-11-05 16:49 ` Krishna Kurapati
  2024-11-12 11:04   ` Konrad Dybcio
  2024-11-05 16:49 ` [PATCH v3 2/2] arm64: dts: qcom: Enable USB controllers for QCS8300 Krishna Kurapati
  1 sibling, 1 reply; 6+ messages in thread
From: Krishna Kurapati @ 2024-11-05 16:49 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Rob Herring, Bjorn Andersson, Konrad Dybcio,
	Conor Dooley, Dmitry Baryshkov
  Cc: linux-kernel, linux-arm-msm, devicetree, quic_ppratap, quic_jackp,
	Krishna Kurapati

Add support for USB controllers on QCS8300. The second
controller is only High Speed capable.

Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
---
 arch/arm64/boot/dts/qcom/qcs8300.dtsi | 181 ++++++++++++++++++++++++++
 1 file changed, 181 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/qcs8300.dtsi b/arch/arm64/boot/dts/qcom/qcs8300.dtsi
index 2c35f96c3f28..0e4ca6e238db 100644
--- a/arch/arm64/boot/dts/qcom/qcs8300.dtsi
+++ b/arch/arm64/boot/dts/qcom/qcs8300.dtsi
@@ -1363,6 +1363,187 @@ IPCC_MPROC_SIGNAL_GLINK_QMP
 				qcom,remote-pid = <5>;
 			};
 		};
+
+		usb_1_hsphy: phy@8904000 {
+			compatible = "qcom,qcs8300-usb-hs-phy",
+				     "qcom,usb-snps-hs-7nm-phy";
+			reg = <0x0 0x08904000 0x0 0x400>;
+
+			clocks = <&rpmhcc RPMH_CXO_CLK>;
+			clock-names = "ref";
+
+			resets = <&gcc GCC_USB2_PHY_PRIM_BCR>;
+
+			#phy-cells = <0>;
+
+			status = "disabled";
+		};
+
+		usb_2_hsphy: phy@8906000 {
+			compatible = "qcom,qcs8300-usb-hs-phy",
+				     "qcom,usb-snps-hs-7nm-phy";
+			reg = <0x0 0x08906000 0x0 0x400>;
+
+			clocks = <&rpmhcc RPMH_CXO_CLK>;
+			clock-names = "ref";
+
+			resets = <&gcc GCC_USB2_PHY_SEC_BCR>;
+
+			#phy-cells = <0>;
+
+			status = "disabled";
+		};
+
+		usb_qmpphy: phy@8907000 {
+			compatible = "qcom,qcs8300-qmp-usb3-uni-phy";
+			reg = <0x0 0x08907000 0x0 0x2000>;
+
+			clocks = <&gcc GCC_USB3_PRIM_PHY_AUX_CLK>,
+				 <&gcc GCC_USB_CLKREF_EN>,
+				 <&gcc GCC_USB3_PRIM_PHY_COM_AUX_CLK>,
+				 <&gcc GCC_USB3_PRIM_PHY_PIPE_CLK>;
+			clock-names = "aux",
+				      "ref",
+				      "com_aux",
+				      "pipe";
+
+			resets = <&gcc GCC_USB3_PHY_PRIM_BCR>,
+				 <&gcc GCC_USB3PHY_PHY_PRIM_BCR>;
+			reset-names = "phy", "phy_phy";
+
+			power-domains = <&gcc GCC_USB30_PRIM_GDSC>;
+
+			#clock-cells = <0>;
+			clock-output-names = "usb3_prim_phy_pipe_clk_src";
+
+			#phy-cells = <0>;
+
+			status = "disabled";
+		};
+
+		usb_1: usb@a6f8800 {
+			compatible = "qcom,qcs8300-dwc3", "qcom,dwc3";
+			reg = <0x0 0x0a6f8800 0x0 0x400>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+
+			clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>,
+				 <&gcc GCC_USB30_PRIM_MASTER_CLK>,
+				 <&gcc GCC_AGGRE_USB3_PRIM_AXI_CLK>,
+				 <&gcc GCC_USB30_PRIM_SLEEP_CLK>,
+				 <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>;
+			clock-names = "cfg_noc",
+				      "core",
+				      "iface",
+				      "sleep",
+				      "mock_utmi";
+
+			assigned-clocks = <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
+					  <&gcc GCC_USB30_PRIM_MASTER_CLK>;
+			assigned-clock-rates = <19200000>, <200000000>;
+
+			interrupts-extended = <&intc GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>,
+					      <&intc GIC_SPI 261 IRQ_TYPE_LEVEL_HIGH>,
+					      <&pdc 14 IRQ_TYPE_EDGE_BOTH>,
+					      <&pdc 15 IRQ_TYPE_EDGE_BOTH>,
+					      <&pdc 12 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "pwr_event",
+					  "hs_phy_irq",
+					  "dp_hs_phy_irq",
+					  "dm_hs_phy_irq",
+					  "ss_phy_irq";
+
+			power-domains = <&gcc GCC_USB30_PRIM_GDSC>;
+			required-opps = <&rpmhpd_opp_nom>;
+
+			resets = <&gcc GCC_USB30_PRIM_BCR>;
+			interconnects = <&aggre1_noc MASTER_USB3_0 QCOM_ICC_TAG_ALWAYS
+					 &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+					<&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
+					 &config_noc SLAVE_USB3_0 QCOM_ICC_TAG_ALWAYS>;
+			interconnect-names = "usb-ddr", "apps-usb";
+
+			wakeup-source;
+
+			status = "disabled";
+
+			usb_1_dwc3: usb@a600000 {
+				compatible = "snps,dwc3";
+				reg = <0x0 0x0a600000 0x0 0xe000>;
+				interrupts = <GIC_SPI 292 IRQ_TYPE_LEVEL_HIGH>;
+				iommus = <&apps_smmu 0x80 0x0>;
+				phys = <&usb_1_hsphy>, <&usb_qmpphy>;
+				phy-names = "usb2-phy", "usb3-phy";
+				snps,dis_enblslpm_quirk;
+				snps,dis-u1-entry-quirk;
+				snps,dis-u2-entry-quirk;
+				snps,dis_u2_susphy_quirk;
+				snps,dis_u3_susphy_quirk;
+			};
+		};
+
+		usb_2: usb@a4f8800 {
+			compatible = "qcom,qcs8300-dwc3", "qcom,dwc3";
+			reg = <0x0 0x0a4f8800 0x0 0x400>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+
+			clocks = <&gcc GCC_CFG_NOC_USB2_PRIM_AXI_CLK>,
+				 <&gcc GCC_USB20_MASTER_CLK>,
+				 <&gcc GCC_AGGRE_USB2_PRIM_AXI_CLK>,
+				 <&gcc GCC_USB20_SLEEP_CLK>,
+				 <&gcc GCC_USB20_MOCK_UTMI_CLK>;
+			clock-names = "cfg_noc",
+				      "core",
+				      "iface",
+				      "sleep",
+				      "mock_utmi";
+
+			assigned-clocks = <&gcc GCC_USB20_MOCK_UTMI_CLK>,
+					  <&gcc GCC_USB20_MASTER_CLK>;
+			assigned-clock-rates = <19200000>, <120000000>;
+
+			interrupts-extended = <&intc GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>,
+					      <&intc GIC_SPI 443 IRQ_TYPE_LEVEL_HIGH>,
+					      <&pdc 10 IRQ_TYPE_EDGE_BOTH>,
+					      <&pdc 9 IRQ_TYPE_EDGE_BOTH>;
+			interrupt-names = "pwr_event",
+					  "hs_phy_irq",
+					  "dp_hs_phy_irq",
+					  "dm_hs_phy_irq";
+
+			power-domains = <&gcc GCC_USB20_PRIM_GDSC>;
+			required-opps = <&rpmhpd_opp_nom>;
+
+			resets = <&gcc GCC_USB20_PRIM_BCR>;
+
+			interconnects = <&aggre1_noc MASTER_USB2 QCOM_ICC_TAG_ALWAYS
+					 &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+					<&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
+					 &config_noc SLAVE_USB2 QCOM_ICC_TAG_ALWAYS>;
+			interconnect-names = "usb-ddr", "apps-usb";
+
+			qcom,select-utmi-as-pipe-clk;
+			wakeup-source;
+
+			status = "disabled";
+
+			usb_2_dwc3: usb@a400000 {
+				compatible = "snps,dwc3";
+				reg = <0x0 0x0a400000 0x0 0xe000>;
+				interrupts = <GIC_SPI 442 IRQ_TYPE_LEVEL_HIGH>;
+				iommus = <&apps_smmu 0x20 0x0>;
+				phys = <&usb_2_hsphy>;
+				phy-names = "usb2-phy";
+				snps,dis-u1-entry-quirk;
+				snps,dis-u2-entry-quirk;
+				snps,dis_u2_susphy_quirk;
+				snps,dis_u3_susphy_quirk;
+				snps,dis_enblslpm_quirk;
+			};
+		};
 	};
 
 	arch_timer: timer {
-- 
2.34.1


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

* [PATCH v3 2/2] arm64: dts: qcom: Enable USB controllers for QCS8300
  2024-11-05 16:49 [PATCH v3 0/2] Add Devicetree support for USB controllers on QCS8300 Krishna Kurapati
  2024-11-05 16:49 ` [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes " Krishna Kurapati
@ 2024-11-05 16:49 ` Krishna Kurapati
  1 sibling, 0 replies; 6+ messages in thread
From: Krishna Kurapati @ 2024-11-05 16:49 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Rob Herring, Bjorn Andersson, Konrad Dybcio,
	Conor Dooley, Dmitry Baryshkov
  Cc: linux-kernel, linux-arm-msm, devicetree, quic_ppratap, quic_jackp,
	Krishna Kurapati

Enable primary USB controller on QCS8300 Ride platform. The primary USB
controller is made "peripheral", as this is intended to be connected to
a host for debugging use cases.

For using the controller in host mode, changing the dr_mode and adding
appropriate pinctrl nodes to provide vbus would be sufficient.

Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
---
 arch/arm64/boot/dts/qcom/qcs8300-ride.dts | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/qcs8300-ride.dts b/arch/arm64/boot/dts/qcom/qcs8300-ride.dts
index 7eed19a694c3..3e925228379c 100644
--- a/arch/arm64/boot/dts/qcom/qcs8300-ride.dts
+++ b/arch/arm64/boot/dts/qcom/qcs8300-ride.dts
@@ -265,3 +265,26 @@ &ufs_mem_phy {
 	vdda-pll-supply = <&vreg_l5a>;
 	status = "okay";
 };
+
+&usb_1_hsphy {
+	vdda-pll-supply = <&vreg_l7a>;
+	vdda18-supply = <&vreg_l7c>;
+	vdda33-supply = <&vreg_l9a>;
+
+	status = "okay";
+};
+
+&usb_qmpphy {
+	vdda-phy-supply = <&vreg_l7a>;
+	vdda-pll-supply = <&vreg_l5a>;
+
+	status = "okay";
+};
+
+&usb_1 {
+	status = "okay";
+};
+
+&usb_1_dwc3 {
+	dr_mode = "peripheral";
+};
-- 
2.34.1


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

* Re: [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes on QCS8300
  2024-11-05 16:49 ` [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes " Krishna Kurapati
@ 2024-11-12 11:04   ` Konrad Dybcio
  2024-11-12 15:47     ` Krishna Kurapati
  0 siblings, 1 reply; 6+ messages in thread
From: Konrad Dybcio @ 2024-11-12 11:04 UTC (permalink / raw)
  To: Krishna Kurapati, Krzysztof Kozlowski, Rob Herring,
	Bjorn Andersson, Konrad Dybcio, Conor Dooley, Dmitry Baryshkov
  Cc: linux-kernel, linux-arm-msm, devicetree, quic_ppratap, quic_jackp



On 11/5/24 17:49, Krishna Kurapati wrote:
> Add support for USB controllers on QCS8300. The second
> controller is only High Speed capable.
> 
> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
> ---

[...]

(the PHYs look good)

> +		usb_1: usb@a6f8800 {
> +			compatible = "qcom,qcs8300-dwc3", "qcom,dwc3";
> +			reg = <0x0 0x0a6f8800 0x0 0x400>;
> +			#address-cells = <2>;
> +			#size-cells = <2>;
> +			ranges;

Please match the property style with x1e80100.dtsi's dwc3 node

[...]

> +
> +			usb_2_dwc3: usb@a400000 {
> +				compatible = "snps,dwc3";
> +				reg = <0x0 0x0a400000 0x0 0xe000>;
> +				interrupts = <GIC_SPI 442 IRQ_TYPE_LEVEL_HIGH>;
> +				iommus = <&apps_smmu 0x20 0x0>;
> +				phys = <&usb_2_hsphy>;
> +				phy-names = "usb2-phy";
> +				snps,dis-u1-entry-quirk;
> +				snps,dis-u2-entry-quirk;
> +				snps,dis_u2_susphy_quirk;
> +				snps,dis_u3_susphy_quirk;
> +				snps,dis_enblslpm_quirk;

maximum-speed = "high-speed"

Konrad

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

* Re: [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes on QCS8300
  2024-11-12 11:04   ` Konrad Dybcio
@ 2024-11-12 15:47     ` Krishna Kurapati
  2024-11-15 16:18       ` Dmitry Baryshkov
  0 siblings, 1 reply; 6+ messages in thread
From: Krishna Kurapati @ 2024-11-12 15:47 UTC (permalink / raw)
  To: Konrad Dybcio
  Cc: linux-kernel, Conor Dooley, Dmitry Baryshkov, Krzysztof Kozlowski,
	Bjorn Andersson, Rob Herring, linux-arm-msm, devicetree,
	quic_ppratap, quic_jackp, Konrad Dybcio



On 11/12/2024 4:34 PM, Konrad Dybcio wrote:
> 
> 
> On 11/5/24 17:49, Krishna Kurapati wrote:
>> Add support for USB controllers on QCS8300. The second
>> controller is only High Speed capable.
>>
>> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
>> ---
> 
> [...]
> 
> (the PHYs look good)
> 
>> +        usb_1: usb@a6f8800 {
>> +            compatible = "qcom,qcs8300-dwc3", "qcom,dwc3";
>> +            reg = <0x0 0x0a6f8800 0x0 0x400>;
>> +            #address-cells = <2>;
>> +            #size-cells = <2>;
>> +            ranges;
> 
> Please match the property style with x1e80100.dtsi's dwc3 node

Meaning adding the 3 properties to before the starting of dwc3 node ?

> 
> [...]
> 
>> +
>> +            usb_2_dwc3: usb@a400000 {
>> +                compatible = "snps,dwc3";
>> +                reg = <0x0 0x0a400000 0x0 0xe000>;
>> +                interrupts = <GIC_SPI 442 IRQ_TYPE_LEVEL_HIGH>;
>> +                iommus = <&apps_smmu 0x20 0x0>;
>> +                phys = <&usb_2_hsphy>;
>> +                phy-names = "usb2-phy";
>> +                snps,dis-u1-entry-quirk;
>> +                snps,dis-u2-entry-quirk;
>> +                snps,dis_u2_susphy_quirk;
>> +                snps,dis_u3_susphy_quirk;
>> +                snps,dis_enblslpm_quirk;
> 
> maximum-speed = "high-speed"

Ideally this is not needed for the driver to operate. Can I add this 
property when I send the patch to enable second controller on ride 
platform ? Only reason I ask is this is not a blocker and it would need 
another rebase.

Regards,
Krishna,

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

* Re: [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes on QCS8300
  2024-11-12 15:47     ` Krishna Kurapati
@ 2024-11-15 16:18       ` Dmitry Baryshkov
  0 siblings, 0 replies; 6+ messages in thread
From: Dmitry Baryshkov @ 2024-11-15 16:18 UTC (permalink / raw)
  To: Krishna Kurapati
  Cc: Konrad Dybcio, linux-kernel, Conor Dooley, Krzysztof Kozlowski,
	Bjorn Andersson, Rob Herring, linux-arm-msm, devicetree,
	quic_ppratap, quic_jackp, Konrad Dybcio

On Tue, Nov 12, 2024 at 09:17:49PM +0530, Krishna Kurapati wrote:
> 
> 
> On 11/12/2024 4:34 PM, Konrad Dybcio wrote:
> > 
> > 
> > On 11/5/24 17:49, Krishna Kurapati wrote:
> > > Add support for USB controllers on QCS8300. The second
> > > controller is only High Speed capable.
> > > 
> > > Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
> > > ---
> > 
> > [...]
> > 
> > (the PHYs look good)
> > 
> > > +        usb_1: usb@a6f8800 {
> > > +            compatible = "qcom,qcs8300-dwc3", "qcom,dwc3";
> > > +            reg = <0x0 0x0a6f8800 0x0 0x400>;
> > > +            #address-cells = <2>;
> > > +            #size-cells = <2>;
> > > +            ranges;
> > 
> > Please match the property style with x1e80100.dtsi's dwc3 node
> 
> Meaning adding the 3 properties to before the starting of dwc3 node ?
> 
> > 
> > [...]
> > 
> > > +
> > > +            usb_2_dwc3: usb@a400000 {
> > > +                compatible = "snps,dwc3";
> > > +                reg = <0x0 0x0a400000 0x0 0xe000>;
> > > +                interrupts = <GIC_SPI 442 IRQ_TYPE_LEVEL_HIGH>;
> > > +                iommus = <&apps_smmu 0x20 0x0>;
> > > +                phys = <&usb_2_hsphy>;
> > > +                phy-names = "usb2-phy";
> > > +                snps,dis-u1-entry-quirk;
> > > +                snps,dis-u2-entry-quirk;
> > > +                snps,dis_u2_susphy_quirk;
> > > +                snps,dis_u3_susphy_quirk;
> > > +                snps,dis_enblslpm_quirk;
> > 
> > maximum-speed = "high-speed"
> 
> Ideally this is not needed for the driver to operate. Can I add this
> property when I send the patch to enable second controller on ride platform
> ? Only reason I ask is this is not a blocker and it would need another
> rebase.

I'd say, let's do it straight from the beginning.

-- 
With best wishes
Dmitry

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

end of thread, other threads:[~2024-11-15 16:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-05 16:49 [PATCH v3 0/2] Add Devicetree support for USB controllers on QCS8300 Krishna Kurapati
2024-11-05 16:49 ` [PATCH v3 1/2] arm64: dts: qcom: Add support for usb nodes " Krishna Kurapati
2024-11-12 11:04   ` Konrad Dybcio
2024-11-12 15:47     ` Krishna Kurapati
2024-11-15 16:18       ` Dmitry Baryshkov
2024-11-05 16:49 ` [PATCH v3 2/2] arm64: dts: qcom: Enable USB controllers for QCS8300 Krishna Kurapati

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox