18381 Commits

Author SHA1 Message Date
Alessandro Gatti 70bb728c09 tools/ci.sh: Let QEMU try to build with a user module.
JavaScript code lint and formatting with Biome / eslint (push) Waiting to run
Check code formatting / code-formatting (push) Waiting to run
Check spelling with codespell / codespell (push) Waiting to run
Build docs / build (push) Waiting to run
Check examples / embedding (push) Waiting to run
Package mpremote / build (push) Waiting to run
.mpy file format and tools / test (push) Waiting to run
Build ports metadata / build (push) Waiting to run
alif port / build_alif (alif_ae3_build) (push) Waiting to run
cc3200 port / build (push) Waiting to run
esp32 port / build_idf (esp32_build_c2_c5_c6, v5.5.1) (push) Waiting to run
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.3) (push) Waiting to run
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.5.1) (push) Waiting to run
esp32 port / build_idf (esp32_build_p4, v5.5.1) (push) Waiting to run
esp32 port / build_idf (esp32_build_s3_c3, v5.3) (push) Waiting to run
esp32 port / build_idf (esp32_build_s3_c3, v5.5.1) (push) Waiting to run
esp8266 port / build (push) Waiting to run
mimxrt port / build (push) Waiting to run
nrf port / build (push) Waiting to run
powerpc port / build (push) Waiting to run
qemu port / build_and_test_arm (bigendian) (push) Waiting to run
qemu port / build_and_test_arm (sabrelite) (push) Waiting to run
qemu port / build_and_test_arm (thumb_hardfp) (push) Waiting to run
qemu port / build_and_test_arm (thumb_softfp) (push) Waiting to run
qemu port / build_and_test_rv32 (push) Waiting to run
qemu port / build_and_test_rv64 (push) Waiting to run
renesas-ra port / build_renesas_ra_board (push) Waiting to run
rp2 port / build (push) Waiting to run
samd port / build (push) Waiting to run
stm32 port / build_stm32 (stm32_misc_build) (push) Waiting to run
stm32 port / build_stm32 (stm32_nucleo_build) (push) Waiting to run
stm32 port / build_stm32 (stm32_pyb_build) (push) Waiting to run
unix port / minimal (push) Waiting to run
unix port / reproducible (push) Waiting to run
unix port / standard (push) Waiting to run
unix port / standard_v2 (push) Waiting to run
unix port / coverage (push) Waiting to run
unix port / coverage_32bit (push) Waiting to run
unix port / nanbox (push) Waiting to run
unix port / longlong (push) Waiting to run
unix port / float (push) Waiting to run
unix port / gil_enabled (push) Waiting to run
unix port / stackless_clang (push) Waiting to run
unix port / float_clang (push) Waiting to run
unix port / settrace_stackless (push) Waiting to run
unix port / repr_b (push) Waiting to run
unix port / macos (push) Waiting to run
unix port / qemu_mips (push) Waiting to run
unix port / qemu_arm (push) Waiting to run
unix port / qemu_riscv64 (push) Waiting to run
unix port / sanitize_address (push) Waiting to run
unix port / sanitize_undefined (push) Waiting to run
webassembly port / build (push) Waiting to run
windows port / build-vs (Debug, x64, v143, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Debug, x86, v143, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x64, v142, dev, 2019, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x64, v142, standard, 2019, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x64, v143, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x64, v143, standard, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x86, v142, dev, 2019, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x86, v142, standard, 2019, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x86, v143, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x86, v143, standard, 2022, [17, 18)) (push) Waiting to run
windows port / build-mingw (i686, mingw32, dev) (push) Waiting to run
windows port / build-mingw (i686, mingw32, standard) (push) Waiting to run
windows port / build-mingw (x86_64, mingw64, dev) (push) Waiting to run
windows port / build-mingw (x86_64, mingw64, standard) (push) Waiting to run
windows port / cross-build-on-linux (push) Waiting to run
zephyr port / build (push) Waiting to run
Python code lint and formatting with ruff / ruff (push) Waiting to run
This commit brings the QEMU port in line with other ports when it comes
to making sure the port builds with a user module to be part of the main
interpreter.

