132d7e03dSYC Hung /* SPDX-License-Identifier: GPL-2.0 */
232d7e03dSYC Hung 
332d7e03dSYC Hung /*
432d7e03dSYC Hung  * Copyright (c) 2021 MediaTek Corporation. All rights reserved.
532d7e03dSYC Hung  */
632d7e03dSYC Hung 
732d7e03dSYC Hung #ifndef __MTK_ADSP_HELPER_H__
832d7e03dSYC Hung #define __MTK_ADSP_HELPER_H__
932d7e03dSYC Hung 
10aea93501SAllen-KH Cheng #include <linux/firmware/mediatek/mtk-adsp-ipc.h>
11aea93501SAllen-KH Cheng 
1232d7e03dSYC Hung /*
1332d7e03dSYC Hung  * Global important adsp data structure.
1432d7e03dSYC Hung  */
1532d7e03dSYC Hung struct mtk_adsp_chip_info {
1632d7e03dSYC Hung 	phys_addr_t pa_sram;
1732d7e03dSYC Hung 	phys_addr_t pa_dram; /* adsp dram physical base */
1832d7e03dSYC Hung 	phys_addr_t pa_shared_dram; /* adsp dram physical base */
1932d7e03dSYC Hung 	phys_addr_t pa_cfgreg;
2032d7e03dSYC Hung 	u32 sramsize;
2132d7e03dSYC Hung 	u32 dramsize;
2232d7e03dSYC Hung 	u32 cfgregsize;
23*fd43dcbbSYC Hung 	u32 shared_size;
2432d7e03dSYC Hung 	void __iomem *va_sram; /* corresponding to pa_sram */
2532d7e03dSYC Hung 	void __iomem *va_dram; /* corresponding to pa_dram */
2632d7e03dSYC Hung 	void __iomem *va_cfgreg;
2732d7e03dSYC Hung 	void __iomem *shared_sram; /* part of  va_sram */
2832d7e03dSYC Hung 	void __iomem *shared_dram; /* part of  va_dram */
2932d7e03dSYC Hung 	phys_addr_t adsp_bootup_addr;
3032d7e03dSYC Hung 	int dram_offset; /*dram offset between system and dsp view*/
311f0214a8STinghan Shen 
321f0214a8STinghan Shen 	phys_addr_t pa_secreg;
331f0214a8STinghan Shen 	u32 secregsize;
341f0214a8STinghan Shen 	void __iomem *va_secreg;
351f0214a8STinghan Shen 
361f0214a8STinghan Shen 	phys_addr_t pa_busreg;
371f0214a8STinghan Shen 	u32 busregsize;
381f0214a8STinghan Shen 	void __iomem *va_busreg;
3932d7e03dSYC Hung };
4032d7e03dSYC Hung 
4132d7e03dSYC Hung struct adsp_priv {
4232d7e03dSYC Hung 	struct device *dev;
4332d7e03dSYC Hung 	struct snd_sof_dev *sdev;
44aea93501SAllen-KH Cheng 	struct mtk_adsp_ipc *dsp_ipc;
45aea93501SAllen-KH Cheng 	struct platform_device *ipc_dev;
4632d7e03dSYC Hung 	struct mtk_adsp_chip_info *adsp;
47424d6d1aSYC Hung 	struct clk **clk;
4832d7e03dSYC Hung 	u32 (*ap2adsp_addr)(u32 addr, void *data);
4932d7e03dSYC Hung 	u32 (*adsp2ap_addr)(u32 addr, void *data);
5032d7e03dSYC Hung 
5132d7e03dSYC Hung 	void *private_data;
5232d7e03dSYC Hung };
5332d7e03dSYC Hung 
5432d7e03dSYC Hung #endif
55