Skip to content

Commit 9838def

Browse files
committed
Enable PIO USB Host on RP2350
It was crashing due to memcpy being left on the flash. Core 1 can't use code from flash because it may run during a flash operation that core 0 is doing. Fixes #9493
1 parent f064354 commit 9838def

File tree

10 files changed

+230
-163
lines changed

10 files changed

+230
-163
lines changed

ports/raspberrypi/Makefile

Lines changed: 177 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ INC += \
124124
-isystem sdk/src/rp2_common/pico_atomic/include/ \
125125
-isystem sdk/src/rp2_common/pico_bootrom/include/ \
126126
-isystem sdk/src/rp2_common/pico_double/include/ \
127+
-isystem sdk/src/rp2_common/pico_mem_ops/include/ \
127128
-isystem sdk/src/rp2_common/pico_multicore/include/ \
128129
-isystem sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include/ \
129130
-isystem sdk/src/rp2_common/pico_stdio/include/ \
@@ -213,6 +214,165 @@ endif
213214

214215
LIBS += -lc
215216

217+
PICO_WRAP_FLOAT_AEABI_FLAGS := \
218+
-Wl,--wrap=__aeabi_fadd \
219+
-Wl,--wrap=__aeabi_fdiv \
220+
-Wl,--wrap=__aeabi_fmul \
221+
-Wl,--wrap=__aeabi_frsub \
222+
-Wl,--wrap=__aeabi_fsub \
223+
-Wl,--wrap=__aeabi_cfcmpeq \
224+
-Wl,--wrap=__aeabi_cfrcmple \
225+
-Wl,--wrap=__aeabi_cfcmple \
226+
-Wl,--wrap=__aeabi_fcmpeq \
227+
-Wl,--wrap=__aeabi_fcmplt \
228+
-Wl,--wrap=__aeabi_fcmple \
229+
-Wl,--wrap=__aeabi_fcmpge \
230+
-Wl,--wrap=__aeabi_fcmpgt \
231+
-Wl,--wrap=__aeabi_fcmpun \
232+
-Wl,--wrap=__aeabi_i2f \
233+
-Wl,--wrap=__aeabi_l2f \
234+
-Wl,--wrap=__aeabi_ui2f \
235+
-Wl,--wrap=__aeabi_ul2f \
236+
-Wl,--wrap=__aeabi_f2iz \
237+
-Wl,--wrap=__aeabi_f2lz \
238+
-Wl,--wrap=__aeabi_f2uiz \
239+
-Wl,--wrap=__aeabi_f2ulz \
240+
-Wl,--wrap=__aeabi_f2d \
241+
-Wl,--wrap=sqrtf
242+
243+
PICO_WRAP_FLOAT_SCI_FLAGS := \
244+
-Wl,--wrap=cosf \
245+
-Wl,--wrap=sinf \
246+
-Wl,--wrap=tanf \
247+
-Wl,--wrap=atan2f \
248+
-Wl,--wrap=expf \
249+
-Wl,--wrap=logf \
250+
-Wl,--wrap=ldexpf \
251+
-Wl,--wrap=copysignf \
252+
-Wl,--wrap=truncf \
253+
-Wl,--wrap=floorf \
254+
-Wl,--wrap=ceilf \
255+
-Wl,--wrap=roundf \
256+
-Wl,--wrap=sincosf \
257+
-Wl,--wrap=asinf \
258+
-Wl,--wrap=acosf \
259+
-Wl,--wrap=atanf \
260+
-Wl,--wrap=sinhf \
261+
-Wl,--wrap=coshf \
262+
-Wl,--wrap=tanhf \
263+
-Wl,--wrap=asinhf \
264+
-Wl,--wrap=acoshf \
265+
-Wl,--wrap=atanhf \
266+
-Wl,--wrap=exp2f \
267+
-Wl,--wrap=log2f \
268+
-Wl,--wrap=exp10f \
269+
-Wl,--wrap=log10f \
270+
-Wl,--wrap=powf \
271+
-Wl,--wrap=powintf \
272+
-Wl,--wrap=hypotf \
273+
-Wl,--wrap=cbrtf \
274+
-Wl,--wrap=fmodf \
275+
-Wl,--wrap=dremf \
276+
-Wl,--wrap=remainderf \
277+
-Wl,--wrap=remquof \
278+
-Wl,--wrap=expm1f \
279+
-Wl,--wrap=log1pf \
280+
-Wl,--wrap=fmaf
281+
282+
PICO_WRAP_DOUBLE_FLAGS := \
283+
-Wl,--wrap=__aeabi_dadd \
284+
-Wl,--wrap=__aeabi_ddiv \
285+
-Wl,--wrap=__aeabi_dmul \
286+
-Wl,--wrap=__aeabi_drsub \
287+
-Wl,--wrap=__aeabi_dsub \
288+
-Wl,--wrap=__aeabi_cdcmpeq \
289+
-Wl,--wrap=__aeabi_cdrcmple \
290+
-Wl,--wrap=__aeabi_cdcmple \
291+
-Wl,--wrap=__aeabi_dcmpeq \
292+
-Wl,--wrap=__aeabi_dcmplt \
293+
-Wl,--wrap=__aeabi_dcmple \
294+
-Wl,--wrap=__aeabi_dcmpge \
295+
-Wl,--wrap=__aeabi_dcmpgt \
296+
-Wl,--wrap=__aeabi_dcmpun \
297+
-Wl,--wrap=__aeabi_i2d \
298+
-Wl,--wrap=__aeabi_l2d \
299+
-Wl,--wrap=__aeabi_ui2d \
300+
-Wl,--wrap=__aeabi_ul2d \
301+
-Wl,--wrap=__aeabi_d2iz \
302+
-Wl,--wrap=__aeabi_d2lz \
303+
-Wl,--wrap=__aeabi_d2uiz \
304+
-Wl,--wrap=__aeabi_d2ulz \
305+
-Wl,--wrap=__aeabi_d2f \
306+
-Wl,--wrap=sqrt \
307+
-Wl,--wrap=cos \
308+
-Wl,--wrap=sin \
309+
-Wl,--wrap=tan \
310+
-Wl,--wrap=atan2 \
311+
-Wl,--wrap=exp \
312+
-Wl,--wrap=log \
313+
-Wl,--wrap=ldexp \
314+
-Wl,--wrap=copysign \
315+
-Wl,--wrap=trunc \
316+
-Wl,--wrap=floor \
317+
-Wl,--wrap=ceil \
318+
-Wl,--wrap=round \
319+
-Wl,--wrap=sincos \
320+
-Wl,--wrap=asin \
321+
-Wl,--wrap=acos \
322+
-Wl,--wrap=atan \
323+
-Wl,--wrap=sinh \
324+
-Wl,--wrap=cosh \
325+
-Wl,--wrap=tanh \
326+
-Wl,--wrap=asinh \
327+
-Wl,--wrap=acosh \
328+
-Wl,--wrap=atanh \
329+
-Wl,--wrap=exp2 \
330+
-Wl,--wrap=log2 \
331+
-Wl,--wrap=exp10 \
332+
-Wl,--wrap=log10 \
333+
-Wl,--wrap=pow \
334+
-Wl,--wrap=powint \
335+
-Wl,--wrap=hypot \
336+
-Wl,--wrap=cbrt \
337+
-Wl,--wrap=fmod \
338+
-Wl,--wrap=drem \
339+
-Wl,--wrap=remainder \
340+
-Wl,--wrap=remquo \
341+
-Wl,--wrap=expm1 \
342+
-Wl,--wrap=log1p \
343+
-Wl,--wrap=fma
344+
345+
PICO_WRAP_MEM_OPS_FLAGS := \
346+
-Wl,--wrap=memcpy \
347+
-Wl,--wrap=memset \
348+
-Wl,--wrap=__aeabi_memcpy \
349+
-Wl,--wrap=__aeabi_memset \
350+
-Wl,--wrap=__aeabi_memcpy4 \
351+
-Wl,--wrap=__aeabi_memset4 \
352+
-Wl,--wrap=__aeabi_memcpy8 \
353+
-Wl,--wrap=__aeabi_memset8
354+
355+
# Wrap a bunch of math stuff to use the Pico SDK divider
356+
OTHER_PICO_FLAGS := \
357+
-Wl,--wrap=__aeabi_ldiv0 \
358+
-Wl,--wrap=__aeabi_idiv0 \
359+
-Wl,--wrap=__aeabi_lmul \
360+
-Wl,--wrap=__clzsi2 \
361+
-Wl,--wrap=__clzdi2 \
362+
-Wl,--wrap=__ctzsi2 \
363+
-Wl,--wrap=__ctzdi2 \
364+
-Wl,--wrap=__popcountsi2 \
365+
-Wl,--wrap=__popcountdi2 \
366+
-Wl,--wrap=__clz \
367+
-Wl,--wrap=__clzl \
368+
-Wl,--wrap=__clzll \
369+
-Wl,--wrap=__aeabi_idiv \
370+
-Wl,--wrap=__aeabi_idivmod \
371+
-Wl,--wrap=__aeabi_ldivmod \
372+
-Wl,--wrap=__aeabi_uidiv \
373+
-Wl,--wrap=__aeabi_uidivmod \
374+
-Wl,--wrap=__aeabi_uldivmod
375+
216376
ifeq ($(CHIP_VARIANT),RP2040)
217377
CFLAGS += \
218378
-march=armv6-m \
@@ -229,7 +389,7 @@ SRC_SDK_CHIP_VARIANT := \
229389
src/rp2_common/hardware_rtc/rtc.c \
230390
src/rp2_common/pico_double/double_init_rom_rp2040.c \
231391
src/rp2_common/pico_float/float_init_rom_rp2040.c \
232-
src/rp2_common/pico_float/float_math.c \
392+
src/rp2_common/pico_mem_ops/mem_ops.c \
233393

