lkml.org 
[lkml]   [2018]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2 09/27] mmc: mmci: modify dma_setup callback
    Date
    From: Ludovic Barre <ludovic.barre@st.com>

    This patch creates a generic mmci_dma_setup which calls
    dma_setup callback and manages common next_cookie.
    This patch is needed for sdmmc variant which has a different
    dma settings.

    Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
    ---
    drivers/mmc/host/mmci.c | 25 +++++++++++++------------
    drivers/mmc/host/mmci.h | 1 +
    drivers/mmc/host/mmci_qcom_dml.c | 2 ++
    3 files changed, 16 insertions(+), 12 deletions(-)

    diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
    index 55c4222..2a433ed 100644
    --- a/drivers/mmc/host/mmci.c
    +++ b/drivers/mmc/host/mmci.c
    @@ -398,6 +398,17 @@ void mmci_get_next_data(struct mmci_host *host, struct mmc_data *data)
    host->ops->get_next_data(host, data);
    }

    +int mmci_dma_setup(struct mmci_host *host)
    +{
    + if (!host->ops || !host->ops->dma_setup)
    + return 0;
    +
    + /* initialize pre request cookie */
    + host->next_cookie = 1;
    +
    + return host->ops->dma_setup(host);
    +}
    +
    static void
    mmci_request_end(struct mmci_host *host, struct mmc_request *mrq)
    {
    @@ -472,7 +483,7 @@ struct mmci_dmae_priv {

    #define mmci_dmae_inprogress(dmae) ((dmae)->in_progress)

    -static int mmci_dma_setup(struct mmci_host *host)
    +int mmci_dmae_setup(struct mmci_host *host)
    {
    const char *rxname, *txname;
    struct mmci_dmae_priv *dmae;
    @@ -488,9 +499,6 @@ static int mmci_dma_setup(struct mmci_host *host)
    dmae->tx_channel = dma_request_slave_channel(mmc_dev(host->mmc),
    "tx");

    - /* initialize pre request cookie */
    - host->next_cookie = 1;
    -
    /*
    * If only an RX channel is specified, the driver will
    * attempt to use it bidirectionally, however if it is
    @@ -531,9 +539,6 @@ static int mmci_dma_setup(struct mmci_host *host)
    host->mmc->max_seg_size = max_seg_size;
    }

    - if (host->ops && host->ops->dma_setup)
    - return host->ops->dma_setup(host);
    -
    return 0;
    }

    @@ -793,14 +798,10 @@ static struct mmci_host_ops mmci_variant_ops = {
    .prep_data = mmci_dmae_prep_data,
    .unprep_data = mmci_dmae_unprep_data,
    .get_next_data = mmci_dmae_get_next_data,
    + .dma_setup = mmci_dmae_setup,
    };
    #else
    /* Blank functions if the DMA engine is not available */
    -static inline int mmci_dma_setup(struct mmci_host *host)
    -{
    - return 0;
    -}
    -
    static inline void mmci_dma_release(struct mmci_host *host)
    {
    }
    diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
    index c0a84cf..5057e13 100644
    --- a/drivers/mmc/host/mmci.h
    +++ b/drivers/mmc/host/mmci.h
    @@ -335,4 +335,5 @@ int mmci_dmae_prep_data(struct mmci_host *host, struct mmc_data *data,
    void mmci_dmae_unprep_data(struct mmci_host *host, struct mmc_data *data,
    int err);
    void mmci_dmae_get_next_data(struct mmci_host *host, struct mmc_data *data);
    +int mmci_dmae_setup(struct mmci_host *host);

    diff --git a/drivers/mmc/host/mmci_qcom_dml.c b/drivers/mmc/host/mmci_qcom_dml.c
    index 432a823..003c497 100644
    --- a/drivers/mmc/host/mmci_qcom_dml.c
    +++ b/drivers/mmc/host/mmci_qcom_dml.c
    @@ -126,6 +126,8 @@ static int qcom_dma_setup(struct mmci_host *host)
    int consumer_id, producer_id;
    struct device_node *np = host->mmc->parent->of_node;

    + mmci_dmae_setup(host);
    +
    consumer_id = of_get_dml_pipe_index(np, "tx");
    producer_id = of_get_dml_pipe_index(np, "rx");

    --
    2.7.4
    \
     
     \ /
      Last update: 2018-09-18 13:00    [W:4.113 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site