Commit Graph
27330 Commits
Author SHA1 Message Date
J. Nick Koston 6cdcdbb798 Remove flash-reading return address verification
Reading IROM addresses from IROM code causes LoadStoreError on ESP8266
due to the direct-mapped flash cache — the reading code and target
address can share a cache line, evicting the function mid-execution.

Remove is_return_addr() and rely on linker-symbol IROM bounds
(_irom0_text_start/_end) to eliminate false positives instead. This
is less precise but crash-safe.
2026-04-05 12:24:05 -10:00
J. Nick Koston af6e10816d Fix namespace for progmem_read_byte 2026-04-05 12:12:06 -10:00
J. Nick Koston b99a4aab98 Fix crash in is_return_addr reading unmapped flash
Two issues:
1. safe_read_code_byte used volatile cast which prevented the compiler
   from using flash-safe l32i instructions, causing LoadStoreError on
   IROM addresses. Replace with progmem_read_byte.
2. IROM upper bound (0x40400000 = 2MB) was too generous for devices
   with smaller flash (e.g. 1MB), causing both false positives in the
   backtrace and faults when is_return_addr tried to verify CALL
   instructions at unmapped addresses. Use _irom0_text_start/end
   linker symbols for precise firmware code bounds.
2026-04-05 12:11:38 -10:00
J. Nick Koston a328726bfd Derive exception cause range bounds from table sizes 2026-04-05 12:08:05 -10:00
J. Nick Koston c1c45cfd23 Derive magic word masks from bit positions at compile time 2026-04-05 12:07:30 -10:00
J. Nick Koston 5aac3e1317 Replace switch tables with PROGMEM_STRING_TABLE to save 132B RAM
GCC generates CSWTCH jump tables in RAM rodata on ESP8266 for switch
statements. Convert exception cause and reset reason lookups to
PROGMEM_STRING_TABLE which keeps data in flash. Exception causes are
split into two tables (0-9 and 12-29) to stay under the 255-byte
blob limit. Added static_asserts on reset reason enum values.
2026-04-05 12:06:46 -10:00
J. Nick Koston ac76f1fc3d Add return address verification and scan full stack
- Verify each candidate is a real return address by checking that the
  instruction at addr-3 is a CALL/CALLX (Xtensa 3-byte call opcodes).
  This filtering happens at log time when flash is readable, similar
  to the ESP32 RISC-V handler's is_return_addr() approach.
- Scan the entire stack instead of just 64 words — with filtering,
  false positives from stale stack data are eliminated.
- Skip epc1 during scanning (already reported as fault PC).
- Increase to 16 RTC slots (72 bytes) for broader capture before
  filtering. Bump hint buffer to 256 for more addresses.
