summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2026-08-13 11:29:59 -0600
committerTom Rini <trini@konsulko.com>2026-08-13 11:29:59 -0600
commite50f87c650f87866ab8ca19d0695236a5936d648 (patch)
treef48a1660fc06ea9aaf170981b72786e5171663d7
parent5a92645e1f9020d24d19e03fff2ae63f30080770 (diff)
parentf75a3d96e1f33c1b8737018843b7bd5fc207b9d4 (diff)
downloadu-boot-e50f87c650f87866ab8ca19d0695236a5936d648.tar.gz
u-boot-e50f87c650f87866ab8ca19d0695236a5936d648.zip
Merge tag 'u-boot-rockchip-2027.01-20260813' of https://git.u-boot-project.org/u-boot/custodians/u-boot-rockchip into next
- Drop redundant OTP nodes from RK3528/RK356x since 7.1 DTS sync, - Enable USB on RK3528, - Add support for another SPI chip on Radxa Rock 4D, - Fix fractional PLLs on RK3588/RK3576,
-rw-r--r--arch/arm/dts/rk3528-generic.dts18
-rw-r--r--arch/arm/dts/rk3528-u-boot.dtsi5
-rw-r--r--arch/arm/dts/rk356x-u-boot.dtsi5
-rw-r--r--arch/arm/include/asm/arch-rockchip/clock.h8
-rw-r--r--configs/generic-rk3528_defconfig10
-rw-r--r--configs/rock-4d-rk3576_defconfig1
-rw-r--r--drivers/clk/rockchip/clk_pll.c86
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528-armsom-sige1.dts25
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528-nanopi-zero2.dts29
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528-radxa-e20c.dts60
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528-rock-2.dtsi17
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528-rock-2a.dts11
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528-rock-2f.dts12
-rw-r--r--dts/upstream/src/arm64/rockchip/rk3528.dtsi88
14 files changed, 311 insertions, 64 deletions
diff --git a/arch/arm/dts/rk3528-generic.dts b/arch/arm/dts/rk3528-generic.dts
index 637ca03325e..34d614452ec 100644
--- a/arch/arm/dts/rk3528-generic.dts
+++ b/arch/arm/dts/rk3528-generic.dts
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
- * Minimal generic DT for RK3528 with eMMC and SD-card enabled
+ * Minimal generic DT for RK3528 with eMMC, SD-card and USB OTG enabled
*/
/dts-v1/;
@@ -45,3 +45,19 @@
pinctrl-0 = <&uart0m0_xfer>;
status = "okay";
};
+
+&usb_host0_xhci {
+ dr_mode = "peripheral";
+ maximum-speed = "high-speed";
+ phys = <&usb2phy_otg>;
+ phy-names = "usb2-phy";
+ status = "okay";
+};
+
+&usb2phy {
+ status = "okay";
+};
+
+&usb2phy_otg {
+ status = "okay";
+};
diff --git a/arch/arm/dts/rk3528-u-boot.dtsi b/arch/arm/dts/rk3528-u-boot.dtsi
index 31345df6295..3126fb4cc8f 100644
--- a/arch/arm/dts/rk3528-u-boot.dtsi
+++ b/arch/arm/dts/rk3528-u-boot.dtsi
@@ -22,11 +22,6 @@
compatible = "rockchip,rkrng";
reg = <0x0 0xffc50000 0x0 0x200>;
};
-
- otp: efuse@ffce0000 {
- compatible = "rockchip,rk3528-otp";
- reg = <0x0 0xffce0000 0x0 0x4000>;
- };
};
};
diff --git a/arch/arm/dts/rk356x-u-boot.dtsi b/arch/arm/dts/rk356x-u-boot.dtsi
index d09dab35b31..4fd297cc02d 100644
--- a/arch/arm/dts/rk356x-u-boot.dtsi
+++ b/arch/arm/dts/rk356x-u-boot.dtsi
@@ -20,11 +20,6 @@
compatible = "rockchip,rk3568-dmc";
bootph-all;
};
-
- otp: efuse@fe38c000 {
- compatible = "rockchip,rk3568-otp";
- reg = <0x0 0xfe38c000 0x0 0x4000>;
- };
};
#ifdef CONFIG_ROCKCHIP_SPI_IMAGE
diff --git a/arch/arm/include/asm/arch-rockchip/clock.h b/arch/arm/include/asm/arch-rockchip/clock.h
index 95b08bfd046..8d3819778eb 100644
--- a/arch/arm/include/asm/arch-rockchip/clock.h
+++ b/arch/arm/include/asm/arch-rockchip/clock.h
@@ -101,10 +101,10 @@ struct rockchip_pll_rate_table {
unsigned int dsmpd;
unsigned int frac;
/* for RK3588 */
- unsigned int m;
- unsigned int p;
- unsigned int s;
- unsigned int k;
+ unsigned int m; /* main divider, 10 bit unsigned */
+ unsigned int p; /* pre-divider, 6 bit unsigned */
+ unsigned int s; /* scaler, 3 bit unsigned */
+ s16 k; /* fractional part, 16 bit two's complement */
};
enum rockchip_pll_type {
diff --git a/configs/generic-rk3528_defconfig b/configs/generic-rk3528_defconfig
index c989263e014..130aa124298 100644
--- a/configs/generic-rk3528_defconfig
+++ b/configs/generic-rk3528_defconfig
@@ -19,6 +19,8 @@ CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_MISC=y
CONFIG_CMD_MMC=y
+CONFIG_CMD_ROCKUSB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_RNG=y
# CONFIG_SPL_DOS_PARTITION is not set
@@ -26,6 +28,7 @@ CONFIG_CMD_RNG=y
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_NO_NET=y
# CONFIG_ADC is not set
+# CONFIG_USB_FUNCTION_FASTBOOT is not set
CONFIG_ROCKCHIP_GPIO=y
CONFIG_SUPPORT_EMMC_RPMB=y
CONFIG_MMC_DW=y
@@ -33,7 +36,14 @@ CONFIG_MMC_DW_ROCKCHIP=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_SDMA=y
CONFIG_MMC_SDHCI_ROCKCHIP=y
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
CONFIG_BAUDRATE=1500000
CONFIG_DEBUG_UART_SHIFT=2
CONFIG_SYS_NS16550_MEM32=y
+CONFIG_USB=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_USB_FUNCTION_ROCKUSB=y
CONFIG_ERRNO_STR=y
diff --git a/configs/rock-4d-rk3576_defconfig b/configs/rock-4d-rk3576_defconfig
index 7228a9d879a..93faf09962c 100644
--- a/configs/rock-4d-rk3576_defconfig
+++ b/configs/rock-4d-rk3576_defconfig
@@ -49,6 +49,7 @@ CONFIG_MMC_DW=y
CONFIG_MMC_DW_ROCKCHIP=y
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SPI_FLASH_XMC=y
CONFIG_DWC_ETH_QOS=y
CONFIG_DWC_ETH_QOS_ROCKCHIP=y
CONFIG_PHY_REALTEK=y
diff --git a/drivers/clk/rockchip/clk_pll.c b/drivers/clk/rockchip/clk_pll.c
index 9dec40b1fe8..f677525bba2 100644
--- a/drivers/clk/rockchip/clk_pll.c
+++ b/drivers/clk/rockchip/clk_pll.c
@@ -11,6 +11,7 @@
#include <asm/arch-rockchip/hardware.h>
#include <div64.h>
#include <linux/delay.h>
+#include <linux/math64.h>
static struct rockchip_pll_rate_table rockchip_auto_table;
@@ -166,34 +167,43 @@ rockchip_pll_clk_set_by_auto(ulong fin_hz,
return rate_table;
}
-static u32
-rockchip_rk3588_pll_k_get(u32 m, u32 p, u32 s, u64 fin_hz, u64 fvco)
+/*
+ * 2250 MHz <= Fvco <= 4500 MHz
+ * For Fvco > 3 GHz: period jitter +-1% frac PLL, +-0.75% int PLL
+ * For Fvco < 3 GHz: period jitter +-2% frac PLL, +-1.50% int PLL
+ * Fvco = ((m + k / 65536) * Fin) / p
+ * Fout = ((m + k / 65536) * Fin) / (p * 2^s)
+ * Fref = Fin / p
+ * -32768 <= k <= 32767 (only available in frac PLLs, not int PLLs)
+ */
+static void
+rockchip_rk3588_pll_k_get(struct rockchip_pll_rate_table *rate_table, u64 fref, u64 fvco)
{
- u64 fref, fout, ffrac;
- u32 k = 0;
+ u64 ffrac;
+ int k;
- fref = fin_hz / p;
- ffrac = fvco - (m * fref);
- fout = ffrac * 65536;
- k = fout / fref;
+ ffrac = fvco - (rate_table->m) * fref;
+ k = ffrac * 65536 / fref;
if (k > 32767) {
- fref = fin_hz / p;
- ffrac = ((m + 1) * fref) - fvco;
- fout = ffrac * 65536;
- k = ((fout * 10 / fref) + 7) / 10;
- if (k > 32767)
- k = 0;
- else
- k = ~k + 1;
+ /*
+ * The requested rate is closer to the next integer multiplier
+ * m, so pick it and use a negative fractional coefficient k
+ */
+ rate_table->m += 1;
+ ffrac = (rate_table->m) * fref - fvco;
+ /*
+ * Round up to avoid overshooting requested rate for negative k
+ */
+ k = -(int)DIV64_U64_ROUND_UP(ffrac * 65536, fref);
}
- return k;
+ rate_table->k = k;
}
static struct rockchip_pll_rate_table *
rockchip_rk3588_pll_frac_by_auto(unsigned long fin_hz, unsigned long fout_hz)
{
struct rockchip_pll_rate_table *rate_table = &rockchip_auto_table;
- u32 p, m, s, k;
+ u32 p, m, s;
u64 fvco;
for (s = 0; s <= 6; s++) {
@@ -204,18 +214,13 @@ rockchip_rk3588_pll_frac_by_auto(unsigned long fin_hz, unsigned long fout_hz)
for (m = 64; m <= 1023; m++) {
if ((fvco >= m * fin_hz / p) &&
(fvco < (m + 1) * fin_hz / p)) {
- k = rockchip_rk3588_pll_k_get(m, p, s,
- fin_hz,
- fvco);
- if (!k)
- continue;
rate_table->p = p;
+ rate_table->m = m;
rate_table->s = s;
- rate_table->k = k;
- if (k > 32767)
- rate_table->m = m + 1;
- else
- rate_table->m = m;
+
+ rockchip_rk3588_pll_k_get(rate_table,
+ fin_hz / p,
+ fvco);
return rate_table;
}
}
@@ -556,9 +561,10 @@ static int rk3588_pll_set_rate(struct rockchip_pll_clock *pll,
static ulong rk3588_pll_get_rate(struct rockchip_pll_clock *pll,
void __iomem *base, ulong pll_id)
{
- u32 m, p, s, k;
+ u32 m, p, s;
u32 con = 0, shift, mode;
- u64 rate, postdiv;
+ u64 rate;
+ s16 k;
con = readl(base + pll->mode_offset);
shift = pll->mode_shift;
@@ -585,25 +591,7 @@ static ulong rk3588_pll_get_rate(struct rockchip_pll_clock *pll,
rate = OSC_HZ / p;
rate *= m;
- if (k & BIT(15)) {
- /* fractional mode */
- u64 frac_rate64;
-
- k = (~(k - 1)) & RK3588_PLLCON2_K_MASK;
- frac_rate64 = OSC_HZ * k;
- postdiv = p;
- postdiv *= 65536;
- do_div(frac_rate64, postdiv);
- rate -= frac_rate64;
- } else {
- /* fractional mode */
- u64 frac_rate64 = OSC_HZ * k;
-
- postdiv = p;
- postdiv *= 65536;
- do_div(frac_rate64, postdiv);
- rate += frac_rate64;
- }
+ rate += div_s64((s64)OSC_HZ * k, p * 65536);
rate = rate >> s;
return rate;
case RKCLK_PLL_MODE_DEEP:
diff --git a/dts/upstream/src/arm64/rockchip/rk3528-armsom-sige1.dts b/dts/upstream/src/arm64/rockchip/rk3528-armsom-sige1.dts
index c41af8fc0c8..ee4183fb980 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528-armsom-sige1.dts
+++ b/dts/upstream/src/arm64/rockchip/rk3528-armsom-sige1.dts
@@ -480,3 +480,28 @@
vddio-supply = <&vcc_1v8>;
};
};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_xhci {
+ extcon = <&usb2phy>;
+ maximum-speed = "high-speed";
+ phys = <&usb2phy_otg>;
+ phy-names = "usb2-phy";
+ status = "okay";
+};
+
+&usb2phy {
+ status = "okay";
+};
+
+&usb2phy_host {
+ status = "okay";
+};
+
+&usb2phy_otg {
+ phy-supply = <&vcc5v0_usb_otg>;
+ status = "okay";
+};
diff --git a/dts/upstream/src/arm64/rockchip/rk3528-nanopi-zero2.dts b/dts/upstream/src/arm64/rockchip/rk3528-nanopi-zero2.dts
index 9f683033c5f..97d85124d21 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528-nanopi-zero2.dts
+++ b/dts/upstream/src/arm64/rockchip/rk3528-nanopi-zero2.dts
@@ -338,3 +338,32 @@
pinctrl-0 = <&uart0m0_xfer>;
status = "okay";
};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+&usb_host0_xhci {
+ extcon = <&usb2phy>;
+ maximum-speed = "high-speed";
+ phys = <&usb2phy_otg>;
+ phy-names = "usb2-phy";
+ status = "okay";
+};
+
+&usb2phy {
+ status = "okay";
+};
+
+&usb2phy_host {
+ phy-supply = <&usb2_host_5v>;
+ status = "okay";
+};
+
+&usb2phy_otg {
+ status = "okay";
+};
diff --git a/dts/upstream/src/arm64/rockchip/rk3528-radxa-e20c.dts b/dts/upstream/src/arm64/rockchip/rk3528-radxa-e20c.dts
index b3245275615..f872b8d20eb 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528-radxa-e20c.dts
+++ b/dts/upstream/src/arm64/rockchip/rk3528-radxa-e20c.dts
@@ -134,6 +134,18 @@
regulator-max-microvolt = <5000000>;
};
+ vcc5v0_usb20: regulator-5v0-vcc-usb20 {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpios = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&usb_host_en>;
+ regulator-name = "vcc5v0_usb20";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ vin-supply = <&vcc5v0_sys>;
+ };
+
vccio_sd: regulator-vccio-sd {
compatible = "regulator-gpio";
gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
@@ -273,6 +285,12 @@
rockchip,pins = <4 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
+
+ usb {
+ usb_host_en: usb-host-en {
+ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
};
&pwm1 {
@@ -320,3 +338,45 @@
pinctrl-0 = <&uart0m0_xfer>;
status = "okay";
};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+/*
+ * The usb controller can only work in peripheral mode, as it is
+ * connected to one of the ports of an outward-facing usb hub.
+ *
+ * type_c-port (hub-input)
+ * |
+ * usb-hub
+ * | |
+ * uart-usb usb-host0
+ * |
+ * uart0
+ */
+&usb_host0_xhci {
+ dr_mode = "peripheral";
+ extcon = <&usb2phy>;
+ maximum-speed = "high-speed";
+ phys = <&usb2phy_otg>;
+ phy-names = "usb2-phy";
+ status = "okay";
+};
+
+&usb2phy {
+ status = "okay";
+};
+
+&usb2phy_host {
+ phy-supply = <&vcc5v0_usb20>;
+ status = "okay";
+};
+
+&usb2phy_otg {
+ status = "okay";
+};
diff --git a/dts/upstream/src/arm64/rockchip/rk3528-rock-2.dtsi b/dts/upstream/src/arm64/rockchip/rk3528-rock-2.dtsi
index aedc7ee9ee4..501a91f4c23 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528-rock-2.dtsi
+++ b/dts/upstream/src/arm64/rockchip/rk3528-rock-2.dtsi
@@ -166,6 +166,10 @@
};
};
+&combphy {
+ status = "okay";
+};
+
&cpu0 {
cpu-supply = <&vdd_arm>;
};
@@ -291,3 +295,16 @@
pinctrl-0 = <&uart0m0_xfer>;
status = "okay";
};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb2phy {
+ status = "okay";
+};
+
+&usb2phy_host {
+ phy-supply = <&vcc5v0_usb20>;
+ status = "okay";
+};
diff --git a/dts/upstream/src/arm64/rockchip/rk3528-rock-2a.dts b/dts/upstream/src/arm64/rockchip/rk3528-rock-2a.dts
index 0b696d49b71..5e17ec2758d 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528-rock-2a.dts
+++ b/dts/upstream/src/arm64/rockchip/rk3528-rock-2a.dts
@@ -79,3 +79,14 @@
};
};
};
+
+&usb_host0_xhci {
+ dr_mode = "host";
+ extcon = <&usb2phy>;
+ status = "okay";
+};
+
+&usb2phy_otg {
+ phy-supply = <&vcc5v0_usb30_otg>;
+ status = "okay";
+};
diff --git a/dts/upstream/src/arm64/rockchip/rk3528-rock-2f.dts b/dts/upstream/src/arm64/rockchip/rk3528-rock-2f.dts
index 3e2b9b685cb..f2b021ff504 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528-rock-2f.dts
+++ b/dts/upstream/src/arm64/rockchip/rk3528-rock-2f.dts
@@ -8,3 +8,15 @@
model = "Radxa ROCK 2F";
compatible = "radxa,rock-2f", "rockchip,rk3528";
};
+
+&usb_host0_xhci {
+ extcon = <&usb2phy>;
+ maximum-speed = "high-speed";
+ phys = <&usb2phy_otg>;
+ phy-names = "usb2-phy";
+ status = "okay";
+};
+
+&usb2phy_otg {
+ status = "okay";
+};
diff --git a/dts/upstream/src/arm64/rockchip/rk3528.dtsi b/dts/upstream/src/arm64/rockchip/rk3528.dtsi
index 806b8109f67..03cd00f88db 100644
--- a/dts/upstream/src/arm64/rockchip/rk3528.dtsi
+++ b/dts/upstream/src/arm64/rockchip/rk3528.dtsi
@@ -336,6 +336,33 @@
};
};
+ usb_host0_xhci: usb@fe500000 {
+ compatible = "rockchip,rk3528-dwc3", "snps,dwc3";
+ reg = <0x0 0xfe500000 0x0 0x400000>;
+ clocks = <&cru CLK_REF_USB3OTG>,
+ <&cru CLK_SUSPEND_USB3OTG>,
+ <&cru ACLK_USB3OTG>;
+ clock-names = "ref_clk", "suspend_clk", "bus_clk";
+ interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+ power-domains = <&power RK3528_PD_VPU>;
+ resets = <&cru SRST_A_USB3OTG>;
+ dr_mode = "otg";
+ phys = <&usb2phy_otg>, <&combphy PHY_TYPE_USB3>;
+ phy-names = "usb2-phy", "usb3-phy";
+ phy_type = "utmi_wide";
+ snps,dis_enblslpm_quirk;
+ snps,dis_rxdet_inp3_quirk;
+ snps,dis-del-phy-power-chg-quirk;
+ snps,dis-tx-ipgap-linecheck-quirk;
+ snps,dis-u1-entry-quirk;
+ snps,dis-u2-entry-quirk;
+ snps,dis-u2-freeclk-exists-quirk;
+ snps,dis_u2_susphy_quirk;
+ snps,parkmode-disable-hs-quirk;
+ snps,parkmode-disable-ss-quirk;
+ status = "disabled";
+ };
+
gic: interrupt-controller@fed01000 {
compatible = "arm,gic-400";
reg = <0x0 0xfed01000 0 0x1000>,
@@ -349,6 +376,30 @@
#interrupt-cells = <3>;
};
+ usb_host0_ehci: usb@ff100000 {
+ compatible = "generic-ehci";
+ reg = <0x0 0xff100000 0x0 0x40000>;
+ clocks = <&cru HCLK_USBHOST>, <&cru HCLK_USBHOST_ARB>,
+ <&usb2phy>;
+ interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2phy_host>;
+ phy-names = "usb";
+ power-domains = <&power RK3528_PD_VO>;
+ status = "disabled";
+ };
+
+ usb_host0_ohci: usb@ff140000 {
+ compatible = "generic-ohci";
+ reg = <0x0 0xff140000 0x0 0x40000>;
+ clocks = <&cru HCLK_USBHOST>, <&cru HCLK_USBHOST_ARB>,
+ <&usb2phy>;
+ interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2phy_host>;
+ phy-names = "usb";
+ power-domains = <&power RK3528_PD_VO>;
+ status = "disabled";
+ };
+
qos_crypto_a: qos@ff200000 {
compatible = "rockchip,rk3528-qos", "syscon";
reg = <0x0 0xff200000 0x0 0x20>;
@@ -983,6 +1034,14 @@
status = "disabled";
};
+ wdt: watchdog@ffac0000 {
+ compatible = "rockchip,rk3528-wdt", "snps,dw-wdt";
+ reg = <0x0 0xffac0000 0x0 0x100>;
+ clocks = <&cru TCLK_WDT_NS>, <&cru PCLK_WDT_NS>;
+ clock-names = "tclk", "pclk";
+ interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
saradc: adc@ffae0000 {
compatible = "rockchip,rk3528-saradc";
reg = <0x0 0xffae0000 0x0 0x10000>;
@@ -1273,6 +1332,35 @@
rockchip,pipe-phy-grf = <&pipe_phy_grf>;
status = "disabled";
};
+
+ usb2phy: usb2phy@ffdf0000 {
+ compatible = "rockchip,rk3528-usb2phy";
+ reg = <0x0 0xffdf0000 0x0 0x10000>;
+ clocks = <&cru CLK_REF_USBPHY>, <&cru PCLK_USBPHY>;
+ clock-names = "phyclk", "pclk";
+ #clock-cells = <0>;
+ clock-output-names = "clk_usbphy_480m";
+ power-domains = <&power RK3528_PD_VO>;
+ rockchip,usbgrf = <&vo_grf>;
+ status = "disabled";
+
+ usb2phy_otg: otg-port {
+ interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "otg-bvalid", "otg-id",
+ "linestate";
+ #phy-cells = <0>;
+ status = "disabled";
+ };
+
+ usb2phy_host: host-port {
+ interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "linestate";
+ #phy-cells = <0>;
+ status = "disabled";
+ };
+ };
};
};