[Sound-open-firmware] [PATCH] cnl: Add missing host and link DMA init

Tomasz Lauda tomasz.lauda at linux.intel.com
Tue Feb 20 12:13:45 CET 2018


CONFIG_DMA_GW is set for Cannonlake, so add host and link initializations to avoid FW crash.

Signed-off-by: Tomasz Lauda <tomasz.lauda at linux.intel.com>
---
 src/platform/cannonlake/dma.c      | 13 +++++++++----
 src/platform/cannonlake/platform.c | 15 +++++++++++++++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/platform/cannonlake/dma.c b/src/platform/cannonlake/dma.c
index beac6cf..a47ce9f 100644
--- a/src/platform/cannonlake/dma.c
+++ b/src/platform/cannonlake/dma.c
@@ -32,6 +32,7 @@
 
 #include <reef/dma.h>
 #include <reef/dw-dma.h>
+#include <reef/hd-dma.h>
 #include <platform/memory.h>
 #include <platform/interrupt.h>
 #include <platform/dma.h>
@@ -133,33 +134,37 @@ static struct dma dma[] = {
 	.plat_data = {
 		.id		= DMA_HOST_IN_DMAC,
 		.base		= GTW_HOST_IN_STREAM_BASE(0),
-		.channels	= 7,
+		.channels	= 9,
 		.irq = IRQ_EXT_HOST_DMA_IN_LVL3(0, 0),
 	},
+	.ops		= &hda_host_dma_ops,
 },
 {	/* Host out DMAC */
 	.plat_data = {
 		.id		= DMA_HOST_OUT_DMAC,
 		.base		= GTW_HOST_OUT_STREAM_BASE(0),
-		.channels	= 6,
+		.channels	= 7,
 		.irq = IRQ_EXT_HOST_DMA_OUT_LVL3(0, 0),
 	},
+	.ops		= &hda_host_dma_ops,
 },
 {	/* Link In DMAC */
 	.plat_data = {
 		.id		= DMA_LINK_IN_DMAC,
 		.base		= GTW_LINK_IN_STREAM_BASE(0),
-		.channels	= 8,
+		.channels	= 9,
 		.irq = IRQ_EXT_LINK_DMA_IN_LVL4(0, 0),
 	},
+	.ops		= &hda_link_dma_ops,
 },
 {	/* Link out DMAC */
 	.plat_data = {
 		.id		= DMA_LINK_OUT_DMAC,
 		.base		= GTW_LINK_OUT_STREAM_BASE(0),
-		.channels	= 8,
+		.channels	= 7,
 		.irq = IRQ_EXT_LINK_DMA_OUT_LVL4(0, 0),
 	},
+	.ops		= &hda_link_dma_ops,
 },};
 
 struct dma *dma_get(int dmac_id)
diff --git a/src/platform/cannonlake/platform.c b/src/platform/cannonlake/platform.c
index f387109..1a9b88a 100644
--- a/src/platform/cannonlake/platform.c
+++ b/src/platform/cannonlake/platform.c
@@ -253,6 +253,21 @@ int platform_init(struct reef *reef)
 		return -ENODEV;
 	dma_probe(dmac);
 
+	dmac = dma_get(DMA_GP_LP_DMAC1);
+	if (!dmac)
+		return -ENODEV;
+	dma_probe(dmac);
+
+	dmac = dma_get(DMA_HOST_OUT_DMAC);
+	if (!dmac)
+		return -ENODEV;
+	dma_probe(dmac);
+
+	dmac = dma_get(DMA_HOST_IN_DMAC);
+	if (!dmac)
+		return -ENODEV;
+	dma_probe(dmac);
+
 	/* init SSP ports */
 	trace_point(TRACE_BOOT_PLATFORM_SSP);
 	for(i = 0; i < PLATFORM_SSP_COUNT; i++) {
-- 
2.7.4



More information about the Sound-open-firmware mailing list