Commit e93577ec authored by Angelo Dureghello's avatar Angelo Dureghello Committed by Ulf Hansson
Browse files

mmc: sdhci: add quirks for be to le byte swapping



Some controller as the ColdFire eshdc may require an endianness
byte swap, because DMA read endianness is not configurable.

Facilitate using the bounce buffer for this by adding
->copy_to_bounce_buffer().

Signed-off-by: default avatarAngelo Dureghello <angelo.dureghello@timesys.com>
Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20200518191742.1251440-2-angelo.dureghello@timesys.com


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 991f5c4d
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -637,9 +637,13 @@ static int sdhci_pre_dma_transfer(struct sdhci_host *host,
		}
		if (mmc_get_dma_dir(data) == DMA_TO_DEVICE) {
			/* Copy the data to the bounce buffer */
			if (host->ops->copy_to_bounce_buffer) {
				host->ops->copy_to_bounce_buffer(host,
								 data, length);
			} else {
				sg_copy_to_buffer(data->sg, data->sg_len,
					  host->bounce_buffer,
					  length);
						  host->bounce_buffer, length);
			}
		}
		/* Switch ownership to the DMA */
		dma_sync_single_for_device(host->mmc->parent,
+3 −0
Original line number Diff line number Diff line
@@ -645,6 +645,9 @@ struct sdhci_ops {
	void	(*voltage_switch)(struct sdhci_host *host);
	void	(*adma_write_desc)(struct sdhci_host *host, void **desc,
				   dma_addr_t addr, int len, unsigned int cmd);
	void	(*copy_to_bounce_buffer)(struct sdhci_host *host,
					 struct mmc_data *data,
					 unsigned int length);
	void	(*request_done)(struct sdhci_host *host,
				struct mmc_request *mrq);
};