|
@@ -496,12 +496,22 @@ static int sdhci_adma_table_pre(struct sdhci_host *host,
|
|
|
WARN_ON((desc - host->adma_desc) > (128 * 2 + 1) * 4);
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Add a terminating entry.
|
|
|
- */
|
|
|
+ if (host->quirks & SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC) {
|
|
|
+ /*
|
|
|
+ * Mark the last descriptor as the terminating descriptor
|
|
|
+ */
|
|
|
+ if (desc != host->adma_desc) {
|
|
|
+ desc -= 8;
|
|
|
+ desc[0] |= 0x2; /* end */
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ /*
|
|
|
+ * Add a terminating entry.
|
|
|
+ */
|
|
|
|
|
|
- /* nop, end, valid */
|
|
|
- sdhci_set_adma_desc(desc, 0, 0, 0x3);
|
|
|
+ /* nop, end, valid */
|
|
|
+ sdhci_set_adma_desc(desc, 0, 0, 0x3);
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* Resync align buffer as we might have changed it.
|