Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit feeef096 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Ulf Hansson
Browse files

mmc: use new core function mmc_get_dma_dir



Use new core function mmc_get_dma_dir().

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 6335d683
Loading
Loading
Loading
Loading
+2 −8
Original line number Original line Diff line number Diff line
@@ -212,10 +212,7 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
	if (host->dma_in_use) {
	if (host->dma_in_use) {
		enum dma_data_direction dma_data_dir;
		enum dma_data_direction dma_data_dir;


		if (data->flags & MMC_DATA_WRITE)
		dma_data_dir = mmc_get_dma_dir(data);
			dma_data_dir = DMA_TO_DEVICE;
		else
			dma_data_dir = DMA_FROM_DEVICE;


		if (dma_data_dir == DMA_FROM_DEVICE) {
		if (dma_data_dir == DMA_FROM_DEVICE) {
			/*
			/*
@@ -390,10 +387,7 @@ static void goldfish_mmc_prepare_data(struct goldfish_mmc_host *host,
	 */
	 */
	sg_len = (data->blocks == 1) ? 1 : data->sg_len;
	sg_len = (data->blocks == 1) ? 1 : data->sg_len;


	if (data->flags & MMC_DATA_WRITE)
	dma_data_dir = mmc_get_dma_dir(data);
		dma_data_dir = DMA_TO_DEVICE;
	else
		dma_data_dir = DMA_FROM_DEVICE;


	host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg,
	host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg,
				  sg_len, dma_data_dir);
				  sg_len, dma_data_dir);
+11 −19
Original line number Original line Diff line number Diff line
@@ -954,8 +954,7 @@ static void atmci_pdc_cleanup(struct atmel_mci *host)
	if (data)
	if (data)
		dma_unmap_sg(&host->pdev->dev,
		dma_unmap_sg(&host->pdev->dev,
				data->sg, data->sg_len,
				data->sg, data->sg_len,
				((data->flags & MMC_DATA_WRITE)
				mmc_get_dma_dir(data));
				 ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
}
}


/*
/*
@@ -993,8 +992,7 @@ static void atmci_dma_cleanup(struct atmel_mci *host)
	if (data)
	if (data)
		dma_unmap_sg(host->dma.chan->device->dev,
		dma_unmap_sg(host->dma.chan->device->dev,
				data->sg, data->sg_len,
				data->sg, data->sg_len,
				((data->flags & MMC_DATA_WRITE)
				mmc_get_dma_dir(data));
				 ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
}
}


/*
/*
@@ -1095,7 +1093,6 @@ atmci_prepare_data_pdc(struct atmel_mci *host, struct mmc_data *data)
{
{
	u32 iflags, tmp;
	u32 iflags, tmp;
	unsigned int sg_len;
	unsigned int sg_len;
	enum dma_data_direction dir;
	int i;
	int i;


	data->error = -EINPROGRESS;
	data->error = -EINPROGRESS;
@@ -1107,13 +1104,10 @@ atmci_prepare_data_pdc(struct atmel_mci *host, struct mmc_data *data)
	/* Enable pdc mode */
	/* Enable pdc mode */
	atmci_writel(host, ATMCI_MR, host->mode_reg | ATMCI_MR_PDCMODE);
	atmci_writel(host, ATMCI_MR, host->mode_reg | ATMCI_MR_PDCMODE);


	if (data->flags & MMC_DATA_READ) {
	if (data->flags & MMC_DATA_READ)
		dir = DMA_FROM_DEVICE;
		iflags |= ATMCI_ENDRX | ATMCI_RXBUFF;
		iflags |= ATMCI_ENDRX | ATMCI_RXBUFF;
	} else {
	else
		dir = DMA_TO_DEVICE;
		iflags |= ATMCI_ENDTX | ATMCI_TXBUFE | ATMCI_BLKE;
		iflags |= ATMCI_ENDTX | ATMCI_TXBUFE | ATMCI_BLKE;
	}


	/* Set BLKLEN */
	/* Set BLKLEN */
	tmp = atmci_readl(host, ATMCI_MR);
	tmp = atmci_readl(host, ATMCI_MR);
@@ -1123,7 +1117,8 @@ atmci_prepare_data_pdc(struct atmel_mci *host, struct mmc_data *data)


	/* Configure PDC */
	/* Configure PDC */
	host->data_size = data->blocks * data->blksz;
	host->data_size = data->blocks * data->blksz;
	sg_len = dma_map_sg(&host->pdev->dev, data->sg, data->sg_len, dir);
	sg_len = dma_map_sg(&host->pdev->dev, data->sg, data->sg_len,
			    mmc_get_dma_dir(data));


	if ((!host->caps.has_rwproof)
	if ((!host->caps.has_rwproof)
	    && (host->data->flags & MMC_DATA_WRITE)) {
	    && (host->data->flags & MMC_DATA_WRITE)) {
@@ -1135,9 +1130,8 @@ atmci_prepare_data_pdc(struct atmel_mci *host, struct mmc_data *data)
	}
	}


	if (host->data_size)
	if (host->data_size)
		atmci_pdc_set_both_buf(host,
		atmci_pdc_set_both_buf(host, data->flags & MMC_DATA_READ ?
			((dir == DMA_FROM_DEVICE) ? XFER_RECEIVE : XFER_TRANSMIT));
				       XFER_RECEIVE : XFER_TRANSMIT);

	return iflags;
	return iflags;
}
}


