Skip to content

Commit

Permalink
mmc: remove BYTEBLOCK capability
Browse files Browse the repository at this point in the history
Remove the BYTEBLOCK capability and let the broken hosts fail the
requests with -EINVAL instead.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
  • Loading branch information
Pierre Ossman committed Sep 23, 2007
1 parent b146d26 commit 255d01a
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 10 deletions.
1 change: 0 additions & 1 deletion drivers/mmc/host/at91_mci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion drivers/mmc/host/imxmmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 8 additions & 0 deletions drivers/mmc/host/mmci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion drivers/mmc/host/sdhci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
13 changes: 10 additions & 3 deletions drivers/mmc/host/tifm_sd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
}

Expand Down
2 changes: 1 addition & 1 deletion drivers/mmc/host/wbsd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
5 changes: 2 additions & 3 deletions include/linux/mmc/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 255d01a

Please sign in to comment.