To not impact too much on the build time, only the `MPS2_AN385` board
does this as there'd be just too many targets to test, for not much
gain.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti 1ff9f9e3de qemu/mcu/arm/startup: Add an implementation for "abort".
This commit adds a naive implementation of the "abort" standard C
library, that is needed by certain C++ runtimes let code link.

Although the Arm toolchain used in the CI image does not need this,
newer or different toolchains may actually need this (eg. the Arm EABI
toolchain provided by Arch Linux).  Given the limited scope of the QEMU
port, the function simply spins forever.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti 65dabf8d1f qemu/mcu/arm/stm32.ld: Fix C++ linking.
This commit expands the linkerscript for STM32-series boards to let C++
code link with the interpreter core.

The linkerscript now contains all necessary sections for C++ code that
uses exceptions to be part of a user module inside the MicroPython
image.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti 086534a873 qemu/mcu/arm/nrf51.ld: Fix C++ linking.
This commit expands the linkerscript for nRF51-series boards to let C++
code link with the interpreter core.

The linkerscript now contains all necessary sections for C++ code that
uses exceptions to be part of a user module inside the MicroPython
image.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti dbd3eaaa4c qemu/mcu/arm/mps3.ld: Fix C++ linking.
This commit expands the linkerscript for MPS3-series boards to let C++
code link with the interpreter core.

The linkerscript now contains all necessary sections for C++ code that
uses exceptions to be part of a user module inside the MicroPython
image.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti 2f52e1d6ad qemu/mcu/arm/mps2.ld: Fix C++ linking.
This commit expands the linkerscript for MPS2-series boards to let C++
code link with the interpreter core.

The linkerscript now contains all necessary sections for C++ code that
uses exceptions to be part of a user module inside the MicroPython
image.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti 09c0a3cb22 qemu/mcu/arm/imx6.ld: Fix C++ linking.
This commit expands the linkerscript for i.MX6-series boards to let C++
code link with the interpreter core.

The linkerscript now contains all necessary sections for C++ code that
uses exceptions to be part of a user module inside the MicroPython
image.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:39:42 +10:00
Alessandro Gatti 0124bd5b2b qemu/Makefile: Do not mount ROMFS partition on non-test targets.
This commit fixes a mistake introduced in #19051, where the test ROMFS
partition would get mounted even on targets that do not need it to
function (ie. `repl`).

Now the ROMFS image is mounted only for test targets: `test`,
`test_full`, and `test_natmod`.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:37:09 +10:00
Damien George 05740fd665 qemu/boards/NETDUINO2: Change heap size to 114k.
This board has 128k RAM, and its heap was originally 120k but commit
e84c9abfc2 changed that to 140k which will
not fit.

This commit reduces the heap down to 114k which allows enough room for the
remaining data/bss, a 10k heap and about 3k spare.

Signed-off-by: Damien George <damien@micropython.org>
2026-04-30 23:34:36 +10:00
Alessandro Gatti ca85a1eb23 tools/boardgen.py: Make per-pin content output extensible.
This commit lets classes extending the base `PinGenerator` class to
override the process of generating extra per-pin content when creating
the pins' information source file.

There are cases in which one may want to have more control on the part
of the source generation process that dumps additional per-pin
information to the source file.  The current approach works fine if each
pin generates self-contained additional data to be placed in the source
file, but there is no clean way to provide a prologue or an epilogue to
that content.

For example, if one wants to emit a single consolidated additional pin
data table it is not that convenient to be able to consistently emit the
table start definition and the table end markers.  With these changes
all one has to do to achieve this is to override
`PinGenerator.print_pin_source` in their PinGenerator-derived class
to either wrap the output or to replace what is being output altogether.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:32:40 +10:00
Alessandro Gatti 2c37f0612f tests/run-tests.py: Update the list of tests requiring floats.
This commit updates the list of the tests that must be skipped when the
suite is executed on a target that does not have floating point
support.

