mmc: mmci: add threaded irq to abort DPSM of non-functional state

The stm32_sdmmc variant has build-in support for datatimeout for R1B
requests. If a corresponding IRQ is raised, this triggers the DPSM to stay
busy and remains in a non-functional state. Only a reset can bring it back
to a functional state.

Because a reset must be issued from non-atomic context, let's defer this to
be managed from a threaded IRQ handler. Besides the reset, the threaded
handler also calls mmc_request_done(), to finally complete the request.

Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
Link: https://lore.kernel.org/r/20191211133934.16932-1-ludovic.Barre@st.com
[Ulf: A few minor updates to the changelog/comments]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
Ludovic Barre
2019-12-11 14:39:34 +01:00
committed by Ulf Hansson
parent d0052ad90e
commit ee157abebc
2 changed files with 41 additions and 6 deletions

View File

@@ -411,6 +411,7 @@ struct mmci_host {
struct timer_list timer;
unsigned int oldstat;
u32 irq_action;
/* pio stuff */
struct sg_mapping_iter sg_miter;