[Sound-open-firmware] [PATCH] platform: separate common API duplicated in platform headers.

Liam Girdwood liam.r.girdwood at linux.intel.com
Mon Jun 4 14:33:12 CEST 2018


From: Marcin Maka <marcin.maka at linux.intel.com>

Common platform API separated to avoid duplicated declarations
and indicate public functions implemented by all platforms.

Signed-off-by: Marcin Maka <marcin.maka at linux.intel.com>

# Conflicts:
#	src/platform/apollolake/include/platform/platform.h
#	src/platform/baytrail/include/platform/platform.h
#	src/platform/cannonlake/include/platform/platform.h
#	src/platform/haswell/include/platform/platform.h
---
 src/include/sof/panic.h                       |  4 +-
 src/include/sof/platform.h                    | 60 +++++++++++++++++++
 .../apollolake/include/platform/platform.h    | 15 ++---
 .../baytrail/include/platform/platform.h      |  8 ++-
 .../cannonlake/include/platform/platform.h    | 14 ++---
 .../haswell/include/platform/platform.h       |  6 +-
 6 files changed, 82 insertions(+), 25 deletions(-)
 create mode 100644 src/include/sof/platform.h

diff --git a/src/include/sof/panic.h b/src/include/sof/panic.h
index 3efb659..7c19939 100644
--- a/src/include/sof/panic.h
+++ b/src/include/sof/panic.h
@@ -58,9 +58,7 @@ static inline void panic_rewind(uint32_t p, uint32_t stack_rewind_frames)
 	p = dump_stack(p, ext_offset, stack_rewind_frames,
 		count * sizeof(uint32_t));
 
-	/* TODO: send IPC oops message to host */
-
-	/* panic */
+	/* panic - send IPC oops message to host */
 	platform_panic(p);
 
 	/* flush last trace messages */
diff --git a/src/include/sof/platform.h b/src/include/sof/platform.h
new file mode 100644
index 0000000..8b228ee
--- /dev/null
+++ b/src/include/sof/platform.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *   * Neither the name of the Intel Corporation nor the
+ *     names of its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Marcin Maka <marcin.maka at linux.intel.com>
+ */
+
+#ifndef __INCLUDE_SOF_PLATFORM_H__
+#define __INCLUDE_SOF_PLATFORM_H__
+
+#include <sof/sof.h>
+
+/*
+ * APIs declared here are defined for every platform.
+ */
+
+/**
+ * \brief Platform specific implementation of the On Boot Complete handler.
+ * \param[in] boot_message Boot status code.
+ * \return 0 if successful, error code otherwise.
+ */
+int platform_boot_complete(uint32_t boot_message);
+
+/**
+ * \brief Platform initialization entry, called during FW initialization.
+ * \param[in] sof Context.
+ * \return 0 if successful, error code otherwise.
+ */
+int platform_init(struct sof *sof);
+
+/**
+ * \brief Called by the panic handler.
+ * \param[in] p Panic cause, one of SOF_IPC_PANIC_... codes.
+ */
+static inline void platform_panic(uint32_t p);
+
+#endif
diff --git a/src/platform/apollolake/include/platform/platform.h b/src/platform/apollolake/include/platform/platform.h
index aefa9b2..24848ac 100644
--- a/src/platform/apollolake/include/platform/platform.h
+++ b/src/platform/apollolake/include/platform/platform.h
@@ -27,20 +27,18 @@
  *
  * Author: Liam Girdwood <liam.r.girdwood at linux.intel.com>
  *         Keyon Jie <yang.jie at linux.intel.com>
- *         Xiuli Pan <xiuli.pan at linux.intel.com>
  */
 
 #ifndef __PLATFORM_PLATFORM_H__
 #define __PLATFORM_PLATFORM_H__
 
+#include <platform/platcfg.h>
 #include <platform/shim.h>
 #include <platform/interrupt.h>
 #include <uapi/ipc.h>
 
 struct sof;
 
-#define MAX_CORE_COUNT 2
-
 /* Host page size */
 #define HOST_PAGE_SIZE		4096
 #define PLATFORM_PAGE_TABLE_SIZE	256
@@ -119,16 +117,15 @@ struct sof;
 #define PLATFORM_NUM_SSP	6
 
 /* Platform defined panic code */
