Commit 111bfed4 authored by Sascha Hauer's avatar Sascha Hauer Committed by Boris Brezillon

mtd: rawnand: gpmi: remove direct_dma_map_ok from driver data struct

Instead of putting direct_dma_map_ok into driver struct pass it around
between functions to make the code more readable.
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: default avatarArnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
parent 118c3f9b
...@@ -636,6 +636,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len) ...@@ -636,6 +636,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len)
int chip = this->current_chip; int chip = this->current_chip;
int ret; int ret;
u32 pio[2]; u32 pio[2];
bool direct;
/* [1] : send PIO */ /* [1] : send PIO */
pio[0] = BF_GPMI_CTRL0_COMMAND_MODE(BV_GPMI_CTRL0_COMMAND_MODE__READ) 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) ...@@ -652,7 +653,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len)
return -EINVAL; return -EINVAL;
/* [2] : send DMA request */ /* [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, desc = dmaengine_prep_slave_sg(channel, &this->data_sgl,
1, DMA_DEV_TO_MEM, 1, DMA_DEV_TO_MEM,
DMA_PREP_INTERRUPT | DMA_CTRL_ACK); DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
...@@ -664,7 +665,7 @@ int gpmi_read_data(struct gpmi_nand_data *this, void *buf, int len) ...@@ -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); ret = start_dma_without_bch_irq(this, desc);
dma_unmap_sg(this->dev, &this->data_sgl, 1, DMA_FROM_DEVICE); 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); memcpy(buf, this->data_buffer_dma, len);
return ret; return ret;
......
...@@ -447,7 +447,7 @@ struct dma_chan *get_dma_chan(struct gpmi_nand_data *this) ...@@ -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? */ /* 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) enum dma_data_direction dr)
{ {
struct scatterlist *sgl = &this->data_sgl; struct scatterlist *sgl = &this->data_sgl;
...@@ -460,8 +460,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len, ...@@ -460,8 +460,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len,
if (ret == 0) if (ret == 0)
goto map_fail; goto map_fail;
this->direct_dma_map_ok = true; return true;
return;
} }
map_fail: map_fail:
...@@ -473,7 +472,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len, ...@@ -473,7 +472,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len,
dma_map_sg(this->dev, sgl, 1, dr); 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. */ /* 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, ...@@ -966,12 +965,12 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
unsigned char *status; unsigned char *status;
unsigned int max_bitflips = 0; unsigned int max_bitflips = 0;
int ret; int ret;
bool direct = false;
dev_dbg(this->dev, "page number is : %d\n", page); dev_dbg(this->dev, "page number is : %d\n", page);
payload_virt = this->payload_virt; payload_virt = this->payload_virt;
payload_phys = this->payload_phys; payload_phys = this->payload_phys;
this->direct_dma_map_ok = false;
if (virt_addr_valid(buf)) { if (virt_addr_valid(buf)) {
dma_addr_t dest_phys; dma_addr_t dest_phys;
...@@ -981,7 +980,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip, ...@@ -981,7 +980,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
if (!dma_mapping_error(this->dev, dest_phys)) { if (!dma_mapping_error(this->dev, dest_phys)) {
payload_virt = buf; payload_virt = buf;
payload_phys = dest_phys; 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, ...@@ -991,7 +990,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
/* go! */ /* go! */
ret = gpmi_read_page(this, payload_phys, auxiliary_phys); 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_unmap_single(this->dev, payload_phys, nfc_geo->payload_size,
DMA_FROM_DEVICE); DMA_FROM_DEVICE);
...@@ -1003,7 +1002,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip, ...@@ -1003,7 +1002,7 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
/* Loop over status bytes, accumulating ECC status. */ /* Loop over status bytes, accumulating ECC status. */
status = auxiliary_virt + nfc_geo->auxiliary_status_offset; 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); memcpy(buf, this->payload_virt, nfc_geo->payload_size);
for (i = 0; i < nfc_geo->ecc_chunk_count; i++, status++) { for (i = 0; i < nfc_geo->ecc_chunk_count; i++, status++) {
......
...@@ -141,9 +141,6 @@ struct gpmi_nand_data { ...@@ -141,9 +141,6 @@ struct gpmi_nand_data {
int current_chip; int current_chip;
unsigned int command_length; unsigned int command_length;
/* for DMA operations */
bool direct_dma_map_ok;
struct scatterlist cmd_sgl; struct scatterlist cmd_sgl;
char *cmd_buffer; char *cmd_buffer;
...@@ -174,7 +171,7 @@ struct gpmi_nand_data { ...@@ -174,7 +171,7 @@ struct gpmi_nand_data {
/* Common Services */ /* Common Services */
int common_nfc_set_geometry(struct gpmi_nand_data *); int common_nfc_set_geometry(struct gpmi_nand_data *);
struct dma_chan *get_dma_chan(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); enum dma_data_direction dr);
int start_dma_without_bch_irq(struct gpmi_nand_data *, int start_dma_without_bch_irq(struct gpmi_nand_data *,
struct dma_async_tx_descriptor *); struct dma_async_tx_descriptor *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment