summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-06-22 15:23:08 +0700
committerhathach <[email protected]>2026-06-22 15:23:08 +0700
commiteda704ca1acef9691b51e17026765f497b1fffbe (patch)
tree77d099452c42cf93a56a4441c4f915d5fcd00706 /src
parentef63456eead840e45dc3bf632345b00d13216043 (diff)
hw/bsp+wch: rename the CH58x family to ch583 and OPT_MCU_CH58X to OPT_MCU_CH583
The BSP family and MCU option were named "ch58x"/"CH58X", but the supported part is the CH583/CH582 (and the SDK repo is openwch/ch583); CH585 is a separate MCU family, so the CH58x umbrella was misleading. Rename to the specific family: - hw/bsp/ch58x -> hw/bsp/ch583 (dir), and the BSP-local files ch58x_it.* -> ch583_it.*, system_ch58x.* -> system_ch583.* (include guards/refs updated). The vendor SDK files (CH58x_common.h, CH58x_*.c in hw/mcu/wch/ch583) keep their names. - OPT_MCU_CH58X -> OPT_MCU_CH583 in tusb_option.h, tusb_mcu.h, and the shared WCH USBFS driver (ch32_usbfs_reg.h, dcd_ch32_usbfs.c). OPT_MCU_CH582 is kept as an alias (same value), so either name selects the same code. - FAMILY_MCUS CH58X -> CH583, CFG_TUSB_MCU=OPT_MCU_CH583, mcu:CH58X -> mcu:CH583 in the example skip lists, the CI build matrix (ci_set_matrix.py), the get_deps family tag, and docs/reference/boards.rst. Board names (ch582m_evt, yd-ch582m) are unchanged. Verified: make + cmake build for ch582m_evt, and ci.lan HIL (all device examples pass). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/common/tusb_mcu.h2
-rw-r--r--src/portable/wch/ch32_usbfs_reg.h2
-rw-r--r--src/portable/wch/dcd_ch32_usbfs.c16
-rw-r--r--src/tusb_option.h2
4 files changed, 11 insertions, 11 deletions
diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h
index f2a2d92a5..b5390a59d 100644
--- a/src/common/tusb_mcu.h
+++ b/src/common/tusb_mcu.h
@@ -659,7 +659,7 @@
#define TUP_DCD_EDPT_CLOSE_API
#endif
-#elif TU_CHECK_MCU(OPT_MCU_CH58X)
+#elif TU_CHECK_MCU(OPT_MCU_CH583)
// CH582/583 USBFS: older WCH USBFS IP with a single combined per-endpoint control register
// (like CH32V103), driven by the shared dcd_ch32_usbfs.c on USB0 (rhport 0). Device only:
// the shared hcd_ch32_usbfs.c is CH32V20x-specific and does not support CH58x, so host /
diff --git a/src/portable/wch/ch32_usbfs_reg.h b/src/portable/wch/ch32_usbfs_reg.h
index 90a477b79..415a015dc 100644
--- a/src/portable/wch/ch32_usbfs_reg.h
+++ b/src/portable/wch/ch32_usbfs_reg.h
@@ -130,7 +130,7 @@
#elif CFG_TUSB_MCU == OPT_MCU_CH32V307
#include <ch32v30x.h>
#define USBHD_IRQn OTG_FS_IRQn
-#elif CFG_TUSB_MCU == OPT_MCU_CH58X
+#elif CFG_TUSB_MCU == OPT_MCU_CH583
#include "CH58x_common.h"
// CH582/583 USBFS device controller: same combined per-endpoint control register as
// CH32V103 (IN response bits[1:0], OUT response bits[3:2]) but a different register map -
diff --git a/src/portable/wch/dcd_ch32_usbfs.c b/src/portable/wch/dcd_ch32_usbfs.c
index 22c7a43fa..ece9cde07 100644
--- a/src/portable/wch/dcd_ch32_usbfs.c
+++ b/src/portable/wch/dcd_ch32_usbfs.c
@@ -37,7 +37,7 @@
// Struct-based EP register access (uniform layout). CH58X has a different register map and
// defines EP_DMA/EP_TX_LEN/EP_CTRL itself in ch32_usbfs_reg.h.
- #if CFG_TUSB_MCU == OPT_MCU_CH58X
+ #if CFG_TUSB_MCU == OPT_MCU_CH583
// CH58X EP registers split into a low block (EP0-4) and a high block (EP5-7). Walk from each
// block's first slot by the 4-byte slot stride (pointer arithmetic off slot 0, so the unused
// ternary branch's index can't trip -Warray-bounds). EP4 has no DMA register of its own (it
@@ -220,7 +220,7 @@ static void update_in(uint8_t rhport, uint8_t ep, bool force) {
if (xfer->valid) {
if (force || xfer->len) {
size_t len = TU_MIN(xfer->max_size, xfer->len);
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
// Every CH58x endpoint buffer is 64 bytes. Isochronous (which would push max_size up to 1023)
// is refused in dcd_edpt_iso_alloc(), but some classes (e.g. video) ignore that result, so cap
// the copy here to guarantee we never write past the buffer into a neighbouring endpoint's.
@@ -256,7 +256,7 @@ static void update_out(uint8_t rhport, uint8_t ep, size_t rx_len) {
struct usb_xfer *xfer = &data.xfer[ep][TUSB_DIR_OUT];
if (xfer->valid) {
size_t len = TU_MIN(xfer->max_size, TU_MIN(xfer->len, rx_len));
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
len = TU_MIN(len, 64u); // cap to the 64-byte EP buffer (see update_in)
#endif
memcpy(xfer->buffer, ep_out_buf(ep), len);
@@ -308,7 +308,7 @@ bool dcd_init(uint8_t rhport, const tusb_rhport_init_t *rh_init) {
// enable other endpoints but NAK everything
USBOTG_FS->UEP4_1_MOD = 0xCC;
USBOTG_FS->UEP2_3_MOD = 0xCC;
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
// CH58X: a single mode register enables EP5/6/7 RX+TX (different bit layout than CH32).
USBOTG_FS->UEP567_MOD = RB_UEP5_RX_EN | RB_UEP5_TX_EN | RB_UEP6_RX_EN | RB_UEP6_TX_EN |
RB_UEP7_RX_EN | RB_UEP7_TX_EN;
@@ -393,7 +393,7 @@ void dcd_int_handler(uint8_t rhport) {
USBOTG_FS->INT_FG = USBFS_INT_FG_BUS_RST;
} else if (status & USBFS_INT_FG_SUSPEND) {
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
// CH58x raises this single interrupt for both suspend and resume; MIS_ST's suspend bit tells
// them apart (set while suspended, clear once resumed) so tud_resume_cb() actually fires.
dcd_event_t event = {.rhport = rhport,
@@ -447,7 +447,7 @@ void dcd_edpt0_status_complete(uint8_t rhport, const tusb_control_request_t *req
(void)rhport;
if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE &&
request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD && request->bRequest == TUSB_REQ_SET_ADDRESS) {
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
// On CH58x R8_USB_DEV_AD bit 7 is a user general-purpose flag; only bits [6:0] are the address.
USBOTG_FS->DEV_ADDR = (uint8_t)((USBOTG_FS->DEV_ADDR & 0x80u) | (request->wValue & 0x7Fu));
#else
@@ -485,7 +485,7 @@ bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet
(void)rhport;
(void)ep_addr;
(void)largest_packet_size;
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
// No isochronous support on CH58x: its 8-bit T_LEN caps a packet at 255B and the endpoints use
// plain 64-byte buffers, so accepting an iso max_size (up to 1023) would let update_in()/
// update_out() run off the end of the buffer into neighbouring ones. Refuse it outright.
@@ -503,7 +503,7 @@ bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet
bool dcd_edpt_iso_activate(uint8_t rhport, const tusb_desc_endpoint_t *desc_ep) {
(void)rhport;
(void)desc_ep;
-#if CFG_TUSB_MCU == OPT_MCU_CH58X
+#if CFG_TUSB_MCU == OPT_MCU_CH583
return false; // CH58x has no isochronous support (see dcd_edpt_iso_alloc)
#else
return true;
diff --git a/src/tusb_option.h b/src/tusb_option.h
index 9170d1205..cb8e3f6bd 100644
--- a/src/tusb_option.h
+++ b/src/tusb_option.h
@@ -195,7 +195,7 @@
#define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x
#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X
#define OPT_MCU_CH32V103 2230 ///< WCH CH32V103
-#define OPT_MCU_CH58X 2240 ///< WCH CH58x
+#define OPT_MCU_CH583 2240 ///< WCH CH583
#define OPT_MCU_CH582 2240 ///< alias to CH58x series
#define OPT_MCU_CH583 2240 ///< alias to CH58x series