diff mbox

drivers/mfd/sh_mobile_sdhi.c: uses optimized block transfer settings for improved performance

Message ID 4C3F0433.8010005@emtrion.de (mailing list archive)
State Superseded
Delegated to: Paul Mundt
Headers show

Commit Message

Pietrek, Markus July 15, 2010, 12:50 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/mfd/sh_mobile_sdhi.c b/drivers/mfd/sh_mobile_sdhi.c
index cd16459..0bd80a3 100644
--- a/drivers/mfd/sh_mobile_sdhi.c
+++ b/drivers/mfd/sh_mobile_sdhi.c
@@ -107,6 +107,15 @@  static int __init sh_mobile_sdhi_probe(struct platform_device *pdev)
        mmc_data->hclk = clk_get_rate(priv->clk);
        mmc_data->set_pwr = sh_mobile_sdhi_set_pwr;
        mmc_data->capabilities = MMC_CAP_MMC_HIGHSPEED;
+
+       /* values are taken from the firmware based sh_sdhi.c driver */
+       mmc_data->max_hw_segs   = 32;
+       mmc_data->max_phys_segs = 32;
+       mmc_data->max_blk_count = 65535; /* actually it's 65536, but the value 65536 is handled differently and we want to keep the code simple */
+       mmc_data->max_req_size  = 131072;
+       mmc_data->max_seg_size  = mmc_data->max_req_size;
+       mmc_data->max_blk_size  = mmc_data->max_blk_size;
+
        if (p) {
                mmc_data->flags = p->tmio_flags;
                mmc_data->ocr_mask = p->tmio_ocr_mask;
diff --git a/drivers/mmc/host/tmio_mmc.c b/drivers/mmc/host/tmio_mmc.c
index ee7d0a5..cdb3a6a 100644
--- a/drivers/mmc/host/tmio_mmc.c
+++ b/drivers/mmc/host/tmio_mmc.c
@@ -847,6 +847,20 @@  static int __devinit tmio_mmc_probe(struct platform_device *dev)
        mmc->caps |= pdata->capabilities;
        mmc->f_max = pdata->hclk;
        mmc->f_min = mmc->f_max / 512;
+
+       if (pdata->max_hw_segs)
+               mmc->max_hw_segs = pdata->max_hw_segs;
+       if (pdata->max_phys_segs)
+               mmc->max_phys_segs = pdata->max_phys_segs;
+       if (pdata->max_seg_size)
+               mmc->max_seg_size = pdata->max_seg_size;
+       if (pdata->max_req_size)
+               mmc->max_req_size = pdata->max_req_size;
+       if (pdata->max_blk_size)
+               mmc->max_blk_size = pdata->max_blk_size;
+       if (pdata->max_blk_count)
+               mmc->max_blk_count = pdata->max_blk_count;
+
        if (pdata->ocr_mask)
                mmc->ocr_avail = pdata->ocr_mask;
        else
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h
index f07425b..4eb7358 100644
--- a/include/linux/mfd/tmio.h
+++ b/include/linux/mfd/tmio.h
@@ -71,6 +71,15 @@  struct tmio_mmc_data {
        unsigned long                   capabilities;
        unsigned long                   flags;
        u32                             ocr_mask;       /* available voltages */
+
+       /* overrides for "struct mmc_host" variables */
+       unsigned int            max_seg_size;
+       unsigned short          max_hw_segs;
+       unsigned short          max_phys_segs;
+       unsigned int            max_req_size;
+       unsigned int            max_blk_size;
+       unsigned int            max_blk_count;
+
        struct tmio_mmc_dma             *dma;
        void (*set_pwr)(struct platform_device *host, int state);
        void (*set_clk_div)(struct platform_device *host, int state);