On 06/02/2024 19:34, Andrew Davis wrote: > On 2/6/24 6:30 AM, Roger Quadros wrote: >> >> >> On 05/02/2024 19:34, Andrew Davis wrote: >>> On 2/5/24 7:59 AM, Roger Quadros wrote: >>>> There are two USB instances available on the am62p5 starter kit. Include >>>> and enable them for use on the board. >>>> >>>> Signed-off-by: Vignesh Raghavendra <vigneshr@xxxxxx> >>>> Signed-off-by: Roger Quadros <rogerq@xxxxxxxxxx> >>>> --- >>>> >>>> Notes: >>>> Changelog: >>>> v4 - no change >>>> v3 - no change >>>> https://lore.kernel.org/all/20240201120332.4811-4-rogerq@xxxxxxxxxx/ >>>> v2: >>>> - added USB PHY CTRL node changes here >>>> - changed USB wrapper node names to usb@ >>>> - changed Type-C chip node name to usb-power-control@ >>>> >>>> arch/arm64/boot/dts/ti/k3-am62p-main.dtsi | 46 ++++++++++++++ >>>> arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi | 10 +++ >>>> arch/arm64/boot/dts/ti/k3-am62p5-sk.dts | 67 +++++++++++++++++++++ >>>> 3 files changed, 123 insertions(+) >>>> >>>> diff --git a/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi >>>> index 4c51bae06b57..17d28390d587 100644 >>>> --- a/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi >>>> +++ b/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi >>>> @@ -560,6 +560,52 @@ sdhci2: mmc@fa20000 { >>>> status = "disabled"; >>>> }; >>>> + usbss0: usb@f900000 { >>>> + compatible = "ti,am62-usb"; >>>> + reg = <0x00 0x0f900000 0x00 0x800>; >>>> + clocks = <&k3_clks 161 3>; >>>> + clock-names = "ref"; >>>> + ti,syscon-phy-pll-refclk = <&usb0_phy_ctrl 0x0>; >>>> + #address-cells = <2>; >>>> + #size-cells = <2>; >>>> + power-domains = <&k3_pds 178 TI_SCI_PD_EXCLUSIVE>; >>>> + ranges; >>>> + status = "disabled"; >>>> + >>>> + usb0: usb@31000000 { >>>> + compatible = "snps,dwc3"; >>>> + reg = <0x00 0x31000000 0x00 0x50000>; >>>> + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>, /* irq.0 */ >>>> + <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; /* irq.0 */ >>>> + interrupt-names = "host", "peripheral"; >>>> + maximum-speed = "high-speed"; >>>> + dr_mode = "otg"; >>>> + }; >>>> + }; >>>> + >>>> + usbss1: usb@f910000 { >>>> + compatible = "ti,am62-usb"; >>>> + reg = <0x00 0x0f910000 0x00 0x800>; >>>> + clocks = <&k3_clks 162 3>; >>>> + clock-names = "ref"; >>>> + ti,syscon-phy-pll-refclk = <&usb1_phy_ctrl 0x0>; >>>> + #address-cells = <2>; >>>> + #size-cells = <2>; >>>> + power-domains = <&k3_pds 179 TI_SCI_PD_EXCLUSIVE>; >>>> + ranges; >>>> + status = "disabled"; >>>> + >>>> + usb1: usb@31100000 { >>>> + compatible = "snps,dwc3"; >>>> + reg = <0x00 0x31100000 0x00 0x50000>; >>>> + interrupts = <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>, /* irq.0 */ >>>> + <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>; /* irq.0 */ >>>> + interrupt-names = "host", "peripheral"; >>>> + maximum-speed = "high-speed"; >>>> + dr_mode = "otg"; >>>> + }; >>>> + }; >>>> + >>>> fss: bus@fc00000 { >>>> compatible = "simple-bus"; >>>> reg = <0x00 0x0fc00000 0x00 0x70000>; >>>> diff --git a/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi >>>> index 19f42b39394e..00dd38b02a52 100644 >>>> --- a/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi >>>> +++ b/arch/arm64/boot/dts/ti/k3-am62p-wakeup.dtsi >>>> @@ -18,6 +18,16 @@ chipid: chipid@14 { >>>> reg = <0x14 0x4>; >>>> bootph-all; >>>> }; >>>> + >>>> + usb0_phy_ctrl: syscon@4008 { >>>> + compatible = "ti,am62-usb-phy-ctrl", "syscon"; >>>> + reg = <0x4008 0x4>; >>>> + }; >>>> + >>>> + usb1_phy_ctrl: syscon@4018 { >>>> + compatible = "ti,am62-usb-phy-ctrl", "syscon"; >>>> + reg = <0x4018 0x4>; >>>> + }; >>>> }; >>>> wkup_uart0: serial@2b300000 { >>>> diff --git a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts >>>> index 1773c05f752c..80be56c0a4e0 100644 >>>> --- a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts >>>> +++ b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts >>>> @@ -27,6 +27,8 @@ aliases { >>>> spi0 = &ospi0; >>>> ethernet0 = &cpsw_port1; >>>> ethernet1 = &cpsw_port2; >>>> + usb0 = &usb0; >>>> + usb1 = &usb1; >>>> }; >>>> chosen { >>>> @@ -297,6 +299,12 @@ AM62PX_IOPAD(0x01b0, PIN_OUTPUT, 2) /* (G20) MCASP0_ACLKR.UART1_TXD */ >>>> bootph-all; >>>> }; >>>> + main_usb1_pins_default: main-usb1-default-pins { >>>> + pinctrl-single,pins = < >>>> + AM62PX_IOPAD(0x0258, PIN_INPUT, 0) /* (G21) USB1_DRVVBUS */ >>>> + >; >>>> + }; >>>> + >>>> main_wlirq_pins_default: main-wlirq-default-pins { >>>> pinctrl-single,pins = < >>>> AM62PX_IOPAD(0x0128, PIN_INPUT, 7) /* (K25) MMC2_SDWP.GPIO0_72 */ >>>> @@ -340,6 +348,36 @@ AM62PX_IOPAD(0x0124, PIN_INPUT, 7) /* (J25) MMC2_SDCD.GPIO0_71 */ >>>> }; >>>> }; >>>> +&main_i2c0 { >>>> + status = "okay"; >>>> + pinctrl-names = "default"; >>>> + pinctrl-0 = <&main_i2c0_pins_default>; >>>> + clock-frequency = <400000>; >>>> + >>>> + typec_pd0: usb-power-controller@3f { >>>> + compatible = "ti,tps6598x"; >>>> + reg = <0x3f>; >>>> + >>>> + connector { >>>> + compatible = "usb-c-connector"; >>>> + label = "USB-C"; >>>> + self-powered; >>>> + data-role = "dual"; >>>> + power-role = "sink"; >>>> + ports { >>>> + #address-cells = <1>; >>>> + #size-cells = <0>; >>>> + port@0 { >>>> + reg = <0>; >>>> + usb_con_hs: endpoint { >>>> + remote-endpoint = <&usb0_hs_ep>; >>>> + }; >>>> + }; >>>> + }; >>>> + }; >>>> + }; >>>> +}; >>>> + >>>> &main_i2c1 { >>>> status = "okay"; >>>> pinctrl-names = "default"; >>>> @@ -460,6 +498,35 @@ cpsw3g_phy1: ethernet-phy@1 { >>>> }; >>>> }; >>>> +&usbss0 { >>>> + status = "okay"; >>>> + ti,vbus-divider; >>>> +}; >>>> + >>>> +&usbss1 { >>>> + status = "okay"; >>>> + ti,vbus-divider; >>>> +}; >>>> + >>>> +&usb0 { >>>> + usb-role-switch; >>>> + #address-cells = <1>; >>>> + #size-cells = <0>; >>>> + >>>> + port@0 { >>>> + reg = <0>; >>>> + usb0_hs_ep: endpoint { >>>> + remote-endpoint = <&usb_con_hs>; >>>> + }; >>>> + }; >>>> +}; >>>> + >>>> +&usb1 { >>>> + dr_mode = "host"; >>>> + pinctrl-names = "default"; >>>> + pinctrl-0 = <&main_usb1_pins_default>; >>> >>> I'm not super familiar with USB, but I see this pinmux for the >>> "DRVVBUS" pin is usually added the the parent USB subsystem node (usbss). >>> Does this pin belong to the subsystem or the specific USB instance? >>> >> There is only 1 USB instance per USB sub-system. >> The "DRVVBUS" pin is a control signal to enable the VBUS regulator >> while in host mode. >> >> Just probing the usbss1 driver has no use of "DRVVBUS". >> I think usb1 is the right place as it is used there. >> > > Seems reasonable, so if there ever was more than 1 instance > per sub-system, each instance would need its own pin? Yes. > > We should move these pinctrl to the instance node in the other > dts files at some point then. > > Reviewed-by: Andrew Davis <afd@xxxxxx> Thanks! > >>> Andrew >>> >>>> +}; >>>> + >>>> &mcasp1 { >>>> status = "okay"; >>>> #sound-dai-cells = <0>; >> -- cheers, -roger