mmc: dw_mmc: use the cookie's enum values for post/pre_req()
authorJaehoon Chung <jh80.chung@samsung.com>
Thu, 17 Nov 2016 07:40:38 +0000 (16:40 +0900)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 29 Nov 2016 08:05:09 +0000 (09:05 +0100)
This patch removed the meaningless value. Instead, use the cookie's enum
values for executing correctly.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/dw_mmc.c
include/linux/mmc/dw_mmc.h

index 0b220e5a8169e1671b84b6c27ff74f2385e479ee..65546b6df840b524f535f4d3aae7573cbc42203c 100644 (file)
@@ -414,12 +414,13 @@ static void dw_mci_dma_cleanup(struct dw_mci *host)
 {
        struct mmc_data *data = host->data;
 
-       if (data)
-               if (!data->host_cookie)
-                       dma_unmap_sg(host->dev,
-                                    data->sg,
-                                    data->sg_len,
-                                    dw_mci_get_dma_dir(data));
+       if (data && data->host_cookie == COOKIE_MAPPED) {
+               dma_unmap_sg(host->dev,
+                            data->sg,
+                            data->sg_len,
+                            dw_mci_get_dma_dir(data));
+               data->host_cookie = COOKIE_UNMAPPED;
+       }
 }
 
 static void dw_mci_idmac_reset(struct dw_mci *host)
@@ -850,13 +851,13 @@ static const struct dw_mci_dma_ops dw_mci_edmac_ops = {
 
 static int dw_mci_pre_dma_transfer(struct dw_mci *host,
                                   struct mmc_data *data,
-                                  bool next)
+                                  int cookie)
 {
        struct scatterlist *sg;
        unsigned int i, sg_len;
 
-       if (!next && data->host_cookie)
-               return data->host_cookie;
+       if (data->host_cookie == COOKIE_PRE_MAPPED)
+               return data->sg_len;
 
        /*
         * We don't do DMA on "complex" transfers, i.e. with
@@ -881,8 +882,7 @@ static int dw_mci_pre_dma_transfer(struct dw_mci *host,
        if (sg_len == 0)
                return -EINVAL;
 
-       if (next)
-               data->host_cookie = sg_len;
+       data->host_cookie = cookie;
 
        return sg_len;
 }
@@ -897,13 +897,12 @@ static void dw_mci_pre_req(struct mmc_host *mmc,
        if (!slot->host->use_dma || !data)
                return;
 
-       if (data->host_cookie) {
-               data->host_cookie = 0;
-               return;
-       }
+       /* This data might be unmapped at this time */
+       data->host_cookie = COOKIE_UNMAPPED;
 
-       if (dw_mci_pre_dma_transfer(slot->host, mrq->data, 1) < 0)
-               data->host_cookie = 0;
+       if (dw_mci_pre_dma_transfer(slot->host, mrq->data,
+                               COOKIE_PRE_MAPPED) < 0)
+               data->host_cookie = COOKIE_UNMAPPED;
 }
 
 static void dw_mci_post_req(struct mmc_host *mmc,
@@ -916,12 +915,12 @@ static void dw_mci_post_req(struct mmc_host *mmc,
        if (!slot->host->use_dma || !data)
                return;
 
-       if (data->host_cookie)
+       if (data->host_cookie != COOKIE_UNMAPPED)
                dma_unmap_sg(slot->host->dev,
                             data->sg,
                             data->sg_len,
                             dw_mci_get_dma_dir(data));
-       data->host_cookie = 0;
+       data->host_cookie = COOKIE_UNMAPPED;
 }
 
 static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data)
@@ -1027,7 +1026,7 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
        if (!host->use_dma)
                return -ENODEV;
 
-       sg_len = dw_mci_pre_dma_transfer(host, data, 0);
+       sg_len = dw_mci_pre_dma_transfer(host, data, COOKIE_MAPPED);
        if (sg_len < 0) {
                host->dma_ops->stop(host);
                return sg_len;
index f5af2bd35e7fdffbab622c121db2433e980f23e0..15db6f83f53f9ae072ac47ab6e8ea05f9aa96340 100644 (file)
@@ -39,6 +39,12 @@ enum {
        EVENT_DATA_ERROR,
 };
 
+enum dw_mci_cookie {
+       COOKIE_UNMAPPED,
+       COOKIE_PRE_MAPPED,      /* mapped by pre_req() of dwmmc */
+       COOKIE_MAPPED,          /* mapped by prepare_data() of dwmmc */
+};
+
 struct mmc_data;
 
 enum {