Commit Graph
24440 Commits
Author SHA1 Message Date
J. Nick Koston 459f08181e Merge remote-tracking branch 'upstream/rp2040-crash-handler' into integration 2026-03-10 14:04:53 -10:00
J. Nick Koston d6efde5a5d Merge remote-tracking branch 'upstream/rp2040-accept-no-irq-malloc' into integration 2026-03-10 14:04:45 -10:00
J. Nick Koston 6718cd6df2 Account for xPSR alignment padding, use reinterpret_cast, and use idedata ELF path
- Check xPSR bit 9 to detect hardware alignment padding word in the
  exception frame, fixing pre-fault SP and stack scan start offset
- Replace C-style pointer casts with reinterpret_cast<uintptr_t>
- Use idedata.firmware_elf_path instead of hardcoded path in decoder
2026-03-10 14:04:06 -10:00
J. Nick Koston 49024c240b Register temporary err callback on queued PCBs to prevent use-after-free
Between accept_fn_ storing a raw PCB and accept() picking it up, the
connection could error (RST, timeout). Without an error callback, lwip
frees the PCB silently, leaving a dangling pointer. When accept() later
creates LWIPRawImpl with it, the use-after-free corrupts the heap.

Fix: register a lightweight error callback (no allocation) in accept_fn_
that nulls the array slot when the PCB is freed. accept() checks for
null and skips freed PCBs. After shifting the array, tcp_arg pointers
are updated for remaining entries.
2026-03-10 14:02:56 -10:00
J. Nick Koston 352150c7f1 Register temporary err callback on queued PCBs to prevent use-after-free
Between accept_fn_ storing a raw PCB and accept() picking it up, the
connection could error (RST, timeout). Without an error callback, lwip
frees the PCB silently, leaving a dangling pointer. When accept() later
creates LWIPRawImpl with it, the use-after-free corrupts the heap.

Fix: register a lightweight error callback (no allocation) in accept_fn_
that nulls the array slot when the PCB is freed. accept() checks for
null and skips freed PCBs. After shifting the array, tcp_arg pointers
are updated for remaining entries.
2026-03-10 14:02:43 -10:00
J. Nick Koston ee2425878d Merge branch 'rp2040-accept-no-irq-malloc' into integration 2026-03-10 13:57:03 -10:00
J. Nick Koston 9b15f623b1 Merge remote-tracking branch 'upstream/rp2040-crash-handler' into integration 2026-03-10 13:55:57 -10:00
J. Nick Koston e5c879290e [socket] Fix RP2040 heap corruption from malloc in lwip accept IRQ callback 2026-03-10 13:54:50 -10:00
J. Nick Koston c2f7fa4009 cleanup 2026-03-10 13:54:10 -10:00
J. Nick Koston bbca87a375 Merge branch 'rp2040-crash-handler' into integration 2026-03-10 13:47:15 -10:00
J. Nick Koston ee12cba23c Use SDK defines SRAM_END and XIP_BASE instead of magic numbers 2026-03-10 13:47:09 -10:00
J. Nick Koston f92f957af0 Narrow broad except to OSError and CalledProcessError 2026-03-10 13:44:43 -10:00
J. Nick Koston e20e8b9761 Merge branch 'rp2040-crash-handler' into integration 2026-03-10 13:40:01 -10:00
J. Nick Koston 7113e41550 Address review feedback: RP2350 compat, noreturn, addr2line hint
- Add #if defined(PICO_RP2350) for SRAM end (520KB vs 264KB) so
  stack scanning works on both RP2040 and RP2350
- Widen flash range check to 4MB for RP2350
- Add __attribute__((noreturn)) to hard_fault_handler_c
- Mark exc_return parameter as unused via /*exc_return*/
- Build addr2line hint line with all addresses (PC, LR, and BT*)
  so users can copy-paste a single command for full decode
