17163 Commits

Author SHA1 Message Date
Damien George
1be38e8077 tests/run-tests.py: Remove --write-exp and --list-tests options.
Removing the now-unused (see previous commit for details) `--write-exp` and
`--list-tests` options helps to simplify the rather complex logic in
`run-tests.py`.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-19 13:36:04 +10:00
Damien George
067ef81cd0 all: Remove tinytest component.
With the recent qemu (d9a0fdda9a7b0db55c1115b55bb1b83cd5ce739c and
0426934969d06aa649ba903f5408cb331b5b9c2d) and zephyr
(05cad7b56f5d460db26a468a05bfdeabe4a656db) changes to how their tests are
run, two things became unused:

- The tinytest framework, which embedded a set of tests and their expected
  output within firmware, so these tests could be run stand-alone.

- The `--write-exp` and `--list-tests` options to `tests/run-tests.py`,
  which were needed primarily to generated the expected test output for
  tinytest (also the associated `tests/run-tests-exp.py/.sh` scripts are
  now unused).

This commit removes the tinytest component and all its helper code.  This
eliminates a maintenance burden.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-19 13:31:36 +10:00
Angus Gratton
5d8878b582 shared/tinyusb: Only run TinyUSB on the main thread if GIL is disabled.
If GIL is disabled then there's threat of a race condition if some other
code specifically requests USB processing (i.e. to unblock stdio), while
a scheduled TinyUSB callback is already running on another thread.

Relies on the change in the parent commit, where scheduler is restricted
to main thread if GIL is disabled.

Fixes #15390 - "TinyUSB callback can't recurse" exceptions on rp2 when
using _thread module and USB serial I/O.

Adds a unit test for stdin functioning correctly in threads (fails on rp2
port without this fix).

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-19 13:17:01 +10:00
Angus Gratton
52a593cdb1 py/scheduler: Only run callbacks on the main thread if GIL is disabled.
Otherwise it's very difficult to reason about thread safety in a
scheduler callback, as it can run at any time on any thread - including
racing against any bytecode operation on any thread.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-19 13:17:01 +10:00
iabdalkader
451ba1cf38 rp2/modules: Fix FatFS boot script to detect invalid FAT filesystem.
This change helps detect if the filesystem is invalid, by also including
the first mount attempt within the try-except.  Then the FAT is reformatted
if needed.

Fixes issue #15779.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-09-19 13:04:48 +10:00
ZodiusInfuser
ded8bbdd5e rp2/machine_pin_cyw43: Include check for CYW43_GPIO.
The `#if` check only checks that `MICROPY_PY_NETWORK_CYW43` and
`MICROPY_HW_PIN_EXT_COUNT` are defined.  This is a reasonable assumption
for the Pico W, but causes conflicts if someone wants to attach an external
IO expander to their Pico W and have its pins appear as Pin objects.

This commit addresses this by adding the additional checks, letting board
builds include wireless but separately choose whether the external IO pins
come from the cyw43 or not.

Signed-off-by: Christopher Parrott <chris@pimoroni.com>
2024-09-19 12:58:43 +10:00
ZodiusInfuser
79ba6d8ce7 rp2: Increase ext pins from 10 to 32.
To allow more pins when other ways are used to provide external GPIO (ie
not via cyw43).

Signed-off-by: Christopher Parrott <chris@pimoroni.com>
2024-09-19 12:54:20 +10:00
ZodiusInfuser
5dfd3ecd8b rp2: Add board-level hooks to main, and MICROPY_SOURCE_BOARD cmake var.
Signed-off-by: Christopher Parrott <chris@pimoroni.com>
2024-09-19 12:54:20 +10:00
Angus Gratton
fb069f9d06 docs/library: Document machine.Pin.toggle() method.
Original commit was by @millosolomillo from 2022, but CI no longer accepts
their auto-generated GitHub commit email...

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-19 12:04:39 +10:00
Damien George
8feb714b4d docs/library: Document math.log with two arguments.
The functionality is there but was not documented.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-17 11:22:26 +10:00
Damien George
3d53b39a2a docs/reference: Fix pyboard.py filesystem cp example with three files.
Fix documentation to match behaviour (directories are not preserved).