2026-04-05 12:02:05 -10:00
J. Nick Koston a89a4e1353 Always log EXCVADDR for exception resets
A null EXCVADDR (0x00000000) is the key diagnostic for null pointer
crashes (LoadProhibited/StoreProhibited). Suppressing it when zero
hides the most useful information.
2026-04-05 11:59:02 -10:00
J. Nick Koston 73326bce07 Fix stale docstring and extract stack scan limit constant 2026-04-05 11:56:43 -10:00
J. Nick Koston eb7ce1b684 Replace magic numbers with named constexpr constants 2026-04-05 11:54:37 -10:00
J. Nick Koston 0d93f2fcd1 Increase max backtrace to 8 entries for deep ESP8266 stacks
ESP8266 call stacks are typically deep due to Arduino/LWIP/WiFi
layers. 8 entries (36 bytes, 9 RTC blocks) better captures the
WiFi -> LWIP -> socket -> ESPHome -> component call chain.
2026-04-05 11:54:01 -10:00
J. Nick Koston 8dc30bc54d Reduce RTC memory footprint from 32 to 20 bytes
Pack backtrace count into the magic word and reduce max backtrace
entries from 6 to 4, saving 3 RTC blocks (12 bytes).
2026-04-05 11:52:02 -10:00
J. Nick Koston 50073a24b5 [esp8266] Add crash handler for post-mortem diagnostics
Add a crash handler for ESP8266 that captures and logs crash data
from previous boots, matching the existing ESP32 and RP2040
implementations. Uses the SDK's rst_info (always available after
reboot) for basic crash info and Arduino's custom_crash_callback
to scan the stack for return addresses stored in RTC user memory.
2026-04-05 11:50:35 -10:00
J. Nick Koston 57c7f6e32f Merge remote-tracking branch 'upstream/dev' into integration 2026-04-05 11:28:56 -10:00
J. Nick Koston 88f47c5241 Merge remote-tracking branch 'upstream/api-noise-split-state-action' into integration 2026-04-05 11:15:50 -10:00
J. Nick Koston 9a8d17e3c8 [api] Split Noise handshake state_action_ to reduce stack pressure
On RP2040, the core0 stack lives in a 4KB SCRATCH_Y RAM bank. The Noise
protocol handshake calls into curve25519 scalar multiplication which
needs ~2KB+ of stack. When all handshake state branches lived in a
single function, the compiler allocated stack space for all branches
simultaneously (SERVER_HELLO msg[46]+mac[13], HANDSHAKE buffer[65],
NoiseBuffer, etc.), leaving insufficient headroom for the crypto path.