Two more tests, namely `extmod/vfs_rom.py` and
`micropython/const_float.py` have been added to the list, since they
both rely on floating point support being there.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-30 23:30:56 +10:00
Dan Halbert d54e675e66 tests/ports/unix: Remove trailing spaces in unix coverage output.
Signed-off-by: Dan Halbert <halbert@halwitz.org>
2026-04-30 23:26:13 +10:00
Dan Halbert 9d989e4d8b tests: Remove further trailing spaces when possible.
Most cases here have `print(..., some_str)` changed to
`print(..., repr(some_str))`.  This makes the empty string visible and
prevents bare trailing spaces.

Signed-off-by: Dan Halbert <halbert@halwitz.org>
2026-04-30 23:26:13 +10:00
Dan Halbert 93a734020e tests/run-tests.py: Allow .native.exp files to contain regexs.
Signed-off-by: Dan Halbert <halbert@halwitz.org>
2026-04-30 23:26:13 +10:00
Dan Halbert 9b36eedf36 tests/run-tests.py: Fix hex parsing of {\xnn} escapes.
Signed-off-by: Dan Halbert <halbert@halwitz.org>
2026-04-30 23:26:13 +10:00
Dan Halbert fa17886b63 tests/cmdline/repl_autocomplete_underscore.py: Remove trailing spaces.
They are not needed for this test to function as intended.

Signed-off-by: Dan Halbert <halbert@halwitz.org>
2026-04-30 23:26:10 +10:00
Dan Halbert 6b97759d25 tests: Protect trailing spaces with "\$".
Makes it easier to see the trailing spaces in an editor, and to know that
they are intentional.

Signed-off-by: Dan Halbert <halbert@halwitz.org>
2026-04-30 23:22:17 +10:00
Charalampos Stratakis efe6d3bbdd lib/mbedtls: Update to mbedtls v3.6.6.
Signed-off-by: Charalampos Stratakis <cstratak@redhat.com>
2026-04-30 23:12:18 +10:00
Andrew Leech 1dda231491 ports: Consolidate TinyUSB src include across build systems.
Consolidates TinyUSB source includes across multiple ports (alif, mimxrt,
renesas-ra, samd) to use a common approach for TinyUSB integration.

This cleanup ensures consistent TinyUSB usage patterns across ports
and simplifies maintenance.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2026-04-30 23:10:04 +10:00
Andrew Leech 9ca3b7412e stm32/usbd_conf: Fix USB VBUS sensing for newer STM32F4/F7 HAL versions.
Newer STM32F4/F7 variants (and their HAL headers) use a single
USB_OTG_GCCFG_VBDEN register bit for VBUS detection instead of the older
NOVBUSSENS/VBUSASEN/VBUSBSEN bits.  The existing TinyUSB VBUS sensing code
only handles the older register layout, so boards with the newer HAL
silently skip VBUS configuration.

This adds a #if defined(USB_OTG_GCCFG_VBDEN) branch that enables or
disables VBUS detection via the new register bit, falling through to the
existing code for older variants.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2026-04-30 23:08:43 +10:00
Damien George d1c61ca52a stm32/boards: Extend RAM section by 192K on STM32H723.
This extends the RAM section into the adjacent ITCM RAM block, increasing
the total GC heap size by the same amount (because the GC heap uses all
available remaining RAM).

This affects only the NUCLEO_H723ZG board, bringing available GC heap from
73984 to 266048 bytes.

Signed-off-by: Damien George <damien@micropython.org>
2026-04-30 23:05:01 +10:00
Andrew Leech a23f69ea68 stm32/machine_adc: Fix ADC V2 CR register writes and timeouts.
Replace all |= on ADC CR with mask-and-set using ADC_CR_BITS_PROPERTY_RS
from the LL HAL. On ADC V2 the CR command bits are write-1-to-set, so |=
can propagate stale bits (e.g. ADSTP left by HAL_ADC_Stop), violating the
RM requirement that ADSTART and ADSTP must not be asserted simultaneously.