2026-03-10 13:38:42 -10:00
J. Nick Koston c017bfc35b Add comment explaining ESP_LOGE over ESP_LOGCONFIG 2026-03-10 13:34:37 -10:00
J. Nick Koston 045bef53fe Merge branch 'rp2040-crash-handler' into integration 2026-03-10 13:32:07 -10:00
J. Nick Koston 3359f541b1 Widen flash range to 2MB for stack scan 2026-03-10 13:31:48 -10:00
J. Nick Koston 20d884a2de Replace #define with static constexpr for clang-tidy 2026-03-10 13:31:24 -10:00
J. Nick Koston fcbbfd8dd9 Merge branch 'rp2040-crash-handler' into integration 2026-03-10 13:29:55 -10:00
J. Nick Koston 192080f6d3 Add references for HardFault handler asm pattern 2026-03-10 13:29:24 -10:00
J. Nick Koston a3aff62e4c Use combined namespace esphome::rp2040 2026-03-10 13:28:58 -10:00
J. Nick Koston 5f56f266b5 [rp2040] Add HardFault crash handler with backtrace
Add a crash handler for RP2040 that captures register state and stack
backtrace when a HardFault occurs, stores it in watchdog scratch
registers (which survive reboot), and logs it on the next boot.

- Override weak isr_hardfault with Cortex-M0+ compatible handler
- Save PC, LR, SP to watchdog scratch registers
- Scan stack for return addresses to provide deeper backtrace
- Log crash data immediately after logger initialization
- Add addr2line auto-decoding in CLI serial log viewer
2026-03-10 13:26:27 -10:00
J. Nick Koston 829448a5c6 Merge remote-tracking branch 'upstream/dev' into integration 2026-03-10 12:33:56 -10:00
Thomas Rupprecht dcbf3c8728 [esp32] gpio type improvements (#14517) 2026-03-10 18:18:35 -04:00
J. Nick Koston 30c8c68703 [socket] Fix RP2040 TCP race condition between lwip callbacks and main loop (#14679) 2026-03-10 11:22:23 -10:00
9513edc468 [dew_point] Add dew_point sensor component (#14441)
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
2026-03-10 17:17:13 -04:00
J. Nick KostonandClaude Opus 4.6 6356e3def9 [core] Warn on crystal frequency mismatch during serial upload (#14582)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:42:38 +00:00
J. Nick Koston 58e65f9355 Merge remote-tracking branch 'upstream/dev' into integration 2026-03-10 10:39:58 -10:00
Jonathan SwobodaandClaude Opus 4.6 8d988723cd [config] Allow !extend/!remove on components without id in schema (#14682)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:38:50 -04:00
J. Nick Koston 043290c204 Merge remote-tracking branch 'upstream/dev' into integration
# Conflicts:
#	esphome/__main__.py
#	esphome/core/log.cpp
#	esphome/core/log.h
#	esphome/util.py
#	tests/component_tests/logger/test_logger.py
#	tests/component_tests/logger/test_logger.yaml
#	tests/unit_tests/test_util.py
2026-03-10 10:34:19 -10:00
Kevin AhrendtandJ. Nick Koston 8ca6ee4349 [speaker_source] Add new media player (#14649)
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
2026-03-10 20:25:26 +00:00
mahumpulaandJonathan Swoboda 780e009bf4 [runtime_image] Add support for 8bit BMPs and fix existing issues (#10733)
Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
2026-03-10 16:23:49 -04:00
Jonathan SwobodaandClaude Opus 4.6 04d80cfb75 [esp32_hosted] Bump esp_wifi_remote and esp_hosted versions (#14680)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 15:17:30 -04:00
J. Nick Koston 9404eadaf8 [rp2040_ble] Add BLE component for RP2040/RP2350 (#14603) 2026-03-10 09:12:28 -10:00
J. Nick Koston 4d2ef09a29 [log] Detect early log calls before logger init and optimize hot path (#14538) 2026-03-10 09:12:10 -10:00
J. Nick Koston 89bb5d9e42 [core] Require explicit synchronous= for register_action (#14606) 2026-03-10 09:11:45 -10:00
J. Nick Koston 9dd3ec258c [scheduler] Replace unique_ptr with raw pointers, add leak detection (#14620) 2026-03-10 09:11:28 -10:00
J. Nick Koston c709010c4c [api] Replace std::vector<uint8_t> with APIBuffer to skip zero-fill (#14593) 2026-03-10 09:11:12 -10:00
J. Nick KostonandClaude Opus 4.6 6e468936ec [api] Inline ProtoVarInt::parse fast path and return consumed in struct (#14638)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 09:10:55 -10:00
J. Nick Koston 2c7ef4f758 [rp2040] Use picotool for BOOTSEL upload and improve upload UX (#14483) 2026-03-10 09:10:33 -10:00
Diorcet Yann 06a127f64b [core] ESP-IDF compilation fixes (#14541) 2026-03-10 11:52:48 -04:00
Anunay KulshresthaandClaude fba21e6dd4 [bl0940] Fix reset_calibration() declaration missing from header (#14676)
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-10 10:44:19 -04:00
J. Nick Koston 4d1e1645dc Merge branch 'fix-rp2040-tcp-race' into integration 2026-03-10 01:08:22 -10:00
J. Nick Koston 81d12fd14a [socket] Hold lwip lock for entire write() operation
Same pattern as writev — write() calls internal_write_() then
internal_output_(), each acquiring the lock separately. Hold
the lock at the outer scope so inner calls just bump the
recursion counter.
2026-03-10 00:57:36 -10:00
J. Nick Koston cc05bf3ed2 [socket] Add LWIP_LOCK to socket factory functions
tcp_new() is an lwip core API call that must be bracketed with
the lwip lock on RP2040 per pico-sdk docs. Add LWIP_LOCK() to
socket() and socket_listen() factory functions.
2026-03-10 00:55:34 -10:00
J. Nick Koston c182c0c74f [socket] Hold lwip lock for entire readv/writev scatter-gather operation
Avoid repeated lock acquire/release cycles per iovec element.
The recursive mutex re-entry in inner calls is nearly free (counter
bump), while the outer lock prevents the expensive IRQ disable/enable
on each iteration.
2026-03-10 00:53:01 -10:00
J. Nick Koston a88e9b8146 [socket] Fix RP2040 TCP race condition between lwip callbacks and main loop
On RP2040 (Pico W), arduino-pico sets PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1,
which means lwip callbacks (recv_fn, accept_fn, err_fn) run from a PendSV
interrupt — not the main loop. This allows them to preempt read(), write(),
close(), and accept() at any point, causing race conditions on shared state
like the rx_buf_ pbuf chain.

The most critical race: recv_fn calls pbuf_cat(rx_buf_, pb) while read() is
freeing nodes in the same chain, leading to use-after-free and lwip's
"Creating an infinite loop" assertion panic. This is the root cause of #10681.

Fix: implement RP2040's LwIPLock (previously a no-op) to call
cyw43_arch_lwip_begin/end, which acquires the pico-sdk async_context recursive
mutex. Add LWIP_LOCK() guards to all main-loop lwip API call sites in the
socket layer.

On ESP8266, lwip callbacks run cooperatively from the main loop, so
LwIPLock remains a no-op.

Closes #10681
2026-03-10 00:34:20 -10:00
J. Nick Koston 4b50d14496 [serial_proxy] Reduce loop() overhead by disabling when idle and splitting read path (#14673) 2026-03-10 02:10:03 -05:00
J. Nick Koston 1202f54a75 Merge branch 'serial-proxy-loop-stack-optimization' into integration 2026-03-09 20:49:48 -10:00
J. Nick Koston 5d6301d312 missing guard 2026-03-09 20:42:41 -10:00