Skip to content

Commit c5ba4af

Browse files
committed
rp2040: make moving 1K of code into RAM optional - and off by default
1 parent d7b579a commit c5ba4af

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

src/portable/raspberrypi/rp2040/dcd_rp2040.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static void hw_endpoint_xfer(uint8_t ep_addr, uint8_t *buffer, uint16_t total_by
185185
hw_endpoint_xfer_start(ep, buffer, total_bytes);
186186
}
187187

188-
static void __no_inline_not_in_flash_func(hw_handle_buff_status)(void)
188+
static void __tusb_irq_path_func(hw_handle_buff_status)(void)
189189
{
190190
uint32_t remaining_buffers = usb_hw->buf_status;
191191
pico_trace("buf_status = 0x%08x\n", remaining_buffers);
@@ -226,7 +226,7 @@ TU_ATTR_ALWAYS_INLINE static inline void reset_ep0_pid(void)
226226
}
227227
}
228228

229-
static void __no_inline_not_in_flash_func(reset_non_control_endpoints)(void)
229+
static void __tusb_irq_path_func(reset_non_control_endpoints)(void)
230230
{
231231
// Disable all non-control
232232
for ( uint8_t i = 0; i < USB_MAX_ENDPOINTS-1; i++ )
@@ -242,7 +242,7 @@ static void __no_inline_not_in_flash_func(reset_non_control_endpoints)(void)
242242
next_buffer_ptr = &usb_dpram->epx_data[0];
243243
}
244244

245-
static void __no_inline_not_in_flash_func(dcd_rp2040_irq)(void)
245+
static void __tusb_irq_path_func(dcd_rp2040_irq)(void)
246246
{
247247
uint32_t const status = usb_hw->ints;
248248
uint32_t handled = 0;
@@ -524,7 +524,7 @@ void dcd_edpt_close (uint8_t rhport, uint8_t ep_addr)
524524
hw_endpoint_close(ep_addr);
525525
}
526526

527-
void __no_inline_not_in_flash_func(dcd_int_handler)(uint8_t rhport)
527+
void __tusb_irq_path_func(dcd_int_handler)(uint8_t rhport)
528528
{
529529
(void) rhport;
530530
dcd_rp2040_irq();

src/portable/raspberrypi/rp2040/hcd_rp2040.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ static bool need_pre(uint8_t dev_addr)
9191
return hcd_port_speed_get(0) != tuh_speed_get(dev_addr);
9292
}
9393

94-
static void __no_inline_not_in_flash_func(hw_xfer_complete)(struct hw_endpoint *ep, xfer_result_t xfer_result)
94+
static void __tusb_irq_path_func(hw_xfer_complete)(struct hw_endpoint *ep, xfer_result_t xfer_result)
9595
{
9696
// Mark transfer as done before we tell the tinyusb stack
9797
uint8_t dev_addr = ep->dev_addr;
@@ -101,7 +101,7 @@ static void __no_inline_not_in_flash_func(hw_xfer_complete)(struct hw_endpoint *
101101
hcd_event_xfer_complete(dev_addr, ep_addr, xferred_len, xfer_result, true);
102102
}
103103

104-
static void __no_inline_not_in_flash_func(_handle_buff_status_bit)(uint bit, struct hw_endpoint *ep)
104+
static void __tusb_irq_path_func(_handle_buff_status_bit)(uint bit, struct hw_endpoint *ep)
105105
{
106106
usb_hw_clear->buf_status = bit;
107107
bool done = hw_endpoint_xfer_continue(ep);
@@ -111,7 +111,7 @@ static void __no_inline_not_in_flash_func(_handle_buff_status_bit)(uint bit, str
111111
}
112112
}
113113

114-
static void __no_inline_not_in_flash_func(hw_handle_buff_status)(void)
114+
static void __tusb_irq_path_func(hw_handle_buff_status)(void)
115115
{
116116
uint32_t remaining_buffers = usb_hw->buf_status;
117117
pico_trace("buf_status 0x%08x\n", remaining_buffers);
@@ -159,7 +159,7 @@ static void __no_inline_not_in_flash_func(hw_handle_buff_status)(void)
159159
}
160160
}
161161

162-
static void __no_inline_not_in_flash_func(hw_trans_complete)(void)
162+
static void __tusb_irq_path_func(hw_trans_complete)(void)
163163
{
164164
if (usb_hw->sie_ctrl & USB_SIE_CTRL_SEND_SETUP_BITS)
165165
{
@@ -175,7 +175,7 @@ static void __no_inline_not_in_flash_func(hw_trans_complete)(void)
175175
}
176176
}
177177

178-
static void __no_inline_not_in_flash_func(hcd_rp2040_irq)(void)
178+
static void __tusb_irq_path_func(hcd_rp2040_irq)(void)
179179
{
180180
uint32_t status = usb_hw->ints;
181181
uint32_t handled = 0;
@@ -240,7 +240,7 @@ static void __no_inline_not_in_flash_func(hcd_rp2040_irq)(void)
240240
}
241241
}
242242

