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: 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>
This commit is contained in:
parent
118c3f9b01
commit
111bfed4f3
|
@ -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;
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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 *);
|
||||
|
|
Loading…
Reference in New Issue