As determined by experimentation and asking a hardware person, the FIFO in the Cadence IP is actually only 8 entries long, not 32. This is fixed in patch #1. As a bonus, patches #2 and #3 fix two other things I noticed while debugging this. Changes since v1: - Rewrite commit message of patch #1 - Only reduce response_buf to 34 (32 + 2) - Trim RX_FIFO_AVAIL to length of response_buf instead of expected FIFO size Richard Fitzgerald (3): soundwire: cadence: Don't overflow the command FIFOs soundwire: cadence: Remove wasted space in response_buf soundwire: cadence: Drain the RX FIFO after an IO timeout drivers/soundwire/cadence_master.c | 46 +++++++++++++++++++----------- drivers/soundwire/cadence_master.h | 13 ++++++++- 2 files changed, 41 insertions(+), 18 deletions(-) -- 2.30.2