1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 27c31335aSMaruthi Srinivas Bayyavarapu #ifndef __ACP_HW_H 37c31335aSMaruthi Srinivas Bayyavarapu #define __ACP_HW_H 47c31335aSMaruthi Srinivas Bayyavarapu 57c31335aSMaruthi Srinivas Bayyavarapu #include "include/acp_2_2_d.h" 67c31335aSMaruthi Srinivas Bayyavarapu #include "include/acp_2_2_sh_mask.h" 77c31335aSMaruthi Srinivas Bayyavarapu 87c31335aSMaruthi Srinivas Bayyavarapu #define ACP_PAGE_SIZE_4K_ENABLE 0x02 97c31335aSMaruthi Srinivas Bayyavarapu 107c31335aSMaruthi Srinivas Bayyavarapu #define ACP_PLAYBACK_PTE_OFFSET 10 117c31335aSMaruthi Srinivas Bayyavarapu #define ACP_CAPTURE_PTE_OFFSET 0 127c31335aSMaruthi Srinivas Bayyavarapu 13e188c525SMukunda, Vijendar /* Playback and Capture Offset for Stoney */ 14e188c525SMukunda, Vijendar #define ACP_ST_PLAYBACK_PTE_OFFSET 0x04 15e188c525SMukunda, Vijendar #define ACP_ST_CAPTURE_PTE_OFFSET 0x00 16ccfbb4f5SMukunda, Vijendar #define ACP_ST_BT_PLAYBACK_PTE_OFFSET 0x08 17ccfbb4f5SMukunda, Vijendar #define ACP_ST_BT_CAPTURE_PTE_OFFSET 0x0c 18e188c525SMukunda, Vijendar 197c31335aSMaruthi Srinivas Bayyavarapu #define ACP_GARLIC_CNTL_DEFAULT 0x00000FB4 207c31335aSMaruthi Srinivas Bayyavarapu #define ACP_ONION_CNTL_DEFAULT 0x00000FB4 217c31335aSMaruthi Srinivas Bayyavarapu 227c31335aSMaruthi Srinivas Bayyavarapu #define ACP_PHYSICAL_BASE 0x14000 237c31335aSMaruthi Srinivas Bayyavarapu 2418e8a40dSMukunda, Vijendar /* 2518e8a40dSMukunda, Vijendar * In case of I2S SP controller instance, Stoney uses SRAM bank 1 for 2618e8a40dSMukunda, Vijendar * playback and SRAM Bank 2 for capture where as in case of BT I2S 2718e8a40dSMukunda, Vijendar * Instance, Stoney uses SRAM Bank 3 for playback & SRAM Bank 4 will 2818e8a40dSMukunda, Vijendar * be used for capture. Carrizo uses I2S SP controller instance. SRAM Banks 2918e8a40dSMukunda, Vijendar * 1, 2, 3, 4 will be used for playback & SRAM Banks 5, 6, 7, 8 will be used 3018e8a40dSMukunda, Vijendar * for capture scenario. 3118e8a40dSMukunda, Vijendar */ 3218e8a40dSMukunda, Vijendar #define ACP_SRAM_BANK_1_ADDRESS 0x4002000 3318e8a40dSMukunda, Vijendar #define ACP_SRAM_BANK_2_ADDRESS 0x4004000 3418e8a40dSMukunda, Vijendar #define ACP_SRAM_BANK_3_ADDRESS 0x4006000 3518e8a40dSMukunda, Vijendar #define ACP_SRAM_BANK_4_ADDRESS 0x4008000 3618e8a40dSMukunda, Vijendar #define ACP_SRAM_BANK_5_ADDRESS 0x400A000 377c31335aSMaruthi Srinivas Bayyavarapu 387c31335aSMaruthi Srinivas Bayyavarapu #define ACP_DMA_RESET_TIME 10000 397c31335aSMaruthi Srinivas Bayyavarapu #define ACP_CLOCK_EN_TIME_OUT_VALUE 0x000000FF 407c31335aSMaruthi Srinivas Bayyavarapu #define ACP_SOFT_RESET_DONE_TIME_OUT_VALUE 0x000000FF 417c31335aSMaruthi Srinivas Bayyavarapu #define ACP_DMA_COMPLETE_TIME_OUT_VALUE 0x000000FF 427c31335aSMaruthi Srinivas Bayyavarapu 437c31335aSMaruthi Srinivas Bayyavarapu #define ACP_SRAM_BASE_ADDRESS 0x4000000 447c31335aSMaruthi Srinivas Bayyavarapu #define ACP_DAGB_GRP_SRAM_BASE_ADDRESS 0x4001000 457c31335aSMaruthi Srinivas Bayyavarapu #define ACP_DAGB_GRP_SRBM_SRAM_BASE_OFFSET 0x1000 467c31335aSMaruthi Srinivas Bayyavarapu #define ACP_INTERNAL_APERTURE_WINDOW_0_ADDRESS 0x00000000 477c31335aSMaruthi Srinivas Bayyavarapu #define ACP_INTERNAL_APERTURE_WINDOW_4_ADDRESS 0x01800000 487c31335aSMaruthi Srinivas Bayyavarapu 497c31335aSMaruthi Srinivas Bayyavarapu #define TO_ACP_I2S_1 0x2 507c31335aSMaruthi Srinivas Bayyavarapu #define TO_ACP_I2S_2 0x4 51ccfbb4f5SMukunda, Vijendar #define TO_BLUETOOTH 0x3 527c31335aSMaruthi Srinivas Bayyavarapu #define FROM_ACP_I2S_1 0xa 537c31335aSMaruthi Srinivas Bayyavarapu #define FROM_ACP_I2S_2 0xb 54ccfbb4f5SMukunda, Vijendar #define FROM_BLUETOOTH 0xb 55ccfbb4f5SMukunda, Vijendar 56ccfbb4f5SMukunda, Vijendar #define I2S_SP_INSTANCE 0x01 57ccfbb4f5SMukunda, Vijendar #define I2S_BT_INSTANCE 0x02 58*3eb8440dSVijendar Mukunda #define I2S_MICSP_INSTANCE 0x03 592718c89aSAkshu Agrawal #define CAP_CHANNEL0 0x00 602718c89aSAkshu Agrawal #define CAP_CHANNEL1 0x01 617c31335aSMaruthi Srinivas Bayyavarapu 627c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_ON_MASK 0x03 637c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_OFF_MASK 0x02 647c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_ON_RETAIN_REG_MASK 0x1f 657c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_OFF_RETAIN_REG_MASK 0x20 667c31335aSMaruthi Srinivas Bayyavarapu 677c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_P1_MASK 0x3e 687c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_P2_MASK 0x3d 697c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_DSP0_MASK 0x3b 707c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_DSP1_MASK 0x37 717c31335aSMaruthi Srinivas Bayyavarapu 727c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TILE_DSP2_MASK 0x2f 737c31335aSMaruthi Srinivas Bayyavarapu /* Playback DMA channels */ 747c31335aSMaruthi Srinivas Bayyavarapu #define SYSRAM_TO_ACP_CH_NUM 12 757c31335aSMaruthi Srinivas Bayyavarapu #define ACP_TO_I2S_DMA_CH_NUM 13 767c31335aSMaruthi Srinivas Bayyavarapu 777c31335aSMaruthi Srinivas Bayyavarapu /* Capture DMA channels */ 7855af49acSDaniel Kurtz #define I2S_TO_ACP_DMA_CH_NUM 14 7955af49acSDaniel Kurtz #define ACP_TO_SYSRAM_CH_NUM 15 807c31335aSMaruthi Srinivas Bayyavarapu 81ccfbb4f5SMukunda, Vijendar /* Playback DMA Channels for I2S BT instance */ 82ccfbb4f5SMukunda, Vijendar #define SYSRAM_TO_ACP_BT_INSTANCE_CH_NUM 8 83ccfbb4f5SMukunda, Vijendar #define ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM 9 84ccfbb4f5SMukunda, Vijendar 85ccfbb4f5SMukunda, Vijendar /* Capture DMA Channels for I2S BT Instance */ 8655af49acSDaniel Kurtz #define I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM 10 8755af49acSDaniel Kurtz #define ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM 11 88ccfbb4f5SMukunda, Vijendar 89*3eb8440dSVijendar Mukunda /* Playback DMA channels for I2S MICSP instance */ 90*3eb8440dSVijendar Mukunda #define SYSRAM_TO_ACP_MICSP_INSTANCE_CH_NUM 4 91*3eb8440dSVijendar Mukunda #define ACP_TO_I2S_DMA_MICSP_INSTANCE_CH_NUM 5 92*3eb8440dSVijendar Mukunda 937c31335aSMaruthi Srinivas Bayyavarapu #define NUM_DSCRS_PER_CHANNEL 2 947c31335aSMaruthi Srinivas Bayyavarapu 957c31335aSMaruthi Srinivas Bayyavarapu #define PLAYBACK_START_DMA_DESCR_CH12 0 967c31335aSMaruthi Srinivas Bayyavarapu #define PLAYBACK_END_DMA_DESCR_CH12 1 977c31335aSMaruthi Srinivas Bayyavarapu #define PLAYBACK_START_DMA_DESCR_CH13 2 987c31335aSMaruthi Srinivas Bayyavarapu #define PLAYBACK_END_DMA_DESCR_CH13 3 997c31335aSMaruthi Srinivas Bayyavarapu 1007c31335aSMaruthi Srinivas Bayyavarapu #define CAPTURE_START_DMA_DESCR_CH14 4 1017c31335aSMaruthi Srinivas Bayyavarapu #define CAPTURE_END_DMA_DESCR_CH14 5 1027c31335aSMaruthi Srinivas Bayyavarapu #define CAPTURE_START_DMA_DESCR_CH15 6 1037c31335aSMaruthi Srinivas Bayyavarapu #define CAPTURE_END_DMA_DESCR_CH15 7 1047c31335aSMaruthi Srinivas Bayyavarapu 105ccfbb4f5SMukunda, Vijendar /* I2S BT Instance DMA Descriptors */ 106ccfbb4f5SMukunda, Vijendar #define PLAYBACK_START_DMA_DESCR_CH8 8 107ccfbb4f5SMukunda, Vijendar #define PLAYBACK_END_DMA_DESCR_CH8 9 108ccfbb4f5SMukunda, Vijendar #define PLAYBACK_START_DMA_DESCR_CH9 10 109ccfbb4f5SMukunda, Vijendar #define PLAYBACK_END_DMA_DESCR_CH9 11 110ccfbb4f5SMukunda, Vijendar 111ccfbb4f5SMukunda, Vijendar #define CAPTURE_START_DMA_DESCR_CH10 12 112ccfbb4f5SMukunda, Vijendar #define CAPTURE_END_DMA_DESCR_CH10 13 113ccfbb4f5SMukunda, Vijendar #define CAPTURE_START_DMA_DESCR_CH11 14 114ccfbb4f5SMukunda, Vijendar #define CAPTURE_END_DMA_DESCR_CH11 15 115ccfbb4f5SMukunda, Vijendar 116*3eb8440dSVijendar Mukunda /* I2S MICSP Instance DMA Descriptors */ 117*3eb8440dSVijendar Mukunda #define PLAYBACK_START_DMA_DESCR_CH4 0 118*3eb8440dSVijendar Mukunda #define PLAYBACK_END_DMA_DESCR_CH4 1 119*3eb8440dSVijendar Mukunda #define PLAYBACK_START_DMA_DESCR_CH5 2 120*3eb8440dSVijendar Mukunda #define PLAYBACK_END_DMA_DESCR_CH5 3 121*3eb8440dSVijendar Mukunda 122aac89748SVijendar Mukunda #define mmACP_I2S_16BIT_RESOLUTION_EN 0x5209 123a37d48e3SVijendar Mukunda #define ACP_I2S_MIC_16BIT_RESOLUTION_EN 0x01 124*3eb8440dSVijendar Mukunda #define ACP_I2S_MICSP_16BIT_RESOLUTION_EN 0x01 125a37d48e3SVijendar Mukunda #define ACP_I2S_SP_16BIT_RESOLUTION_EN 0x02 126ccfbb4f5SMukunda, Vijendar #define ACP_I2S_BT_16BIT_RESOLUTION_EN 0x04 127ccfbb4f5SMukunda, Vijendar #define ACP_BT_UART_PAD_SELECT_MASK 0x1 128ccfbb4f5SMukunda, Vijendar 1297c31335aSMaruthi Srinivas Bayyavarapu enum acp_dma_priority_level { 1307c31335aSMaruthi Srinivas Bayyavarapu /* 0x0 Specifies the DMA channel is given normal priority */ 1317c31335aSMaruthi Srinivas Bayyavarapu ACP_DMA_PRIORITY_LEVEL_NORMAL = 0x0, 1327c31335aSMaruthi Srinivas Bayyavarapu /* 0x1 Specifies the DMA channel is given high priority */ 1337c31335aSMaruthi Srinivas Bayyavarapu ACP_DMA_PRIORITY_LEVEL_HIGH = 0x1, 1347c31335aSMaruthi Srinivas Bayyavarapu ACP_DMA_PRIORITY_LEVEL_FORCESIZE = 0xFF 1357c31335aSMaruthi Srinivas Bayyavarapu }; 1367c31335aSMaruthi Srinivas Bayyavarapu 1377c31335aSMaruthi Srinivas Bayyavarapu struct audio_substream_data { 138d6d08273SYu Zhao dma_addr_t dma_addr; 1397c31335aSMaruthi Srinivas Bayyavarapu unsigned int order; 1407c31335aSMaruthi Srinivas Bayyavarapu u16 num_of_pages; 141ccfbb4f5SMukunda, Vijendar u16 i2s_instance; 1422718c89aSAkshu Agrawal u16 capture_channel; 1437c31335aSMaruthi Srinivas Bayyavarapu u16 direction; 1448769bb55SVijendar Mukunda u16 ch1; 1458769bb55SVijendar Mukunda u16 ch2; 1468769bb55SVijendar Mukunda u16 destination; 1478769bb55SVijendar Mukunda u16 dma_dscr_idx_1; 1488769bb55SVijendar Mukunda u16 dma_dscr_idx_2; 149e188c525SMukunda, Vijendar u32 pte_offset; 15018e8a40dSMukunda, Vijendar u32 sram_bank; 1517f004847SVijendar Mukunda u32 byte_cnt_high_reg_offset; 1527f004847SVijendar Mukunda u32 byte_cnt_low_reg_offset; 153662fb3efSMukunda, Vijendar u32 dma_curr_dscr; 1547c31335aSMaruthi Srinivas Bayyavarapu uint64_t size; 1559af8937eSVijendar Mukunda u64 bytescount; 1567c31335aSMaruthi Srinivas Bayyavarapu void __iomem *acp_mmio; 1577c31335aSMaruthi Srinivas Bayyavarapu }; 1587c31335aSMaruthi Srinivas Bayyavarapu 159a1b16aaaSVijendar Mukunda struct audio_drv_data { 160e21358c4SMukunda, Vijendar struct snd_pcm_substream *play_i2ssp_stream; 161e21358c4SMukunda, Vijendar struct snd_pcm_substream *capture_i2ssp_stream; 162ccfbb4f5SMukunda, Vijendar struct snd_pcm_substream *play_i2sbt_stream; 163ccfbb4f5SMukunda, Vijendar struct snd_pcm_substream *capture_i2sbt_stream; 164*3eb8440dSVijendar Mukunda struct snd_pcm_substream *play_i2s_micsp_stream; 165a1b16aaaSVijendar Mukunda void __iomem *acp_mmio; 166a1b16aaaSVijendar Mukunda u32 asic_type; 167feea640aSKuninori Morimoto snd_pcm_sframes_t delay; 168a1b16aaaSVijendar Mukunda }; 169a1b16aaaSVijendar Mukunda 170ccfbb4f5SMukunda, Vijendar /* 171ccfbb4f5SMukunda, Vijendar * this structure used for platform data transfer between machine driver 172ccfbb4f5SMukunda, Vijendar * and dma driver 173ccfbb4f5SMukunda, Vijendar */ 174ccfbb4f5SMukunda, Vijendar struct acp_platform_info { 1758dcb0c90SAkshu Agrawal u16 play_i2s_instance; 1768dcb0c90SAkshu Agrawal u16 cap_i2s_instance; 1772718c89aSAkshu Agrawal u16 capture_channel; 178ccfbb4f5SMukunda, Vijendar }; 179ccfbb4f5SMukunda, Vijendar 18061add814SVijendar Mukunda union acp_dma_count { 18161add814SVijendar Mukunda struct { 18261add814SVijendar Mukunda u32 low; 18361add814SVijendar Mukunda u32 high; 18461add814SVijendar Mukunda } bcount; 18561add814SVijendar Mukunda u64 bytescount; 18661add814SVijendar Mukunda }; 18761add814SVijendar Mukunda 1887c31335aSMaruthi Srinivas Bayyavarapu enum { 1897c31335aSMaruthi Srinivas Bayyavarapu ACP_TILE_P1 = 0, 1907c31335aSMaruthi Srinivas Bayyavarapu ACP_TILE_P2, 1917c31335aSMaruthi Srinivas Bayyavarapu ACP_TILE_DSP0, 1927c31335aSMaruthi Srinivas Bayyavarapu ACP_TILE_DSP1, 1937c31335aSMaruthi Srinivas Bayyavarapu ACP_TILE_DSP2, 1947c31335aSMaruthi Srinivas Bayyavarapu }; 1957c31335aSMaruthi Srinivas Bayyavarapu 1967c31335aSMaruthi Srinivas Bayyavarapu enum { 19713838c11SMukunda, Vijendar ACP_DMA_ATTR_SHAREDMEM_TO_DAGB_ONION = 0x0, 19813838c11SMukunda, Vijendar ACP_DMA_ATTR_SHARED_MEM_TO_DAGB_GARLIC = 0x1, 19913838c11SMukunda, Vijendar ACP_DMA_ATTR_DAGB_ONION_TO_SHAREDMEM = 0x8, 20013838c11SMukunda, Vijendar ACP_DMA_ATTR_DAGB_GARLIC_TO_SHAREDMEM = 0x9, 20113838c11SMukunda, Vijendar ACP_DMA_ATTR_FORCE_SIZE = 0xF 2027c31335aSMaruthi Srinivas Bayyavarapu }; 2037c31335aSMaruthi Srinivas Bayyavarapu 2047c31335aSMaruthi Srinivas Bayyavarapu typedef struct acp_dma_dscr_transfer { 2057c31335aSMaruthi Srinivas Bayyavarapu /* Specifies the source memory location for the DMA data transfer. */ 2067c31335aSMaruthi Srinivas Bayyavarapu u32 src; 20713838c11SMukunda, Vijendar /* 20813838c11SMukunda, Vijendar * Specifies the destination memory location to where the data will 2097c31335aSMaruthi Srinivas Bayyavarapu * be transferred. 2107c31335aSMaruthi Srinivas Bayyavarapu */ 2117c31335aSMaruthi Srinivas Bayyavarapu u32 dest; 21213838c11SMukunda, Vijendar /* 21313838c11SMukunda, Vijendar * Specifies the number of bytes need to be transferred 2147c31335aSMaruthi Srinivas Bayyavarapu * from source to destination memory.Transfer direction & IOC enable 2157c31335aSMaruthi Srinivas Bayyavarapu */ 2167c31335aSMaruthi Srinivas Bayyavarapu u32 xfer_val; 2177c31335aSMaruthi Srinivas Bayyavarapu /* Reserved for future use */ 2187c31335aSMaruthi Srinivas Bayyavarapu u32 reserved; 2197c31335aSMaruthi Srinivas Bayyavarapu } acp_dma_dscr_transfer_t; 2207c31335aSMaruthi Srinivas Bayyavarapu 22119843302SPierre-Louis Bossart extern bool acp_bt_uart_enable; 22219843302SPierre-Louis Bossart 2237c31335aSMaruthi Srinivas Bayyavarapu #endif /*__ACP_HW_H */ 224