Fixes issue #11101.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-17 11:20:17 +10:00
Paul Grayson
0d8388673e docs/esp32: Update pin access example with addresses for ESP32-S3.
Signed-off-by: Paul Grayson <pdg@alum.mit.edu>
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-17 11:18:47 +10:00
Matt Trentini
7953089a25 examples/natmod: Fix URL links in README.md.
Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2024-09-17 11:14:52 +10:00
Matt Trentini
976d9d148f stm32/boards/STM32F429DISC: Add DAC support to the STM32F429DISC.
The STM32F429DISC board definition did not have DAC enabled, however the
micro/board supports it so this commit enables the feature.

Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
2024-09-17 10:58:47 +10:00
Adrian Higgins
39ddfed9a0 stm32: Update STM32L452xx Multi OTG handling.
Added custom Multi OTG handling for STM32L452xx, based on STM32L432xx
handling.

Fixes issue #15795.

Signed-off-by: Adrian Higgins <adrian@higstar.com>
2024-09-17 10:56:23 +10:00
Amirreza Hamzavi
f1bdac3752 unix/README: Fix typo in build dependencies.
Signed-off-by: Amirreza Hamzavi <amirrezahamzavi2000@gmail.com>
2024-09-10 11:30:22 +10:00
danicampora
3ca01eccae zephyr/mphalport: Make mp_hal_wait_sem() always call k_poll().
Also even in the case of a zero timeout given.

Signed-off-by: danicampora <danicampora@gmail.com>
2024-09-06 20:48:13 +10:00
danicampora
1c0dc2ac3e zephyr/src: Remove k_yield() at the end of console_irq_input_hook().
Some boards like the nrf52840dk crash immediatelly after boot when
k_yield() is executed in this function.  It also makes the REPL randomly
lock up on other boards like the nucleo_wb55rg.

Signed-off-by: danicampora <danicampora@gmail.com>
2024-09-06 20:48:05 +10:00
Damien George
74d6dba294 tests/run-tests.py: Add a zephyr test target.
So that certain tests can be skipped when running on this target.  These
thread tests do not pass because the zephyr port cannot create more than 4
threads at once.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-06 20:47:19 +10:00
Damien George
0afec3974c zephyr/Kconfig: Increase default GC heap size to 48k.
So that more tests can run successfully, and so users by default have more
heap for applications.  Thin minimal configuration still has a 16k GC heap.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-06 20:42:57 +10:00
danicampora
935fcd1329 tests/thread: Adapt stress_aes.py to run on zephyr.
Signed-off-by: danicampora <danicampora@gmail.com>
2024-09-06 20:42:57 +10:00
Damien George
e7974a28f7 zephyr/mpconfigport: Enable mpz big integers.
These are needed to be on par with other ports.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-06 20:42:56 +10:00
Damien George
fc630e70c4 zephyr/main: Collect registers during a MicroPython GC scan.
Signed-off-by: Damien George <damien@micropython.org>
2024-09-06 20:42:56 +10:00
danicampora
7009c75f23 zephyr: Enable some core features to get more thread tests passing.
All these features are enabled at the
`MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES` level, and are required to get
more of the thread tests passing.

Signed-off-by: danicampora <danicampora@gmail.com>
2024-09-06 20:42:56 +10:00
danicampora
d68d8fcf90 zephyr: Re-implement the Zephyr console in non-blocking mode.
The standard Zephyr console implementation doesn't make use of
`tty_set_rx_timeout()` and therefore all the functions to receive
characters block indefinitely until data is received (including
`console_read()`).

This commit also releases the GIL where it applies, e.g. the REPL and the
time sleep functions.

Signed-off-by: danicampora <danicampora@gmail.com>
2024-09-06 20:42:56 +10:00
danicampora
6833f3dda9 zephyr: Add threading support.
This commit implements the `_thread` module on the zephyr port.

Due to the fact that we are still using a rather old version of Zephyr,
`CONFIG_DYNAMIC_THREAD` is not available and therefore the stack for
threads cannot be allocated dynamically, only at compile time.  So for the
time being and for the purpose of this commit, a maximum of 4 Zephyr
threads (besides the main thread) can be created.  Once we manage to update
to the latest version of Zephyr this won't be a problem anymore.

