git: 9eb30ef4b7a0 - main - riscv: enable Allwinner D1 USB drivers

From: Mitchell Horne <mhorne_at_FreeBSD.org>
Date: Fri, 10 Jan 2025 17:59:45 UTC
The branch main has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=9eb30ef4b7a0ca1ef7bcc871b6391d98b00c259f

commit 9eb30ef4b7a0ca1ef7bcc871b6391d98b00c259f
Author:     Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2025-01-10 17:57:36 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2025-01-10 17:57:36 +0000

    riscv: enable Allwinner D1 USB drivers
    
    Add the generic USB drivers and FDT glue to the build.
    
    Make small tweaks to the aw_usbphy and aw_musb drivers for the Allwinner
    D1.
    
    Reviewed by:    manu
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D48126
---
 sys/arm/allwinner/aw_usbphy.c               | 9 +++++++++
 sys/conf/files.riscv                        | 6 ++++++
 sys/dev/usb/controller/musb_otg_allwinner.c | 5 +++--
 sys/riscv/allwinner/files.allwinner         | 3 +++
 sys/riscv/conf/std.allwinner                | 3 +++
 5 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/sys/arm/allwinner/aw_usbphy.c b/sys/arm/allwinner/aw_usbphy.c
index b0ef7d9da0a9..97c3d2207773 100644
--- a/sys/arm/allwinner/aw_usbphy.c
+++ b/sys/arm/allwinner/aw_usbphy.c
@@ -56,6 +56,7 @@ enum awusbphy_type {
 	AWUSBPHY_TYPE_A64,
 	AWUSBPHY_TYPE_A83T,
 	AWUSBPHY_TYPE_H6,
+	AWUSBPHY_TYPE_D1,
 };
 
 struct aw_usbphy_conf {
@@ -121,6 +122,13 @@ static const struct aw_usbphy_conf h6_usbphy_conf = {
 	.phy0_route = true,
 };
 
+static const struct aw_usbphy_conf d1_usbphy_conf = {
+	.num_phys = 2,
+	.phy_type = AWUSBPHY_TYPE_D1,
+	.pmu_unk1 = true,
+	.phy0_route = true,
+};
+
 static struct ofw_compat_data compat_data[] = {
 	{ "allwinner,sun4i-a10-usb-phy",	(uintptr_t)&a10_usbphy_conf },
 	{ "allwinner,sun5i-a13-usb-phy",	(uintptr_t)&a13_usbphy_conf },
@@ -130,6 +138,7 @@ static struct ofw_compat_data compat_data[] = {
 	{ "allwinner,sun50i-a64-usb-phy",	(uintptr_t)&a64_usbphy_conf },
 	{ "allwinner,sun8i-a83t-usb-phy",	(uintptr_t)&a83t_usbphy_conf },
 	{ "allwinner,sun50i-h6-usb-phy",	(uintptr_t)&h6_usbphy_conf },
+	{ "allwinner,sun20i-d1-usb-phy",	(uintptr_t)&d1_usbphy_conf },
 	{ NULL,					0 }
 };
 
diff --git a/sys/conf/files.riscv b/sys/conf/files.riscv
index 534fe5013c56..514c955181c3 100644
--- a/sys/conf/files.riscv
+++ b/sys/conf/files.riscv
@@ -12,6 +12,12 @@ dev/pci/pci_host_generic.c	optional	pci
 dev/pci/pci_host_generic_fdt.c	optional	pci fdt
 dev/uart/uart_cpu_fdt.c		optional	uart fdt
 dev/uart/uart_dev_lowrisc.c	optional	uart_lowrisc
+dev/usb/controller/generic_ehci.c		optional ehci
+dev/usb/controller/generic_ehci_fdt.c		optional ehci fdt
+dev/usb/controller/generic_ohci.c		optional ohci fdt
+dev/usb/controller/generic_usb_if.m		optional ohci fdt
+dev/usb/controller/generic_xhci.c		optional xhci
+dev/usb/controller/generic_xhci_fdt.c		optional xhci fdt
 dev/vmm/vmm_dev.c		optional	vmm
 dev/vmm/vmm_stat.c		optional	vmm
 dev/xilinx/axi_quad_spi.c	optional	xilinx_spi
diff --git a/sys/dev/usb/controller/musb_otg_allwinner.c b/sys/dev/usb/controller/musb_otg_allwinner.c
index 574e8e712713..781b4d7e33fa 100644
--- a/sys/dev/usb/controller/musb_otg_allwinner.c
+++ b/sys/dev/usb/controller/musb_otg_allwinner.c
@@ -77,7 +77,7 @@
 #if defined(__arm__)
 #define	bs_parent_space(bs)	((bs)->bs_parent)
 typedef bus_space_tag_t	awusb_bs_tag;
-#elif defined(__aarch64__)
+#elif defined(__aarch64__) || defined(__riscv)
 #define	bs_parent_space(bs)	(bs)
 typedef void *		awusb_bs_tag;
 #endif
@@ -89,6 +89,7 @@ static struct ofw_compat_data compat_data[] = {
 	{ "allwinner,sun6i-a31-musb",	AWUSB_OKAY },
 	{ "allwinner,sun8i-a33-musb",	AWUSB_OKAY | AWUSB_NO_CONFDATA },
 	{ "allwinner,sun8i-h3-musb",	AWUSB_OKAY | AWUSB_NO_CONFDATA },
+	{ "allwinner,sun20i-d1-musb",	AWUSB_OKAY | AWUSB_NO_CONFDATA },
 	{ NULL,				0 }
 };
 
@@ -474,7 +475,7 @@ awusbdrd_attach(device_t dev)
 
 #if defined(__arm__)
 	sc->bs.bs_parent = rman_get_bustag(sc->res[0]);
-#elif defined(__aarch64__)
+#elif defined(__aarch64__) || defined(__riscv)
 	sc->bs.bs_cookie = rman_get_bustag(sc->res[0]);
 #endif
 
diff --git a/sys/riscv/allwinner/files.allwinner b/sys/riscv/allwinner/files.allwinner
index f55d883abf57..a87d79dfda2a 100644
--- a/sys/riscv/allwinner/files.allwinner
+++ b/sys/riscv/allwinner/files.allwinner
@@ -3,6 +3,7 @@ arm/allwinner/aw_gpio.c			optional gpio aw_gpio fdt
 arm/allwinner/aw_rtc.c			optional aw_rtc fdt
 arm/allwinner/aw_syscon.c		optional syscon
 arm/allwinner/aw_sid.c			optional aw_sid nvmem
+arm/allwinner/aw_usbphy.c		optional ehci aw_usbphy fdt
 arm/allwinner/aw_wdog.c			optional aw_wdog
 arm/allwinner/if_awg.c			optional awg syscon
 
@@ -18,4 +19,6 @@ dev/clk/allwinner/aw_clk_np.c		optional aw_ccu fdt
 dev/clk/allwinner/aw_clk_prediv_mux.c	optional aw_ccu fdt
 dev/clk/allwinner/ccu_d1.c		optional soc_allwinner_d1 aw_ccu fdt
 
+dev/usb/controller/musb_otg_allwinner.c	optional musb fdt
+
 riscv/allwinner/d1_padconf.c            optional soc_allwinner_d1 aw_gpio fdt
diff --git a/sys/riscv/conf/std.allwinner b/sys/riscv/conf/std.allwinner
index a888e4d5d370..5e7a6c0e0a52 100644
--- a/sys/riscv/conf/std.allwinner
+++ b/sys/riscv/conf/std.allwinner
@@ -9,7 +9,10 @@ device		aw_ccu		# Allwinner clock controller
 device		aw_gpio		# Allwinner GPIO controller
 device		aw_rtc		# Allwinner Real-time Clock
 device		aw_sid		# Allwinner Secure ID EFUSE
+device		aw_usbphy	# Allwinner USB PHY
 device		aw_wdog		# Allwinner Watchdog
 device		awg		# Allwinner EMAC Gigabit Ethernet
 
+device		musb		# Mentor Graphics USB OTG controller
+
 files		"../allwinner/files.allwinner"