11f0214a8STinghan Shen /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
21f0214a8STinghan Shen 
31f0214a8STinghan Shen /*
41f0214a8STinghan Shen  * Copyright (c) 2022 MediaTek Corporation. All rights reserved.
51f0214a8STinghan Shen  *
61f0214a8STinghan Shen  *  Header file for the mt8186 DSP register definition
71f0214a8STinghan Shen  */
81f0214a8STinghan Shen 
91f0214a8STinghan Shen #ifndef __MT8186_H
101f0214a8STinghan Shen #define __MT8186_H
111f0214a8STinghan Shen 
121f0214a8STinghan Shen struct mtk_adsp_chip_info;
13570c14dcSTinghan Shen struct snd_sof_dev;
141f0214a8STinghan Shen 
151f0214a8STinghan Shen #define DSP_REG_BAR			4
161f0214a8STinghan Shen #define DSP_SECREG_BAR			5
171f0214a8STinghan Shen #define DSP_BUSREG_BAR			6
181f0214a8STinghan Shen 
191f0214a8STinghan Shen /*****************************************************************************
201f0214a8STinghan Shen  *                  R E G I S T E R       TABLE
211f0214a8STinghan Shen  *****************************************************************************/
221f0214a8STinghan Shen /* dsp cfg */
231f0214a8STinghan Shen #define ADSP_CFGREG_SW_RSTN		0x0000
241f0214a8STinghan Shen #define SW_DBG_RSTN_C0			BIT(0)
251f0214a8STinghan Shen #define SW_RSTN_C0			BIT(4)
261f0214a8STinghan Shen #define ADSP_HIFI_IO_CONFIG		0x000C
271f0214a8STinghan Shen #define TRACEMEMREADY			BIT(15)
281f0214a8STinghan Shen #define RUNSTALL			BIT(31)
291f0214a8STinghan Shen #define ADSP_IRQ_MASK			0x0030
301f0214a8STinghan Shen #define ADSP_DVFSRC_REQ			0x0040
311f0214a8STinghan Shen #define ADSP_DDREN_REQ_0		0x0044
321f0214a8STinghan Shen #define ADSP_SEMAPHORE			0x0064
331f0214a8STinghan Shen #define ADSP_WDT_CON_C0			0x007C
341f0214a8STinghan Shen #define ADSP_MBOX_IRQ_EN		0x009C
351f0214a8STinghan Shen #define DSP_MBOX0_IRQ_EN		BIT(0)
361f0214a8STinghan Shen #define DSP_MBOX1_IRQ_EN		BIT(1)
371f0214a8STinghan Shen #define DSP_MBOX2_IRQ_EN		BIT(2)
381f0214a8STinghan Shen #define DSP_MBOX3_IRQ_EN		BIT(3)
391f0214a8STinghan Shen #define DSP_MBOX4_IRQ_EN		BIT(4)
401f0214a8STinghan Shen #define DSP_PDEBUGPC			0x013C
41*089adf33STrevor Wu #define DSP_PDEBUGDATA			0x0140
42*089adf33STrevor Wu #define DSP_PDEBUGINST			0x0144
43*089adf33STrevor Wu #define DSP_PDEBUGLS0STAT		0x0148
44*089adf33STrevor Wu #define DSP_PDEBUGSTATUS		0x014C
45*089adf33STrevor Wu #define DSP_PFAULTINFO			0x0150
461f0214a8STinghan Shen #define ADSP_CK_EN			0x1000
471f0214a8STinghan Shen #define CORE_CLK_EN			BIT(0)
481f0214a8STinghan Shen #define COREDBG_EN			BIT(1)
491f0214a8STinghan Shen #define TIMER_EN			BIT(3)
501f0214a8STinghan Shen #define DMA_EN				BIT(4)
511f0214a8STinghan Shen #define UART_EN				BIT(5)
521f0214a8STinghan Shen #define ADSP_UART_CTRL			0x1010
531f0214a8STinghan Shen #define UART_BCLK_CG			BIT(0)
541f0214a8STinghan Shen #define UART_RSTN			BIT(3)
551f0214a8STinghan Shen 
561f0214a8STinghan Shen /* dsp sec */
571f0214a8STinghan Shen #define ADSP_PRID			0x0
581f0214a8STinghan Shen #define ADSP_ALTVEC_C0			0x04
591f0214a8STinghan Shen #define ADSP_ALTVECSEL			0x0C
606b43538fSTinghan Shen #define MT8188_ADSP_ALTVECSEL_C0	BIT(0)
616b43538fSTinghan Shen #define MT8186_ADSP_ALTVECSEL_C0	BIT(1)
626b43538fSTinghan Shen 
636b43538fSTinghan Shen /*
646b43538fSTinghan Shen  * On MT8188, BIT(1) is not evaluated and on MT8186 BIT(0) is not evaluated:
656b43538fSTinghan Shen  * We can simplify the driver by safely setting both bits regardless of the SoC.
666b43538fSTinghan Shen  */
676b43538fSTinghan Shen #define ADSP_ALTVECSEL_C0		(MT8188_ADSP_ALTVECSEL_C0 | \
686b43538fSTinghan Shen 					 MT8186_ADSP_ALTVECSEL_C0)
691f0214a8STinghan Shen 
701f0214a8STinghan Shen /* dsp bus */
711f0214a8STinghan Shen #define ADSP_SRAM_POOL_CON		0x190
721f0214a8STinghan Shen #define DSP_SRAM_POOL_PD_MASK		0xF00F /* [0:3] and [12:15] */
731f0214a8STinghan Shen #define DSP_C0_EMI_MAP_ADDR		0xA00  /* ADSP Core0 To EMI Address Remap */
741f0214a8STinghan Shen #define DSP_C0_DMAEMI_MAP_ADDR		0xA08  /* DMA0 To EMI Address Remap */
751f0214a8STinghan Shen 
761f0214a8STinghan Shen /* DSP memories */
771f0214a8STinghan Shen #define MBOX_OFFSET			0x500000 /* DRAM */
781f0214a8STinghan Shen #define MBOX_SIZE			0x1000   /* consistent with which in memory.h of sof fw */
791f0214a8STinghan Shen #define DSP_DRAM_SIZE			0xA00000 /* 16M */
801f0214a8STinghan Shen 
811f0214a8STinghan Shen /*remap dram between AP and DSP view, 4KB aligned*/
821f0214a8STinghan Shen #define SRAM_PHYS_BASE_FROM_DSP_VIEW	0x4E100000 /* MT8186 DSP view */
831f0214a8STinghan Shen #define DRAM_PHYS_BASE_FROM_DSP_VIEW	0x60000000 /* MT8186 DSP view */
841f0214a8STinghan Shen #define DRAM_REMAP_SHIFT		12
851f0214a8STinghan Shen #define DRAM_REMAP_MASK			0xFFF
861f0214a8STinghan Shen 
871f0214a8STinghan Shen #define SIZE_SHARED_DRAM_DL			0x40000 /*Shared buffer for Downlink*/
881f0214a8STinghan Shen #define SIZE_SHARED_DRAM_UL			0x40000 /*Shared buffer for Uplink*/
891f0214a8STinghan Shen #define TOTAL_SIZE_SHARED_DRAM_FROM_TAIL	(SIZE_SHARED_DRAM_DL + SIZE_SHARED_DRAM_UL)
901f0214a8STinghan Shen 
919ce170dcSTinghan Shen void mt8186_sof_hifixdsp_boot_sequence(struct snd_sof_dev *sdev, u32 boot_addr);
929ce170dcSTinghan Shen void mt8186_sof_hifixdsp_shutdown(struct snd_sof_dev *sdev);
931f0214a8STinghan Shen #endif
94