From: Greg Kroah-Hartman Date: Thu, 6 Feb 2014 23:47:24 +0000 (-0800) Subject: 3.4-stable patches X-Git-Tag: v3.4.80~85 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bdb40da1043542027551c8af25d0694eb9079e90;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: mmc-atmel-mci-fix-timeout-errors-in-sdio-mode-when-using-dma.patch --- diff --git a/queue-3.4/mmc-atmel-mci-fix-timeout-errors-in-sdio-mode-when-using-dma.patch b/queue-3.4/mmc-atmel-mci-fix-timeout-errors-in-sdio-mode-when-using-dma.patch new file mode 100644 index 00000000000..f28defab2bb --- /dev/null +++ b/queue-3.4/mmc-atmel-mci-fix-timeout-errors-in-sdio-mode-when-using-dma.patch @@ -0,0 +1,50 @@ +From 66b512eda74d59b17eac04c4da1b38d82059e6c9 Mon Sep 17 00:00:00 2001 +From: Ludovic Desroches +Date: Wed, 20 Nov 2013 16:01:11 +0100 +Subject: mmc: atmel-mci: fix timeout errors in SDIO mode when using DMA + +From: Ludovic Desroches + +commit 66b512eda74d59b17eac04c4da1b38d82059e6c9 upstream. + +With some SDIO devices, timeout errors can happen when reading data. +To solve this issue, the DMA transfer has to be activated before sending +the command to the device. This order is incorrect in PDC mode. So we +have to take care if we are using DMA or PDC to know when to send the +MMC command. + +Signed-off-by: Ludovic Desroches +Acked-by: Nicolas Ferre +Signed-off-by: Chris Ball +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mmc/host/atmel-mci.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +--- a/drivers/mmc/host/atmel-mci.c ++++ b/drivers/mmc/host/atmel-mci.c +@@ -1022,11 +1022,22 @@ static void atmci_start_request(struct a + iflags |= ATMCI_CMDRDY; + cmd = mrq->cmd; + cmdflags = atmci_prepare_command(slot->mmc, cmd); +- atmci_send_command(host, cmd, cmdflags); ++ ++ /* ++ * DMA transfer should be started before sending the command to avoid ++ * unexpected errors especially for read operations in SDIO mode. ++ * Unfortunately, in PDC mode, command has to be sent before starting ++ * the transfer. ++ */ ++ if (host->submit_data != &atmci_submit_data_dma) ++ atmci_send_command(host, cmd, cmdflags); + + if (data) + host->submit_data(host, data); + ++ if (host->submit_data == &atmci_submit_data_dma) ++ atmci_send_command(host, cmd, cmdflags); ++ + if (mrq->stop) { + host->stop_cmdr = atmci_prepare_command(slot->mmc, mrq->stop); + host->stop_cmdr |= ATMCI_CMDR_STOP_XFER; diff --git a/queue-3.4/series b/queue-3.4/series index 079f8587be5..bf7d46006e2 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -2,3 +2,4 @@ selinux-fix-memory-leak-upon-loading-policy.patch ftrace-have-function-graph-only-trace-based-on-global_ops-filters.patch intel-iommu-fix-off-by-one-in-pagetable-freeing.patch audit-correct-a-type-mismatch-in-audit_syscall_exit.patch +mmc-atmel-mci-fix-timeout-errors-in-sdio-mode-when-using-dma.patch