@@ -1148,7 +1142,6 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
	struct dma_async_tx_descriptor	*desc;
	struct dma_async_tx_descriptor	*desc;
	struct scatterlist		*sg;
	struct scatterlist		*sg;
	unsigned int			i;
	unsigned int			i;
	enum dma_data_direction		direction;
	enum dma_transfer_direction	slave_dirn;
	enum dma_transfer_direction	slave_dirn;
	unsigned int			sglen;
	unsigned int			sglen;
	u32				maxburst;
	u32				maxburst;
@@ -1186,12 +1179,10 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
		return -ENODEV;
		return -ENODEV;


	if (data->flags & MMC_DATA_READ) {
	if (data->flags & MMC_DATA_READ) {
		direction = DMA_FROM_DEVICE;
		host->dma_conf.direction = slave_dirn = DMA_DEV_TO_MEM;
		host->dma_conf.direction = slave_dirn = DMA_DEV_TO_MEM;
		maxburst = atmci_convert_chksize(host,
		maxburst = atmci_convert_chksize(host,
						 host->dma_conf.src_maxburst);
						 host->dma_conf.src_maxburst);
	} else {
	} else {
		direction = DMA_TO_DEVICE;
		host->dma_conf.direction = slave_dirn = DMA_MEM_TO_DEV;
		host->dma_conf.direction = slave_dirn = DMA_MEM_TO_DEV;
		maxburst = atmci_convert_chksize(host,
		maxburst = atmci_convert_chksize(host,
						 host->dma_conf.dst_maxburst);
						 host->dma_conf.dst_maxburst);
@@ -1202,7 +1193,7 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
			ATMCI_DMAEN);
			ATMCI_DMAEN);


	sglen = dma_map_sg(chan->device->dev, data->sg,
	sglen = dma_map_sg(chan->device->dev, data->sg,
			data->sg_len, direction);
			data->sg_len, mmc_get_dma_dir(data));


	dmaengine_slave_config(chan, &host->dma_conf);
	dmaengine_slave_config(chan, &host->dma_conf);
	desc = dmaengine_prep_slave_sg(chan,
	desc = dmaengine_prep_slave_sg(chan,
@@ -1217,7 +1208,8 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)


	return iflags;
	return iflags;
unmap_exit:
unmap_exit:
	dma_unmap_sg(chan->device->dev, data->sg, data->sg_len, direction);
	dma_unmap_sg(chan->device->dev, data->sg, data->sg_len,
		     mmc_get_dma_dir(data));
	return -ENOMEM;
	return -ENOMEM;
}
}


+4 −10
Original line number Original line Diff line number Diff line
@@ -478,18 +478,14 @@ static int mmc_davinci_start_dma_transfer(struct mmc_davinci_host *host,
	int ret = 0;
	int ret = 0;


	host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
	host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
				((data->flags & MMC_DATA_WRITE)
				  mmc_get_dma_dir(data));
				? DMA_TO_DEVICE
				: DMA_FROM_DEVICE));


	/* no individual DMA segment should need a partial FIFO */
	/* no individual DMA segment should need a partial FIFO */
	for (i = 0; i < host->sg_len; i++) {
	for (i = 0; i < host->sg_len; i++) {
		if (sg_dma_len(data->sg + i) & mask) {
		if (sg_dma_len(data->sg + i) & mask) {
			dma_unmap_sg(mmc_dev(host->mmc),
			dma_unmap_sg(mmc_dev(host->mmc),
				     data->sg, data->sg_len,
				     data->sg, data->sg_len,
					(data->flags & MMC_DATA_WRITE)
				     mmc_get_dma_dir(data));
					? DMA_TO_DEVICE
					: DMA_FROM_DEVICE);
			return -1;
			return -1;
		}
		}
	}
	}
