mtd: rawnand: gpmi: remove direct_dma_map_ok from driver data struct
authorSascha Hauer <s.hauer@pengutronix.de>
Thu, 26 Apr 2018 15:41:25 +0000 (17:41 +0200)
committerBoris Brezillon <boris.brezillon@bootlin.com>
Sun, 29 Apr 2018 06:56:48 +0000 (08:56 +0200)
Instead of putting direct_dma_map_ok into driver struct pass it around
between functions to make the code more readable.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
drivers/mtd/nand/raw/gpmi-nand/gpmi-lib.c
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.h

index 447961b798b4366e0eeeec4ca09b2c25417b7cdf..39834bedf46071dde94005804f571a6a9f93c6ed 100644 (file)
@@ -636,6 +636,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len)
        int chip = this->current_chip;
        int ret;
        u32 pio[2];
+       bool direct;
 
        /* [1] : send PIO */
        pio[0] = BF_GPMI_CTRL0_COMMAND_MODE(BV_GPMI_CTRL0_COMMAND_MODE__READ)
@@ -652,7 +653,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len)
                return -EINVAL;
 
        /* [2] : send DMA request */
-       prepare_data_dma(this, buf, len, DMA_FROM_DEVICE);
+       direct = prepare_data_dma(this, buf, len, DMA_FROM_DEVICE);
        desc = dmaengine_prep_slave_sg(channel, &this->data_sgl,
                                        1, DMA_DEV_TO_MEM,
                                        DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
@@ -664,7 +665,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len)
        ret = start_dma_without_bch_irq(this, desc);
 
        dma_unmap_sg(this->dev, &this->data_sgl, 1, DMA_FROM_DEVICE);
-       if (this->direct_dma_map_ok == false)
+       if (!direct)
                memcpy(buf, this->data_buffer_dma, len);
 
        return ret;
index 82782e4d8eab33f459c69c26708759bcdd3b4214..148faee6a5430f05ce97f5aa5300ffe42fc671b0 100644 (file)
@@ -447,7 +447,7 @@ struct dma_chan *get_dma_chan(struct gpmi_nand_data *this)
 }
 
 /* Can we use the upper's buffer directly for DMA? */
-void prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len,
+bool prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len,
                      enum dma_data_direction dr)
 {
        struct scatterlist *sgl = &this->data_sgl;
@@ -460,8 +460,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len,
                if (ret == 0)
                        goto map_fail;
 
-               this->direct_dma_map_ok = true;
-               return;
+               return true;
        }
 
 map_fail:
@@ -473,7 +472,7 @@ map_fail:
 
        dma_map_sg(this->dev, sgl, 1, dr);
 
-       this->direct_dma_map_ok = false;
+       return false;
 }
 
 /* This will be called after the DMA operation is finished. */
@@ -966,12 +965,12 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
        unsigned char *status;
        unsigned int  max_bitflips = 0;
        int           ret;
+       bool          direct = false;
 
        dev_dbg(this->dev, "page number is : %d\n", page);
 
        payload_virt = this->payload_virt;
        payload_phys = this->payload_phys;
-       this->direct_dma_map_ok = false;
 
        if (virt_addr_valid(buf)) {
                dma_addr_t dest_phys;
@@ -981,7 +980,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
                if (!dma_mapping_error(this->dev, dest_phys)) {
                        payload_virt = buf;
                        payload_phys = dest_phys;
-                       this->direct_dma_map_ok = true;
+                       direct = true;
                }
        }
 
@@ -991,7 +990,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
        /* go! */
        ret = gpmi_read_page(this, payload_phys, auxiliary_phys);
 
-       if (this->direct_dma_map_ok)
+       if (direct)
                dma_unmap_single(this->dev, payload_phys, nfc_geo->payload_size,
                                 DMA_FROM_DEVICE);
 
@@ -1003,7 +1002,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
        /* Loop over status bytes, accumulating ECC status. */
        status = auxiliary_virt + nfc_geo->auxiliary_status_offset;
 
-       if (!this->direct_dma_map_ok)
+       if (!direct)
                memcpy(buf, this->payload_virt, nfc_geo->payload_size);
 
        for (i = 0; i < nfc_geo->ecc_chunk_count; i++, status++) {
index fba72ad282635af9daf84a14fd0092e1e5d8e028..6aa10d6962d6398d8a0151f1fd7276b5e361c18a 100644 (file)
@@ -141,9 +141,6 @@ struct gpmi_nand_data {
        int                     current_chip;
        unsigned int            command_length;
 
-       /* for DMA operations */
-       bool                    direct_dma_map_ok;
-
        struct scatterlist      cmd_sgl;
        char                    *cmd_buffer;
 
@@ -174,7 +171,7 @@ struct gpmi_nand_data {
 /* Common Services */
 int common_nfc_set_geometry(struct gpmi_nand_data *);
 struct dma_chan *get_dma_chan(struct gpmi_nand_data *);
-void prepare_data_dma(struct gpmi_nand_data *, const void *buf, int len,
+bool prepare_data_dma(struct gpmi_nand_data *, const void *buf, int len,
                      enum dma_data_direction dr);
 int start_dma_without_bch_irq(struct gpmi_nand_data *,
                              struct dma_async_tx_descriptor *);