lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 233/376] mmc: sdhci: add quirks for be to le byte swapping
    Date
    From: Angelo Dureghello <angelo.dureghello@timesys.com>

    [ Upstream commit e93577ecde8f3cbd12a2eaa0522d5c85e0dbdd53 ]

    Some controller as the ColdFire eshdc may require an endianness
    byte swap, because DMA read endianness is not configurable.

    Facilitate using the bounce buffer for this by adding
    ->copy_to_bounce_buffer().

    Signed-off-by: Angelo Dureghello <angelo.dureghello@timesys.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20200518191742.1251440-2-angelo.dureghello@timesys.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/mmc/host/sdhci.c | 10 +++++++---
    drivers/mmc/host/sdhci.h | 3 +++
    2 files changed, 10 insertions(+), 3 deletions(-)

    diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
    index e368f2dabf20..5dcdda5918cb 100644
    --- a/drivers/mmc/host/sdhci.c
    +++ b/drivers/mmc/host/sdhci.c
    @@ -634,9 +634,13 @@ static int sdhci_pre_dma_transfer(struct sdhci_host *host,
    }
    if (mmc_get_dma_dir(data) == DMA_TO_DEVICE) {
    /* Copy the data to the bounce buffer */
    - sg_copy_to_buffer(data->sg, data->sg_len,
    - host->bounce_buffer,
    - length);
    + if (host->ops->copy_to_bounce_buffer) {
    + host->ops->copy_to_bounce_buffer(host,
    + data, length);
    + } else {
    + sg_copy_to_buffer(data->sg, data->sg_len,
    + host->bounce_buffer, length);
    + }
    }
    /* Switch ownership to the DMA */
    dma_sync_single_for_device(host->mmc->parent,
    diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
    index 79dffbb731d3..1bf4f1d91951 100644
    --- a/drivers/mmc/host/sdhci.h
    +++ b/drivers/mmc/host/sdhci.h
    @@ -653,6 +653,9 @@ struct sdhci_ops {
    void (*voltage_switch)(struct sdhci_host *host);
    void (*adma_write_desc)(struct sdhci_host *host, void **desc,
    dma_addr_t addr, int len, unsigned int cmd);
    + void (*copy_to_bounce_buffer)(struct sdhci_host *host,
    + struct mmc_data *data,
    + unsigned int length);
    void (*request_done)(struct sdhci_host *host,
    struct mmc_request *mrq);
    };
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-19 17:29    [W:4.107 / U:0.512 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site