234394
SRC_S_UPPER_CHIP_VARIANT := \
235395
sdk/src/rp2_common/hardware_divider/divider.S \
@@ -239,155 +399,12 @@ SRC_S_UPPER_CHIP_VARIANT := \
239399
sdk/src/rp2_common/pico_float/float_aeabi_rp2040.S \
240400
sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S \
241401

242-
# Wrap a bunch of math stuff to use the Pico SDK divider
243-
PICO_LDFLAGS += -Wl,--wrap=__aeabi_ldiv0 \
244-
-Wl,--wrap=__aeabi_idiv0 \
245-
-Wl,--wrap=__aeabi_lmul \
246-
-Wl,--wrap=__clzsi2 \
247-
-Wl,--wrap=__clzdi2 \
248-
-Wl,--wrap=__ctzsi2 \
249-
-Wl,--wrap=__ctzdi2 \
250-
-Wl,--wrap=__popcountsi2 \
251-
-Wl,--wrap=__popcountdi2 \
252-
-Wl,--wrap=__clz \
253-
-Wl,--wrap=__clzl \
254-
-Wl,--wrap=__clzll \
255-
-Wl,--wrap=__aeabi_idiv \
256-
-Wl,--wrap=__aeabi_idivmod \
257-
-Wl,--wrap=__aeabi_ldivmod \
258-
-Wl,--wrap=__aeabi_uidiv \
259-
-Wl,--wrap=__aeabi_uidivmod \
260-
-Wl,--wrap=__aeabi_uldivmod \
261-
-Wl,--wrap=__aeabi_dadd \
262-
-Wl,--wrap=__aeabi_ddiv \
263-
-Wl,--wrap=__aeabi_dmul \
264-
-Wl,--wrap=__aeabi_drsub \
265-
-Wl,--wrap=__aeabi_dsub \
266-
-Wl,--wrap=__aeabi_cdcmpeq \
267-
-Wl,--wrap=__aeabi_cdrcmple \
268-
-Wl,--wrap=__aeabi_cdcmple \
269-
-Wl,--wrap=__aeabi_dcmpeq \
270-
-Wl,--wrap=__aeabi_dcmplt \
271-
-Wl,--wrap=__aeabi_dcmple \
272-
-Wl,--wrap=__aeabi_dcmpge \
273-
-Wl,--wrap=__aeabi_dcmpgt \
274-
-Wl,--wrap=__aeabi_dcmpun \
275-
-Wl,--wrap=__aeabi_i2d \
276-
-Wl,--wrap=__aeabi_l2d \
277-
-Wl,--wrap=__aeabi_ui2d \
278-
-Wl,--wrap=__aeabi_ul2d \
279-
-Wl,--wrap=__aeabi_d2iz \
280-
-Wl,--wrap=__aeabi_d2lz \
281-
-Wl,--wrap=__aeabi_d2uiz \
282-
-Wl,--wrap=__aeabi_d2ulz \
283-
-Wl,--wrap=__aeabi_d2f \
284-
-Wl,--wrap=sqrt \
285-
-Wl,--wrap=cos \
286-
-Wl,--wrap=sin \
287-
-Wl,--wrap=tan \
288-
-Wl,--wrap=atan2 \
289-
-Wl,--wrap=exp \
290-
-Wl,--wrap=log \
291-
-Wl,--wrap=ldexp \
292-
-Wl,--wrap=copysign \
293-
-Wl,--wrap=trunc \
294-
-Wl,--wrap=floor \
295-
-Wl,--wrap=ceil \
296-
-Wl,--wrap=round \
297-
-Wl,--wrap=sincos \
298-
-Wl,--wrap=asin \
299-
-Wl,--wrap=acos \
300-
-Wl,--wrap=atan \
301-
-Wl,--wrap=sinh \
302-
-Wl,--wrap=cosh \
303-
-Wl,--wrap=tanh \
304-
-Wl,--wrap=asinh \
305-
-Wl,--wrap=acosh \
306-
-Wl,--wrap=atanh \
307-
-Wl,--wrap=exp2 \
308-
-Wl,--wrap=log2 \
309-
-Wl,--wrap=exp10 \
310-
-Wl,--wrap=log10 \
311-
-Wl,--wrap=pow \
312-
-Wl,--wrap=powint \
313-
-Wl,--wrap=hypot \
314-
-Wl,--wrap=cbrt \
315-
-Wl,--wrap=fmod \
316-
-Wl,--wrap=drem \
317-
-Wl,--wrap=remainder \
318-
-Wl,--wrap=remquo \
319-
-Wl,--wrap=expm1 \
320-
-Wl,--wrap=log1p \
321-
-Wl,--wrap=fma \
322-
-Wl,--wrap=__aeabi_fadd \
323-
-Wl,--wrap=__aeabi_fdiv \
324-
-Wl,--wrap=__aeabi_fmul \
325-
-Wl,--wrap=__aeabi_frsub \
326-
-Wl,--wrap=__aeabi_fsub \
327-
-Wl,--wrap=__aeabi_cfcmpeq \
328-
-Wl,--wrap=__aeabi_cfrcmple \
329-
-Wl,--wrap=__aeabi_cfcmple \
330-
-Wl,--wrap=__aeabi_fcmpeq \
331-
-Wl,--wrap=__aeabi_fcmplt \
332-
-Wl,--wrap=__aeabi_fcmple \
333-
-Wl,--wrap=__aeabi_fcmpge \
334-
-Wl,--wrap=__aeabi_fcmpgt \
335-
-Wl,--wrap=__aeabi_fcmpun \
336-
-Wl,--wrap=__aeabi_i2f \
337-
-Wl,--wrap=__aeabi_l2f \
338-
-Wl,--wrap=__aeabi_ui2f \
339-
-Wl,--wrap=__aeabi_ul2f \
340-
-Wl,--wrap=__aeabi_f2iz \
341-
-Wl,--wrap=__aeabi_f2lz \
342-
-Wl,--wrap=__aeabi_f2uiz \
343-
-Wl,--wrap=__aeabi_f2ulz \
344-
-Wl,--wrap=__aeabi_f2d \
345-
-Wl,--wrap=sqrtf \
346-
-Wl,--wrap=cosf \
347-
-Wl,--wrap=sinf \
348-
-Wl,--wrap=tanf \
349-
-Wl,--wrap=atan2f \
350-
-Wl,--wrap=expf \
351-
-Wl,--wrap=logf \
352-
-Wl,--wrap=ldexpf \
353-
-Wl,--wrap=copysignf \
354-
-Wl,--wrap=truncf \
355-
-Wl,--wrap=floorf \
356-
-Wl,--wrap=ceilf \
357-
-Wl,--wrap=roundf \
358-
-Wl,--wrap=sincosf \
359-
-Wl,--wrap=asinf \
360-
-Wl,--wrap=acosf \
361-
-Wl,--wrap=atanf \
362-
-Wl,--wrap=sinhf \
363-
-Wl,--wrap=coshf \
364-
-Wl,--wrap=tanhf \
365-
-Wl,--wrap=asinhf \
366-
-Wl,--wrap=acoshf \
367-
-Wl,--wrap=atanhf \
368-
-Wl,--wrap=exp2f \
369-
-Wl,--wrap=log2f \
370-
-Wl,--wrap=exp10f \
371-
-Wl,--wrap=log10f \
372-
-Wl,--wrap=powf \
373-
-Wl,--wrap=powintf \
374-
-Wl,--wrap=hypotf \
375-
-Wl,--wrap=cbrtf \
376-
-Wl,--wrap=fmodf \
377-
-Wl,--wrap=dremf \
378-
-Wl,--wrap=remainderf \
379-
-Wl,--wrap=remquof \
380-
-Wl,--wrap=expm1f \
381-
-Wl,--wrap=log1pf \
382-
-Wl,--wrap=fmaf \
383-
-Wl,--wrap=memcpy \
384-
-Wl,--wrap=memset \
385-
-Wl,--wrap=__aeabi_memcpy \
386-
-Wl,--wrap=__aeabi_memset \
387-
-Wl,--wrap=__aeabi_memcpy4 \
388-
-Wl,--wrap=__aeabi_memset4 \
389-
-Wl,--wrap=__aeabi_memcpy8 \
390-
-Wl,--wrap=__aeabi_memset8
402+
PICO_LDFLAGS += \
403+
$(PICO_WRAP_FLOAT_AEABI_FLAGS) \
404+
$(PICO_WRAP_FLOAT_SCI_FLAGS) \
405+
$(PICO_WRAP_DOUBLE_FLAGS) \
406+
$(PICO_WRAP_MEM_OPS_FLAGS) \
407+
$(OTHER_PICO_FLAGS)
391408

