lkml.org 
[lkml]   [2018]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/14] mmc: mmci: internalize dma map/unmap into mmci dma functions
    Date
    From: Ludovic Barre <ludovic.barre@st.com>

    This patch internalizes the management of dma map/unmap into
    mmci dma interfaces. This allows to simplify and prepare the next dma
    callbacks for mmci host ops.
    mmci_dma_unmap was called in mmci_data_irq & mmci_cmd_irq functions
    and can be integrated in mmci_dma_data_error.

    Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
    ---
    drivers/mmc/host/mmci.c | 44 +++++++++++++++++++-------------------------
    1 file changed, 19 insertions(+), 25 deletions(-)

    diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
    index 1841d250..d8fa178 100644
    --- a/drivers/mmc/host/mmci.c
    +++ b/drivers/mmc/host/mmci.c
    @@ -482,17 +482,7 @@ static inline void mmci_dma_release(struct mmci_host *host)
    host->dma_rx_channel = host->dma_tx_channel = NULL;
    }

    -static void mmci_dma_data_error(struct mmci_host *host)
    -{
    - dev_err(mmc_dev(host->mmc), "error during DMA transfer!\n");
    - dmaengine_terminate_all(host->dma_current);
    - host->dma_in_progress = false;
    - host->dma_current = NULL;
    - host->dma_desc_current = NULL;
    - host->data->host_cookie = 0;
    -}
    -
    -static void mmci_dma_unmap(struct mmci_host *host, struct mmc_data *data)
    +static void __mmci_dma_unmap(struct mmci_host *host, struct mmc_data *data)
    {
    struct dma_chan *chan;

    @@ -505,6 +495,18 @@ static void mmci_dma_unmap(struct mmci_host *host, struct mmc_data *data)
    mmc_get_dma_dir(data));
    }

    +static void mmci_dma_data_error(struct mmci_host *host)
    +{
    + dev_err(mmc_dev(host->mmc), "error during DMA transfer!\n");
    + dmaengine_terminate_all(host->dma_current);
    + host->dma_in_progress = false;
    + host->dma_current = NULL;
    + host->dma_desc_current = NULL;
    + host->data->host_cookie = 0;
    +
    + __mmci_dma_unmap(host, host->data);
    +}
    +
    static void mmci_dma_finalize(struct mmci_host *host, struct mmc_data *data)
    {
    u32 status;
    @@ -528,11 +530,10 @@ static void mmci_dma_finalize(struct mmci_host *host, struct mmc_data *data)
    mmci_dma_data_error(host);
    if (!data->error)
    data->error = -EIO;
    + } else if (!data->host_cookie) {
    + __mmci_dma_unmap(host, data);
    }

    - if (!data->host_cookie)
    - mmci_dma_unmap(host, data);
    -
    /*
    * Use of DMA with scatter-gather is impossible.
    * Give up with DMA and switch back to PIO mode.
    @@ -704,7 +705,7 @@ static void mmci_post_request(struct mmc_host *mmc, struct mmc_request *mrq,
    if (!data || !data->host_cookie)
    return;

    - mmci_dma_unmap(host, data);
    + __mmci_dma_unmap(host, data);

    if (err) {
    struct mmci_host_next *next = &host->next_data;
    @@ -742,10 +743,6 @@ static inline void mmci_dma_release(struct mmci_host *host)
    {
    }

    -static inline void mmci_dma_unmap(struct mmci_host *host, struct mmc_data *data)
    -{
    -}
    -
    static inline void mmci_dma_finalize(struct mmci_host *host,
    struct mmc_data *data)
    {
    @@ -906,10 +903,8 @@ mmci_data_irq(struct mmci_host *host, struct mmc_data *data,
    u32 remain, success;

    /* Terminate the DMA transfer */
    - if (dma_inprogress(host)) {
    + if (dma_inprogress(host))
    mmci_dma_data_error(host);
    - mmci_dma_unmap(host, data);
    - }

    /*
    * Calculate how far we are into the transfer. Note that
    @@ -1055,10 +1050,9 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
    if ((!sbc && !cmd->data) || cmd->error) {
    if (host->data) {
    /* Terminate the DMA transfer */
    - if (dma_inprogress(host)) {
    + if (dma_inprogress(host))
    mmci_dma_data_error(host);
    - mmci_dma_unmap(host, host->data);
    - }
    +
    mmci_stop_data(host);
    }
    mmci_request_end(host, host->mrq);
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-08-01 11:39    [W:2.522 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site