[PATCH v4 8/9] spl: starfive: star64: Setup USB fdt fixup function
Minda Chen
minda.chen at starfivetech.com
Thu Aug 29 03:30:57 CEST 2024
Setup star64 USB fdt fixup function. Set dr_mode to host,
and add vbus pin (GPIO25), and set USB 3.0 mode.
the functions can be used by other 7110 board like Milk-V
board.
Signed-off-by: Minda Chen <minda.chen at starfivetech.com>
---
board/starfive/visionfive2/spl.c | 66 ++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/board/starfive/visionfive2/spl.c b/board/starfive/visionfive2/spl.c
index 388a06e4d9..b3034b19a3 100644
--- a/board/starfive/visionfive2/spl.c
+++ b/board/starfive/visionfive2/spl.c
@@ -123,6 +123,69 @@ static const struct starfive_vf2_pro star64_pine64[] = {
"tx-internal-delay-ps", "300"},
};
+static void spl_fdt_fixup_usb_vbus_pin(void *fdt, int pin)
+{
+ int offset, pin_offset;
+
+ offset = fdt_path_offset(fdt, "/soc/pinctrl at 13040000"); /* &sysgpio */
+ fdt_add_subnode(fdt, offset, "usb0-0");
+ fdt_setprop_string(fdt, fdt_path_offset(fdt, "/__symbols__"),
+ "usb_pins", "/soc/pinctrl at 13040000/usb0-0");
+ offset = fdt_path_offset(fdt, "/soc/pinctrl at 13040000/usb0-0");
+
+ /* usb_pins */
+ fdt_create_phandle(fdt, offset);
+ fdt_add_subnode(fdt, offset, "driver-vbus-pin");
+ offset = fdt_path_offset(fdt, "/soc/pinctrl at 13040000/usb0-0/driver-vbus-pin");
+ /* GPIOMUX(25, GPOUT_SYS_USB_DRIVE_VBUS, GPOEN_ENABLE, GPI_NONE) */
+ fdt_setprop_u32(fdt, offset, "pinmux", (0xff07 << 16) | pin);
+ fdt_setprop_empty(fdt, offset, "bias-disable");
+ fdt_setprop_empty(fdt, offset, "input-disable");
+ fdt_setprop_empty(fdt, offset, "input-schmitt-disable");
+ fdt_setprop_u32(fdt, offset, "slew-rate", 0);
+
+ offset = fdt_path_offset(fdt, "/soc/usb at 10100000"); /* &usb0 */
+ fdt_setprop_string(fdt, offset, "pinctrl-names", "default");
+ pin_offset = fdt_path_offset(fdt, "/soc/pinctrl at 13040000/usb0-0");
+ fdt_setprop_u32(fdt, offset, "pinctrl-0",
+ fdt_get_phandle(fdt, pin_offset));
+}
+
+static void spl_fdt_fixup_usb_host(void *fdt)
+{
+ int offset;
+
+ offset = fdt_path_offset(fdt, "/soc/usb at 10100000/usb at 0"); /*&usb_cdns3 */
+ fdt_setprop_string(fdt, offset, "dr_mode", "host");
+}
+
+static void spl_fdt_fixup_set_usb3(void *fdt)
+{
+ int offset, phy_offset;
+
+ /* disable pcie0 */
+ offset = fdt_path_offset(fdt, "/soc/pcie at 2b000000"); /* &pcie0 */
+ fdt_setprop_string(fdt, offset, "status", "disabled");
+
+ offset = fdt_path_offset(fdt, "/soc/phy at 10210000"); /* &pciephy0 */
+ fdt_setprop_u32(fdt, offset, "starfive,sys-syscon", /* syscon */
+ fdt_get_phandle(fdt,
+ fdt_path_offset(fdt, "/soc/sys_syscon at 13030000")));
+ fdt_appendprop_u32(fdt, offset, "starfive,sys-syscon", 0x18); /* append reg offset */
+ fdt_setprop_u32(fdt, offset, "starfive,stg-syscon",
+ fdt_get_phandle(fdt, fdt_path_offset(fdt, "/soc/stg_syscon at 10240000")));
+ /* append reg offset */
+ fdt_appendprop_u32(fdt, offset, "starfive,stg-syscon", 0x148);
+ fdt_appendprop_u32(fdt, offset, "starfive,stg-syscon", 0x1f4);
+
+ offset = fdt_path_offset(fdt, "/soc/usb at 10100000/usb at 0"); /* usb_cdns3 */
+ phy_offset = fdt_path_offset(fdt, "/soc/phy at 10210000"); /* <&pciephy0> */
+ /* append <&pciephy0> */
+ fdt_appendprop_u32(fdt, offset, "phys", fdt_get_phandle(fdt, phy_offset));
+ fdt_setprop(fdt, offset, "phy-names", "cdns3,usb2-phy\0cdns3,usb3-phy",
+ sizeof("cdns3,usb2-phy\0cdns3,usb3-phy"));
+}
+
void spl_fdt_fixup_mars(void *fdt)
{
static const char compat[] = "milkv,mars\0starfive,jh7110";
@@ -335,6 +398,9 @@ void spl_fdt_fixup_star64(void *fdt)
break;
}
}
+ spl_fdt_fixup_usb_host(fdt);
+ spl_fdt_fixup_usb_vbus_pin(fdt, 25);
+ spl_fdt_fixup_set_usb3(fdt);
}
void spl_perform_fixups(struct spl_image_info *spl_image)
--
2.17.1
More information about the U-Boot
mailing list