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.c...@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@13040000"); /* &sysgpio */ + fdt_add_subnode(fdt, offset, "usb0-0"); + fdt_setprop_string(fdt, fdt_path_offset(fdt, "/__symbols__"), + "usb_pins", "/soc/pinctrl@13040000/usb0-0"); + offset = fdt_path_offset(fdt, "/soc/pinctrl@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@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@10100000"); /* &usb0 */ + fdt_setprop_string(fdt, offset, "pinctrl-names", "default"); + pin_offset = fdt_path_offset(fdt, "/soc/pinctrl@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@10100000/usb@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@2b000000"); /* &pcie0 */ + fdt_setprop_string(fdt, offset, "status", "disabled"); + + offset = fdt_path_offset(fdt, "/soc/phy@10210000"); /* &pciephy0 */ + fdt_setprop_u32(fdt, offset, "starfive,sys-syscon", /* syscon */ + fdt_get_phandle(fdt, + fdt_path_offset(fdt, "/soc/sys_syscon@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@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@10100000/usb@0"); /* usb_cdns3 */ + phy_offset = fdt_path_offset(fdt, "/soc/phy@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