@@ -802,9 +798,7 @@ mmc_davinci_xfer_done(struct mmc_davinci_host *host, struct mmc_data *data)
		davinci_abort_dma(host);
		davinci_abort_dma(host);


		dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
		dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
			     (data->flags & MMC_DATA_WRITE)
			     mmc_get_dma_dir(data));
			     ? DMA_TO_DEVICE
			     : DMA_FROM_DEVICE);
		host->do_dma = false;
		host->do_dma = false;
	}
	}
	host->data_dir = DAVINCI_MMC_DATADIR_NONE;
	host->data_dir = DAVINCI_MMC_DATADIR_NONE;
+3 −11
Original line number Original line Diff line number Diff line
@@ -432,14 +432,6 @@ static void dw_mci_stop_dma(struct dw_mci *host)
	set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
	set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
}
}


static int dw_mci_get_dma_dir(struct mmc_data *data)
{
	if (data->flags & MMC_DATA_WRITE)
		return DMA_TO_DEVICE;
	else
		return DMA_FROM_DEVICE;
}

static void dw_mci_dma_cleanup(struct dw_mci *host)
static void dw_mci_dma_cleanup(struct dw_mci *host)
{
{
	struct mmc_data *data = host->data;
	struct mmc_data *data = host->data;
@@ -448,7 +440,7 @@ static void dw_mci_dma_cleanup(struct dw_mci *host)
		dma_unmap_sg(host->dev,
		dma_unmap_sg(host->dev,
			     data->sg,
			     data->sg,
			     data->sg_len,
			     data->sg_len,
			     dw_mci_get_dma_dir(data));
			     mmc_get_dma_dir(data));
		data->host_cookie = COOKIE_UNMAPPED;
		data->host_cookie = COOKIE_UNMAPPED;
	}
	}
}
}
@@ -904,7 +896,7 @@ static int dw_mci_pre_dma_transfer(struct dw_mci *host,
	sg_len = dma_map_sg(host->dev,
	sg_len = dma_map_sg(host->dev,
			    data->sg,
			    data->sg,
			    data->sg_len,
			    data->sg_len,
			    dw_mci_get_dma_dir(data));
			    mmc_get_dma_dir(data));
	if (sg_len == 0)
	if (sg_len == 0)
		return -EINVAL;
		return -EINVAL;


@@ -944,7 +936,7 @@ static void dw_mci_post_req(struct mmc_host *mmc,
		dma_unmap_sg(slot->host->dev,
		dma_unmap_sg(slot->host->dev,
			     data->sg,
			     data->sg,
			     data->sg_len,
			     data->sg_len,
			     dw_mci_get_dma_dir(data));
			     mmc_get_dma_dir(data));
	data->host_cookie = COOKIE_UNMAPPED;
	data->host_cookie = COOKIE_UNMAPPED;
}
}


+2 −7
Original line number Original line Diff line number Diff line
@@ -200,11 +200,6 @@ static int jz4740_mmc_acquire_dma_channels(struct jz4740_mmc_host *host)
	return -ENODEV;
	return -ENODEV;
}
}


static inline int jz4740_mmc_get_dma_dir(struct mmc_data *data)
{
	return (data->flags & MMC_DATA_READ) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
}

static inline struct dma_chan *jz4740_mmc_get_dma_chan(struct jz4740_mmc_host *host,
static inline struct dma_chan *jz4740_mmc_get_dma_chan(struct jz4740_mmc_host *host,
						       struct mmc_data *data)
						       struct mmc_data *data)
{
{
@@ -215,7 +210,7 @@ static void jz4740_mmc_dma_unmap(struct jz4740_mmc_host *host,
				 struct mmc_data *data)
				 struct mmc_data *data)
{
{
	struct dma_chan *chan = jz4740_mmc_get_dma_chan(host, data);
	struct dma_chan *chan = jz4740_mmc_get_dma_chan(host, data);
	enum dma_data_direction dir = jz4740_mmc_get_dma_dir(data);
	enum dma_data_direction dir = mmc_get_dma_dir(data);


	dma_unmap_sg(chan->device->dev, data->sg, data->sg_len, dir);
	dma_unmap_sg(chan->device->dev, data->sg, data->sg_len, dir);
}
}
@@ -227,7 +222,7 @@ static int jz4740_mmc_prepare_dma_data(struct jz4740_mmc_host *host,
				       struct dma_chan *chan)
				       struct dma_chan *chan)
{
{
	struct jz4740_mmc_host_next *next_data = &host->next_data;
	struct jz4740_mmc_host_next *next_data = &host->next_data;
	enum dma_data_direction dir = jz4740_mmc_get_dma_dir(data);
	enum dma_data_direction dir = mmc_get_dma_dir(data);
	int sg_len;
	int sg_len;


	if (!next && data->host_cookie &&
	if (!next && data->host_cookie &&
Loading