RE: [PATCH V2 6/6] mmc: cqhci: Fix task clearing in CQE error recovery

From: Avri Altman
Date: Thu Nov 09 2023 - 04:23:31 EST


> 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>