[MMC] Convert all hosts except mmci to use data->blksz
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Sun, 4 Jun 2006 16:51:15 +0000 (17:51 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 19 Jun 2006 12:05:08 +0000 (13:05 +0100)
The MMC specification allows non-power of two block sizes.  As such,
we should not pass the log2 block size to host drivers, but instead
pass the byte size.

However, ARM MMCI can only work with log2 block size, so continue to
pass both the log2 block size and byte block size.  This means that
for the moment, the byte block size must remain a power of two, but
this is the first stage of removing this restriction for other hosts.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/mmc/at91_mci.c
drivers/mmc/imxmmc.c
drivers/mmc/omap.c
drivers/mmc/sdhci.c

index 88f0eef9cf33a9b375689dae3c0ea16f17b425f7..42284e1d46289a1fddb77442839a9caccfbd3316 100644 (file)
@@ -411,7 +411,7 @@ static unsigned int at91_mci_send_command(struct at91mci_host *host, struct mmc_
        }
 
        if (data) {
-               block_length = 1 << data->blksz_bits;
+               block_length = data->blksz;
                blocks = data->blocks;
 
                /* always set data start - also set direction flag for read */
index a4eb1d0e7a7169e381847c978c71b7bcb4dd72f1..5c62f4e6ad062fd5419f21133c9f422824b13765 100644 (file)
@@ -228,7 +228,7 @@ static int imxmci_busy_wait_for_status(struct imxmci_host *host,
 static void imxmci_setup_data(struct imxmci_host *host, struct mmc_data *data)
 {
        unsigned int nob = data->blocks;
-       unsigned int blksz = 1 << data->blksz_bits;
+       unsigned int blksz = data->blksz;
        unsigned int datasz = nob * blksz;
        int i;
 
index becb3c68c34d7578043a9a0885705ae4d63c9597..c25244b3657bb532458fab1dae08874cf0aedc7f 100644 (file)
@@ -584,10 +584,10 @@ mmc_omap_prepare_dma(struct mmc_omap_host *host, struct mmc_data *data)
        int sync_dev = 0;
 
        data_addr = io_v2p((u32) host->base) + OMAP_MMC_REG_DATA;
-       frame = 1 << data->blksz_bits;
+       frame = data->blksz;
        count = sg_dma_len(sg);
 
-       if ((data->blocks == 1) && (count > (1 << data->blksz_bits)))
+       if ((data->blocks == 1) && (count > data->blksz))
                count = frame;
 
        host->dma_len = count;
@@ -776,7 +776,7 @@ mmc_omap_prepare_data(struct mmc_omap_host *host, struct mmc_request *req)
        }
 
 
-       block_size = 1 << data->blksz_bits;
+       block_size = data->blksz;
 
        OMAP_MMC_WRITE(host->base, NBLK, data->blocks - 1);
        OMAP_MMC_WRITE(host->base, BLEN, block_size - 1);
index 6bfcdbc7491e9ac01a601cd364016dcdc05b18cf..8e9100bd57ef96596d9fd17884097f1da5b16f84 100644 (file)
@@ -268,7 +268,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
        }
 
        DBG("blksz %04x blks %04x flags %08x\n",
-               1 << data->blksz_bits, data->blocks, data->flags);
+               data->blksz, data->blocks, data->flags);
        DBG("tsac %d ms nsac %d clk\n",
                data->timeout_ns / 1000000, data->timeout_clks);
 
@@ -282,7 +282,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
 
        writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE);
 
-       writew(1 << data->blksz_bits, host->ioaddr + SDHCI_BLOCK_SIZE);
+       writew(data->blksz, host->ioaddr + SDHCI_BLOCK_SIZE);
        writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT);
 
        if (host->flags & SDHCI_USE_DMA) {
@@ -294,7 +294,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
 
                writel(sg_dma_address(data->sg), host->ioaddr + SDHCI_DMA_ADDRESS);
        } else {
-               host->size = (1 << data->blksz_bits) * data->blocks;
+               host->size = data->blksz * data->blocks;
 
                host->cur_sg = data->sg;
                host->num_sg = data->sg_len;
@@ -335,7 +335,7 @@ static void sdhci_finish_data(struct sdhci_host *host)
                blocks = 0;
        else
                blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT);
-       data->bytes_xfered = (1 << data->blksz_bits) * (data->blocks - blocks);
+       data->bytes_xfered = data->blksz * (data->blocks - blocks);
 
        if ((data->error == MMC_ERR_NONE) && blocks) {
                printk(KERN_ERR "%s: Controller signalled completion even "