Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f091cea
chore(vendor): bump micropython to 1.28.0
mmilata Jul 13, 2026
cd798e9
refactor(core): replace hexlify with bytes.hex()
mmilata Jul 7, 2026
ee70861
refactor(core): bundle the utimeq module
mmilata Jul 13, 2026
cb461ee
refactor(core): fix renamed micropython modules
mmilata Jul 8, 2026
895873f
refactor(core): micropython time module
mmilata Jul 13, 2026
1ba99ce
refactor(core): use mp_obj_new_str_from_cstr
mmilata Jul 13, 2026
ceab7f7
refactor(core): use mp_obj_new_str_from_vstr
mmilata Jul 9, 2026
83ee718
refactor(core): replace m_new_obj_with_finaliser
mmilata Jul 9, 2026
c89df21
refactor(core): switch to slots-based mp_obj_type_t
mmilata Jul 9, 2026
b1a372c
refactor(core/rust): update obj_type! for slots-based mp_obj_type_t
mmilata Jul 10, 2026
82b28d6
refactor(core/rust): bindgen wrapper for calling static micropython f…
mmilata Jul 10, 2026
db6ee8b
refactor(core): update users of micropython uzlib
mmilata Jul 10, 2026
78ade4b
refactor(core): get rid of the STATIC macro
mmilata Jul 10, 2026
c3a91fa
refactor(core): sync projects/unix/main.c with micropython
mmilata Jul 13, 2026
ca1a7c3
build(core): adjust mpy-cross paths
mmilata Jul 13, 2026
23e5027
build(core): collect micropython GC root pointers
mmilata Jul 10, 2026
4e5f6d6
refactor(core): deterministic share word confirmation
mmilata Jul 16, 2026
a432159
refactor(core): assorted micropython-1.28.0 fixes
mmilata Jul 14, 2026
c1da0d1
refactor(core): micropython-1.28.0 embedded fixups
mmilata Jul 14, 2026
11fb2a1
refactor(core): port modtrezorutils-meminfo to micropython-1.28.0
mmilata Jul 14, 2026
6318781
fixup! refactor(core): deterministic share word confirmation
mmilata Jul 30, 2026
8e17b86
refactor(core): disable sys.argv for firmware
mmilata Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 21 additions & 7 deletions core/SConscript.firmware
Original file line number Diff line number Diff line change
Expand Up @@ -314,24 +314,23 @@ SOURCE_MOD += [

# rust mods
SOURCE_MOD += [
'embed/upymod/bindgen-static.c',
'embed/upymod/rustmods.c',
]

# modutime
# modutime, modtimeq
SOURCE_MOD += [
'embed/upymod/modtimeq.c',
'embed/upymod/modutime.c',
]

SOURCE_MICROPYTHON = [
'vendor/micropython/extmod/modubinascii.c',
'vendor/micropython/extmod/modtime.c',
'vendor/micropython/extmod/moductypes.c',
'vendor/micropython/extmod/moduheapq.c',
'vendor/micropython/extmod/modutimeq.c',
'vendor/micropython/extmod/utime_mphal.c',
'vendor/micropython/shared/libc/abort_.c',
'vendor/micropython/shared/libc/printf.c',
'vendor/micropython/shared/runtime/gchelper_m3.s',
'vendor/micropython/shared/runtime/gchelper_native.c',
'vendor/micropython/shared/runtime/gchelper_thumb.s'
'vendor/micropython/shared/runtime/interrupt_char.c',
'vendor/micropython/shared/runtime/pyexec.c',
'vendor/micropython/shared/runtime/stdout_helpers.c',
Expand All @@ -350,6 +349,7 @@ SOURCE_MICROPYTHON = [
'vendor/micropython/py/builtinhelp.c',
'vendor/micropython/py/builtinimport.c',
'vendor/micropython/py/compile.c',
'vendor/micropython/py/cstack.c',
'vendor/micropython/py/emitbc.c',
'vendor/micropython/py/emitcommon.c',
'vendor/micropython/py/emitglue.c',
Expand Down Expand Up @@ -378,6 +378,7 @@ SOURCE_MICROPYTHON = [
'vendor/micropython/py/objboundmeth.c',
'vendor/micropython/py/objcell.c',
'vendor/micropython/py/objclosure.c',
'vendor/micropython/py/objcode.c',
'vendor/micropython/py/objcomplex.c',
'vendor/micropython/py/objdict.c',
'vendor/micropython/py/objenumerate.c',
Expand Down Expand Up @@ -560,9 +561,10 @@ env.Replace(
MAKEQSTRDATA='$PYTHON vendor/micropython/py/makeqstrdata.py',
MAKEVERSIONHDR='$PYTHON vendor/micropython/py/makeversionhdr.py',
MAKEMODULEDEFS='$PYTHON vendor/micropython/py/makemoduledefs.py',
MAKEROOTPOINTERS='$PYTHON vendor/micropython/py/make_root_pointers.py',
MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py',
MPY_TOOL='$PYTHON vendor/micropython/tools/mpy-tool.py',
MPY_CROSS='vendor/micropython/mpy-cross/mpy-cross -O' + BYTECODE_OPTIMIZATION,
MPY_CROSS='vendor/micropython/mpy-cross/build/mpy-cross -O' + BYTECODE_OPTIMIZATION,
PB2PY='$PYTHON ../common/protob/pb2py',
)

Expand Down Expand Up @@ -636,6 +638,18 @@ compressed_data = env.GenerateCompressed(

env.Ignore(micropy_defines, compressed_data)

#
# Micropython root pointers
#

rootpointers_collected = env.CollectRootPointers(
target='genhdr/root_pointers.collected', source=micropy_defines)

rootpointers_data = env.GenerateRootPointers(
target='genhdr/root_pointers.h', source=rootpointers_collected)

env.Ignore(micropy_defines, rootpointers_data)

#
# Micropython version
#
Expand Down
34 changes: 26 additions & 8 deletions core/SConscript.unix
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,10 @@ CPPDEFINES_HAL = []
PATH_HAL = []
CPPDEFINES_MOD = []
SOURCE_MOD = [
'vendor/micropython/extmod/vfs.c',
'vendor/micropython/extmod/vfs_posix.c',
'vendor/micropython/extmod/vfs_posix_file.c',
'vendor/micropython/extmod/vfs_reader.c',
]
SOURCE_MOD_CRYPTO = []
RUST_UI_FEATURES = []
Expand Down Expand Up @@ -296,21 +299,20 @@ SOURCE_MOD += [

# rust mods
SOURCE_MOD += [
'embed/upymod/bindgen-static.c',
'embed/upymod/rustmods.c',
]

# modutime
# modutime, modtimeq
SOURCE_MOD += [
'embed/upymod/modtimeq.c',
'embed/upymod/modutime.c',
]

SOURCE_MICROPYTHON = [
'vendor/micropython/extmod/modubinascii.c',
'vendor/micropython/extmod/modtime.c',
'vendor/micropython/extmod/moductypes.c',
'vendor/micropython/extmod/moduheapq.c',
'vendor/micropython/extmod/moduos.c',
'vendor/micropython/extmod/modutimeq.c',
'vendor/micropython/extmod/utime_mphal.c',
'vendor/micropython/extmod/modos.c',
'vendor/micropython/shared/readline/readline.c',
'vendor/micropython/shared/timeutils/timeutils.c',
'vendor/micropython/py/argcheck.c',
Expand All @@ -326,6 +328,7 @@ SOURCE_MICROPYTHON = [
'vendor/micropython/py/builtinhelp.c',
'vendor/micropython/py/builtinimport.c',
'vendor/micropython/py/compile.c',
'vendor/micropython/py/cstack.c',
'vendor/micropython/py/emitbc.c',
'vendor/micropython/py/emitcommon.c',
'vendor/micropython/py/emitglue.c',
Expand Down Expand Up @@ -354,7 +357,7 @@ SOURCE_MICROPYTHON = [
'vendor/micropython/py/modstruct.c',
'vendor/micropython/py/modsys.c',
'vendor/micropython/py/modthread.c',
'vendor/micropython/py/moduerrno.c',
'vendor/micropython/py/moderrno.c',
'vendor/micropython/py/mpprint.c',
'vendor/micropython/py/mpstate.c',
'vendor/micropython/py/mpz.c',
Expand All @@ -372,6 +375,7 @@ SOURCE_MICROPYTHON = [
'vendor/micropython/py/objbool.c',
'vendor/micropython/py/objboundmeth.c',
'vendor/micropython/py/objcell.c',
'vendor/micropython/py/objcode.c',
'vendor/micropython/py/objclosure.c',
'vendor/micropython/py/objcomplex.c',
'vendor/micropython/py/objdeque.c',
Expand Down Expand Up @@ -439,6 +443,7 @@ SOURCE_UNIX = [
'vendor/micropython/ports/unix/input.c',
'vendor/micropython/ports/unix/unix_mphal.c',
'vendor/micropython/shared/runtime/gchelper_generic.c',
'vendor/micropython/shared/runtime/pyexec.c',
]

if "app_loading" in FEATURES_WANTED:
Expand Down Expand Up @@ -575,9 +580,10 @@ env.Replace(
MAKEQSTRDATA='$PYTHON vendor/micropython/py/makeqstrdata.py',
MAKEVERSIONHDR='$PYTHON vendor/micropython/py/makeversionhdr.py',
MAKEMODULEDEFS='$PYTHON vendor/micropython/py/makemoduledefs.py',
MAKEROOTPOINTERS='$PYTHON vendor/micropython/py/make_root_pointers.py',
MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py',
MPY_TOOL='$PYTHON vendor/micropython/tools/mpy-tool.py',
MPY_CROSS='vendor/micropython/mpy-cross/mpy-cross -O' + BYTECODE_OPTIMIZATION,
MPY_CROSS='vendor/micropython/mpy-cross/build/mpy-cross -O' + BYTECODE_OPTIMIZATION,
PB2PY='$PYTHON ../common/protob/pb2py',
)

Expand Down Expand Up @@ -652,6 +658,18 @@ compressed_data = env.GenerateCompressed(

env.Ignore(micropy_defines, compressed_data)

#
# Micropython root pointers
#

rootpointers_collected = env.CollectRootPointers(
target='genhdr/root_pointers.collected', source=micropy_defines)

rootpointers_data = env.GenerateRootPointers(
target='genhdr/root_pointers.h', source=rootpointers_collected)

env.Ignore(micropy_defines, rootpointers_data)

#
# Micropython version
#
Expand Down
3 changes: 1 addition & 2 deletions core/embed/projects/firmware/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,13 +147,12 @@ int main_func(uint32_t cmd, void *arg) {
// Interpreter init
LOG_INF("Starting interpreter");
mp_init();
mp_obj_list_init(mp_sys_argv, 0);
mp_obj_list_init(mp_sys_path, 0);
mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__dot_frozen));

// Execute the main script
LOG_INF("Executing main script");
pyexec_frozen_module("main.py");
pyexec_frozen_module("main.py", false);

// Clean up
LOG_INF("Main script finished, cleaning up");
Expand Down
59 changes: 24 additions & 35 deletions core/embed/projects/firmware/mpconfigport.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@
#define MICROPY_ENABLE_SOURCE_LINE (1)
#endif
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT)
#define MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND (1)
#define MICROPY_STREAMS_NON_BLOCK (1)
#define MICROPY_MODULE_WEAK_LINKS (0)
#define MICROPY_CAN_OVERRIDE_BUILTINS (0)
#define MICROPY_USE_INTERNAL_ERRNO (1)
#define MICROPY_ENABLE_SCHEDULER (0)
Expand All @@ -92,6 +92,7 @@
#define MICROPY_PY_FUNCTION_ATTRS (1)
#define MICROPY_PY_DESCRIPTORS (0)
#define MICROPY_PY_DELATTR_SETATTR (0)
#define MICROPY_PY_BUILTINS_BYTES_HEX (1)
#define MICROPY_PY_BUILTINS_STR_UNICODE (1)
#define MICROPY_PY_BUILTINS_STR_CENTER (0)
#define MICROPY_PY_BUILTINS_STR_PARTITION (1)
Expand Down Expand Up @@ -130,37 +131,36 @@
#define MICROPY_PY_SYS_STDFILES (0)
#define MICROPY_PY_SYS_STDIO_BUFFER (0)
#define MICROPY_PY_SYS_PLATFORM "trezor"
#define MICROPY_PY_UERRNO (0)
#define MICROPY_PY_SYS_ARGV (0)
#define MICROPY_PY_ERRNO (0)
#define MICROPY_PY_THREAD (0)
#define MICROPY_PY_FSTRINGS (1)

// extended modules
#define MICROPY_PY_UCTYPES (!BITCOIN_ONLY) // used in FIDO
#define MICROPY_PY_UZLIB (0)
#define MICROPY_PY_UJSON (0)
#define MICROPY_PY_UOS (0)
#define MICROPY_PY_URE (0)
#define MICROPY_PY_URE_SUB (0)
#define MICROPY_PY_UHEAPQ (0)
#define MICROPY_PY_UHASHLIB (0)
#define MICROPY_PY_UHASHLIB_MD5 (0)
#define MICROPY_PY_UHASHLIB_SHA1 (0)
#define MICROPY_PY_UCRYPTOLIB (0)
#define MICROPY_PY_UBINASCII (1)
#define MICROPY_PY_UBINASCII_CRC32 (0)
#define MICROPY_PY_URANDOM (0)
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (0)
#define MICROPY_PY_USELECT (0)
#define MICROPY_PY_UTIME (1)
#define MICROPY_PY_UTIMEQ (1)
#define MICROPY_PY_UTIME_MP_HAL (1)
#define MICROPY_PY_DEFLATE (0)
#define MICROPY_PY_JSON (0)
#define MICROPY_PY_OS (0)
#define MICROPY_PY_RE (0)
#define MICROPY_PY_RE_SUB (0)
#define MICROPY_PY_HEAPQ (0)
#define MICROPY_PY_HASHLIB (0)
#define MICROPY_PY_HASHLIB_MD5 (0)
#define MICROPY_PY_HASHLIB_SHA1 (0)
#define MICROPY_PY_CRYPTOLIB (0)
#define MICROPY_PY_BINASCII (0)
#define MICROPY_PY_BINASCII_CRC32 (0)
#define MICROPY_PY_RANDOM (0)
#define MICROPY_PY_RANDOM_EXTRA_FUNCS (0)
#define MICROPY_PY_SELECT (0)
#define MICROPY_PY_TIME (1)
#define MICROPY_PY_OS_DUPTERM (0)
#define MICROPY_PY_LWIP_SOCK_RAW (0)
#define MICROPY_PY_MACHINE (0)
#define MICROPY_PY_UWEBSOCKET (0)
#define MICROPY_PY_WEBSOCKET (0)
#define MICROPY_PY_WEBREPL (0)
#define MICROPY_PY_FRAMEBUF (0)
#define MICROPY_PY_USOCKET (0)
#define MICROPY_PY_SOCKET (0)
#define MICROPY_PY_NETWORK (0)

// allocate traceback data only on debug builds
Expand All @@ -180,7 +180,8 @@

// by default contains nearest git tag, which may not be present in shallow
// repo, breaking reproducibility
#define MICROPY_BANNER_NAME_AND_VERSION ""
#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython"
#define MICROPY_BANNER_MACHINE "Trezor"

// ============= this ends common config section ===================

Expand All @@ -197,15 +198,6 @@ typedef int mp_int_t; // must be pointer size
typedef unsigned int mp_uint_t; // must be pointer size
typedef long mp_off_t;

#define MICROPY_BEGIN_ATOMIC_SECTION() (0)
#define MICROPY_END_ATOMIC_SECTION(state) (void)(state)
#define MICROPY_EVENT_POLL_HOOK \
do { \
extern void mp_handle_pending(bool); \
mp_handle_pending(true); \
__WFI(); \
} while (0);

#define MICROPY_HW_BOARD_NAME "TREZORv2"
#define MICROPY_HW_MCU_NAME "STM32F427xx"
#define MICROPY_HW_HAS_SDCARD 1
Expand All @@ -218,9 +210,6 @@ typedef long mp_off_t;
#define free(p) m_free(p)
#define realloc(p, n) m_realloc(p, n)

#define MICROPY_PORT_ROOT_POINTERS \
mp_obj_t trezorconfig_ui_wait_callback; \

// We need to provide a declaration/definition of alloca()
#include <alloca.h>

Expand Down
7 changes: 5 additions & 2 deletions core/embed/projects/firmware/mphalport.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,12 @@ int mp_hal_stdin_rx_chr(void) {
#endif
}

void mp_hal_stdout_tx_strn(const char *str, size_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
#ifdef USE_DBG_CONSOLE
dbg_console_write(str, len);
ssize_t written = dbg_console_write(str, len);
return (written > 0 ? written : 0);
#else
return 0;
#endif
}

Expand Down
16 changes: 16 additions & 0 deletions core/embed/projects/firmware/nlrthumb.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,22 @@ void nlr_pop(void) {
*top = (*top)->prev;
}

void nlr_push_jump_callback(nlr_jump_callback_node_t *node, nlr_jump_callback_fun_t fun) {
Comment thread
romanz marked this conversation as resolved.
nlr_jump_callback_node_t **top = &MP_STATE_THREAD(nlr_jump_callback_top);
node->prev = *top;
node->fun = fun;
*top = node;
}

void nlr_pop_jump_callback(bool run_callback) {
nlr_jump_callback_node_t **top = &MP_STATE_THREAD(nlr_jump_callback_top);
nlr_jump_callback_node_t *cur = *top;
*top = (*top)->prev;
if (run_callback) {
cur->fun(cur);
}
}

NORETURN __attribute__((naked)) void nlr_jump(void *val) {
nlr_buf_t **top_ptr = &MP_STATE_THREAD(nlr_top);
nlr_buf_t *top = *top_ptr;
Expand Down
Loading