162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci/*
462306a36Sopenharmony_ci * Copyright (c) 2021 MediaTek Corporation. All rights reserved.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __MTK_ADSP_HELPER_H__
862306a36Sopenharmony_ci#define __MTK_ADSP_HELPER_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/firmware/mediatek/mtk-adsp-ipc.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * Global important adsp data structure.
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_cistruct mtk_adsp_chip_info {
1662306a36Sopenharmony_ci	phys_addr_t pa_sram;
1762306a36Sopenharmony_ci	phys_addr_t pa_dram; /* adsp dram physical base */
1862306a36Sopenharmony_ci	phys_addr_t pa_shared_dram; /* adsp dram physical base */
1962306a36Sopenharmony_ci	phys_addr_t pa_cfgreg;
2062306a36Sopenharmony_ci	u32 sramsize;
2162306a36Sopenharmony_ci	u32 dramsize;
2262306a36Sopenharmony_ci	u32 cfgregsize;
2362306a36Sopenharmony_ci	u32 shared_size;
2462306a36Sopenharmony_ci	void __iomem *va_sram; /* corresponding to pa_sram */
2562306a36Sopenharmony_ci	void __iomem *va_dram; /* corresponding to pa_dram */
2662306a36Sopenharmony_ci	void __iomem *va_cfgreg;
2762306a36Sopenharmony_ci	void __iomem *shared_sram; /* part of  va_sram */
2862306a36Sopenharmony_ci	void __iomem *shared_dram; /* part of  va_dram */
2962306a36Sopenharmony_ci	phys_addr_t adsp_bootup_addr;
3062306a36Sopenharmony_ci	int dram_offset; /*dram offset between system and dsp view*/
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	phys_addr_t pa_secreg;
3362306a36Sopenharmony_ci	u32 secregsize;
3462306a36Sopenharmony_ci	void __iomem *va_secreg;
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	phys_addr_t pa_busreg;
3762306a36Sopenharmony_ci	u32 busregsize;
3862306a36Sopenharmony_ci	void __iomem *va_busreg;
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct adsp_priv {
4262306a36Sopenharmony_ci	struct device *dev;
4362306a36Sopenharmony_ci	struct snd_sof_dev *sdev;
4462306a36Sopenharmony_ci	struct mtk_adsp_ipc *dsp_ipc;
4562306a36Sopenharmony_ci	struct platform_device *ipc_dev;
4662306a36Sopenharmony_ci	struct mtk_adsp_chip_info *adsp;
4762306a36Sopenharmony_ci	struct clk **clk;
4862306a36Sopenharmony_ci	u32 (*ap2adsp_addr)(u32 addr, void *data);
4962306a36Sopenharmony_ci	u32 (*adsp2ap_addr)(u32 addr, void *data);
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	void *private_data;
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif
55