1*32d7e03dSYC Hung /* SPDX-License-Identifier: GPL-2.0 */
2*32d7e03dSYC Hung 
3*32d7e03dSYC Hung /*
4*32d7e03dSYC Hung  * Copyright (c) 2021 MediaTek Corporation. All rights reserved.
5*32d7e03dSYC Hung  */
6*32d7e03dSYC Hung 
7*32d7e03dSYC Hung #ifndef __MTK_ADSP_HELPER_H__
8*32d7e03dSYC Hung #define __MTK_ADSP_HELPER_H__
9*32d7e03dSYC Hung 
10*32d7e03dSYC Hung /*
11*32d7e03dSYC Hung  * Global important adsp data structure.
12*32d7e03dSYC Hung  */
13*32d7e03dSYC Hung #define DSP_MBOX_NUM	3
14*32d7e03dSYC Hung 
15*32d7e03dSYC Hung struct mtk_adsp_chip_info {
16*32d7e03dSYC Hung 	phys_addr_t pa_sram;
17*32d7e03dSYC Hung 	phys_addr_t pa_dram; /* adsp dram physical base */
18*32d7e03dSYC Hung 	phys_addr_t pa_shared_dram; /* adsp dram physical base */
19*32d7e03dSYC Hung 	phys_addr_t pa_cfgreg;
20*32d7e03dSYC Hung 	phys_addr_t pa_mboxreg[DSP_MBOX_NUM];
21*32d7e03dSYC Hung 	u32 sramsize;
22*32d7e03dSYC Hung 	u32 dramsize;
23*32d7e03dSYC Hung 	u32 cfgregsize;
24*32d7e03dSYC Hung 	void __iomem *va_sram; /* corresponding to pa_sram */
25*32d7e03dSYC Hung 	void __iomem *va_dram; /* corresponding to pa_dram */
26*32d7e03dSYC Hung 	void __iomem *va_cfgreg;
27*32d7e03dSYC Hung 	void __iomem *va_mboxreg[DSP_MBOX_NUM];
28*32d7e03dSYC Hung 	void __iomem *shared_sram; /* part of  va_sram */
29*32d7e03dSYC Hung 	void __iomem *shared_dram; /* part of  va_dram */
30*32d7e03dSYC Hung 	phys_addr_t adsp_bootup_addr;
31*32d7e03dSYC Hung 	int dram_offset; /*dram offset between system and dsp view*/
32*32d7e03dSYC Hung };
33*32d7e03dSYC Hung 
34*32d7e03dSYC Hung struct adsp_priv {
35*32d7e03dSYC Hung 	struct device *dev;
36*32d7e03dSYC Hung 	struct snd_sof_dev *sdev;
37*32d7e03dSYC Hung 
38*32d7e03dSYC Hung 	/* DSP IPC handler */
39*32d7e03dSYC Hung 	struct mbox_controller *adsp_mbox;
40*32d7e03dSYC Hung 
41*32d7e03dSYC Hung 	struct mtk_adsp_chip_info *adsp;
42*32d7e03dSYC Hung 
43*32d7e03dSYC Hung 	u32 (*ap2adsp_addr)(u32 addr, void *data);
44*32d7e03dSYC Hung 	u32 (*adsp2ap_addr)(u32 addr, void *data);
45*32d7e03dSYC Hung 
46*32d7e03dSYC Hung 	void *private_data;
47*32d7e03dSYC Hung };
48*32d7e03dSYC Hung 
49*32d7e03dSYC Hung #endif
50