phy: qualcomm: support IPQ60xx USB PHY
Subsystems (4)
cover phy: qualcomm: support IPQ60xx USB PHY
The short series adds support for USB PHY on IPQ60xx based platforms. Tested on CP01 board.
The code is forward-ported from downstream codeaurora kernel at
https://source.codeaurora.org/quic/qsdk/oss/kernel/linux-ipq-5.4/
Baruch Siach (1):
dt-bindings: phy: qcom,qusb2: document ipq6018 compatible
Kathiravan T (2):
phy: qcom-qusb2: add QUSB2 support for IPQ6018
arm64: dts: ipq6018: enable USB2 support
.../bindings/phy/qcom,qusb2-phy.yaml | 1 + arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts | 8 ++++ arch/arm64/boot/dts/qcom/ipq6018.dtsi | 48 +++++++++++++++++++ drivers/phy/qualcomm/phy-qcom-qusb2.c | 44 +++++++++++++++++ 4 files changed, 101 insertions(+)
Signature · 1 line
2.29.2
PATCH 1/3 phy: qcom-qusb2: add QUSB2 support for IPQ6018
From: Kathiravan T <[email protected]>
Add the phy init sequence for the Super Speed ports found on IPQ6018.
--- drivers/phy/qualcomm/phy-qcom-qusb2.c | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+)
drivers/phy/qualcomm/phy-qcom-qusb2.c +44 -0
@@ -22,6 +22,7 @@#include <dt-bindings/phy/phy-qcom-qusb2.h> +#define QUSB2PHY_PLL 0x0#define QUSB2PHY_PLL_TEST 0x04#define CLK_REF_SEL BIT(7)
@@ -135,6 +136,35 @@ enum qusb2phy_reg_layout { QUSB2PHY_INTR_CTRL, }; +static const struct qusb2_phy_init_tbl ipq6018_init_tbl[] = { +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL ,0x14 ), +QUSB2_PHY_INIT_CFG_L (QUSB2PHY_PORT_TUNE1 ,0xF8 ), +QUSB2_PHY_INIT_CFG_L (QUSB2PHY_PORT_TUNE2 ,0xB3 ), +QUSB2_PHY_INIT_CFG_L (QUSB2PHY_PORT_TUNE3 ,0x83 ), +QUSB2_PHY_INIT_CFG_L (QUSB2PHY_PORT_TUNE4 ,0xC0 ), +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL_TUNE ,0x30 ), +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL_USER_CTL1 ,0x79 ), +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL_USER_CTL2 ,0x21 ), +QUSB2_PHY_INIT_CFG_L (QUSB2PHY_PORT_TUNE5 ,0x00 ), +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL_PWR_CTRL ,0x00 ), +QUSB2_PHY_INIT_CFG_L (QUSB2PHY_PORT_TEST2 ,0x14 ), +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL_TEST ,0x80 ), +QUSB2_PHY_INIT_CFG (QUSB2PHY_PLL_AUTOPGM_CTL1 ,0x9F ), +}; + +static const unsigned int ipq6018_regs_layout[] = { + [QUSB2PHY_PLL_STATUS ] =0x38 , + [QUSB2PHY_PORT_TUNE1 ] =0x80 , + [QUSB2PHY_PORT_TUNE2 ] =0x84 , + [QUSB2PHY_PORT_TUNE3 ] =0x88 , + [QUSB2PHY_PORT_TUNE4 ] =0x8C , + [QUSB2PHY_PORT_TUNE5 ] =0x90 , + [QUSB2PHY_PORT_TEST1 ] =0x98 , + [QUSB2PHY_PORT_TEST2 ] =0x9C , + [QUSB2PHY_PORT_POWERDOWN ] =0xB4 , + [QUSB2PHY_INTR_CTRL ] =0xBC , +}; +static const unsigned int msm8996_regs_layout[] = { [QUSB2PHY_PLL_STATUS ] =0x38 , [QUSB2PHY_PORT_TUNE1 ] =0x80 ,
@@ -275,6 +305,17 @@ static const struct qusb2_phy_cfg msm8998_phy_cfg = { .update_tune1_with_efuse = true, }; +static const struct qusb2_phy_cfg ipq6018_phy_cfg = { + .tbl = ipq6018_init_tbl, + .tbl_num =ARRAY_SIZE (ipq6018_init_tbl), + .regs = ipq6018_regs_layout, + + .disable_ctrl =POWER_DOWN , + .mask_core_ready =PLL_LOCKED , +/* autoresume not used */ + .autoresume_en =BIT (0 ), +}; +static const struct qusb2_phy_cfg qusb2_v2_phy_cfg = { .tbl = qusb2_v2_init_tbl, .tbl_num =ARRAY_SIZE (qusb2_v2_init_tbl),
@@ -833,6 +874,9 @@ static const struct phy_ops qusb2_phy_gen_ops = {static const struct of_device_id qusb2_phy_of_match_table[] = { { + .compatible ="qcom,ipq6018-qusb2-phy" , + .data = &ipq6018_phy_cfg, + }, { .compatible ="qcom,ipq8074-qusb2-phy" , .data = &msm8996_phy_cfg, }, {
Signature · 1 line
2.29.2
PATCH 2/3 dt-bindings: phy: qcom, qusb2: document ipq6018 compatible
In reply to Baruch SiachThis compatible string is for the USB PHY on IPQ60xx systems.
--- Documentation/devicetree/bindings/phy/qcom,qusb2-phy.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/phy/qcom,qusb2-phy.yaml +1 -0
@@ -22,6 +22,7 @@ properties: - qcom,msm8996-qusb2-phy - qcom,msm8998-qusb2-phy - qcom,sdm660-qusb2-phy + - qcom,ipq6018-qusb2-phy - items: - enum: - qcom,sc7180-qusb2-phy
Signature · 1 line
2.29.2
PATCH 3/3 arm64: dts: ipq6018: enable USB2 support
In reply to Baruch SiachFrom: Kathiravan T <[email protected]>
[baruch: adjust regs address/size; drop binding updates;
drop unsupported quirk properties]
--- arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts | 8 ++++ arch/arm64/boot/dts/qcom/ipq6018.dtsi | 48 ++++++++++++++++++++ 2 files changed, 56 insertions(+)
arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts +8 -0
@@ -78,3 +78,11 @@ nand@0 { nand-bus-width = <8>; }; }; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +};
arch/arm64/boot/dts/qcom/ipq6018.dtsi +48 -0
54 lines not on this page · raw message
Signature · 1 line
2.29.2
Re: [PATCH 3/3] arm64: dts: ipq6018: enable USB2 support
Quoted 35 lines · Baruch Siach
From: Kathiravan T <[email protected]>
Signed-off-by Kathiravan T <[email protected]>[baruch: adjust regs address/size; drop binding updates;
drop unsupported quirk properties]Signed-off-by Baruch Siach <[email protected]>--- arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts | 8 ++++ arch/arm64/boot/dts/qcom/ipq6018.dtsi | 48 ++++++++++++++++++++ 2 files changed, 56 insertions(+)arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts +8
-0@@ -78,3 +78,11 @@ nand@0 { nand-bus-width = <8>; }; }; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +};arch/arm64/boot/dts/qcom/ipq6018.dtsi +0
-0@@ -524,6 +524,54 @@ qrtr_requests { };
arch/arm64/boot/dts/qcom/ipq6018.dtsi qrtr_requests { · line 534
Quoted 10 lines
arch/arm64/boot/dts/qcom/ipq6018.dtsi +8
-0}; + qusb_phy_1: qusb@59000 { + compatible = "qcom,ipq6018-qusb2-phy"; + reg = <0x0 0x059000 0x0 0x180>; + #phy-cells = <0>; + + clocks = <&gcc GCC_USB1_PHY_CFG_AHB_CLK>, + <&xo>; + clock-names = "cfg_ahb", "ref";
As per the bindings, ref clock should be 19.2MHz where the XO in IPQ60xx is 24MHz. Did the USB enumerated successfully and able to perform read / write operations?
Thanks,
Kathiravan T.
Quoted 43 lines
arch/arm64/boot/dts/qcom/ipq6018.dtsi +40
-0+ + resets = <&gcc GCC_QUSB2_1_PHY_BCR>; + status = "disabled"; + }; + + usb2: usb2@7000000 { + compatible = "qcom,ipq6018-dwc3", "qcom,dwc3"; + reg = <0x0 0x070F8800 0x0 0x400>; + #address-cells = <2>; + #size-cells = <2>; + ranges; + clocks = <&gcc GCC_USB1_MASTER_CLK>, + <&gcc GCC_USB1_SLEEP_CLK>, + <&gcc GCC_USB1_MOCK_UTMI_CLK>; + clock-names = "master", + "sleep", + "mock_utmi"; + + assigned-clocks = <&gcc GCC_USB1_MASTER_CLK>, + <&gcc GCC_USB1_MOCK_UTMI_CLK>; + assigned-clock-rates = <133330000>, + <24000000>; + resets = <&gcc GCC_USB1_BCR>; + status = "disabled"; + + dwc_1: dwc3@7000000 { + compatible = "snps,dwc3"; + reg = <0x0 0x7000000 0x0 0xcd00>; + interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; + phys = <&qusb_phy_1>; + phy-names = "usb2-phy"; + tx-fifo-resize; + snps,is-utmi-l1-suspend; + snps,hird-threshold = /bits/ 8 <0x0>; + snps,dis_u2_susphy_quirk; + snps,dis_u3_susphy_quirk; + dr_mode = "host"; + }; + }; + }; wcss: wcss-smp2p {
Signature · 1 line
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Re: [PATCH 3/3] arm64: dts: ipq6018: enable USB2 support
Hi Kathiravan T,
Thanks for your review.
Quoted 39 lines · Kathiravan T
Quoted 38 lines · Baruch Siach
From: Kathiravan T <[email protected]>
Signed-off-by Kathiravan T <[email protected]>[baruch: adjust regs address/size; drop binding updates;
drop unsupported quirk properties]Signed-off-by Baruch Siach <[email protected]>--- arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts | 8 ++++ arch/arm64/boot/dts/qcom/ipq6018.dtsi | 48 ++++++++++++++++++++ 2 files changed, 56 insertions(+)arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts +8
-0@@ -78,3 +78,11 @@ nand@0 { nand-bus-width = <8>; }; }; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +};arch/arm64/boot/dts/qcom/ipq6018.dtsi +4
-0@@ -524,6 +524,54 @@ qrtr_requests { }; }; + qusb_phy_1: qusb@59000 { + compatible = "qcom,ipq6018-qusb2-phy"; + reg = <0x0 0x059000 0x0 0x180>; + #phy-cells = <0>;
Quoted 8 lines
arch/arm64/boot/dts/qcom/ipq6018.dtsi qrtr_requests { · line 534
Quoted 4 lines
arch/arm64/boot/dts/qcom/ipq6018.dtsi +4
-0+ + clocks = <&gcc GCC_USB1_PHY_CFG_AHB_CLK>, + <&xo>; + clock-names = "cfg_ahb", "ref";As per the bindings, ref clock should be 19.2MHz where the XO in IPQ60xx is 24MHz. Did the USB enumerated successfully and able to perform read / write operations?
I managed to enumerate an Ethernet USB dongle with only this series applied. But then I tested again with USB storage device. That only worked with downstream clock adjust/period patch:
That patch applies cleanly on top of v5.11-rc4.
Is anyone at Codeaurora pushing the dwc3 clock patch upstream? Should I do that?
Thanks,
baruch
Signature · 3 lines
~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- [email protected] - tel: +972.52.368.4656, http://www.tkos.co.il -Re: [PATCH 3/3] arm64: dts: ipq6018: enable USB2 support
Quoted 59 lines · Baruch Siach
Hi Kathiravan T,
Thanks for your review.
Quoted 40 lines · Kathiravan T
Quoted 39 lines · Baruch Siach
From: Kathiravan T <[email protected]>
Signed-off-by Kathiravan T <[email protected]>[baruch: adjust regs address/size; drop binding updates;
drop unsupported quirk properties]Signed-off-by Baruch Siach <[email protected]>--- arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts | 8 ++++ arch/arm64/boot/dts/qcom/ipq6018.dtsi | 48 ++++++++++++++++++++ 2 files changed, 56 insertions(+)arch/arm64/boot/dts/qcom/ipq6018-cp01-c1.dts +8
-0@@ -78,3 +78,11 @@ nand@0 { nand-bus-width = <8>; }; }; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +};arch/arm64/boot/dts/qcom/ipq6018.dtsi +4
-0@@ -524,6 +524,54 @@ qrtr_requests { }; }; + qusb_phy_1: qusb@59000 { + compatible = "qcom,ipq6018-qusb2-phy"; + reg = <0x0 0x059000 0x0 0x180>; + #phy-cells = <0>;Quoted 8 lines
arch/arm64/boot/dts/qcom/ipq6018.dtsi qrtr_requests { · line 534
Quoted 4 lines
arch/arm64/boot/dts/qcom/ipq6018.dtsi +4
-0+ + clocks = <&gcc GCC_USB1_PHY_CFG_AHB_CLK>, + <&xo>; + clock-names = "cfg_ahb", "ref";As per the bindings, ref clock should be 19.2MHz where the XO in IPQ60xx is 24MHz. Did the USB enumerated successfully and able to perform read / write operations?
I managed to enumerate an Ethernet USB dongle with only this series applied. But then I tested again with USB storage device. That only worked with downstream clock adjust/period patch:
Quoted 6 lines
That patch applies cleanly on top of v5.11-rc4.
Is anyone at Codeaurora pushing the dwc3 clock patch upstream? Should I do that?
Sure, please go ahead.
Quoted 3 lines
Thanks,
baruch
Signature · 1 line
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Vinod Koul
maintainerQuoted 6 lines · Baruch Siach
The short series adds support for USB PHY on IPQ60xx based platforms. Tested on CP01 board.
The code is forward-ported from downstream codeaurora kernel at
https://source.codeaurora.org/quic/qsdk/oss/kernel/linux-ipq-5.4/
Applied driver and binding patch, thanks
DT can be picked by Bjorn
Signature · 1 line
~Vinod