1

mmc: Merge branch fixes into next

Merge the mmc fixes for v6.10-rc[n] into the next branch, to allow them to
get tested together with the new mmc changes that are targeted for v6.11.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
Ulf Hansson 2024-07-11 17:58:04 +02:00
commit 796826bc61
2 changed files with 18 additions and 0 deletions

View File

@ -224,6 +224,9 @@ static void davinci_fifo_data_trans(struct mmc_davinci_host *host,
}
p = sgm->addr;
if (n > sgm->length)
n = sgm->length;
/* NOTE: we never transfer more than rw_threshold bytes
* to/from the fifo here; there's no I/O overlap.
* This also assumes that access width( i.e. ACCWD) is 4 bytes

View File

@ -4708,6 +4708,21 @@ int sdhci_setup_host(struct sdhci_host *host)
if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC) {
host->max_adma = 65532; /* 32-bit alignment */
mmc->max_seg_size = 65535;
/*
* sdhci_adma_table_pre() expects to define 1 DMA
* descriptor per segment, so the maximum segment size
* is set accordingly. SDHCI allows up to 64KiB per DMA
* descriptor (16-bit field), but some controllers do
* not support "zero means 65536" reducing the maximum
* for them to 65535. That is a problem if PAGE_SIZE is
* 64KiB because the block layer does not support
* max_seg_size < PAGE_SIZE, however
* sdhci_adma_table_pre() has a workaround to handle
* that case, and split the descriptor. Refer also
* comment in sdhci_adma_table_pre().
*/
if (mmc->max_seg_size < PAGE_SIZE)
mmc->max_seg_size = PAGE_SIZE;
} else {
mmc->max_seg_size = 65536;
}