Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=255d01af9a990fd5166f04ed0cc0b30b7b67e81e
Commit:     255d01af9a990fd5166f04ed0cc0b30b7b67e81e
Parent:     b146d26a61e0feab2f12a98ae83fd352830899c0
Author:     Pierre Ossman <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 24 20:38:53 2007 +0200
Committer:  Pierre Ossman <[EMAIL PROTECTED]>
CommitDate: Sun Sep 23 09:15:05 2007 +0200

    mmc: remove BYTEBLOCK capability
    
    Remove the BYTEBLOCK capability and let the broken hosts fail the
    requests with -EINVAL instead.
    
    Signed-off-by: Pierre Ossman <[EMAIL PROTECTED]>
---
 drivers/mmc/host/at91_mci.c |    1 -
 drivers/mmc/host/imxmmc.c   |    2 +-
 drivers/mmc/host/mmci.c     |    8 ++++++++
 drivers/mmc/host/sdhci.c    |    2 +-
 drivers/mmc/host/tifm_sd.c  |   13 ++++++++++---
 drivers/mmc/host/wbsd.c     |    2 +-
 include/linux/mmc/host.h    |    5 ++---
 7 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/mmc/host/at91_mci.c b/drivers/mmc/host/at91_mci.c
index 810a433..576d7cb 100644
--- a/drivers/mmc/host/at91_mci.c
+++ b/drivers/mmc/host/at91_mci.c
@@ -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;
diff --git a/drivers/mmc/host/imxmmc.c b/drivers/mmc/host/imxmmc.c
index 04458c3..e33c123 100644
--- a/drivers/mmc/host/imxmmc.c
+++ b/drivers/mmc/host/imxmmc.c
@@ -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;
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index d53e9a8..4a72772 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -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;
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 479d6a2..c63edc5 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -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;
diff --git a/drivers/mmc/host/tifm_sd.c b/drivers/mmc/host/tifm_sd.c
index b4a56e5..951392d 100644
--- a/drivers/mmc/host/tifm_sd.c
+++ b/drivers/mmc/host/tifm_sd.c
@@ -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);
 }
 
diff --git a/drivers/mmc/host/wbsd.c b/drivers/mmc/host/wbsd.c
index 44968c2..80db11c 100644
--- a/drivers/mmc/host/wbsd.c
+++ b/drivers/mmc/host/wbsd.c
@@ -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);
 
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index b1350df..8e2642e 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -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 */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to