243-
void __no_inline_not_in_flash_func(hcd_int_handler)(uint8_t rhport)
243+
void __tusb_irq_path_func(hcd_int_handler)(uint8_t rhport)
244244
{
245245
(void) rhport;
246246
hcd_rp2040_irq();

src/portable/raspberrypi/rp2040/rp2040_usb.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ void rp2040_usb_init(void)
6969
usb_hw->muxing = USB_USB_MUXING_TO_PHY_BITS | USB_USB_MUXING_SOFTCON_BITS;
7070
}
7171

72-
void __no_inline_not_in_flash_func(hw_endpoint_reset_transfer)(struct hw_endpoint *ep)
72+
void __tusb_irq_path_func(hw_endpoint_reset_transfer)(struct hw_endpoint *ep)
7373
{
7474
ep->active = false;
7575
ep->remaining_len = 0;
7676
ep->xferred_len = 0;
7777
ep->user_buf = 0;
7878
}
7979

80-
void __no_inline_not_in_flash_func(_hw_endpoint_buffer_control_update32)(struct hw_endpoint *ep, uint32_t and_mask, uint32_t or_mask) {
80+
void __tusb_irq_path_func(_hw_endpoint_buffer_control_update32)(struct hw_endpoint *ep, uint32_t and_mask, uint32_t or_mask) {
8181
uint32_t value = 0;
8282
if (and_mask) {
8383
value = *ep->buffer_control & and_mask;
@@ -108,7 +108,7 @@ void __no_inline_not_in_flash_func(_hw_endpoint_buffer_control_update32)(struct
108108
}
109109

110110
// prepare buffer, return buffer control
111-
static uint32_t __no_inline_not_in_flash_func(prepare_ep_buffer)(struct hw_endpoint *ep, uint8_t buf_id)
111+
static uint32_t __tusb_irq_path_func(prepare_ep_buffer)(struct hw_endpoint *ep, uint8_t buf_id)
112112
{
113113
uint16_t const buflen = tu_min16(ep->remaining_len, ep->wMaxPacketSize);
114114
ep->remaining_len = (uint16_t)(ep->remaining_len - buflen);
@@ -143,7 +143,7 @@ static uint32_t __no_inline_not_in_flash_func(prepare_ep_buffer)(struct hw_endpo
143143
}
144144

145145
// Prepare buffer control register value
146-
static void __no_inline_not_in_flash_func(_hw_endpoint_start_next_buffer)(struct hw_endpoint *ep)
146+
static void __tusb_irq_path_func(_hw_endpoint_start_next_buffer)(struct hw_endpoint *ep)
147147
{
148148
uint32_t ep_ctrl = *ep->endpoint_control;
149149

@@ -205,7 +205,7 @@ void hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t to
205205
}
206206

207207
// sync endpoint buffer and return transferred bytes
208-
static uint16_t __no_inline_not_in_flash_func(sync_ep_buffer)(struct hw_endpoint *ep, uint8_t buf_id)
208+
static uint16_t __tusb_irq_path_func(sync_ep_buffer)(struct hw_endpoint *ep, uint8_t buf_id)
209209
{
210210
uint32_t buf_ctrl = _hw_endpoint_buffer_control_get_value32(ep);
211211
if (buf_id) buf_ctrl = buf_ctrl >> 16;
@@ -241,7 +241,7 @@ static uint16_t __no_inline_not_in_flash_func(sync_ep_buffer)(struct hw_endpoint
241241
return xferred_bytes;
242242
}
243243

244-
static void __no_inline_not_in_flash_func(_hw_endpoint_xfer_sync) (struct hw_endpoint *ep)
244+
static void __tusb_irq_path_func(_hw_endpoint_xfer_sync) (struct hw_endpoint *ep)
245245
{
246246
// Update hw endpoint struct with info from hardware
247247
// after a buff status interrupt
@@ -292,7 +292,7 @@ static void __no_inline_not_in_flash_func(_hw_endpoint_xfer_sync) (struct hw_end
292292
}
293293

294294
// Returns true if transfer is complete
295-
bool __no_inline_not_in_flash_func(hw_endpoint_xfer_continue)(struct hw_endpoint *ep)
295+
bool __tusb_irq_path_func(hw_endpoint_xfer_continue)(struct hw_endpoint *ep)
296296
{
297297
_hw_endpoint_lock_update(ep, 1);
298298
// Part way through a transfer

src/portable/raspberrypi/rp2040/rp2040_usb.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616
#define TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX PICO_RP2040_USB_DEVICE_ENUMERATION_FIX
1717
#endif
1818

19+
#ifndef PICO_RP2040_USB_FAST_IRQ
20+
#define PICO_RP2040_USB_FAST_IRQ 0
21+
#endif
22+
23+
#if PICO_RP2040_USB_FAST_IRQ
24+
#define __tusb_irq_path_func(x) __no_inline_not_in_flash_func(x)
25+
#else
26+
#define __tusb_irq_path_func(x) x
27+
#endif
1928

2029
#define pico_info(...) TU_LOG(2, __VA_ARGS__)
2130
#define pico_trace(...) TU_LOG(3, __VA_ARGS__)

0 commit comments

Comments
 (0)