From mboxrd@z Thu Jan 1 00:00:00 1970 From: 21cnbao@gmail.com (Barry Song) Date: Mon, 23 Dec 2013 21:22:04 +0800 Subject: [PATCH 2/2] mmc: sirf: enable combined dma buffer In-Reply-To: <1387804924-3372-1-git-send-email-21cnbao@gmail.com> References: <1387804924-3372-1-git-send-email-21cnbao@gmail.com> Message-ID: <1387804924-3372-2-git-send-email-21cnbao@gmail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Bin Shi To take advantage of combined dma buffer, enable SDHCI_QUIRK2_SG_LIST_COMBINED_DMA_BUFFER to lift read/write performance. Signed-off-by: Bin Shi Signed-off-by: Barry Song --- drivers/mmc/host/sdhci-sirf.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c index 696122c..2933ae4 100644 --- a/drivers/mmc/host/sdhci-sirf.c +++ b/drivers/mmc/host/sdhci-sirf.c @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -38,6 +39,7 @@ static struct sdhci_pltfm_data sdhci_sirf_pdata = { SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | SDHCI_QUIRK_INVERTED_WRITE_PROTECT | SDHCI_QUIRK_DELAY_AFTER_POWER, + .quirks2 = SDHCI_QUIRK2_SG_LIST_COMBINED_DMA_BUFFER, }; static int sdhci_sirf_probe(struct platform_device *pdev) @@ -75,6 +77,11 @@ static int sdhci_sirf_probe(struct platform_device *pdev) if (ret) goto err_clk_prepare; + host->combined_dma_buffer = dma_alloc_coherent(&pdev->dev, + SZ_1M, &host->combined_dma_addr, GFP_KERNEL | GFP_DMA); + if (!host->combined_dma_buffer) + goto err_request_dma; + ret = sdhci_add_host(host); if (ret) goto err_sdhci_add; @@ -97,6 +104,9 @@ static int sdhci_sirf_probe(struct platform_device *pdev) err_request_cd: sdhci_remove_host(host, 0); err_sdhci_add: + dma_free_coherent(&pdev->dev, SZ_1M, host->combined_dma_buffer, + host->combined_dma_addr); +err_request_dma: clk_disable_unprepare(priv->clk); err_clk_prepare: sdhci_pltfm_free(pdev); @@ -114,6 +124,9 @@ static int sdhci_sirf_remove(struct platform_device *pdev) if (gpio_is_valid(priv->gpio_cd)) mmc_gpio_free_cd(host->mmc); + dma_free_coherent(&pdev->dev, SZ_1M, host->combined_dma_buffer, + host->combined_dma_addr); + clk_disable_unprepare(priv->clk); return 0; } -- 1.7.5.4