Configuration for the nrf52840dk is added as part of this change, because
this board was used to test the threading support.

The Zephyr option `CONFIG_THREAD_CUSTOM_DATA` is used to enable threading
on a per board basis.  The `thread.conf` file is added as a convenient way
to enable threading.

Signed-off-by: danicampora <danicampora@gmail.com>
2024-09-06 20:42:56 +10:00
Alexandre Iooss
aefd48b801 samd/Makefile: Specify UF2 family in firmware.uf2.
Set the UF2 firmware images family to Microchip SAMD21 or SAMD51.  This
helps tools such as file to identify built firmware.

Signed-off-by: Alexandre Iooss <erdnaxe@crans.org>
2024-09-06 20:36:06 +10:00
robert-hh
e23fdb1f77 tests/extmod/machine_uart_irq_txidle.py: Simplify the test script.
Now that no minimal delay time is required for SAMD devices.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-09-06 17:43:49 +10:00
robert-hh
1a6279ba37 samd/mphalport: Simplify mp_hal_delay_ms().
Do NOT use `mp_hal_delay_us()` for short delays.  This was initially done
to make short delays precise, but it does not allow for scheduling.  Leave
using `mp_hal_delay_us()` to user code if needed.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-09-06 17:43:49 +10:00
robert-hh
ed86fdbdf6 samd/mphalport: Fix an execution order bug in mp_hal_ticks_us_64().
The upper 32 bit of the 64 bit ticks register was taken before disabling
the interrupts.  That may have caused a wrong return values.  Besides that,
the function may cause trouble when called in an IRQ context, because it
unconditionally enables IRQ.

Signed-off-by: robert-hh <robert@hammelrath.com>
2024-09-06 17:16:44 +10:00
iabdalkader
3294606e23 extmod/libmetal: Fix libmetal rules for mkdir dependencies.
Dependency on auto-generated libmetal should be an order only prerequisite.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-09-06 17:14:03 +10:00
cajt
65244d291a extmod/modlwip: Fix compile error for lwIP with SLIP support.
Fixes a compile error if STM32 port is compiled with:

    make BOARD=(..) MICROPY_PY_LWIP=1 MICROPY_PY_LWIP_SLIP=1

`sio_send()` and `sio_tryread()` now use `mp_get_stream`.

Signed-off-by: Carl Treudler <cjt@users.sf.net>
2024-09-06 17:11:47 +10:00
Alessandro Gatti
a831c788f7 tools/mpy_ld.py: Ignore R_XTENSA_ASM_EXPAND relocation entries.
As reported in #14430 the Xtensa compiler can add R_XTENSA_ASM_EXPAND
relocation relaxation entries in object files, and they were not
supported by mpy_ld.

This commit adds handling for that entry, doing nothing with it, as it
is only of real use for an optimising linker.

Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2024-09-06 17:10:07 +10:00
Angus Gratton
e370999e37 unix: Add a description of COPT in the README.
This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-06 17:07:48 +10:00
Angus Gratton
d04974d8d0 unix: Expand the build steps in the README.
- Present the default build dependencies in one place at the top, and make
  a separate section about building standalone.

- Add steps for the "minimal" variant as well.

- Document that building standalone requires autoconf and libtool.

- Allow MICROPY_STANDALONE to be set as an environment variable.

Fixes issue #11313.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-06 17:07:35 +10:00
timdechant
455415b1e1 shared/runtime/sys_stdio_mphal: Fix printed type for stdio streams.
The printed type for stdio streams indicates "FileIO", which is a binary IO
stream.  Stdio is not binary by design, and its printed type should
indicate a text stream.  "TextIOWrapper" suits that purpose, and is used
by VfsPosix files.

Signed-off-by: timdechant <timdechant.git@gmail.com>
2024-09-06 17:00:35 +10:00
Damien George
659113825d qemu: Rename qemu-arm port to qemu.
Because this port now supports multiple architectures.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-06 11:08:39 +10:00
Damien George
3ea1ce63da all: Remove remaining qemu-riscv references.
Signed-off-by: Damien George <damien@micropython.org>
2024-09-06 11:08:22 +10:00
Damien George
0426934969 qemu-arm: Merge RISC-V 32-bit support into qemu-arm port.
Currently both the qemu-arm and qemu-riscv ports share a lot of code and
functionality.  This commit merges the qemu-riscv port into the qemu-arm
port.  The only real differences between the two are the toolchains used to
build the code, and the initialisation/startup framework.  Everything else
is pretty much the same, so this brings the following benefits:
- less code duplication
- less burden on maintenance
- generalised qemu port, could in the future support other architectures

