f7abfadd6ce547e205eb0f715472413a6f8ce984
[openwrt/staging/rmilecki.git] / target / linux / brcm2708 / patches-3.10 / 0022-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch
1 From 9f5c2a77277b99949398e97cc753074d1b8e9521 Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Wed, 3 Jul 2013 00:42:49 +0100
4 Subject: [PATCH 022/174] sdhci-bcm2708: use multiblock-type transfers for
5 single blocks
6
7 There are issues with both single block reads (missed completion)
8 and writes (data loss in some cases!). Just don't do single block
9 transfers anymore, and treat them like multiblock transfers. This
10 adds a quirk for this and uses it.
11 ---
12 drivers/mmc/card/block.c | 2 +-
13 drivers/mmc/host/sdhci-bcm2708.c | 3 +++
14 include/linux/mmc/host.h | 1 +
15 3 files changed, 5 insertions(+), 1 deletion(-)
16
17 --- a/drivers/mmc/card/block.c
18 +++ b/drivers/mmc/card/block.c
19 @@ -1333,7 +1333,7 @@ static void mmc_blk_rw_rq_prep(struct mm
20 brq->data.blocks = 1;
21 }
22
23 - if (brq->data.blocks > 1 || do_rel_wr) {
24 + if (brq->data.blocks > 1 || do_rel_wr || card->host->caps2 & MMC_CAP2_FORCE_MULTIBLOCK) {
25 /* SPI multiblock writes terminate using a special
26 * token, not a STOP_TRANSMISSION request.
27 */
28 --- a/drivers/mmc/host/sdhci-bcm2708.c
29 +++ b/drivers/mmc/host/sdhci-bcm2708.c
30 @@ -1266,6 +1266,9 @@ static int sdhci_bcm2708_probe(struct pl
31
32 if (allow_highspeed)
33 host->mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
34 +
35 + /* single block writes cause data loss with some SD cards! */
36 + host->mmc->caps2 |= MMC_CAP2_FORCE_MULTIBLOCK;
37 #endif
38
39 ret = sdhci_add_host(host);
40 --- a/include/linux/mmc/host.h
41 +++ b/include/linux/mmc/host.h
42 @@ -281,6 +281,7 @@ struct mmc_host {
43 #define MMC_CAP2_PACKED_CMD (MMC_CAP2_PACKED_RD | \
44 MMC_CAP2_PACKED_WR)
45 #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14) /* Don't power up before scan */
46 +#define MMC_CAP2_FORCE_MULTIBLOCK (1 << 31) /* Always use multiblock transfers */
47
48 mmc_pm_flag_t pm_caps; /* supported pm features */
49