summaryrefslogtreecommitdiff
path: root/components/drivers
diff options
context:
space:
mode:
authorzhugengyu <[email protected]>2024-08-28 10:06:13 +0800
committerGitHub <[email protected]>2024-08-27 22:06:13 -0400
commitb9f4daa97ad5bf68646b55a5abcce79e117de88e (patch)
tree85154191f80c8d6bd99a0976e179ba7d98b08296 /components/drivers
parent66738d71daf8fbe126d71eda55cfd269b0b88d12 (diff)
[BSP][Phytium] add support for mainbranch cherryusb (xhci host + pusb2 device/host)
Diffstat (limited to 'components/drivers')
-rw-r--r--components/drivers/usb/cherryusb/SConscript2
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/README.md66
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_hardfp.abin0 -> 171332 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_crypto_neon.abin0 -> 171328 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_neon.abin0 -> 325436 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a64.abin0 -> 141528 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_hardfp.abin0 -> 923220 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_crypto_neon.abin0 -> 923192 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_neon.abin0 -> 328504 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a64.abin0 -> 1179500 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_config.h265
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_dc_glue_phytium.c89
-rw-r--r--components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_hc_glue_phytium.c109
-rw-r--r--components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_hardfp.abin0 -> 52784 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_crypto_neon.abin0 -> 73868 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_neon.abin0 -> 104852 bytes
-rw-r--r--components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a64.abin0 -> 62300 bytes
17 files changed, 530 insertions, 1 deletions
diff --git a/components/drivers/usb/cherryusb/SConscript b/components/drivers/usb/cherryusb/SConscript
index 8ae7d216b5..deec7435cb 100644
--- a/components/drivers/usb/cherryusb/SConscript
+++ b/components/drivers/usb/cherryusb/SConscript
@@ -255,7 +255,7 @@ if GetDepend(['RT_CHERRYUSB_HOST']):
src += Glob('platform/rtthread/usb_msh.c')
src += Glob('platform/rtthread/usb_check.c')
-group = DefineGroup('CherryUSB', src, depend = ['RT_USING_CHERRYUSB'], CPPPATH = path, CPPDEFINES = CPPDEFINES)
+group = DefineGroup('CherryUSB', src, depend = ['RT_USING_CHERRYUSB'], LIBS = LIBS, LIBPATH=LIBPATH, CPPPATH = path, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/components/drivers/usb/cherryusb/port/pusb2/README.md b/components/drivers/usb/cherryusb/port/pusb2/README.md
new file mode 100644
index 0000000000..f8137afeb7
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/README.md
@@ -0,0 +1,66 @@
+# USB 2.0 OTG 控制器 (PUSB2)
+
+- Phytium PI 和 Phyium E2000 系列开发板提供了兼容 USB2.0 的 OTG 接口
+- 相关的使用例程可以在 Phytium PI(飞腾派)和 E2000 D/Q Demo 板上运行,例程包括
+
+---------------------------------------------
+
+- Host 模式
+
+- - 1. [FreeRTOS 上作为主机使用键盘/鼠标/U盘](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk/tree/master/example/peripheral/usb/pusb2_host/README.md)
+- - 5. [RT-Thread 上作为主机识别键盘/鼠标/U盘](https://github.com/RT-Thread/rt-thread/blob/master/bsp/phytium/doc/use_cherryusb.md)
+
+---------------------------------------------
+
+- Device 模式
+
+- - 1. [裸机上模拟为一个 U 盘](https://gitee.com/phytium_embedded/phytium-standalone-sdk/tree/master/example/peripherals/usb/pusb2_device/README.md)
+- - 2. [裸机上模拟为一个虚拟串口](https://gitee.com/phytium_embedded/phytium-standalone-sdk/tree/master/example/peripherals/usb/pusb2_device/README.md)
+- - 3. [FreeRTOS 上模拟为一个 U 盘](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk/tree/master/example/peripheral/usb/pusb2_device/README.md)
+- - 4. [FreeRTOS 上模拟为虚拟串口](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk/tree/master/example/peripheral/usb/pusb2_device/README.md)
+- - 5. [RT-Thread 上模拟为一个 U 盘](https://github.com/RT-Thread/rt-thread/blob/master/bsp/phytium/doc/use_cherryusb.md)
+
+---------------------------------------------
+
+- PUSB2 的驱动功能以静态库的方式提供,
+- - libpusb2_hc_a64.a : AARCH64 主机模式驱动库
+- - libpusb2_dc_a64.a : AARCH64 从机模式驱动库
+- - libpusb2_hc_a32_hardfp.a :AARCH32 主机模式驱动库,使用硬浮点
+- - libpusb2_hc_a32_softfp.a :AARCH32 主机模式驱动库,使用软浮点
+- - libpusb2_dc_a32_hardfp.a :AARCH32 从机模式驱动库,使用硬浮点
+- - libpusb2_dc_a32_softfp.a :AARCH32 从机模式驱动库,使用软浮点
+
+需要获取源代码请联系 `[email protected]` 获取
+
+# USB 2.0 OTG Controller (PUSB2)
+
+- Phytium PI and the Phytium E2000 series development boards offer OTG interfaces compatible with USB 2.0.
+- Relevant usage examples can be run on the Phytium PI and E2000 D/Q Demo boards, including:
+
+---------------------------------------------
+
+- Host Mode
+
+ - 1. [Using a keyboard/mouse/USB flash drive as a host on FreeRTOS](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk/tree/master/example/peripheral/usb/pusb2_host/README.md)
+ - 5. [Recognizing a keyboard/mouse/USB flash drive as a host on RT-Thread](https://github.com/RT-Thread/rt-thread/blob/master/bsp/phytium/doc/use_cherryusb.md)
+
+---------------------------------------------
+
+- Device Mode
+ - 1. [Simulating as a USB flash drive on a standalone system](https://gitee.com/phytium_embedded/phytium-standalone-sdk/tree/master/example/peripherals/usb/pusb2_device/README.md)
+ - 2. [Simulating as a virtual serial port on a standalone system](https://gitee.com/phytium_embedded/phytium-standalone-sdk/tree/master/example/peripherals/usb/pusb2_device/README.md)
+ - 3. [Simulating as a USB flash drive on FreeRTOS](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk/tree/master/example/peripheral/usb/pusb2_device/README.md)
+ - 4. [Simulating as a virtual serial port on FreeRTOS](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk/tree/master/example/peripheral/usb/pusb2_device/README.md)
+ - 5. [Simulating as a USB flash drive on RT-Thread](https://github.com/RT-Thread/rt-thread/blob/master/bsp/phytium/doc/use_cherryusb.md)
+
+---------------------------------------------
+
+- The driver functionality of PUSB2 is provided as static libraries:
+ - - `libpusb2_hc_a64.a` : Host mode driver library for AARCH64
+ - - `libpusb2_dc_a64.a` : Device mode driver library for AARCH64
+ - - `libpusb2_hc_a32_hardfp.a` : Host mode driver library for AARCH32, using hard floating point
+ - - `libpusb2_hc_a32_softfp.a` : Host mode driver library for AARCH32, using soft floating point
+ - - `libpusb2_dc_a32_hardfp.a` : Device mode driver library for AARCH32, using hard floating point
+ - - `libpusb2_dc_a32_softfp.a` : Device mode driver library for AARCH32, using soft floating point
+
+- To obtain the source code, please contact `[email protected]`. \ No newline at end of file
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_hardfp.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_hardfp.a
new file mode 100644
index 0000000000..685de41240
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_hardfp.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_crypto_neon.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_crypto_neon.a
new file mode 100644
index 0000000000..f0e1ceb7ee
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_crypto_neon.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_neon.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_neon.a
new file mode 100644
index 0000000000..f4d1580315
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a32_softfp_neon.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a64.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a64.a
new file mode 100644
index 0000000000..3e4ea1245f
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_dc_a64.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_hardfp.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_hardfp.a
new file mode 100644
index 0000000000..7e029a6179
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_hardfp.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_crypto_neon.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_crypto_neon.a
new file mode 100644
index 0000000000..dea366e9ff
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_crypto_neon.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_neon.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_neon.a
new file mode 100644
index 0000000000..172f9695e9
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a32_softfp_neon.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a64.a b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a64.a
new file mode 100644
index 0000000000..575d1dca75
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/libpusb2_hc_a64.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_config.h b/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_config.h
new file mode 100644
index 0000000000..2a42c47856
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_config.h
@@ -0,0 +1,265 @@
+/*
+ * Copyright : (C) 2024 Phytium Information Technology, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Modify History:
+ * Ver   Who        Date         Changes
+ * ----- ------     --------    --------------------------------------
+ * 1.0 zhugengyu 2024/6/26 first commit
+ */
+#ifndef CHERRYUSB_CONFIG_H
+#define CHERRYUSB_CONFIG_H
+
+#include "rtconfig.h"
+
+/* ================ USB common Configuration ================ */
+
+#define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__)
+
+void *usb_sys_mem_malloc(size_t size);
+void usb_sys_mem_free(void *ptr);
+void *usb_sys_malloc_align(size_t align, size_t size);
+
+#define usb_malloc(size) usb_sys_mem_malloc(size)
+#define usb_free(ptr) usb_sys_mem_free(ptr)
+#define usb_align(align, size) usb_sys_malloc_align(align, size)
+
+unsigned long usb_hc_get_register_base(uint32_t id);
+unsigned long usb_dc_get_register_base(uint32_t id);
+
+#define CONFIG_USB_DBG_LEVEL USB_DBG_ERROR
+
+/* Enable print with color */
+#define CONFIG_USB_PRINTF_COLOR_ENABLE
+
+/* data align size when use dma */
+#ifndef CONFIG_USB_ALIGN_SIZE
+#define CONFIG_USB_ALIGN_SIZE 4
+#endif
+
+/* attribute data into no cache ram */
+#define USB_NOCACHE_RAM_SECTION __attribute__((section(".noncacheable")))
+
+/* ================= USB Device Stack Configuration ================ */
+
+/* Ep0 in and out transfer buffer */
+#ifndef CONFIG_USBDEV_REQUEST_BUFFER_LEN
+#define CONFIG_USBDEV_REQUEST_BUFFER_LEN 512
+#endif
+
+/* Setup packet log for debug */
+// #define CONFIG_USBDEV_SETUP_LOG_PRINT
+
+/* Send ep0 in data from user buffer instead of copying into ep0 reqdata
+ * Please note that user buffer must be aligned with CONFIG_USB_ALIGN_SIZE
+*/
+// #define CONFIG_USBDEV_EP0_INDATA_NO_COPY
+
+/* Check if the input descriptor is correct */
+// #define CONFIG_USBDEV_DESC_CHECK
+
+/* Enable test mode */
+// #define CONFIG_USBDEV_TEST_MODE
+
+#ifndef CONFIG_USBDEV_MSC_MAX_LUN
+#define CONFIG_USBDEV_MSC_MAX_LUN 1
+#endif
+
+#ifndef CONFIG_USBDEV_MSC_MAX_BUFSIZE
+#define CONFIG_USBDEV_MSC_MAX_BUFSIZE 4096
+#endif
+
+#ifndef CONFIG_USBDEV_MSC_MANUFACTURER_STRING
+#define CONFIG_USBDEV_MSC_MANUFACTURER_STRING ""
+#endif
+
+#ifndef CONFIG_USBDEV_MSC_PRODUCT_STRING
+#define CONFIG_USBDEV_MSC_PRODUCT_STRING ""
+#endif
+
+#ifndef CONFIG_USBDEV_MSC_VERSION_STRING
+#define CONFIG_USBDEV_MSC_VERSION_STRING "0.01"
+#endif
+
+// #define CONFIG_USBDEV_MSC_THREAD
+
+#ifndef CONFIG_USBDEV_MSC_PRIO
+#define CONFIG_USBDEV_MSC_PRIO 4
+#endif
+
+#ifndef CONFIG_USBDEV_MSC_STACKSIZE
+#define CONFIG_USBDEV_MSC_STACKSIZE 8192
+#endif
+
+#ifndef CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE
+#define CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE 156
+#endif
+
+/* rndis transfer buffer size, must be a multiple of (1536 + 44)*/
+#ifndef CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE
+#define CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE 1580
+#endif
+
+#ifndef CONFIG_USBDEV_RNDIS_VENDOR_ID
+#define CONFIG_USBDEV_RNDIS_VENDOR_ID 0x0000ffff
+#endif
+
+#ifndef CONFIG_USBDEV_RNDIS_VENDOR_DESC
+#define CONFIG_USBDEV_RNDIS_VENDOR_DESC "CherryUSB"
+#endif
+
+#define CONFIG_USBDEV_RNDIS_USING_LWIP
+
+/* ================ USB HOST Stack Configuration ================== */
+
+#define CONFIG_USBHOST_MAX_RHPORTS 1
+#define CONFIG_USBHOST_MAX_EXTHUBS 0
+#define CONFIG_USBHOST_MAX_EHPORTS 8
+#define CONFIG_USBHOST_MAX_INTERFACES 8
+#define CONFIG_USBHOST_MAX_INTF_ALTSETTINGS 8
+#define CONFIG_USBHOST_MAX_ENDPOINTS 8
+
+#define CONFIG_USBHOST_MAX_CDC_ACM_CLASS 4
+#define CONFIG_USBHOST_MAX_HID_CLASS 4
+#define CONFIG_USBHOST_MAX_MSC_CLASS 2
+#define CONFIG_USBHOST_MAX_AUDIO_CLASS 1
+#define CONFIG_USBHOST_MAX_VIDEO_CLASS 1
+
+#define CONFIG_USBHOST_DEV_NAMELEN 16
+
+#ifndef CONFIG_USBHOST_PSC_PRIO
+#define CONFIG_USBHOST_PSC_PRIO 0
+#endif
+#ifndef CONFIG_USBHOST_PSC_STACKSIZE
+#define CONFIG_USBHOST_PSC_STACKSIZE 8192
+#endif
+
+//#define CONFIG_USBHOST_GET_STRING_DESC
+
+// #define CONFIG_USBHOST_MSOS_ENABLE
+#ifndef CONFIG_USBHOST_MSOS_VENDOR_CODE
+#define CONFIG_USBHOST_MSOS_VENDOR_CODE 0x00
+#endif
+
+/* Ep0 max transfer buffer */
+#ifndef CONFIG_USBHOST_REQUEST_BUFFER_LEN
+#define CONFIG_USBHOST_REQUEST_BUFFER_LEN 512
+#endif
+
+#ifndef CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT
+#define CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT 500
+#endif
+
+#ifndef CONFIG_USBHOST_MSC_TIMEOUT
+#define CONFIG_USBHOST_MSC_TIMEOUT 5000
+#endif
+
+/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,
+ * you can change to 2K ~ 16K and must be larger than TCP RX windows size in order to avoid being overflow.
+ */
+#ifndef CONFIG_USBHOST_RNDIS_ETH_MAX_RX_SIZE
+#define CONFIG_USBHOST_RNDIS_ETH_MAX_RX_SIZE (2048)
+#endif
+
+/* Because lwip do not support multi pbuf at a time, so increasing this variable has no performance improvement */
+#ifndef CONFIG_USBHOST_RNDIS_ETH_MAX_TX_SIZE
+#define CONFIG_USBHOST_RNDIS_ETH_MAX_TX_SIZE (2048)
+#endif
+
+/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,
+ * you can change to 2K ~ 16K and must be larger than TCP RX windows size in order to avoid being overflow.
+ */
+#ifndef CONFIG_USBHOST_CDC_NCM_ETH_MAX_RX_SIZE
+#define CONFIG_USBHOST_CDC_NCM_ETH_MAX_RX_SIZE (2048)
+#endif
+/* Because lwip do not support multi pbuf at a time, so increasing this variable has no performance improvement */
+#ifndef CONFIG_USBHOST_CDC_NCM_ETH_MAX_TX_SIZE
+#define CONFIG_USBHOST_CDC_NCM_ETH_MAX_TX_SIZE (2048)
+#endif
+
+/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,
+ * you can change to 2K ~ 16K and must be larger than TCP RX windows size in order to avoid being overflow.
+ */
+#ifndef CONFIG_USBHOST_ASIX_ETH_MAX_RX_SIZE
+#define CONFIG_USBHOST_ASIX_ETH_MAX_RX_SIZE (2048)
+#endif
+/* Because lwip do not support multi pbuf at a time, so increasing this variable has no performance improvement */
+#ifndef CONFIG_USBHOST_ASIX_ETH_MAX_TX_SIZE
+#define CONFIG_USBHOST_ASIX_ETH_MAX_TX_SIZE (2048)
+#endif
+
+/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,
+ * you can change to 2K ~ 16K and must be larger than TCP RX windows size in order to avoid being overflow.
+ */
+#ifndef CONFIG_USBHOST_RTL8152_ETH_MAX_RX_SIZE
+#define CONFIG_USBHOST_RTL8152_ETH_MAX_RX_SIZE (2048)
+#endif
+/* Because lwip do not support multi pbuf at a time, so increasing this variable has no performance improvement */
+#ifndef CONFIG_USBHOST_RTL8152_ETH_MAX_TX_SIZE
+#define CONFIG_USBHOST_RTL8152_ETH_MAX_TX_SIZE (2048)
+#endif
+
+#define CONFIG_USBHOST_BLUETOOTH_HCI_H4
+// #define CONFIG_USBHOST_BLUETOOTH_HCI_LOG
+
+#ifndef CONFIG_USBHOST_BLUETOOTH_TX_SIZE
+#define CONFIG_USBHOST_BLUETOOTH_TX_SIZE 2048
+#endif
+#ifndef CONFIG_USBHOST_BLUETOOTH_RX_SIZE
+#define CONFIG_USBHOST_BLUETOOTH_RX_SIZE 2048
+#endif
+
+/* ================ USB Device Port Configuration ================*/
+
+#ifndef CONFIG_USBDEV_MAX_BUS
+#define CONFIG_USBDEV_MAX_BUS 1 // for now, bus num must be 1 except hpm ip
+#endif
+
+#ifndef CONFIG_USBDEV_EP_NUM
+#define CONFIG_USBDEV_EP_NUM 8
+#endif
+
+/* ---------------- FSDEV Configuration ---------------- */
+//#define CONFIG_USBDEV_FSDEV_PMA_ACCESS 2 // maybe 1 or 2, many chips may have a difference
+
+/* ---------------- DWC2 Configuration ---------------- */
+/* (5 * number of control endpoints + 8) + ((largest USB packet used / 4) + 1 for
+ * status information) + (2 * number of OUT endpoints) + 1 for Global NAK
+ */
+// #define CONFIG_USB_DWC2_RXALL_FIFO_SIZE (1024 / 4)
+/* IN Endpoints Max packet Size / 4 */
+// #define CONFIG_USB_DWC2_TX0_FIFO_SIZE (64 / 4)
+// #define CONFIG_USB_DWC2_TX1_FIFO_SIZE (512 / 4)
+// #define CONFIG_USB_DWC2_TX2_FIFO_SIZE (64 / 4)
+// #define CONFIG_USB_DWC2_TX3_FIFO_SIZE (64 / 4)
+// #define CONFIG_USB_DWC2_TX4_FIFO_SIZE (0 / 4)
+// #define CONFIG_USB_DWC2_TX5_FIFO_SIZE (0 / 4)
+// #define CONFIG_USB_DWC2_TX6_FIFO_SIZE (0 / 4)
+// #define CONFIG_USB_DWC2_TX7_FIFO_SIZE (0 / 4)
+// #define CONFIG_USB_DWC2_TX8_FIFO_SIZE (0 / 4)
+
+/* ---------------- MUSB Configuration ---------------- */
+// #define CONFIG_USB_MUSB_SUNXI
+
+/* ================ USB Host Port Configuration ==================*/
+#ifndef CONFIG_INPUT_MOUSE_WHEEL
+#define CONFIG_INPUT_MOUSE_WHEEL
+#endif
+
+#ifndef CONFIG_USBHOST_MAX_BUS
+#define CONFIG_USBHOST_MAX_BUS 3
+#endif
+
+#ifndef CONFIG_USBHOST_PIPE_NUM
+#define CONFIG_USBHOST_PIPE_NUM 10
+#endif
+
+/* ---------------- XHCI Configuration ---------------- */
+#define CONFIG_USB_XHCI_HCCR_OFFSET (0x0)
+
+/* ---------------- PUSB2 Configuration ---------------- */
+#define CONFIG_USB_PUSB2_BUS_NUM 3U
+#define CONFIG_USB_PUSB2_BUS_ID 0U
+
+#endif
diff --git a/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_dc_glue_phytium.c b/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_dc_glue_phytium.c
new file mode 100644
index 0000000000..fdcf300458
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_dc_glue_phytium.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright : (C) 2024 Phytium Information Technology, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Modify History:
+ * Ver   Who        Date         Changes
+ * ----- ------     --------    --------------------------------------
+ * 1.0 zhugengyu 2024/6/26 first commit
+ */
+#include "rtthread.h"
+#include "interrupt.h"
+
+#include "fparameters.h"
+
+#include "usbd_core.h"
+
+void USBD_IRQHandler(uint8_t busid);
+
+void usb_assert(const char *filename, int linenum)
+{
+ rt_assert_handler("", filename, linenum);
+}
+
+static void usb_dc_pusb2_interrupt_handler(int irqno, void *param)
+{
+ USBD_IRQHandler(CONFIG_USB_PUSB2_BUS_ID);
+}
+
+static void usb_dc_setup_pusb2_interrupt(uint32_t id)
+{
+ uint32_t irq_num = FUSB2_0_VHUB_IRQ_NUM;
+
+ rt_hw_interrupt_set_priority(irq_num, 0U);
+ rt_hw_interrupt_install(irq_num, usb_dc_pusb2_interrupt_handler, NULL, "pusb2-dc");
+ rt_hw_interrupt_umask(irq_num);
+}
+
+static void usb_dc_revoke_pusb2_interrupt(uint32_t id)
+{
+ uint32_t irq_num = FUSB2_0_VHUB_IRQ_NUM;
+
+ rt_hw_interrupt_mask(irq_num);
+}
+
+unsigned long usb_dc_get_register_base(uint32_t id)
+{
+ USB_ASSERT(id == FUSB2_ID_VHUB_0);
+ return FUSB2_0_VHUB_BASE_ADDR;
+}
+
+void usb_dc_low_level_init()
+{
+ usb_dc_setup_pusb2_interrupt(CONFIG_USB_PUSB2_BUS_ID);
+}
+
+void usb_dc_low_level_deinit(void)
+{
+ usb_dc_revoke_pusb2_interrupt(CONFIG_USB_PUSB2_BUS_ID);
+}
+
+void *usb_sys_mem_malloc(size_t size)
+{
+ void *buf = rt_malloc(size);
+
+ if (buf) {
+ rt_memset(buf, 0, size);
+ }
+
+ return buf;
+}
+
+void usb_sys_mem_free(void *ptr)
+{
+ if (ptr) {
+ rt_free(ptr);
+ }
+}
+
+void *usb_sys_malloc_align(size_t align, size_t size)
+{
+ void *buf = rt_malloc_align(size, align);
+
+ if (buf) {
+ rt_memset(buf, 0, size);
+ }
+
+ return buf;
+} \ No newline at end of file
diff --git a/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_hc_glue_phytium.c b/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_hc_glue_phytium.c
new file mode 100644
index 0000000000..8dcca0469b
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/pusb2/rt-thread/usb_hc_glue_phytium.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright : (C) 2024 Phytium Information Technology, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Modify History:
+ * Ver   Who        Date         Changes
+ * ----- ------     --------    --------------------------------------
+ * 1.0 zhugengyu 2024/6/26 first commit
+ */
+#include "rtthread.h"
+#include "interrupt.h"
+
+#include "fparameters.h"
+
+#include "usbh_core.h"
+
+static const uint32_t irq_nums[] = {
+ FUSB2_0_VHUB_IRQ_NUM, FUSB2_1_IRQ_NUM, FUSB2_2_IRQ_NUM
+};
+
+void USBH_IRQHandler(uint8_t busid);
+
+void usb_assert(const char *filename, int linenum)
+{
+ rt_assert_handler("", filename, linenum);
+}
+
+static void usb_hc_pusb2_interrupt_handler(int irqno, void *param)
+{
+ if (irqno == FUSB2_0_VHUB_IRQ_NUM) {
+ USBH_IRQHandler(FUSB2_ID_VHUB_0);
+ } else if (irqno == FUSB2_1_IRQ_NUM) {
+ USBH_IRQHandler(FUSB2_ID_1);
+ } else if (irqno == FUSB2_2_IRQ_NUM) {
+ USBH_IRQHandler(FUSB2_ID_2);
+ }
+}
+
+static void usb_hc_setup_pusb2_interrupt(uint32_t id)
+{
+ uint32_t irq_num = irq_nums[id];
+
+ rt_hw_interrupt_set_priority(irq_num, 0U);
+ rt_hw_interrupt_install(irq_num, usb_hc_pusb2_interrupt_handler, NULL, "pusb2-hc");
+ rt_hw_interrupt_umask(irq_num);
+
+ USB_LOG_DBG("Enable irq-%d\n", irq_num);
+}
+
+static void usb_hc_revoke_pusb2_interrupt(uint32_t id)
+{
+ uint32_t irq_num = irq_nums[id];
+
+ rt_hw_interrupt_mask(irq_num);
+}
+
+unsigned long usb_hc_get_register_base(uint32_t id)
+{
+ if (id == FUSB2_ID_VHUB_0) {
+ return FUSB2_0_VHUB_BASE_ADDR;
+ } else if (id == FUSB2_ID_1) {
+ return FUSB2_1_BASE_ADDR;
+ } else if (id == FUSB2_ID_2) {
+ return FUSB2_2_BASE_ADDR;
+ } else {
+ USB_ASSERT(0);
+ return 0;
+ }
+}
+
+void usb_hc_low_level_init(struct usbh_bus *bus)
+{
+ usb_hc_setup_pusb2_interrupt(bus->busid);
+}
+
+void usb_hc_low_level_deinit(struct usbh_bus *bus)
+{
+ usb_hc_revoke_pusb2_interrupt(bus->busid);
+}
+
+void *usb_sys_mem_malloc(size_t size)
+{
+ void *buf = rt_malloc(size);
+
+ if (buf) {
+ rt_memset(buf, 0, size);
+ }
+
+ return buf;
+}
+
+void usb_sys_mem_free(void *ptr)
+{
+ if (ptr) {
+ rt_free(ptr);
+ }
+}
+
+void *usb_sys_malloc_align(size_t align, size_t size)
+{
+ void *buf = rt_malloc_align(size, align);
+
+ if (buf) {
+ rt_memset(buf, 0, size);
+ }
+
+ return buf;
+} \ No newline at end of file
diff --git a/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_hardfp.a b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_hardfp.a
new file mode 100644
index 0000000000..7b1c5bc21f
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_hardfp.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_crypto_neon.a b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_crypto_neon.a
new file mode 100644
index 0000000000..c5c624e423
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_crypto_neon.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_neon.a b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_neon.a
new file mode 100644
index 0000000000..5a8a36882b
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a32_softfp_neon.a
Binary files differ
diff --git a/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a64.a b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a64.a
new file mode 100644
index 0000000000..39062c1e42
--- /dev/null
+++ b/components/drivers/usb/cherryusb/port/xhci/phytium/libxhci_a64.a
Binary files differ