Split state_action_() into per-state methods so each state's locals
occupy separate stack frames. The crypto path (WRITE_MESSAGE) now only
carries its own 85 bytes of locals instead of ~200+ bytes from all
branches combined.
2026-04-05 11:12:47 -10:00
c7a163441e [ethernet] Add interface configuration variable for esp-idf (#10285)
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2026-04-05 20:57:41 +00:00
J. Nick Koston 1582e230dd Merge branch 'enhancement/ethernet-spi-interface' into integration 2026-04-05 10:32:44 -10:00
J. Nick Koston ddb024cfb1 Merge branch 'dev' into enhancement/ethernet-spi-interface 2026-04-05 10:32:31 -10:00
J. Nick Koston 47c5734793 bot comments 2026-04-05 10:00:45 -10:00
J. Nick Koston 3509e1ee21 Merge remote-tracking branch 'origin/fix-ota-handshake-flush' into integration 2026-04-05 09:54:52 -10:00
J. Nick Koston a084f5199c Merge remote-tracking branch 'upstream/dev' into integration 2026-04-05 09:53:52 -10:00
J. Nick Koston 2243e34981 [ota] Fix OTA handshake failure by switching to blocking before feature ACK write
Switch to blocking mode before writing the feature ACK byte in the
no-password path. lwIP may not transmit data written in non-blocking
mode when the socket immediately switches to blocking and blocks in
recv(). Writing the feature ACK in blocking mode ensures it is flushed
to the wire before entering the blocking data transfer phase.
2026-04-05 09:51:37 -10:00
J. Nick Koston bf39dfef6a [ota] Fix OTA handshake failure by flushing pending writes before blocking read
Add delay(0) after switching to blocking mode in handle_data_() to
flush any pending non-blocking writes (the feature ACK byte) before
entering the blocking read loop. lwIP may not transmit data written
in non-blocking mode until the task yields.
2026-04-05 09:49:08 -10:00
J. Nick Koston f070ef6d08 preen 2026-04-05 09:43:58 -10:00
J. Nick Koston c2f5b5f770 amek proper validator 2026-04-05 09:36:37 -10:00
J. Nick Koston bfb6f2d0fd match 2026-04-05 09:36:18 -10:00
J. Nick Koston 8f26903c8c match 2026-04-05 09:34:26 -10:00
J. Nick Koston 380aa0b3ee touch ups 2026-04-05 09:28:36 -10:00
J. Nick Koston 4e9e505829 touch ups 2026-04-05 09:27:37 -10:00
ae9068a4c4 [internal_temperature] Add support for LN882X (Lightning LN882H) (#15370)
Co-authored-by: Bl00d-B0b <Bl00d-B0b@users.noreply.github.com>
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
2026-04-05 09:17:12 -10:00
J. Nick Koston dae8ea1b04 [mcp23xxx][pi4ioe5v6408] Add optional interrupt pin to eliminate polling (#15445) 2026-04-05 08:26:39 -10:00
Ross Tyler c20da3e951 Merge branch 'dev' into enhancement/ethernet-spi-interface 2026-04-05 07:37:56 -07:00
Javier Peletier 2d7eb116f2 [spi] Enable host-platform builds for unit testing (#15188) 2026-04-05 20:11:49 +10:00
J. Nick Koston 9ea27e68ee [pcf8574][pca9554] Disable loop when all pins are outputs (#15455) 2026-04-04 22:52:40 -10:00
J. Nick Koston 4a0d424d58 Merge remote-tracking branch 'upstream/pcf8574-pca9554-disable-loop-output-only' into integration 2026-04-04 22:11:51 -10:00
J. Nick Koston 411d2f8beb Merge remote-tracking branch 'upstream/dev' into integration 2026-04-04 22:11:48 -10:00
J. Nick Koston 62bb8aeeda [pcf8574][pca9554] Disable loop when all pins are outputs
When an expander has only output pins configured, loop() was still
running every iteration to invalidate the read cache. Since no
digital_read() calls will ever be made, this work is wasted.

Now disable_loop() is called unconditionally in setup(). For polling
mode, loop is re-enabled only when pin_mode() registers an input pin.
For interrupt-driven mode, behavior is unchanged as the ISR already
manages loop enablement.
2026-04-04 22:11:04 -10:00
Clyde StubbsandJonathan Swoboda 4d2062282e [mipi_spi] Run spi final validation (#15418)
Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
2026-04-04 21:11:49 -04:00
J. Nick Koston 2d9a42e4ba [pcf8574][pca9554] Add optional interrupt pin to eliminate polling (#15444) 2026-04-04 13:56:21 -10:00
J. Nick Koston 2b4448db02 Merge remote-tracking branch 'upstream/move-wake-to-core' into integration 2026-04-04 13:43:10 -10:00
J. Nick Koston 586196779b Merge remote-tracking branch 'upstream/gpio-expander-interrupt-pin-2' into integration 2026-04-04 13:43:06 -10:00
J. Nick Koston c17df9aaa3 Deduplicate RP2040 wake: wake_loop_threadsafe delegates to wake_loop_any_context 2026-04-04 13:19:03 -10:00
J. Nick Koston 2ead905e44 Fix ESP8266 wakeable_delay wake loss, use BaseType_t* for ISR-safe API 2026-04-04 13:13:41 -10:00
J. Nick Koston 0b90dbf328 Document LibreTiny IRAM_ATTR and ISR-safe wake limitations 2026-04-04 13:03:11 -10:00
J. Nick Koston e2c71419b6 Revert LibreTiny ISR change: FreeRTOS port lacks vTaskNotifyGiveFromISR/portYIELD_FROM_ISR 2026-04-04 13:00:57 -10:00
J. Nick Koston 670a23b4c1 Fix LibreTiny ISR safety: use vTaskNotifyGiveFromISR in wake_loop_any_context, update stale comment 2026-04-04 12:59:34 -10:00
J. Nick Koston 619370170c Remove socket_wake/socket_delay: callers use wake_loop_any_context/wakeable_delay directly 2026-04-04 12:56:13 -10:00
J. Nick Koston e8a8add6c3 Remove duplicate wake code: socket_delay/socket_wake delegate to core wake mechanism 2026-04-04 12:48:15 -10:00
J. Nick Koston 18497d5a7f Add backward-compat defines in require_wake_loop_threadsafe, remove pointless host socket consumption 2026-04-04 12:41:30 -10:00