392409
UF2_ID = 0xE48BFF56
393410

@@ -414,6 +431,15 @@ CFLAGS += -DPICO_RP2350=1
414431
SRC_SDK_CHIP_VARIANT := \
415432
src/rp2_common/hardware_powman/powman.c \
416433

434+
SRC_S_UPPER_CHIP_VARIANT := \
435+
sdk/src/rp2_common/pico_double/double_conv_m33.S \
436+
sdk/src/rp2_common/pico_double/double_fma_dcp.S \
437+
sdk/src/rp2_common/pico_double/double_sci_m33.S \
438+
sdk/src/rp2_common/pico_float/float_sci_m33_vfp.S \
439+
sdk/src/rp2_common/pico_float/float_conv_m33.S \
440+
441+
PICO_LDFLAGS += $(PICO_WRAP_FLOAT_SCI_FLAGS) $(PICO_WRAP_DOUBLE_FLAGS)
442+
417443
ifeq ($(CHIP_PACKAGE),A)
418444
CFLAGS += -DPICO_RP2350A=1
419445
CFLAGS += -DPICO_RP2350B=0
@@ -460,6 +486,7 @@ SRC_SDK := \
460486
src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c \
461487
src/rp2_common/pico_clib_interface/newlib_interface.c \
462488
src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c \
489+
src/rp2_common/pico_float/float_math.c \
463490
src/rp2_common/pico_multicore/multicore.c \
464491
src/rp2_common/pico_platform_panic/panic.c \
465492
src/rp2_common/pico_printf/printf.c \

