mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-03 07:26:45 +07:00
mmc: sdhci: prepare DMA address/size quirk handling consolidation
Prepare to consolidate the DMA address/size quirk handling into one single loop. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
add8913d5d
commit
a0eaf0f93f
@ -733,23 +733,24 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
|
||||
* scatterlist.
|
||||
*/
|
||||
if (host->flags & SDHCI_REQ_USE_DMA) {
|
||||
int broken, i;
|
||||
struct scatterlist *sg;
|
||||
unsigned int length_mask;
|
||||
int i;
|
||||
|
||||
broken = 0;
|
||||
length_mask = 0;
|
||||
if (host->flags & SDHCI_USE_ADMA) {
|
||||
if (host->quirks & SDHCI_QUIRK_32BIT_ADMA_SIZE)
|
||||
broken = 1;
|
||||
length_mask = 3;
|
||||
} else {
|
||||
if (host->quirks & SDHCI_QUIRK_32BIT_DMA_SIZE)
|
||||
broken = 1;
|
||||
length_mask = 3;
|
||||
}
|
||||
|
||||
if (unlikely(broken)) {
|
||||
if (unlikely(length_mask)) {
|
||||
for_each_sg(data->sg, sg, data->sg_len, i) {
|
||||
if (sg->length & 0x3) {
|
||||
if (sg->length & length_mask) {
|
||||
DBG("Reverting to PIO because of transfer size (%d)\n",
|
||||
sg->length);
|
||||
sg->length);
|
||||
host->flags &= ~SDHCI_REQ_USE_DMA;
|
||||
break;
|
||||
}
|
||||
@ -762,10 +763,11 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
|
||||
* translation to device address space.
|
||||
*/
|
||||
if (host->flags & SDHCI_REQ_USE_DMA) {
|
||||
int broken, i;
|
||||
struct scatterlist *sg;
|
||||
unsigned int offset_mask;
|
||||
int i;
|
||||
|
||||
broken = 0;
|
||||
offset_mask = 0;
|
||||
if (host->flags & SDHCI_USE_ADMA) {
|
||||
/*
|
||||
* As we use 3 byte chunks to work around
|
||||
@ -773,15 +775,15 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
|
||||
* quirk.
|
||||
*/
|
||||
if (host->quirks & SDHCI_QUIRK_32BIT_ADMA_SIZE)
|
||||
broken = 1;
|
||||
offset_mask = 3;
|
||||
} else {
|
||||
if (host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR)
|
||||
broken = 1;
|
||||
offset_mask = 3;
|
||||
}
|
||||
|
||||
if (unlikely(broken)) {
|
||||
if (unlikely(offset_mask)) {
|
||||
for_each_sg(data->sg, sg, data->sg_len, i) {
|
||||
if (sg->offset & 0x3) {
|
||||
if (sg->offset & offset_mask) {
|
||||
DBG("Reverting to PIO because of bad alignment\n");
|
||||
host->flags &= ~SDHCI_REQ_USE_DMA;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user