> If a task completion notification (TCN) is received when there is no > outstanding task, the cqhci driver issues a "spurious TCN" warning. This was > observed to happen right after CQE error recovery. > > When an error interrupt is received the driver runs recovery logic. > It halts the controller, clears all pending tasks, and then re-enables it. On > some platforms, like Intel Jasper Lake, a stale task completion event was > observed, regardless of the CQHCI_CLEAR_ALL_TASKS bit being set. > > This results in either: > a) Spurious TC completion event for an empty slot. > b) Corrupted data being passed up the stack, as a result of premature > completion for a newly added task. > > Rather than add a quirk for affected controllers, ensure tasks are cleared by > toggling CQHCI_ENABLE, which would happen anyway if > cqhci_clear_all_tasks() timed out. This is simpler and should be safe and > effective for all controllers. > > Fixes: a4080225f51d ("mmc: cqhci: support for command queue enabled > host") > Cc: stable@xxxxxxxxxxxxxxx > Reported-by: Kornel Dulęba <korneld@xxxxxxxxxxxx> > Tested-by: Kornel Dulęba <korneld@xxxxxxxxxxxx> > Co-developed-by: Kornel Dulęba <korneld@xxxxxxxxxxxx> > Signed-off-by: Kornel Dulęba <korneld@xxxxxxxxxxxx> > Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Reviewed-by: Avri Altman <avri.altman@xxxxxxx>