diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/sdhci.c | 13 | ||||
-rw-r--r-- | drivers/mmc/sdhci.h | 1 |
2 files changed, 10 insertions, 4 deletions
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 8e480140cd28..95fe0fdac484 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c | |||
@@ -326,6 +326,9 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data) | |||
326 | DBG("tsac %d ms nsac %d clk\n", | 326 | DBG("tsac %d ms nsac %d clk\n", |
327 | data->timeout_ns / 1000000, data->timeout_clks); | 327 | data->timeout_ns / 1000000, data->timeout_clks); |
328 | 328 | ||
329 | /* Sanity checks */ | ||
330 | BUG_ON(data->blksz * data->blocks > 524288); | ||
331 | |||
329 | /* timeout in us */ | 332 | /* timeout in us */ |
330 | target_timeout = data->timeout_ns / 1000 + | 333 | target_timeout = data->timeout_ns / 1000 + |
331 | data->timeout_clks / host->clock; | 334 | data->timeout_clks / host->clock; |
@@ -375,7 +378,9 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data) | |||
375 | host->remain = host->cur_sg->length; | 378 | host->remain = host->cur_sg->length; |
376 | } | 379 | } |
377 | 380 | ||
378 | writew(data->blksz, host->ioaddr + SDHCI_BLOCK_SIZE); | 381 | /* We do not handle DMA boundaries, so set it to max (512 KiB) */ |
382 | writew(SDHCI_MAKE_BLKSZ(7, data->blksz), | ||
383 | host->ioaddr + SDHCI_BLOCK_SIZE); | ||
379 | writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT); | 384 | writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT); |
380 | } | 385 | } |
381 | 386 | ||
@@ -1188,10 +1193,10 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) | |||
1188 | mmc->max_phys_segs = 16; | 1193 | mmc->max_phys_segs = 16; |
1189 | 1194 | ||
1190 | /* | 1195 | /* |
1191 | * Maximum number of sectors in one transfer. Limited by sector | 1196 | * Maximum number of sectors in one transfer. Limited by DMA boundary |
1192 | * count register. | 1197 | * size (512KiB), which means (512 KiB/512=) 1024 entries. |
1193 | */ | 1198 | */ |
1194 | mmc->max_sectors = 0x3FFF; | 1199 | mmc->max_sectors = 1024; |
1195 | 1200 | ||
1196 | /* | 1201 | /* |
1197 | * Maximum segment size. Could be one segment with the maximum number | 1202 | * Maximum segment size. Could be one segment with the maximum number |
diff --git a/drivers/mmc/sdhci.h b/drivers/mmc/sdhci.h index f8df28f8d6dd..8ed2a8973db6 100644 --- a/drivers/mmc/sdhci.h +++ b/drivers/mmc/sdhci.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #define SDHCI_DMA_ADDRESS 0x00 | 23 | #define SDHCI_DMA_ADDRESS 0x00 |
24 | 24 | ||
25 | #define SDHCI_BLOCK_SIZE 0x04 | 25 | #define SDHCI_BLOCK_SIZE 0x04 |
26 | #define SDHCI_MAKE_BLKSZ(dma, blksz) (((dma & 0x7) << 12) | (blksz & 0xFFF)) | ||
26 | 27 | ||
27 | #define SDHCI_BLOCK_COUNT 0x06 | 28 | #define SDHCI_BLOCK_COUNT 0x06 |
28 | 29 | ||