mmc: remove BYTEBLOCK capability
Remove the BYTEBLOCK capability and let the broken hosts fail the requests with -EINVAL instead. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
parent
b146d26a61
commit
255d01af9a
7 changed files with 23 additions and 10 deletions
|
@ -834,7 +834,6 @@ static int __init at91_mci_probe(struct platform_device *pdev)
|
|||
mmc->f_min = 375000;
|
||||
mmc->f_max = 25000000;
|
||||
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
|
||||
mmc->caps = MMC_CAP_BYTEBLOCK;
|
||||
|
||||
mmc->max_blk_size = 4095;
|
||||
mmc->max_blk_count = mmc->max_req_size;
|
||||
|
|
|
@ -963,7 +963,7 @@ static int imxmci_probe(struct platform_device *pdev)
|
|||
mmc->f_min = 150000;
|
||||
mmc->f_max = CLK_RATE/2;
|
||||
mmc->ocr_avail = MMC_VDD_32_33;
|
||||
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_BYTEBLOCK;
|
||||
mmc->caps = MMC_CAP_4_BIT_DATA;
|
||||
|
||||
/* MMC core transfer sizes tunable parameters */
|
||||
mmc->max_hw_segs = 64;
|
||||
|
|
|
@ -391,6 +391,14 @@ static void mmci_request(struct mmc_host *mmc, struct mmc_request *mrq)
|
|||
|
||||
WARN_ON(host->mrq != NULL);
|
||||
|
||||
if (mrq->data && (hweight32(mrq->data->blksz) > 1)) {
|
||||
printk(KERN_ERR "%s: Unsupported block size (%d bytes)\n",
|
||||
mmc_hostname(mmc), mrq->data->blksz);
|
||||
mrq->cmd->error = -EINVAL;
|
||||
mmc_request_done(mmc, mrq);
|
||||
return;
|
||||
}
|
||||
|
||||
spin_lock_irq(&host->lock);
|
||||
|
||||
host->mrq = mrq;
|
||||
|
|
|
@ -1309,7 +1309,7 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
|
|||
mmc->ops = &sdhci_ops;
|
||||
mmc->f_min = host->max_clk / 256;
|
||||
mmc->f_max = host->max_clk;
|
||||
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE | MMC_CAP_BYTEBLOCK;
|
||||
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE;
|
||||
|
||||
if (caps & SDHCI_CAN_DO_HISPD)
|
||||
mmc->caps |= MMC_CAP_SD_HIGHSPEED;
|
||||
|
|
|
@ -626,14 +626,21 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
|
|||
|
||||
spin_lock_irqsave(&sock->lock, flags);
|
||||
if (host->eject) {
|
||||
spin_unlock_irqrestore(&sock->lock, flags);
|
||||
mrq->cmd->error = -ENOMEDIUM;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
if (host->req) {
|
||||
printk(KERN_ERR "%s : unfinished request detected\n",
|
||||
sock->dev.bus_id);
|
||||
spin_unlock_irqrestore(&sock->lock, flags);
|
||||
mrq->cmd->error = -ETIMEDOUT;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
if (mrq->data && (hweight32(mrq->data->blksz) > 1)) {
|
||||
printk(KERN_ERR "%s: Unsupported block size (%d bytes)\n",
|
||||
sock->dev.bus_id, mrq->data->blksz);
|
||||
mrq->cmd->error = -EINVAL;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
|
@ -722,7 +729,7 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
|
|||
return;
|
||||
|
||||
err_out:
|
||||
mrq->cmd->error = -ETIMEDOUT;
|
||||
spin_unlock_irqrestore(&sock->lock, flags);
|
||||
mmc_request_done(mmc, mrq);
|
||||
}
|
||||
|
||||
|
|
|
@ -1219,7 +1219,7 @@ static int __devinit wbsd_alloc_mmc(struct device *dev)
|
|||
mmc->f_min = 375000;
|
||||
mmc->f_max = 24000000;
|
||||
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
|
||||
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE | MMC_CAP_BYTEBLOCK;
|
||||
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE;
|
||||
|
||||
spin_lock_init(&host->lock);
|
||||
|
||||
|
|
|
@ -87,9 +87,8 @@ struct mmc_host {
|
|||
|
||||
#define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */
|
||||
#define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */
|
||||
#define MMC_CAP_BYTEBLOCK (1 << 2) /* Can do non-log2 block sizes */
|
||||
#define MMC_CAP_MMC_HIGHSPEED (1 << 3) /* Can do MMC high-speed timing */
|
||||
#define MMC_CAP_SD_HIGHSPEED (1 << 4) /* Can do SD high-speed timing */
|
||||
#define MMC_CAP_MMC_HIGHSPEED (1 << 2) /* Can do MMC high-speed timing */
|
||||
#define MMC_CAP_SD_HIGHSPEED (1 << 3) /* Can do SD high-speed timing */
|
||||
|
||||
/* host specific block data */
|
||||
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
|
||||
|
|
Loading…
Add table
Reference in a new issue