ports/raspberrypi/boards/adafruit_feather_rp2350/mpconfigboard.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ EXTERNAL_FLASH_DEVICES = "GD25Q64C,W25Q64JVxQ"
1111

1212
CIRCUITPY_ALARM = 0
1313
CIRCUITPY_RGBMATRIX = 0
14-
CIRCUITPY_USB_HOST = 0
1514

1615
CIRCUITPY_FLOPPYIO = 0
1716
CIRCUITPY_PICODVI = 1

ports/raspberrypi/boards/adafruit_metro_rp2350/mpconfigboard.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,3 @@ EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
1111

1212
CIRCUITPY_ALARM = 0
1313
CIRCUITPY_RGBMATRIX = 0
14-
CIRCUITPY_USB_HOST = 0

ports/raspberrypi/boards/cytron_iriv_io_controller/mpconfigboard.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
1212
CIRCUITPY__EVE = 1
1313
CIRCUITPY_ALARM = 0
1414
CIRCUITPY_RGBMATRIX = 0
15-
CIRCUITPY_USB_HOST = 0
1615

1716
# Include these Python libraries in firmware.
1817
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SimpleIO

ports/raspberrypi/boards/cytron_motion_2350_pro/mpconfigboard.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
1212
CIRCUITPY__EVE = 1
1313
CIRCUITPY_ALARM = 0
1414
CIRCUITPY_RGBMATRIX = 0
15-
CIRCUITPY_USB_HOST = 0
1615

1716
# Include these Python libraries in firmware.
1817
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

0 commit comments

Comments
 (0)