[PATCH v1 1/1] arm64: dts: rockchip: Add USB-C support to ROCK 5B
FUKAUMI Naoki
naoki at radxa.com
Tue Dec 10 16:40:13 PST 2024
Hi Sebastian,
Sorry for many emails...
I got random reboot during booting kernel/userland...
Best regards,
--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.
On 12/11/24 09:06, FUKAUMI Naoki wrote:
> Sorry, I forgot to write one thing...
>
> On 12/11/24 01:36, Sebastian Reichel wrote:
>> Add hardware description for the USB-C port in the Radxa Rock 5 Model B.
>> This describes the OHCI, EHCI and XHCI USB parts, but not yet the
>> DisplayPort AltMode (bindings are not yet upstream).
>>
>> The fusb302 node is marked with status "fail", since the board is usually
>> powered through the USB-C port. Handling of errors can result in hard
>> resets, which removed the bus power for some time resulting in a board
>> reset.
>>
>> The main problem is that devices are supposed to interact with the
>> power-supply within 5 seconds after the plug event according to the
>> USB PD specification. This is more or less impossible to achieve when
>> the kernel is the first software communicating with the power-supply.
>>
>> Recent U-Boot (v2025.01) will start doing USB-PD communication, which
>> solves this issue. Upstream U-Boot doing USB-PD communication will also
>> set the fusb302 node status to "okay". That way booting a kernel with
>> the updated DT on an old U-Boot avoids a reset loop.
>>
>> Signed-off-by: Sebastian Reichel <sebastian.reichel at collabora.com>
>
> Tested-by: FUKAUMI Naoki <naoki at radxa.com>
>
> --
> FUKAUMI Naoki
> Radxa Computer (Shenzhen) Co., Ltd.
>
>> ---
>> .../boot/dts/rockchip/rk3588-rock-5b.dts | 121 ++++++++++++++++++
>> 1 file changed, 121 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts b/arch/
>> arm64/boot/dts/rockchip/rk3588-rock-5b.dts
>> index d597112f1d5b..cb5990df6ccb 100644
>> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
>> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
>> @@ -5,6 +5,7 @@
>> #include <dt-bindings/gpio/gpio.h>
>> #include <dt-bindings/leds/common.h>
>> #include <dt-bindings/soc/rockchip,vop2.h>
>> +#include <dt-bindings/usb/pd.h>
>> #include "rk3588.dtsi"
>> / {
>> @@ -84,6 +85,15 @@ rfkill-bt {
>> shutdown-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
>> };
>> + vcc12v_dcin: regulator-vcc12v-dcin {
>> + compatible = "regulator-fixed";
>> + regulator-name = "vcc12v_dcin";
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-min-microvolt = <12000000>;
>> + regulator-max-microvolt = <12000000>;
>> + };
>> +
>> vcc3v3_pcie2x1l0: regulator-vcc3v3-pcie2x1l0 {
>> compatible = "regulator-fixed";
>> enable-active-high;
>> @@ -142,6 +152,7 @@ vcc5v0_sys: regulator-vcc5v0-sys {
>> regulator-boot-on;
>> regulator-min-microvolt = <5000000>;
>> regulator-max-microvolt = <5000000>;
>> + vin-supply = <&vcc12v_dcin>;
>> };
>> vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 {
>> @@ -264,6 +275,67 @@ regulator-state-mem {
>> };
>> };
>> +&i2c4 {
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&i2c4m1_xfer>;
>> + status = "okay";
>> +
>> + usbc0: usb-typec at 22 {
>> + compatible = "fcs,fusb302";
>> + reg = <0x22>;
>> + interrupt-parent = <&gpio3>;
>> + interrupts = <RK_PB4 IRQ_TYPE_LEVEL_LOW>;
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&usbc0_int>;
>> + vbus-supply = <&vcc12v_dcin>;
>> + /*
>> + * When the board is starting to send power-delivery messages
>> + * too late (5 seconds according to the specification), the
>> + * power-supply reacts with a hard-reset. That removes the
>> + * power from VBUS for some time, which resets te whole board.
>> + */
>> + status = "fail";
>> +
>> + usb_con: connector {
>> + compatible = "usb-c-connector";
>> + label = "USB-C";
>> + data-role = "dual";
>> + power-role = "sink";
>> + try-power-role = "sink";
>> + op-sink-microwatt = <1000000>;
>> + sink-pdos =
>> + <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>,
>> + <PDO_VAR(5000, 20000, 5000)>;
>> +
>> + ports {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + port at 0 {
>> + reg = <0>;
>> + usbc0_role_sw: endpoint {
>> + remote-endpoint = <&dwc3_0_role_switch>;
>> + };
>> + };
>> +
>> + port at 1 {
>> + reg = <1>;
>> + usbc0_orien_sw: endpoint {
>> + remote-endpoint =
>> <&usbdp_phy0_orientation_switch>;
>> + };
>> + };
>> +
>> + port at 2 {
>> + reg = <2>;
>> + dp_altmode_mux: endpoint {
>> + remote-endpoint = <&usbdp_phy0_dp_altmode_mux>;
>> + };
>> + };
>> + };
>> + };
>> + };
>> +};
>> +
>> &i2c6 {
>> status = "okay";
>> @@ -423,6 +495,10 @@ usb {
>> vcc5v0_host_en: vcc5v0-host-en {
>> rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
>> };
>> +
>> + usbc0_int: usbc0-int {
>> + rockchip,pins = <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
>> + };
>> };
>> };
>> @@ -835,6 +911,14 @@ &uart2 {
>> status = "okay";
>> };
>> +&u2phy0 {
>> + status = "okay";
>> +};
>> +
>> +&u2phy0_otg {
>> + status = "okay";
>> +};
>> +
>> &u2phy1 {
>> status = "okay";
>> };
>> @@ -866,6 +950,29 @@ &usbdp_phy1 {
>> status = "okay";
>> };
>> +&usbdp_phy0 {
>> + mode-switch;
>> + orientation-switch;
>> + sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
>> + sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
>> + status = "okay";
>> +
>> + port {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + usbdp_phy0_orientation_switch: endpoint at 0 {
>> + reg = <0>;
>> + remote-endpoint = <&usbc0_orien_sw>;
>> + };
>> +
>> + usbdp_phy0_dp_altmode_mux: endpoint at 1 {
>> + reg = <1>;
>> + remote-endpoint = <&dp_altmode_mux>;
>> + };
>> + };
>> +};
>> +
>> &usb_host0_ehci {
>> status = "okay";
>> };
>> @@ -874,6 +981,20 @@ &usb_host0_ohci {
>> status = "okay";
>> };
>> +&usb_host0_xhci {
>> + usb-role-switch;
>> + status = "okay";
>> +
>> + port {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + dwc3_0_role_switch: endpoint {
>> + remote-endpoint = <&usbc0_role_sw>;
>> + };
>> + };
>> +};
>> +
>> &usb_host1_ehci {
>> status = "okay";
>> };
>
More information about the linux-arm-kernel
mailing list