aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0103-mmc-sdhci-introduce-adma_write_desc-hook-to-struct-s.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0103-mmc-sdhci-introduce-adma_write_desc-hook-to-struct-s.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0103-mmc-sdhci-introduce-adma_write_desc-hook-to-struct-s.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0103-mmc-sdhci-introduce-adma_write_desc-hook-to-struct-s.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0103-mmc-sdhci-introduce-adma_write_desc-hook-to-struct-s.patch
new file mode 100644
index 00000000..bea876fd
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0103-mmc-sdhci-introduce-adma_write_desc-hook-to-struct-s.patch
@@ -0,0 +1,128 @@
+From d564e134441916f5275e277146471997443d0aad Mon Sep 17 00:00:00 2001
+From: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
+Date: Tue, 28 Aug 2018 17:47:23 +0800
+Subject: [PATCH 103/131] mmc: sdhci: introduce adma_write_desc() hook to
+ struct sdhci_ops
+
+Add this hook so that it can be overridden with driver specific
+implementations. We also let the original sdhci_adma_write_desc()
+accept &desc so that the function can set its new value. Then export
+the function so that it could be reused by driver's specific
+implementations.
+
+Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
+Acked-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
+---
+ drivers/mmc/host/sdhci.c | 37 +++++++++++++++++++++++--------------
+ drivers/mmc/host/sdhci.h | 4 ++++
+ 2 files changed, 27 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
+index 075253f..f345a31 100644
+--- a/drivers/mmc/host/sdhci.c
++++ b/drivers/mmc/host/sdhci.c
+@@ -554,10 +554,10 @@ static void sdhci_kunmap_atomic(void *buffer, unsigned long *flags)
+ local_irq_restore(*flags);
+ }
+
+-static void sdhci_adma_write_desc(struct sdhci_host *host, void *desc,
+- dma_addr_t addr, int len, unsigned cmd)
++void sdhci_adma_write_desc(struct sdhci_host *host, void **desc,
++ dma_addr_t addr, int len, unsigned int cmd)
+ {
+- struct sdhci_adma2_64_desc *dma_desc = desc;
++ struct sdhci_adma2_64_desc *dma_desc = *desc;
+
+ /* 32-bit and 64-bit descriptors have these members in same position */
+ dma_desc->cmd = cpu_to_le16(cmd);
+@@ -566,6 +566,19 @@ static void sdhci_adma_write_desc(struct sdhci_host *host, void *desc,
+
+ if (host->flags & SDHCI_USE_64_BIT_DMA)
+ dma_desc->addr_hi = cpu_to_le32((u64)addr >> 32);
++
++ *desc += host->desc_sz;
++}
++EXPORT_SYMBOL_GPL(sdhci_adma_write_desc);
++
++static inline void __sdhci_adma_write_desc(struct sdhci_host *host,
++ void **desc, dma_addr_t addr,
++ int len, unsigned int cmd)
++{
++ if (host->ops->adma_write_desc)
++ host->ops->adma_write_desc(host, desc, addr, len, cmd);
++
++ sdhci_adma_write_desc(host, desc, addr, len, cmd);
+ }
+
+ static void sdhci_adma_mark_end(void *desc)
+@@ -618,28 +631,24 @@ static void sdhci_adma_table_pre(struct sdhci_host *host,
+ }
+
+ /* tran, valid */
+- sdhci_adma_write_desc(host, desc, align_addr, offset,
+- ADMA2_TRAN_VALID);
++ __sdhci_adma_write_desc(host, &desc, align_addr,
++ offset, ADMA2_TRAN_VALID);
+
+ BUG_ON(offset > 65536);
+
+ align += SDHCI_ADMA2_ALIGN;
+ align_addr += SDHCI_ADMA2_ALIGN;
+
+- desc += host->desc_sz;
+-
+ addr += offset;
+ len -= offset;
+ }
+
+ BUG_ON(len > 65536);
+
+- if (len) {
+- /* tran, valid */
+- sdhci_adma_write_desc(host, desc, addr, len,
+- ADMA2_TRAN_VALID);
+- desc += host->desc_sz;
+- }
++ /* tran, valid */
++ if (len)
++ __sdhci_adma_write_desc(host, &desc, addr, len,
++ ADMA2_TRAN_VALID);
+
+ /*
+ * If this triggers then we have a calculation bug
+@@ -656,7 +665,7 @@ static void sdhci_adma_table_pre(struct sdhci_host *host,
+ }
+ } else {
+ /* Add a terminating entry - nop, end, valid */
+- sdhci_adma_write_desc(host, desc, 0, 0, ADMA2_NOP_END_VALID);
++ __sdhci_adma_write_desc(host, &desc, 0, 0, ADMA2_NOP_END_VALID);
+ }
+ }
+
+diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
+index 17193f4..14e6545 100755
+--- a/drivers/mmc/host/sdhci.h
++++ b/drivers/mmc/host/sdhci.h
+@@ -591,6 +591,8 @@ struct sdhci_ops {
+ void (*adma_workaround)(struct sdhci_host *host, u32 intmask);
+ void (*card_event)(struct sdhci_host *host);
+ 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);
+ };
+
+ #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
+@@ -722,6 +724,8 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios);
+ int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
+ struct mmc_ios *ios);
+ void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable);
++void sdhci_adma_write_desc(struct sdhci_host *host, void **desc,
++ dma_addr_t addr, int len, unsigned int cmd);
+
+ #ifdef CONFIG_PM
+ int sdhci_suspend_host(struct sdhci_host *host);
+--
+2.7.4
+