Add recovery logic in adc_config_channel for stuck ADSTART: stop the
conversion, disable, and re-enable the ADC before reconfiguring SQR1.

Replace unbounded while loops in ADC V2 paths with ADC_WAIT, a busy-wait
macro using mp_hal_ticks_ms with a 250ms timeout.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2026-04-30 23:03:29 +10:00
Andrew Leech 06f27ec853 stm32/boards/STM32H747I_DISCO: Add STM32H747I-DISCO board definition.
Adds support for STM32H747I-DISCO evaluation board with:
- STM32H747XI dual-core MCU (Cortex-M7 @ 400MHz + Cortex-M4)
- 32MB SDRAM (32-bit bus @ 120MHz)
- 32MB QSPI flash storage (MT25QL512ABB dual)
- USB High-Speed via ULPI PHY (USB3320C-EZK)
- USART1 console via ST-LINK V3 VCP
- 10/100 Ethernet (LAN8742A RMII) - requires hardware modification
- microSD card slot (8-bit SDMMC1)
- 4 LEDs and user button
- OpenAMP support for M7-M4 communication

Software configuration:
- RTC uses LSE (32.768kHz crystal)
- lwIP networking stack with SSL/TLS (mbedTLS)
- exFAT filesystem support

Known limitations:
- Ethernet requires hardware modification (ETH_MDC/SAI4_D1 pin conflict)

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2026-04-30 23:02:03 +10:00
Duncan Lowther 8a56be6660 extmod/moductypes: Be more defensive with uctypes_struct_agg_size args.
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_c2_c5_c6, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_p4, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.5.1) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (bigendian) (push) Has been cancelled
qemu port / build_and_test_arm (sabrelite) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_hardfp) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_softfp) (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
qemu port / build_and_test_rv64 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / longlong (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / gil_enabled (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / repr_b (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
unix port / sanitize_address (push) Has been cancelled
unix port / sanitize_undefined (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
Eliminates read-beyond-end when calling `uctypes_struct_agg_size()` on the
length 1 tuple (uctypes.ARRAY ,).

Signed-off-by: Duncan Lowther <Duncan.Lowther@glasgow.ac.uk>
2026-04-20 23:14:45 +10:00
Damien George 1f601e8987 samd: Convert port to use new event waiting functions.
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_c2_c5_c6, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_p4, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.5.1) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (bigendian) (push) Has been cancelled
qemu port / build_and_test_arm (sabrelite) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_hardfp) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_softfp) (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
qemu port / build_and_test_rv64 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / longlong (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / gil_enabled (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / repr_b (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
unix port / sanitize_address (push) Has been cancelled
unix port / sanitize_undefined (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
Convert the samd port from the old `MICROPY_EVENT_POLL_HOOK` macro to use
the new `mp_event_wait_xxx()` functions in conjunction with
`MICROPY_INTERNAL_WFE`.

This change should be functionally equivalent to the existing behaivour
because `mp_event_wait_ms()` is equal to
`mp_handle_pending(MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS); __WFE()`,
which is what `MICROPY_EVENT_POLL_HOOK` was.

Signed-off-by: Damien George <damien@micropython.org>
2026-04-16 16:20:57 +10:00
Damien George 941cc31db2 mimxrt: Convert port to use new event waiting functions.
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_c2_c5_c6, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_p4, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.5.1) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (bigendian) (push) Has been cancelled
qemu port / build_and_test_arm (sabrelite) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_hardfp) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_softfp) (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
qemu port / build_and_test_rv64 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / longlong (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / gil_enabled (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / repr_b (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
unix port / sanitize_address (push) Has been cancelled
unix port / sanitize_undefined (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
Convert the mimxrt port from the old `MICROPY_EVENT_POLL_HOOK` macro to use
the new `mp_event_wait_xxx()` functions in conjunction with
`MICROPY_INTERNAL_WFE`.

This change should be functionally equivalent to the existing behaivour
because `mp_event_wait_ms()` and `mp_event_wait_indefinite()` are equal to
`mp_handle_pending(MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS); __WFE()`,
which is what `MICROPY_EVENT_POLL_HOOK` was.

Signed-off-by: Damien George <damien@micropython.org>
2026-04-16 16:13:34 +10:00
Andrew Leech 036bd81636 stm32: Fix mboot build with TinyUSB-enabled boards.
usbd_conf.c unconditionally includes shared/tinyusb/mp_usbd.h which
pulls in tusb.h when MICROPY_HW_ENABLE_USBDEV is set. The
BUILDING_MBOOT guard that disables TinyUSB comes after the include,
so mboot builds fail with missing tusb.h. Guard the include with
!BUILDING_MBOOT.

Also add forward declaration of mp_usbd_ll_init() next to the
MICROPY_HW_TINYUSB_LL_INIT macro in mpconfigboard_common.h, since
the function is used in an inline function in mp_usbd.h but only
declared in the port-specific usbd_conf.h.

Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2026-04-16 15:20:58 +10:00
iabdalkader 50348ce0eb stm32/mpconfigport: Enable machine.CAN if CAN2 is used.
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_c2_c5_c6, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_p4, v5.5.1) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.3) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3, v5.5.1) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (bigendian) (push) Has been cancelled
qemu port / build_and_test_arm (sabrelite) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_hardfp) (push) Has been cancelled
qemu port / build_and_test_arm (thumb_softfp) (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
qemu port / build_and_test_rv64 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / longlong (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / gil_enabled (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / repr_b (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
unix port / sanitize_address (push) Has been cancelled
unix port / sanitize_undefined (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, dev, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v142, standard, 2019, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, v143, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
Enable machine.CAN if CAN1 or CAN2 or both are enabled.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2026-04-15 16:11:44 +10:00
Damien George 2752d398ad esp32/modules: Use "from machine import *" instead of __getattr__.
The esp32 port has the machine Counter and Encoder classes implemented in
Python, requiring a `machine.py` that extends the built-in machine module.

That previously used `__getattr__()` to delegate lookups to the built-in,
but that means any failed lookup raises an `AttributeError` instead of an
`ImportError`.  This means (among other things) that certain tests like
CAN and I2CTarget would fail because they couldn't skip the test correctly.

This commit improves the situation by using `from machine import *` instead
of `__getattr__()`, which puts all the built-in functions/classes/constants
directly in the `machine.py` global namespace.  That means an `ImportError`
is now correctly raised for attributes that don't exist.

Although this takes up a bit more RAM, it's now a lot faster to import from
the machine module: what used to take around 100us to lookup a name now
takes only 5us.

Signed-off-by: Damien George <damien@micropython.org>
2026-04-15 16:08:34 +10:00
Alessandro Gatti c895770d4a tests/ports/qemu: Add ROMFS tests to CI.
This commit adds a new test to make sure ROMFS files are mounted and
read correctly, to be run as part of the CI process.

The changes also include the source binary files that have been used to
create the pre-baked ROMFS partition image used in the test, along with
a Makefile to allow recreating said file.

The CI test ROMFS image is mounted only if no other ROMFS partition is
mounted in slot 0.  The specific test is executed only if there actually
is a ROMFS partition mounted and if the partition is identified as the
one used to run tests on.  This allows for user images to be mounted and
for a successful test run if that is the case.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti 67de20ae0a tests: Rename "tests/frozen" into "tests/assets".
This commit renames the "tests/frozen" directory into "tests/assets" to
make it more explicit that it does contain files that are needed for
other tests to function.

Right now there's only a single pre-compiled module being used for
miscellaneous tests, but it will soon hold ROMFS test data as well.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti 75441f49ad qemu/boards/SABRELITE: Add ROMFS support.
This commit lets the SABRELITE machine definition load a ROMFS
partition at the very end of the RAM space.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti 809cf6f561 qemu/boards/MPS2_AN385: Add ROMFS support.
This commit lets the MPS2_AN385 machine definition load a ROMFS
partition right at the beginning of the 16MiB PSRAM area.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti f3e79c8b56 qemu/boards/VIRT_RV64: Add ROMFS support.
This commit reserves a memory area to mount ROMFS partitions into, and
lets the port Makefile know the memory area details.

A 4 MiB segment is allocated at 0x8062_0000, which is inside the
emulated machine's DRAM segment.  The virt board requires the image
loaded in its DRAM segment to be contiguous, so the ROMFS segment is
placed right after the stack area.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti acaba3f469 qemu/boards/VIRT_RV32: Add ROMFS support.
This commit reserves a memory area to mount ROMFS partitions into, and
lets the port Makefile know the memory area details.

A 4 MiB segment is allocated at 0x8061_0000, which is inside the
emulated machine's DRAM segment.  The virt board requires the image
loaded in its DRAM segment to be contiguous, so the ROMFS segment is
placed right after the stack area.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti 083b0cc60f qemu/Makefile: Refactor shared ROMFS definitions.
This commit refactors shared ROMFS definitions appearing in some Arm
boards configuration, moving them into the QEMU port's Makefile.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:04:26 +10:00
Alessandro Gatti cf0ef5a9d7 rp2/rp2_dma: Reduce footprint of the DMA control fields table.
This commit shortens the amount of space taken by the DMA control fields
table, and explicitly marks it as `const`.

The DMA fields info table used a full-size QSTR index value, and 9 bits
of numeric information.  Given that the QSTR index could be converted
into a `qstr_short_t`, there is no fields spill outside a machine word
boundary - albeit with having 7 unused bits but there isn't much that
can be done for that.  The effective structure size for each entry is
halved, from 8 bytes down to 4.

Also, the structure is only read from, yet it was not marked as `const`.
Marking the structure as constant did not help reduce the final size but
at least correctly signals the compiler that no write accesses are
possible.

This shrinks the RPI_PICO/RPI_PICO_W build by 56 bytes, with a similar
size reduction for RPI_PICO2/RPI_PICO2_W.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 16:03:38 +10:00
Jeff Epler bd69a0ddef lib/re1.5: Check stack during compilecode.
Otherwise, a very deeply nested regular expression like

    re.compile("(" * 65536)

can exhaust the host stack during the compile phase. This turns
that into a `RuntimeError: maximum recursion depth exceeded`
instead.

This crash was found via fuzzing.

Signed-off-by: Jeff Epler <jepler@unpythonic.net>
2026-04-15 16:01:21 +10:00
Jeff Epler 98e4264ea6 tests/run-tests.py: Correct spelling errors.
Signed-off-by: Jeff Epler <jepler@unpythonic.net>
2026-04-15 16:01:15 +10:00
Angus Gratton eeed037f70 extmod/machine_usb_device: Document xfer_cb result value, add enums.
This callback argument was previously mis-labelled as a boolean,
but it's actually the tusb_xfer_result_t values from TinyUSB.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2026-04-15 15:57:04 +10:00
Jeff Epler 02f2683bfc py/objint_longlong: Fix signed comparison error.
Under `afl-cc` (acting as a wrapper for clang), the following
diagnostic occurs (wrapped for clarity):

    ../../py/objint_longlong.c:232:32: error:
        comparison of integers of different signs:
        'long long' and 'unsigned long' [-Werror,-Wsign-compare]

Add a cast to silence it. The value is known statically to fit inside
`long long`.

Signed-off-by: Jeff Epler <jepler@gmail.com>
2026-04-15 15:55:16 +10:00
Damien George a43a8ac89e py/mpconfig: Automatically configure thumb2 and float emitter features.
Prior to this commit a port would need to manually configure the
`MICROPY_EMIT_THUMB_ARMV7M` and `MICROPY_EMIT_INLINE_THUMB_FLOAT` options,
based on whether the CPU is Thumb2 and whether it has hardware floating
point support (eg Cortex-M0+ vs Cortex-M3 vs Cortex-M4).

This is error prone, for example on stm32:
- `NUCLEO_G0B1RE` (a Cortex-M0+ MCU) had both enabled even though neither
  options work on that target.
- `NUCLEO_L152RE` (a Cortex-M3 MCU) had both enabled but this target does
  not support hardware floating point.

The change here automatically enables the two options based on built-in
compiler macros.

This change is tested on the following boards:
- alif ALIF_ENSEMBLE: both enabled
- rp2 RPI_PICO: both disabled
- rp2 RPI_PICO2: both enabled
- samd SAMD21_XPLAINED_PRO: both disabled
- samd SAMD_GENERIC_D51X20: both enabled
- stm32 NUCLEO_G0B1RE: both disabled
- stm32 NUCLEO_L152RE: only MICROPY_EMIT_THUMB_ARMV7M enabled
- stm32 PYBD_SF6: both enabled
- stm32 PYBV10: both enabled

Signed-off-by: Damien George <damien@micropython.org>
2026-04-15 15:49:44 +10:00
Jeff Epler 1834dcf8b5 py/objtuple: Support __add__ and __iadd__ with tuple subclasses.
Properly cast tuple subclasses to the native base class before performing
`__add__` or `__iadd_`.

Closes: #7304

Signed-off-by: Jeff Epler <jepler@unpythonic.net>
2026-04-15 15:43:49 +10:00
Jeff Epler 5b127f022e py/modio: Error out on over-long read()/write() in user IO code.
It is a mistake in Python code if the result of readinto()/write()
is more bytes than requested. This can lead to misbehavior
e.g., in mp_stream_rw if the invariant is not respected.

CPython appears to largely ignore the values returned from
readinto()/write(), at least from `print()` & `json.load()`.
Consequently, an expected output file is needed for the
new test.

Closes: #18845

Signed-off-by: Jeff Epler <jepler@unpythonic.net>
2026-04-15 15:41:48 +10:00
Jeff Epler 5ddc551bc4 py/compile: Reject *arg after keyword argument.
Document this in cpydiff and add a test with expected output
for coverage testing.

As discussed in #11441, the code growth from handling this
case seems to outweigh the benefit of implementing it
properly.

Closes: #11439

Signed-off-by: Jeff Epler <jepler@unpythonic.net>
2026-04-15 15:40:15 +10:00
Alessandro Gatti b67c55cb4f py/emitinlinethumb: Shrink condition code lookups.
This commit optimises the lookup of opcodes' condition codes, in order
to take up less code than before.

The original data was held in a table containing the condition code
value (an incrementing 0-based integer) and the two condition ASCII
characters.  Given that the condition code value also matches the
entry's index in the table, that can be safely omitted.

This saves 52 bytes when compiled for Thumb.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 15:35:27 +10:00
Alessandro Gatti 1a8c835308 docs/library/machine.Pin: Update pull-up/down constants.
This commit updates the documentation bits for pull-up/pull-down
constants, part of the `machine.Pin` class.

The documentation now mentions port-specific entries into a separate
section, making the only three standard pull-up/pull-down values being
`Pin.PULL_UP`, `Pin.PULL_DOWN`, and `None`.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2026-04-15 15:32:27 +10:00
Angus Gratton 35652ff03c docs/library/gc: Add some simple examples for gc.threshold().
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2026-04-15 15:29:28 +10:00
Angus Gratton 5e7d4bf9a6 docs/library/gc: Add documentation for gc.isenabled().
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2026-04-15 15:29:28 +10:00
Angus Gratton c9bb9250db docs/develop: Link to module docs, remove extraneous example code.
Small cleanup.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2026-04-15 15:29:28 +10:00