[Sound-open-firmware] [PATCH V3 1/3] platform: add sof_ipc_window for byt, hsw and bdw

Xiuli Pan xiuli.pan at linux.intel.com
Fri Mar 2 10:20:25 CET 2018


From: Pan Xiuli <xiuli.pan at linux.intel.com>

Add sof_ipc_window for all platforms, and add IPC send after boot
compelted. Also remove the deprecated ready window.

Signed-off-by: Pan Xiuli <xiuli.pan at linux.intel.com>
---
Test with:
Mininow max rt5651 GP-MRB nocodec
SOF master: 1693b66bb1d804ded975767cc1e5911e6ff9c93c
SOF-Tool master: a02abb799405d0e4ad0d6bb46eacf6fbe958c06e
https://github.com/plbossart/sound/tree/topic/sof-v4.14:
9513a73b981bc1917705671ec54402a7e21672eb

---
 src/platform/baytrail/platform.c | 45 ++++++++++++++++++++++++++++++++++++----
 src/platform/haswell/platform.c  | 45 ++++++++++++++++++++++++++++++++++++----
 2 files changed, 82 insertions(+), 8 deletions(-)

diff --git a/src/platform/baytrail/platform.c b/src/platform/baytrail/platform.c
index 4709fcd..2c4bfee 100644
--- a/src/platform/baytrail/platform.c
+++ b/src/platform/baytrail/platform.c
@@ -59,10 +59,6 @@ static const struct sof_ipc_fw_ready ready = {
 		.size = sizeof(struct sof_ipc_fw_ready),
 	},
 	/* dspbox is for DSP initiated IPC, hostbox is for host initiated IPC */
-	.dspbox_offset = MAILBOX_HOST_OFFSET + MAILBOX_DSPBOX_OFFSET,
-	.hostbox_offset = MAILBOX_HOST_OFFSET + MAILBOX_HOSTBOX_OFFSET,
-	.dspbox_size = MAILBOX_DSPBOX_SIZE,
-	.hostbox_size = MAILBOX_HOSTBOX_SIZE,
 	.version = {
 		.build = REEF_BUILD,
 		.minor = REEF_MINOR,
@@ -74,6 +70,45 @@ static const struct sof_ipc_fw_ready ready = {
 	/* TODO: add capabilities */
 };
 
+#define NUM_BYT_WINDOWS		4
+static const struct sof_ipc_window sram_window = {
+	.ext_hdr	= {
+		.hdr.cmd = SOF_IPC_FW_READY,
+		.hdr.size = sizeof(struct sof_ipc_window) +
+			sizeof(struct sof_ipc_window_elem) * NUM_BYT_WINDOWS,
+		.type	= SOF_IPC_EXT_WINDOW,
+	},
+	.num_windows	= NUM_BYT_WINDOWS,
+	.window[0]	= {
+		.type	= SOF_IPC_REGION_UPBOX,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_DSPBOX_SIZE,
+		.offset	= MAILBOX_DSPBOX_OFFSET,
+	},
+	.window[1]	= {
+		.type	= SOF_IPC_REGION_DOWNBOX,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_HOSTBOX_SIZE,
+		.offset	= MAILBOX_HOSTBOX_OFFSET,
+	},
+	.window[2]	= {
+		.type	= SOF_IPC_REGION_DEBUG,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_DEBUG_SIZE,
+		.offset	= MAILBOX_DEBUG_OFFSET,
+	},
+	.window[3]	= {
+		.type	= SOF_IPC_REGION_TRACE,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_TRACE_SIZE,
+		.offset	= MAILBOX_TRACE_OFFSET,
+	},
+};
+
 static struct work_queue_timesource platform_generic_queue = {
 	.timer	 = {
 		.id = TIMER3,	/* external timer */
@@ -93,6 +128,8 @@ int platform_boot_complete(uint32_t boot_message)
 	uint64_t outbox = MAILBOX_HOST_OFFSET >> 3;
 
 	mailbox_dspbox_write(0, &ready, sizeof(ready));
+	mailbox_dspbox_write(sizeof(ready), &sram_window,
+			     sram_window.ext_hdr.hdr.size);
 
 	/* now interrupt host to tell it we are done booting */
 	shim_write(SHIM_IPCDL, SOF_IPC_FW_READY | outbox);
diff --git a/src/platform/haswell/platform.c b/src/platform/haswell/platform.c
index 5f56a05..97b38af 100644
--- a/src/platform/haswell/platform.c
+++ b/src/platform/haswell/platform.c
@@ -58,10 +58,6 @@ static const struct sof_ipc_fw_ready ready = {
 		.size = sizeof(struct sof_ipc_fw_ready),
 	},
 	/* dspbox is for DSP initiated IPC, hostbox is for host initiated IPC */
-	.dspbox_offset = MAILBOX_HOST_OFFSET + MAILBOX_DSPBOX_OFFSET,
-	.hostbox_offset = MAILBOX_HOST_OFFSET + MAILBOX_HOSTBOX_OFFSET,
-	.dspbox_size = MAILBOX_DSPBOX_SIZE,
-	.hostbox_size = MAILBOX_HOSTBOX_SIZE,
 	.version = {
 		.build = REEF_BUILD,
 		.minor = REEF_MINOR,
@@ -73,6 +69,45 @@ static const struct sof_ipc_fw_ready ready = {
 	/* TODO: add capabilities */
 };
 
+#define NUM_HSW_WINDOWS		4
+static const struct sof_ipc_window sram_window = {
+	.ext_hdr	= {
+		.hdr.cmd = SOF_IPC_FW_READY,
+		.hdr.size = sizeof(struct sof_ipc_window) +
+			sizeof(struct sof_ipc_window_elem) * NUM_HSW_WINDOWS,
+		.type	= SOF_IPC_EXT_WINDOW,
+	},
+	.num_windows	= NUM_HSW_WINDOWS,
+	.window[0]	= {
+		.type	= SOF_IPC_REGION_UPBOX,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_DSPBOX_SIZE,
+		.offset	= MAILBOX_DSPBOX_OFFSET,
+	},
+	.window[1]	= {
+		.type	= SOF_IPC_REGION_DOWNBOX,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_HOSTBOX_SIZE,
+		.offset	= MAILBOX_HOSTBOX_OFFSET,
+	},
+	.window[2]	= {
+		.type	= SOF_IPC_REGION_DEBUG,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_DEBUG_SIZE,
+		.offset	= MAILBOX_DEBUG_OFFSET,
+	},
+	.window[3]	= {
+		.type	= SOF_IPC_REGION_TRACE,
+		.id	= 0,	/* map to host window 0 */
+		.flags	= 0, // TODO: set later
+		.size	= MAILBOX_TRACE_SIZE,
+		.offset	= MAILBOX_TRACE_OFFSET,
+	},
+};
+
 static struct work_queue_timesource platform_generic_queue = {
 	.timer	 = {
 		.id = TIMER2,	/* external timer using SSP */
@@ -92,6 +127,8 @@ int platform_boot_complete(uint32_t boot_message)
 	uint32_t outbox = MAILBOX_HOST_OFFSET >> 3;
 
 	mailbox_dspbox_write(0, &ready, sizeof(ready));
+	mailbox_dspbox_write(sizeof(ready), &sram_window,
+			     sram_window.ext_hdr.hdr.size);
 
 	/* now interrupt host to tell it we are done booting */
 	shim_write(SHIM_IPCD, outbox | SHIM_IPCD_BUSY);
-- 
2.7.4



More information about the Sound-open-firmware mailing list