[Sound-open-firmware] [PATCH 1/2] mailbox: use mailbox function for SW_REG
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Wed Apr 25 16:53:59 CEST 2018
On 4/25/18 1:50 AM, Xiuli Pan wrote:
> From: Pan Xiuli <xiuli.pan at linux.intel.com>
>
> SW_REG is in memory window and the cache is enabled, need to
> writeback the SW_REG.
>
> Signed-off-by: Pan Xiuli <xiuli.pan at linux.intel.com>
>
> ---
> Test with:
> Mininow max rt5651 and UP2 nocodec and CNL nocodec
> SOF master: 3ad69eb715a09de9a0b91c56c9cca8a79ead00a9
> SOF-Tool master: b327539e98f1c84e3a131dd048460189a5de8c26
> https://github.com/plbossart/sound/tree/topic/sof-v4.14:
> 735b995d7b66485c19e0aed51131532075cfce42
> ---
> src/include/sof/mailbox.h | 14 ++++++++++++++
> src/platform/apollolake/include/platform/platform.h | 6 ++++--
> src/platform/cannonlake/include/platform/platform.h | 6 ++++--
> 3 files changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/src/include/sof/mailbox.h b/src/include/sof/mailbox.h
> index 59259a0..17d9daa 100644
> --- a/src/include/sof/mailbox.h
> +++ b/src/include/sof/mailbox.h
> @@ -26,6 +26,7 @@
> * POSSIBILITY OF SUCH DAMAGE.
> *
> * Author: Liam Girdwood <liam.r.girdwood at linux.intel.com>
> + * Xiuli Pan <xiuli.pan at linux.intel.com>
> */
>
> #ifndef __INCLUDE_MAILBOX__
> @@ -36,6 +37,11 @@
> #include <stdint.h>
> #include <sof/string.h>
>
> +/* For those platform did not have SW_REG window, use DEBUG at now */
> +#ifndef MAILBOX_SW_REG_BASE
> +#define MAILBOX_SW_REG_BASE MAILBOX_DEBUG_BASE
> +#endif /* MAILBOX_SW_REG_BASE */
this is really a work-around to compile on legacy platforms, right?
The value has no impact or meaning.
> +
> /* 4k should be enough for everyone ..... */
> #define IPC_MAX_MAILBOX_BYTES 0x1000
>
> @@ -100,4 +106,12 @@ void mailbox_stream_write(size_t offset, const void *src, size_t bytes)
> bytes);
> }
>
> +static inline
> +void mailbox_sw_reg_write(size_t offset, uint32_t src)
> +{
> + *((volatile uint32_t*)(MAILBOX_SW_REG_BASE + offset)) = src;
> + dcache_writeback_region((void *)(MAILBOX_SW_REG_BASE + offset),
> + sizeof(src));
> +}
> +
> #endif
> diff --git a/src/platform/apollolake/include/platform/platform.h b/src/platform/apollolake/include/platform/platform.h
> index 8503ce2..92f5b77 100644
> --- a/src/platform/apollolake/include/platform/platform.h
> +++ b/src/platform/apollolake/include/platform/platform.h
> @@ -27,6 +27,7 @@
> *
> * 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__
> @@ -117,13 +118,14 @@ struct sof;
>
> /* Platform defined panic code */
> #define platform_panic(__x) { \
> - sw_reg_write(SRAM_REG_FW_STATUS, (0xdead000 | __x) & 0x3fffffff); \
> + mailbox_sw_reg_write(SRAM_REG_FW_STATUS, \
> + (0xdead000 | __x) & 0x3fffffff); \
can you either resubmit or send a follow-up patch with the argument __x
in parenthesis to protect against unintended macro expansion issues, e.g.
+ mailbox_sw_reg_write(SRAM_REG_FW_STATUS, \
> + (0xdead000 | (__x)) & 0x3fffffff); \
> ipc_write(IPC_DIPCI, 0x80000000 | ((0xdead000 | __x) & 0x3fffffff)); \
> }
>
> /* Platform defined trace code */
> #define platform_trace_point(__x) \
> - sw_reg_write(SRAM_REG_FW_TRACEP, __x)
> + mailbox_sw_reg_write(SRAM_REG_FW_TRACEP, __x)
>
> extern struct timer *platform_timer;
>
> diff --git a/src/platform/cannonlake/include/platform/platform.h b/src/platform/cannonlake/include/platform/platform.h
> index c5bf42a..aff90a7 100644
> --- a/src/platform/cannonlake/include/platform/platform.h
> +++ b/src/platform/cannonlake/include/platform/platform.h
> @@ -28,6 +28,7 @@
> * Author: Liam Girdwood <liam.r.girdwood at linux.intel.com>
> * Keyon Jie <yang.jie at linux.intel.com>
> * Rander Wang <rander.wang at intel.com>
> + * Xiuli Pan <xiuli.pan at linux.intel.com>
> */
>
> #ifndef __PLATFORM_PLATFORM_H__
> @@ -112,13 +113,14 @@ struct sof;
>
> /* Platform defined trace code */
> #define platform_panic(__x) { \
> - sw_reg_write(SRAM_REG_FW_STATUS, (0xdead000 | __x) & 0x3fffffff); \
> + mailbox_sw_reg_write(SRAM_REG_FW_STATUS, \
> + (0xdead000 | __x) & 0x3fffffff); \
> ipc_write(IPC_DIPCIDR, 0x80000000 | ((0xdead000 | __x) & 0x3fffffff)); \
> }
>
> /* Platform defined trace code */
> #define platform_trace_point(__x) \
> - sw_reg_write(SRAM_REG_FW_TRACEP, __x)
> + mailbox_sw_reg_write(SRAM_REG_FW_TRACEP, __x)
>
> extern struct timer *platform_timer;
>
>
More information about the Sound-open-firmware
mailing list