lkml.org 
[lkml]   [2018]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V6 05/23] mmc: mmci: add get_next_data callback
    Date
    From: Ludovic Barre <ludovic.barre@st.com>

    This patch adds get_next_data callback to mmci_host_ops.
    Generic mmci_get_next_data factorizes next_cookie check and
    the host ops call.

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

    diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
    index 4db2b3f..8d483dd 100644
    --- a/drivers/mmc/host/mmci.c
    +++ b/drivers/mmc/host/mmci.c
    @@ -417,6 +417,14 @@ void mmci_unprep_data(struct mmci_host *host, struct mmc_data *data,
    data->host_cookie = 0;
    }

    +void mmci_get_next_data(struct mmci_host *host, struct mmc_data *data)
    +{
    + WARN_ON(data->host_cookie && data->host_cookie != host->next_cookie);
    +
    + if (host->ops && host->ops->get_next_data)
    + host->ops->get_next_data(host, data);
    +}
    +
    static void
    mmci_request_end(struct mmci_host *host, struct mmc_request *mrq)
    {
    @@ -767,7 +775,7 @@ static int mmci_dma_start_data(struct mmci_host *host, unsigned int datactrl)
    return 0;
    }

    -static void mmci_get_next_data(struct mmci_host *host, struct mmc_data *data)
    +void mmci_dmae_get_next_data(struct mmci_host *host, struct mmc_data *data)
    {
    struct mmci_dmae_priv *dmae = host->dma_priv;
    struct mmci_dmae_next *next = &dmae->next_data;
    @@ -775,7 +783,6 @@ static void mmci_get_next_data(struct mmci_host *host, struct mmc_data *data)
    if (!host->use_dma)
    return;

    - WARN_ON(data->host_cookie && data->host_cookie != host->next_cookie);
    WARN_ON(!data->host_cookie && (next->desc || next->chan));

    dmae->desc_current = next->desc;
    @@ -820,6 +827,7 @@ void mmci_dmae_unprep_data(struct mmci_host *host,
    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,
    .dma_release = mmci_dmae_release,
    };
    @@ -830,10 +838,6 @@ void mmci_variant_init(struct mmci_host *host)
    }
    #else
    /* Blank functions if the DMA engine is not available */
    -static void mmci_get_next_data(struct mmci_host *host, struct mmc_data *data)
    -{
    -}
    -
    static inline void mmci_dma_finalize(struct mmci_host *host,
    struct mmc_data *data)
    {
    diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
    index decb1c7..a6a85aa 100644
    --- a/drivers/mmc/host/mmci.h
    +++ b/drivers/mmc/host/mmci.h
    @@ -277,6 +277,7 @@ struct mmci_host_ops {
    bool next);
    void (*unprep_data)(struct mmci_host *host, struct mmc_data *data,
    int err);
    + void (*get_next_data)(struct mmci_host *host, struct mmc_data *data);
    int (*dma_setup)(struct mmci_host *host);
    void (*dma_release)(struct mmci_host *host);
    };
    @@ -335,6 +336,7 @@ int mmci_dmae_prep_data(struct mmci_host *host, struct mmc_data *data,
    bool next);
    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);
    void mmci_dmae_release(struct mmci_host *host);

    diff --git a/drivers/mmc/host/mmci_qcom_dml.c b/drivers/mmc/host/mmci_qcom_dml.c
    index 156e30b..da4c43a 100644
    --- a/drivers/mmc/host/mmci_qcom_dml.c
    +++ b/drivers/mmc/host/mmci_qcom_dml.c
    @@ -186,6 +186,7 @@ static int qcom_dma_setup(struct mmci_host *host)
    static struct mmci_host_ops qcom_variant_ops = {
    .prep_data = mmci_dmae_prep_data,
    .unprep_data = mmci_dmae_unprep_data,
    + .get_next_data = mmci_dmae_get_next_data,
    .dma_setup = qcom_dma_setup,
    .dma_release = mmci_dmae_release,
    };
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-10-08 14:11    [W:4.050 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site