aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mmc/at91_mci.c1
-rw-r--r--drivers/mmc/au1xmmc.c1
-rw-r--r--drivers/mmc/imxmmc.c3
-rw-r--r--drivers/mmc/mmc.c6
-rw-r--r--drivers/mmc/mmc_block.c4
-rw-r--r--drivers/mmc/mmc_queue.c2
-rw-r--r--drivers/mmc/mmci.c10
-rw-r--r--drivers/mmc/omap.c5
-rw-r--r--drivers/mmc/pxamci.c5
-rw-r--r--drivers/mmc/sdhci.c13
-rw-r--r--drivers/mmc/tifm_sd.c9
-rw-r--r--drivers/mmc/wbsd.c15
-rw-r--r--include/linux/mmc/host.h3
13 files changed, 55 insertions, 22 deletions
diff --git a/drivers/mmc/at91_mci.c b/drivers/mmc/at91_mci.c
index e28850dec9ed..2ce50f38e3c7 100644
--- a/drivers/mmc/at91_mci.c
+++ b/drivers/mmc/at91_mci.c
@@ -824,6 +824,7 @@ static int __init at91_mci_probe(struct platform_device *pdev)
824 mmc->caps = MMC_CAP_BYTEBLOCK; 824 mmc->caps = MMC_CAP_BYTEBLOCK;
825 825
826 mmc->max_blk_size = 4095; 826 mmc->max_blk_size = 4095;
827 mmc->max_blk_count = mmc->max_req_size;
827 828
828 host = mmc_priv(mmc); 829 host = mmc_priv(mmc);
829 host->mmc = mmc; 830 host->mmc = mmc;
diff --git a/drivers/mmc/au1xmmc.c b/drivers/mmc/au1xmmc.c
index 74e6ac0c7f71..b834be261ab7 100644
--- a/drivers/mmc/au1xmmc.c
+++ b/drivers/mmc/au1xmmc.c
@@ -923,6 +923,7 @@ static int __devinit au1xmmc_probe(struct platform_device *pdev)
923 mmc->max_phys_segs = AU1XMMC_DESCRIPTOR_COUNT; 923 mmc->max_phys_segs = AU1XMMC_DESCRIPTOR_COUNT;
924 924
925 mmc->max_blk_size = 2048; 925 mmc->max_blk_size = 2048;
926 mmc->max_blk_count = 512;
926 927
927 mmc->ocr_avail = AU1XMMC_OCR; 928 mmc->ocr_avail = AU1XMMC_OCR;
928 929
diff --git a/drivers/mmc/imxmmc.c b/drivers/mmc/imxmmc.c
index 2107f8a8605e..b060d4bfba29 100644
--- a/drivers/mmc/imxmmc.c
+++ b/drivers/mmc/imxmmc.c
@@ -958,9 +958,10 @@ static int imxmci_probe(struct platform_device *pdev)
958 /* MMC core transfer sizes tunable parameters */ 958 /* MMC core transfer sizes tunable parameters */
959 mmc->max_hw_segs = 64; 959 mmc->max_hw_segs = 64;
960 mmc->max_phys_segs = 64; 960 mmc->max_phys_segs = 64;
961 mmc->max_sectors = 64; /* default 1 << (PAGE_CACHE_SHIFT - 9) */
962 mmc->max_seg_size = 64*512; /* default PAGE_CACHE_SIZE */ 961 mmc->max_seg_size = 64*512; /* default PAGE_CACHE_SIZE */
962 mmc->max_req_size = 64*512; /* default PAGE_CACHE_SIZE */
963 mmc->max_blk_size = 2048; 963 mmc->max_blk_size = 2048;
964 mmc->max_blk_count = 65535;
964 965
965 host = mmc_priv(mmc); 966 host = mmc_priv(mmc);
966 host->mmc = mmc; 967 host->mmc = mmc;
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 9bda3fddad17..fb04bdd26c36 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -109,6 +109,9 @@ mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
109 mrq->cmd->mrq = mrq; 109 mrq->cmd->mrq = mrq;
110 if (mrq->data) { 110 if (mrq->data) {
111 BUG_ON(mrq->data->blksz > host->max_blk_size); 111 BUG_ON(mrq->data->blksz > host->max_blk_size);
112 BUG_ON(mrq->data->blocks > host->max_blk_count);
113 BUG_ON(mrq->data->blocks * mrq->data->blksz >
114 host->max_req_size);
112 115
113 mrq->cmd->data = mrq->data; 116 mrq->cmd->data = mrq->data;
114 mrq->data->error = 0; 117 mrq->data->error = 0;
@@ -1605,10 +1608,11 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
1605 */ 1608 */
1606 host->max_hw_segs = 1; 1609 host->max_hw_segs = 1;
1607 host->max_phys_segs = 1; 1610 host->max_phys_segs = 1;
1608 host->max_sectors = 1 << (PAGE_CACHE_SHIFT - 9);
1609 host->max_seg_size = PAGE_CACHE_SIZE; 1611 host->max_seg_size = PAGE_CACHE_SIZE;
1610 1612
1613 host->max_req_size = PAGE_CACHE_SIZE;
1611 host->max_blk_size = 512; 1614 host->max_blk_size = 512;
1615 host->max_blk_count = PAGE_CACHE_SIZE / 512;
1612 } 1616 }
1613 1617
1614 return host; 1618 return host;
diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
index 5a4eacac0bbe..19ccfed8a54f 100644
--- a/drivers/mmc/mmc_block.c
+++ b/drivers/mmc/mmc_block.c
@@ -242,10 +242,12 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
242 brq.cmd.arg <<= 9; 242 brq.cmd.arg <<= 9;
243 brq.cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC; 243 brq.cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
244 brq.data.blksz = 1 << md->block_bits; 244 brq.data.blksz = 1 << md->block_bits;
245 brq.data.blocks = req->nr_sectors >> (md->block_bits - 9);
246 brq.stop.opcode = MMC_STOP_TRANSMISSION; 245 brq.stop.opcode = MMC_STOP_TRANSMISSION;
247 brq.stop.arg = 0; 246 brq.stop.arg = 0;
248 brq.stop.flags = MMC_RSP_R1B | MMC_CMD_AC; 247 brq.stop.flags = MMC_RSP_R1B | MMC_CMD_AC;
248 brq.data.blocks = req->nr_sectors >> (md->block_bits - 9);
249 if (brq.data.blocks > card->host->max_blk_count)
250 brq.data.blocks = card->host->max_blk_count;
249 251
250 mmc_set_data_timeout(&brq.data, card, rq_data_dir(req) != READ); 252 mmc_set_data_timeout(&brq.data, card, rq_data_dir(req) != READ);
251 253
diff --git a/drivers/mmc/mmc_queue.c b/drivers/mmc/mmc_queue.c
index 3e35a43819fb..c27e42645cdb 100644
--- a/drivers/mmc/mmc_queue.c
+++ b/drivers/mmc/mmc_queue.c
@@ -147,7 +147,7 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, spinlock_t *lock
147 147
148 blk_queue_prep_rq(mq->queue, mmc_prep_request); 148 blk_queue_prep_rq(mq->queue, mmc_prep_request);
149 blk_queue_bounce_limit(mq->queue, limit); 149 blk_queue_bounce_limit(mq->queue, limit);
150 blk_queue_max_sectors(mq->queue, host->max_sectors); 150 blk_queue_max_sectors(mq->queue, host->max_req_size / 512);
151 blk_queue_max_phys_segments(mq->queue, host->max_phys_segs); 151 blk_queue_max_phys_segments(mq->queue, host->max_phys_segs);
152 blk_queue_max_hw_segments(mq->queue, host->max_hw_segs); 152 blk_queue_max_hw_segments(mq->queue, host->max_hw_segs);
153 blk_queue_max_segment_size(mq->queue, host->max_seg_size); 153 blk_queue_max_segment_size(mq->queue, host->max_seg_size);
diff --git a/drivers/mmc/mmci.c b/drivers/mmc/mmci.c
index 5d48e0081894..5941dd951e82 100644
--- a/drivers/mmc/mmci.c
+++ b/drivers/mmc/mmci.c
@@ -524,21 +524,25 @@ static int mmci_probe(struct amba_device *dev, void *id)
524 /* 524 /*
525 * Since we only have a 16-bit data length register, we must 525 * Since we only have a 16-bit data length register, we must
526 * ensure that we don't exceed 2^16-1 bytes in a single request. 526 * ensure that we don't exceed 2^16-1 bytes in a single request.
527 * Choose 64 (512-byte) sectors as the limit.
528 */ 527 */
529 mmc->max_sectors = 64; 528 mmc->max_req_size = 65535;
530 529
531 /* 530 /*
532 * Set the maximum segment size. Since we aren't doing DMA 531 * Set the maximum segment size. Since we aren't doing DMA
533 * (yet) we are only limited by the data length register. 532 * (yet) we are only limited by the data length register.
534 */ 533 */
535 mmc->max_seg_size = mmc->max_sectors << 9; 534 mmc->max_seg_size = mmc->max_req_size;
536 535
537 /* 536 /*
538 * Block size can be up to 2048 bytes, but must be a power of two. 537 * Block size can be up to 2048 bytes, but must be a power of two.
539 */ 538 */
540 mmc->max_blk_size = 2048; 539 mmc->max_blk_size = 2048;
541 540
541 /*
542 * No limit on the number of blocks transferred.
543 */
544 mmc->max_blk_count = mmc->max_req_size;
545
542 spin_lock_init(&host->lock); 546 spin_lock_init(&host->lock);
543 547
544 writel(0, host->base + MMCIMASK0); 548 writel(0, host->base + MMCIMASK0);
diff --git a/drivers/mmc/omap.c b/drivers/mmc/omap.c
index fa69a0dc5969..1e96a2f65022 100644
--- a/drivers/mmc/omap.c
+++ b/drivers/mmc/omap.c
@@ -1100,8 +1100,9 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
1100 mmc->max_phys_segs = 32; 1100 mmc->max_phys_segs = 32;
1101 mmc->max_hw_segs = 32; 1101 mmc->max_hw_segs = 32;
1102 mmc->max_blk_size = 2048; /* BLEN is 11 bits (+1) */ 1102 mmc->max_blk_size = 2048; /* BLEN is 11 bits (+1) */
1103 mmc->max_sectors = 256; /* NBLK max 11-bits, OMAP also limited by DMA */ 1103 mmc->max_blk_count = 2048; /* NBLK is 11 bits (+1) */
1104 mmc->max_seg_size = mmc->max_sectors * 512; 1104 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
1105 mmc->max_seg_size = mmc->max_req_size;
1105 1106
1106 if (host->power_pin >= 0) { 1107 if (host->power_pin >= 0) {
1107 if ((ret = omap_request_gpio(host->power_pin)) != 0) { 1108 if ((ret = omap_request_gpio(host->power_pin)) != 0) {
diff --git a/drivers/mmc/pxamci.c b/drivers/mmc/pxamci.c
index 9fc9aed1a5ef..9774fc68b61a 100644
--- a/drivers/mmc/pxamci.c
+++ b/drivers/mmc/pxamci.c
@@ -455,6 +455,11 @@ static int pxamci_probe(struct platform_device *pdev)
455 */ 455 */
456 mmc->max_blk_size = 1023; 456 mmc->max_blk_size = 1023;
457 457
458 /*
459 * Block count register is 16 bits.
460 */
461 mmc->max_blk_count = 65535;
462
458 host = mmc_priv(mmc); 463 host = mmc_priv(mmc);
459 host->mmc = mmc; 464 host->mmc = mmc;
460 host->dma = -1; 465 host->dma = -1;
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 155aafe69bf4..99f1db92295b 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -1333,15 +1333,15 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
1333 1333
1334 /* 1334 /*
1335 * Maximum number of sectors in one transfer. Limited by DMA boundary 1335 * Maximum number of sectors in one transfer. Limited by DMA boundary
1336 * size (512KiB), which means (512 KiB/512=) 1024 entries. 1336 * size (512KiB).
1337 */ 1337 */
1338 mmc->max_sectors = 1024; 1338 mmc->max_req_size = 524288;
1339 1339
1340 /* 1340 /*
1341 * Maximum segment size. Could be one segment with the maximum number 1341 * Maximum segment size. Could be one segment with the maximum number
1342 * of sectors. 1342 * of bytes.
1343 */ 1343 */
1344 mmc->max_seg_size = mmc->max_sectors * 512; 1344 mmc->max_seg_size = mmc->max_req_size;
1345 1345
1346 /* 1346 /*
1347 * Maximum block size. This varies from controller to controller and 1347 * Maximum block size. This varies from controller to controller and
@@ -1357,6 +1357,11 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
1357 mmc->max_blk_size = 512 << mmc->max_blk_size; 1357 mmc->max_blk_size = 512 << mmc->max_blk_size;
1358 1358
1359 /* 1359 /*
1360 * Maximum block count.
1361 */
1362 mmc->max_blk_count = 65535;
1363
1364 /*
1360 * Init tasklets. 1365 * Init tasklets.
1361 */ 1366 */
1362 tasklet_init(&host->card_tasklet, 1367 tasklet_init(&host->card_tasklet,
diff --git a/drivers/mmc/tifm_sd.c b/drivers/mmc/tifm_sd.c
index bdfad15371b8..7e607b75f4bc 100644
--- a/drivers/mmc/tifm_sd.c
+++ b/drivers/mmc/tifm_sd.c
@@ -885,10 +885,13 @@ static int tifm_sd_probe(struct tifm_dev *sock)
885 mmc->f_max = 24000000; 885 mmc->f_max = 24000000;
886 mmc->max_hw_segs = 1; 886 mmc->max_hw_segs = 1;
887 mmc->max_phys_segs = 1; 887 mmc->max_phys_segs = 1;
888 mmc->max_sectors = 127; 888 // limited by DMA counter - it's safer to stick with
889 //2k maximum hw block length 889 // block counter has 11 bits though
890 mmc->max_seg_size = mmc->max_sectors << 11; 890 mmc->max_blk_count = 256;
891 // 2k maximum hw block length
891 mmc->max_blk_size = 2048; 892 mmc->max_blk_size = 2048;
893 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
894 mmc->max_seg_size = mmc->max_req_size;
892 sock->signal_irq = tifm_sd_signal_irq; 895 sock->signal_irq = tifm_sd_signal_irq;
893 rc = tifm_sd_initialize_host(host); 896 rc = tifm_sd_initialize_host(host);
894 897
diff --git a/drivers/mmc/wbsd.c b/drivers/mmc/wbsd.c
index 5711beecb4e8..cf16e44c0301 100644
--- a/drivers/mmc/wbsd.c
+++ b/drivers/mmc/wbsd.c
@@ -1343,16 +1343,15 @@ static int __devinit wbsd_alloc_mmc(struct device *dev)
1343 mmc->max_phys_segs = 128; 1343 mmc->max_phys_segs = 128;
1344 1344
1345 /* 1345 /*
1346 * Maximum number of sectors in one transfer. Also limited by 64kB 1346 * Maximum request size. Also limited by 64KiB buffer.
1347 * buffer.
1348 */ 1347 */
1349 mmc->max_sectors = 128; 1348 mmc->max_req_size = 65536;
1350 1349
1351 /* 1350 /*
1352 * Maximum segment size. Could be one segment with the maximum number 1351 * Maximum segment size. Could be one segment with the maximum number
1353 * of segments. 1352 * of bytes.
1354 */ 1353 */
1355 mmc->max_seg_size = mmc->max_sectors * 512; 1354 mmc->max_seg_size = mmc->max_req_size;
1356 1355
1357 /* 1356 /*
1358 * Maximum block size. We have 12 bits (= 4095) but have to subtract 1357 * Maximum block size. We have 12 bits (= 4095) but have to subtract
@@ -1360,6 +1359,12 @@ static int __devinit wbsd_alloc_mmc(struct device *dev)
1360 */ 1359 */
1361 mmc->max_blk_size = 4087; 1360 mmc->max_blk_size = 4087;
1362 1361
1362 /*
1363 * Maximum block count. There is no real limit so the maximum
1364 * request size will be the only restriction.
1365 */
1366 mmc->max_blk_count = mmc->max_req_size;
1367
1363 dev_set_drvdata(dev, mmc); 1368 dev_set_drvdata(dev, mmc);
1364 1369
1365 return 0; 1370 return 0;
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 2da0c918a8cc..913e5752569f 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -92,9 +92,10 @@ struct mmc_host {
92 unsigned int max_seg_size; /* see blk_queue_max_segment_size */ 92 unsigned int max_seg_size; /* see blk_queue_max_segment_size */
93 unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */ 93 unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */
94 unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */ 94 unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */
95 unsigned short max_sectors; /* see blk_queue_max_sectors */
96 unsigned short unused; 95 unsigned short unused;
96 unsigned int max_req_size; /* maximum number of bytes in one req */
97 unsigned int max_blk_size; /* maximum size of one mmc block */ 97 unsigned int max_blk_size; /* maximum size of one mmc block */
98 unsigned int max_blk_count; /* maximum number of blocks in one req */
98 99
99 /* private data */ 100 /* private data */
100 struct mmc_ios ios; /* current io bus settings */ 101 struct mmc_ios ios; /* current io bus settings */