linux/drivers/mmc/host
Paul Walmsley 75b53aee2f mmc: omap: fix broken PIO mode
After commit 26b88520b8 ("mmc:
omap_hsmmc: remove private DMA API implementation"), the Nokia N800
here stopped booting:

[    2.086181] Waiting for root device /dev/mmcblk0p1...
[    2.324066] Unhandled fault: imprecise external abort (0x406) at 0x00000000
[    2.331451] Internal error: : 406 [#1] ARM
[    2.335784] Modules linked in:
[    2.339050] CPU: 0    Not tainted  (3.6.0-rc3 #60)
[    2.344146] PC is at default_idle+0x28/0x30
[    2.348602] LR is at trace_hardirqs_on_caller+0x15c/0x1b0

...

This turned out to be due to memory corruption caused by long-broken
PIO code in drivers/mmc/host/omap.c.  (Previously, this driver had
been using DMA; but the above commit caused the MMC driver to fall
back to PIO mode with an unmodified Kconfig.)

The PIO code, added with the rest of the driver in commit
730c9b7e66 ("[MMC] Add OMAP MMC host
driver"), confused bytes with 16-bit words.  This bug caused memory
located after the PIO transfer buffer to be corrupted with transfers
larger than 32 bytes.  The driver also did not increment the buffer
pointer after the transfer occurred.  This bug resulted in data
corruption during any transfer larger than 64 bytes.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
Tested-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
2012-09-04 13:58:11 -04:00
..
at91_mci.c
at91_mci.h
atmel-mci-regs.h mmc: atmel-mci: fix burst/chunk size modification 2012-06-06 08:52:12 -04:00
atmel-mci.c mmc: atmel-mci: not busy flag has also to be used for read operations 2012-09-04 13:58:07 -04:00
au1xmmc.c
bfin_sdh.c mmc: bfin_sdh: fix dma_desc_array build error 2012-09-04 13:58:04 -04:00
cb710-mmc.c
cb710-mmc.h
davinci_mmc.c mmc: davinci_mmc: set MODULE_ALIAS to allow autoloading 2012-04-22 11:16:58 -04:00
dw_mmc-pci.c
dw_mmc-pltfm.c
dw_mmc.c mmc: dw_mmc: Disable low power mode if SDIO interrupts are used 2012-09-04 13:58:10 -04:00
dw_mmc.h
jz4740_mmc.c
Kconfig mmc: at91-mci: this driver is now deprecated 2012-05-17 14:33:48 -04:00
Makefile mmc: remove imxmmc driver 2012-04-22 11:17:25 -04:00
mmc_spi.c
mmci.c ARM: 7427/1: mmc: mmci: Defer probe() in case of yet uninitialized GPIOs 2012-06-17 22:24:36 +01:00
mmci.h
msm_sdcc.c
msm_sdcc.h
mvsdio.c ARM: Orion: fix driver probe error handling with respect to clk 2012-07-25 17:06:21 +02:00
mvsdio.h
mxcmmc.c mmc mxcmmc: do not depend on grouped clocks 2012-04-25 17:03:38 +02:00
mxs-mmc.c mmc: mxs-mmc: fix deadlock caused by recursion loop 2012-09-04 13:58:06 -04:00
of_mmc_spi.c
omap_hsmmc.c Merge branch 'dmaengine' of git://git.linaro.org/people/rmk/linux-arm 2012-08-01 16:41:07 -07:00
omap.c mmc: omap: fix broken PIO mode 2012-09-04 13:58:11 -04:00
pxamci.c
pxamci.h
s3cmci.c mmc: s3cmci: Convert s3cmci driver to gpiolib API 2012-07-22 15:25:44 -04:00
s3cmci.h
sdhci-cns3xxx.c
sdhci-dove.c mmc: sdhci-dove: Prepare for common clock framework 2012-07-22 16:42:48 -04:00
sdhci-esdhc-imx.c mmc: esdhc: Fix DMA_MASK to not break mx25 DMA access 2012-07-22 16:42:30 -04:00
sdhci-esdhc.h mmc: sdhci-esdhc: break out early if clock is 0 2012-09-04 13:58:06 -04:00
sdhci-of-esdhc.c
sdhci-of-hlwd.c
sdhci-pci-data.c
sdhci-pci.c mmc: sdhci-pci: CaFe has broken card detection 2012-07-22 15:25:46 -04:00
sdhci-pltfm.c mmc: dt: Consolidate DT bindings 2012-05-15 13:29:42 +02:00
sdhci-pltfm.h
sdhci-pxav2.c mmc: sdhci-pxa: Add device tree support 2012-07-21 00:01:47 -04:00
sdhci-pxav3.c mmc: sdhci-pxa: Add device tree support 2012-07-21 00:01:47 -04:00
sdhci-s3c.c mmc: sdhci-s3c: pass IRQF ONESHOT to request threaded irq 2012-06-06 09:53:22 -04:00
sdhci-spear.c Viresh has moved 2012-06-20 14:39:36 -07:00
sdhci-tegra.c Merge branch 'for-3.6/common-clk' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra into next/clk 2012-07-06 22:21:23 +02:00
sdhci.c mmc: sd: Fix sd current limit setting 2012-07-22 15:25:52 -04:00
sdhci.h mmc: sdhci: if MAX_CURRENT is 0, try getting current from regulator 2012-07-21 00:02:22 -04:00
sdricoh_cs.c
sh_mmcif.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-07-24 17:12:54 -07:00
sh_mobile_sdhi.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-07-24 17:12:54 -07:00
tifm_sd.c
tmio_mmc_dma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-03-29 15:34:57 -07:00
tmio_mmc_pio.c mmc: tmio: use generic GPIO CD and WP handlers 2012-07-21 00:02:20 -04:00
tmio_mmc.c
tmio_mmc.h
ushc.c
via-sdmmc.c
vub300.c
wbsd.c
wbsd.h