root/sound/soc/sof/mediatek/mt8186/mt8186.h
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */

/*
 * Copyright (c) 2022 MediaTek Corporation. All rights reserved.
 *
 *  Header file for the mt8186 DSP register definition
 */

#ifndef __MT8186_H
#define __MT8186_H

struct mtk_adsp_chip_info;
struct snd_sof_dev;

#define DSP_REG_BAR                     4
#define DSP_SECREG_BAR                  5
#define DSP_BUSREG_BAR                  6

/*****************************************************************************
 *                  R E G I S T E R       TABLE
 *****************************************************************************/
/* dsp cfg */
#define ADSP_CFGREG_SW_RSTN             0x0000
#define SW_DBG_RSTN_C0                  BIT(0)
#define SW_RSTN_C0                      BIT(4)
#define ADSP_HIFI_IO_CONFIG             0x000C
#define TRACEMEMREADY                   BIT(15)
#define RUNSTALL                        BIT(31)
#define ADSP_IRQ_MASK                   0x0030
#define ADSP_DVFSRC_REQ                 0x0040
#define ADSP_DDREN_REQ_0                0x0044
#define ADSP_SEMAPHORE                  0x0064
#define ADSP_WDT_CON_C0                 0x007C
#define ADSP_MBOX_IRQ_EN                0x009C
#define DSP_MBOX0_IRQ_EN                BIT(0)
#define DSP_MBOX1_IRQ_EN                BIT(1)
#define DSP_MBOX2_IRQ_EN                BIT(2)
#define DSP_MBOX3_IRQ_EN                BIT(3)
#define DSP_MBOX4_IRQ_EN                BIT(4)
#define DSP_PDEBUGPC                    0x013C
#define DSP_PDEBUGDATA                  0x0140
#define DSP_PDEBUGINST                  0x0144
#define DSP_PDEBUGLS0STAT               0x0148
#define DSP_PDEBUGSTATUS                0x014C
#define DSP_PFAULTINFO                  0x0150
#define ADSP_CK_EN                      0x1000
#define CORE_CLK_EN                     BIT(0)
#define COREDBG_EN                      BIT(1)
#define TIMER_EN                        BIT(3)
#define DMA_EN                          BIT(4)
#define UART_EN                         BIT(5)
#define ADSP_UART_CTRL                  0x1010
#define UART_BCLK_CG                    BIT(0)
#define UART_RSTN                       BIT(3)

/* dsp sec */
#define ADSP_PRID                       0x0
#define ADSP_ALTVEC_C0                  0x04
#define ADSP_ALTVECSEL                  0x0C
#define MT8188_ADSP_ALTVECSEL_C0        BIT(0)
#define MT8186_ADSP_ALTVECSEL_C0        BIT(1)

/*
 * On MT8188, BIT(1) is not evaluated and on MT8186 BIT(0) is not evaluated:
 * We can simplify the driver by safely setting both bits regardless of the SoC.
 */
#define ADSP_ALTVECSEL_C0               (MT8188_ADSP_ALTVECSEL_C0 | \
                                         MT8186_ADSP_ALTVECSEL_C0)

/* dsp bus */
#define ADSP_SRAM_POOL_CON              0x190
#define DSP_SRAM_POOL_PD_MASK           0xF00F /* [0:3] and [12:15] */
#define DSP_C0_EMI_MAP_ADDR             0xA00  /* ADSP Core0 To EMI Address Remap */
#define DSP_C0_DMAEMI_MAP_ADDR          0xA08  /* DMA0 To EMI Address Remap */

/* DSP memories */
#define MBOX_OFFSET                     0x500000 /* DRAM */
#define MBOX_SIZE                       0x1000   /* consistent with which in memory.h of sof fw */
#define DSP_DRAM_SIZE                   0xA00000 /* 16M */

/*remap dram between AP and DSP view, 4KB aligned*/
#define SRAM_PHYS_BASE_FROM_DSP_VIEW    0x4E100000 /* MT8186 DSP view */
#define DRAM_PHYS_BASE_FROM_DSP_VIEW    0x60000000 /* MT8186 DSP view */
#define DRAM_REMAP_SHIFT                12
#define DRAM_REMAP_MASK                 0xFFF

#define SIZE_SHARED_DRAM_DL                     0x40000 /*Shared buffer for Downlink*/
#define SIZE_SHARED_DRAM_UL                     0x40000 /*Shared buffer for Uplink*/
#define TOTAL_SIZE_SHARED_DRAM_FROM_TAIL        (SIZE_SHARED_DRAM_DL + SIZE_SHARED_DRAM_UL)

void mt8186_sof_hifixdsp_boot_sequence(struct snd_sof_dev *sdev, u32 boot_addr);
void mt8186_sof_hifixdsp_shutdown(struct snd_sof_dev *sdev);
#endif