xref: /openbmc/linux/sound/soc/amd/acp.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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