mirror of
https://github.com/apache/nuttx.git
synced 2026-10-13 01:00:12 +00:00
The FIFO watermark flag is a level: it stays high until the worker actually drains the FIFO below the threshold. Configuring INT1 as RISING made that a race the driver could lose permanently. lsm6ds3trc_interrupt() disables its IRQ on entry and re-enables it after the worker has run. With an edge trigger, if the line is still high when the IRQ is re-enabled -- which is precisely what happens whenever a drain does not take the FIFO below the watermark -- there is no new low-to-high transition left to detect, and the line goes mute forever. Observed as a board that serviced exactly one watermark after boot and then never again, reproducible 2 out of 2 reflashes. ONHIGH matches the physical meaning of the pin and is immune to it: a level trigger re-asserts on its own for as long as the condition holds, and the disable/enable pairing around servicing is what stops that from live-locking. Validated with more than 900 consecutive drains (~100 min) including real sleep -> GPIO-wake -> resume transitions, the exact case that used to wedge. Signed-off-by: Felipe Moura <moura.fmo@gmail.com> Assisted-by: Claude:claude-opus-5 |
||
|---|---|---|
| .. | ||
| arm | ||
| arm64 | ||
| avr | ||
| dummy | ||
| hc/m9s12 | ||
| mips | ||
| misoc/lm32/misoc | ||
| or1k/mor1kx/or1k | ||
| renesas | ||
| risc-v | ||
| sim/sim/sim | ||
| sparc | ||
| tricore | ||
| x86/qemu/qemu-i486 | ||
| x86_64/qemu/qemu-intel64 | ||
| xtensa | ||
| z16/z16f/z16f2800100zcog | ||
| z80 | ||
| .gitignore | ||
| Board.mk | ||
| boardctl.c | ||
| CMakeLists.txt | ||
| dummy.c | ||
| Kconfig | ||
| Makefile | ||