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

Tomasz Lauda tomasz.lauda at linux.intel.com
Tue Feb 20 15:57:21 CET 2018


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

Signed-off-by: Tomasz Lauda <tomasz.lauda at linux.intel.com>
---
 src/drivers/hda-dma.c              |  2 +-
 src/platform/cannonlake/dma.c      | 13 +++++++++----
 src/platform/cannonlake/platform.c | 10 ++++++++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/drivers/hda-dma.c b/src/drivers/hda-dma.c
index 226a34e..6526b74 100644
--- a/src/drivers/hda-dma.c
+++ b/src/drivers/hda-dma.c
@@ -77,7 +77,7 @@
 /* DGBS */
 #define DGBS_MASK	0xfffff0
 
-#define HDA_DMA_MAX_CHANS		8
+#define HDA_DMA_MAX_CHANS		9
 
 struct hda_chan_data {
 	uint32_t stream_id;
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..beb6582 100644
--- a/src/platform/cannonlake/platform.c
+++ b/src/platform/cannonlake/platform.c
@@ -253,6 +253,16 @@ int platform_init(struct reef *reef)
 		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