-#define platform_panic(__x) { \
-	mailbox_sw_reg_write(SRAM_REG_FW_STATUS, \
-			     (0xdead000 | (__x)) & 0x3fffffff); \
-	ipc_write(IPC_DIPCIE, MAILBOX_EXCEPTION_OFFSET + 2 * 0x20000); \
-	ipc_write(IPC_DIPCI, 0x80000000 | ((0xdead000 | (__x)) & 0x3fffffff)); \
+static inline void platform_panic(uint32_t p)
+{
+	sw_reg_write(SRAM_REG_FW_STATUS, p & 0x3fffffff);
+	ipc_write(IPC_DIPCI, 0x80000000 | (p & 0x3fffffff));
 }
 
 /* Platform defined trace code */
 #define platform_trace_point(__x) \
-	mailbox_sw_reg_write(SRAM_REG_FW_TRACEP, (__x))
+	sw_reg_write(SRAM_REG_FW_TRACEP, __x)
 
 extern struct timer *platform_timer;
 
diff --git a/src/platform/baytrail/include/platform/platform.h b/src/platform/baytrail/include/platform/platform.h
index 6a7ebc9..d4d4710 100644
--- a/src/platform/baytrail/include/platform/platform.h
+++ b/src/platform/baytrail/include/platform/platform.h
@@ -33,6 +33,7 @@
 #ifndef __PLATFORM_PLATFORM_H__
 #define __PLATFORM_PLATFORM_H__
 
+#include <sof/platform.h>
 #include <platform/shim.h>
 #include <platform/interrupt.h>
 #include <uapi/ipc.h>
@@ -102,9 +103,10 @@ struct sof;
 #define PLATFORM_IDLE_TIME	750000
 
 /* Platform defined panic code */
-#define platform_panic(__x) { \
-	shim_write(SHIM_IPCDL, (0xdead000 | (__x & 0xfff))); \
-	shim_write(SHIM_IPCDH, (SHIM_IPCDH_BUSY | MAILBOX_EXCEPTION_OFFSET)); \
+static inline void platform_panic(uint32_t p)
+{
+	shim_write(SHIM_IPCDL, p);
+	shim_write(SHIM_IPCDH, SHIM_IPCDH_BUSY);
 }
 
 /* Platform defined trace code */
diff --git a/src/platform/cannonlake/include/platform/platform.h b/src/platform/cannonlake/include/platform/platform.h
index 35219d7..9474103 100644
--- a/src/platform/cannonlake/include/platform/platform.h
+++ b/src/platform/cannonlake/include/platform/platform.h
@@ -34,6 +34,8 @@
 #ifndef __PLATFORM_PLATFORM_H__
 #define __PLATFORM_PLATFORM_H__
 
+#include <sof/platform.h>
+#include <platform/platcfg.h>
 #include <platform/shim.h>
 #include <platform/interrupt.h>
 #include <uapi/ipc.h>
@@ -116,17 +118,15 @@ struct sof;
 #define PLATFORM_IDLE_TIME	750000
 
 /* Platform defined trace code */
-#define platform_panic(__x) { \
-	mailbox_sw_reg_write(SRAM_REG_FW_STATUS, \
-			     (0xdead000 | (__x)) & 0x3fffffff); \
-	ipc_write(IPC_DIPCIDD, MAILBOX_EXCEPTION_OFFSET + 2 * 0x20000); \
-	ipc_write(IPC_DIPCIDR, 0x80000000 | \
-		  ((0xdead000 | (__x)) & 0x3fffffff)); \
+static inline void platform_panic(uint32_t p)
+{
+	sw_reg_write(SRAM_REG_FW_STATUS, p & 0x3fffffff);
+	ipc_write(IPC_DIPCIDR, 0x80000000 | (p & 0x3fffffff));
 }
 
 /* Platform defined trace code */
 #define platform_trace_point(__x) \
-	mailbox_sw_reg_write(SRAM_REG_FW_TRACEP, (__x))
+	sw_reg_write(SRAM_REG_FW_TRACEP, __x)
 
 extern struct timer *platform_timer;
 
diff --git a/src/platform/haswell/include/platform/platform.h b/src/platform/haswell/include/platform/platform.h
index d30f329..426f538 100644
--- a/src/platform/haswell/include/platform/platform.h
+++ b/src/platform/haswell/include/platform/platform.h
@@ -101,9 +101,9 @@ struct sof;
 #define PLATFORM_IDLE_TIME	750000
 
 /* Platform defined panic code */
-#define platform_panic(__x) { \
-	shim_write(SHIM_IPCX, MAILBOX_EXCEPTION_OFFSET & 0x3fffffff); \
-	shim_write(SHIM_IPCD, (SHIM_IPCD_BUSY | 0xdead000 | __x)); \
+static inline void platform_panic(uint32_t p)
+{
+	shim_write(SHIM_IPCD, (SHIM_IPCD_BUSY | p))
 }
 
 /* Platform defined trace code */
-- 
2.17.0



More information about the Sound-open-firmware mailing list