Commit e8a167b8 authored by Linus Walleij's avatar Linus Walleij Committed by Ulf Hansson

mmc: sdhci-esdhc-mcf: Use sg_miter for swapping

Use sg_miter iterator instead of sg_virt() and custom code
to loop over the scatterlist. The memory iterator will do
bounce buffering if the page happens to be located in high memory,
which the driver may or may not be using.
Suggested-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/linux-mmc/20240122073423.GA25859@lst.de/Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20240127-mmc-proper-kmap-v2-8-d8e732aa97d1@linaro.orgSigned-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 68cfdeb4
...@@ -299,9 +299,8 @@ static void esdhc_mcf_pltfm_set_bus_width(struct sdhci_host *host, int width) ...@@ -299,9 +299,8 @@ static void esdhc_mcf_pltfm_set_bus_width(struct sdhci_host *host, int width)
static void esdhc_mcf_request_done(struct sdhci_host *host, static void esdhc_mcf_request_done(struct sdhci_host *host,
struct mmc_request *mrq) struct mmc_request *mrq)
{ {
struct scatterlist *sg; struct sg_mapping_iter sgm;
u32 *buffer; u32 *buffer;
int i;
if (!mrq->data || !mrq->data->bytes_xfered) if (!mrq->data || !mrq->data->bytes_xfered)
goto exit_done; goto exit_done;
...@@ -313,10 +312,13 @@ static void esdhc_mcf_request_done(struct sdhci_host *host, ...@@ -313,10 +312,13 @@ static void esdhc_mcf_request_done(struct sdhci_host *host,
* On mcf5441x there is no hw sdma option/flag to select the dma * On mcf5441x there is no hw sdma option/flag to select the dma
* transfer endiannes. A swap after the transfer is needed. * transfer endiannes. A swap after the transfer is needed.
*/ */
for_each_sg(mrq->data->sg, sg, mrq->data->sg_len, i) { sg_miter_start(&sgm, mrq->data->sg, mrq->data->sg_len,
buffer = (u32 *)sg_virt(sg); SG_MITER_TO_SG | SG_MITER_FROM_SG);
esdhc_mcf_buffer_swap32(buffer, sg->length); while (sg_miter_next(&sgm)) {
buffer = sgm.addr;
esdhc_mcf_buffer_swap32(buffer, sgm.length);
} }
sg_miter_stop(&sgm);
exit_done: exit_done:
mmc_request_done(host->mmc, mrq); mmc_request_done(host->mmc, mrq);
......
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