nuttx/drivers/rpmsg
Bowen Wang 42809c17a7 drivers/rpmsg_port_uart: use ping-pong wake/ack to fix wake/ack issue
Orignal issue: the new wakeup process may be waked by the last Ack
command from peer, and lead the data is lost because peer may have
enter into the sleep mode.

W = Wake, A = WakeAck, R = Relax, D = Data
TX: [0]W-[1]R--------[4]W----[6]DDDDDDDDDDDD-------
RX: ------------[3]A----[5]Enter Sleep-------------

In this figure, Ack command [3] wakeup the wakeup process [4] because
[3] may be received with a delay.

Now use the ping-pong wake/ack command to fix this issue because
the different wake/ack command can block the last Ack command
wake the wrong wakeup process.
W1 = Wake1, A1 = WakeAck1, W2 = Wake2, A2 = WakeAck2, R = Relax, D = Data
TX: [0]W1-[1]R-------[4]W2----------[6]DDDDDDDDDDD--
RX: ------------[3]A1---------[5]A2-----------------

With this patch, the Ack comamnd [3] can't wakeup the wakeup process [4]
because [3] is Ack1 but [4] is Wake2, and local will not send data until
peer response a [5]Ack2.

Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
2026-01-28 19:23:41 +08:00
..
CMakeLists.txt drivers/rpmsg: remove unnecessary header files, revise make.def and cmake 2026-01-19 23:14:53 +08:00
Kconfig drivers/rpmsg_port_uart: support wake up by peer core 2026-01-28 19:23:41 +08:00
Make.defs drivers/rpmsg: remove unnecessary header files, revise make.def and cmake 2026-01-19 23:14:53 +08:00
rpmsg.c drivers/rpmsg: refactor internal APIs to private header 2026-01-26 17:23:31 -03:00
rpmsg.h drivers/rpmsg: refactor internal APIs to private header 2026-01-26 17:23:31 -03:00
rpmsg_ping.c sched/sleep: replace all Signal-based sleep implement to Scheduled sleep 2025-10-17 14:05:02 +08:00
rpmsg_ping.h drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
rpmsg_port.c drivers/rpmsg: fix struct alignment issue by removing zero array member 2026-01-26 21:12:34 +08:00
rpmsg_port.h drivers/rpmsg: refactor internal APIs to private header 2026-01-26 17:23:31 -03:00
rpmsg_port_spi.c drivers/rpmsg_port_spi: fix SPI exchange length calculation 2026-01-26 21:17:27 +08:00
rpmsg_port_spi_slave.c drivers/rpmsg_port_spi_slave: add getrecvbuf callback for zero-copy receive 2026-01-26 21:17:27 +08:00
rpmsg_port_uart.c drivers/rpmsg_port_uart: use ping-pong wake/ack to fix wake/ack issue 2026-01-28 19:23:41 +08:00
rpmsg_router.h drivers/rpmsg: refactor internal APIs to private header 2026-01-26 17:23:31 -03:00
rpmsg_router_edge.c drivers/rpmsg: unify cpuname/local_cpuname to struct rpmsg_s 2026-01-24 17:10:18 +08:00
rpmsg_router_hub.c drivers/rpmsg: use explicit NULL comparisons for pointer checks 2026-01-22 22:08:32 +08:00
rpmsg_test.c drivers/rpmsg: add rpmsg_test to test rpmsg hold/release rx buffer 2026-01-08 22:44:35 +08:00
rpmsg_test.h drivers/rpmsg: add rpmsg_test to test rpmsg hold/release rx buffer 2026-01-08 22:44:35 +08:00
rpmsg_virtio.c drivers/rpmsg: refactor internal APIs to private header 2026-01-26 17:23:31 -03:00
rpmsg_virtio_ivshmem.c drivers/rptun and rpmsg_virtio: remove cmd initialize 2026-01-19 14:18:27 +08:00
rpmsg_virtio_lite.c drivers/rpmsg: refactor internal APIs to private header 2026-01-26 17:23:31 -03:00