A new board `VIRT_RV32` has been added to the qemu-arm port which is the
existing RISC-V board from the qemu-riscv port.  To build it:

    $ make BOARD=VIRT_RV32 repl

To cleanly separate the code for the different architectures, startup code
has been moved to ports/qemu-arm/mcu/<arch>/.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-04 16:46:39 +10:00
Damien George
f769b4329b qemu-arm/Makefile: Clean up SRC and OBJ variables.
Signed-off-by: Damien George <damien@micropython.org>
2024-09-04 16:46:39 +10:00
Damien George
dc9ecd5860 qemu-arm: Factor board config to mk fragments.
Signed-off-by: Damien George <damien@micropython.org>
2024-09-04 16:46:39 +10:00
Damien George
9396572eee tools/mpy-tool.py: Support freezing rv32imc native code.
Signed-off-by: Damien George <damien@micropython.org>
2024-09-04 16:46:39 +10:00
Damien George
6be1dbc784 tests/run-tests.py: Automatically detect native arch and mpy-cross flag.
Now that some ports support multiple architectures (eg esp32 has both
Xtensa and RISC-V CPUs) it's no longer possible to set mpy-cross flags
based on the target, eg `./run-tests.py --target esp32`.  Instead this
commit makes it so the `-march=xxx` argument to mpy-cross is detected
automatically via evaluation of `sys.implementation._mpy`.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-04 16:34:01 +10:00
Damien George
838c490eb4 tests/net_inet: Update micropython.org certificate for SSL tests.
The Let's Encrypt root certificate has changed so needs updating in this
test.

Signed-off-by: Damien George <damien@micropython.org>
2024-09-04 16:28:39 +10:00
Angus Gratton
fee9d66e3a esp32: Disable hardware stack protection on ESP32-C3.
Workaround for what appears to be an upstream issue:
https://github.com/espressif/esp-idf/issues/14456

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-04 15:15:26 +10:00
Angus Gratton
a6c35aeee8 esp32: Fix ARDUINO_NANO_ESP32 build configuration.
Regression introduced by 5e692d04 now at MICROPY_HW_USB_CDC is set.

The ARDUINO_NANO_ESP32 specifically builds shared/tinyusb/mp_usb_cdc.c
for the 1200bps reset behaviour. However MicroPython esp32 doesn't yet
use the rest of the shared/tinyusb functionality.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-04 11:06:21 +10:00
Angus Gratton
5e692d0460 esp32: Add MICROPY_HW_USB_CDC macro for native USB-CDC serial.
This fixes issue of ESP32-S3 switching its config over to USB serial/JTAG
instead of native USB.

The the existing logic was hard to follow, adding this config macro makes
it easier to see which USB is in use and to have board definitions that
enable/disable different USB levels.

This commit also drops (nominal) support for manually setting
CONFIG_ESP_CONSOLE_USB_CDC in sdkconfig. No included board configs use this
and it didn't seem to work (if secondary console was set to the default USB
Serial/JTAG then there is no serial output on any port, and if secondary
console was set to None then linking fails.) Can be re-added if there's a
use case for it.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-03 14:28:26 +10:00
Angus Gratton
6ad6297ef7 esp32: Fix ESP32-C3 USB serial/jtag peripheral pre-IDF 5.1.
Regression in 0a11832cd in IDF 5.0.x where macro
CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED is not defined.

With this patch, ESP32-S3 still USB Serial/JTAG incorrectly (now on all
ESP-IDF versions).

Closes #15701

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-09-03 10:27:28 +10:00
Gabor Kiss-Vamosi
3033effffa
Merge pull request #87 from liamHowatt/fix/leading-underscore-structs
fix(submodule): lv_binding_micropython: check structs for alternative name in JSON
2024-09-02 17:02:58 +02:00
liamHowatt
ac025d583d check structs for alternative name in JSON 2024-09-02 09:59:21 -04:00