xref: /openbmc/linux/sound/soc/intel/avs/registers.h (revision 060f35a317ef09101b128f399dce7ed13d019461)
19fe51c55SCezary Rojewski /* SPDX-License-Identifier: GPL-2.0-only */
29fe51c55SCezary Rojewski /*
39fe51c55SCezary Rojewski  * Copyright(c) 2021-2022 Intel Corporation. All rights reserved.
49fe51c55SCezary Rojewski  *
59fe51c55SCezary Rojewski  * Authors: Cezary Rojewski <cezary.rojewski@intel.com>
69fe51c55SCezary Rojewski  *          Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>
79fe51c55SCezary Rojewski  */
89fe51c55SCezary Rojewski 
99fe51c55SCezary Rojewski #ifndef __SOUND_SOC_INTEL_AVS_REGS_H
109fe51c55SCezary Rojewski #define __SOUND_SOC_INTEL_AVS_REGS_H
119fe51c55SCezary Rojewski 
12b27f4523SCezary Rojewski #define AZX_PCIREG_PGCTL		0x44
13b27f4523SCezary Rojewski #define AZX_PCIREG_CGCTL		0x48
14b27f4523SCezary Rojewski #define AZX_PGCTL_LSRMD_MASK		BIT(4)
15b27f4523SCezary Rojewski #define AZX_CGCTL_MISCBDCGE_MASK	BIT(6)
16b27f4523SCezary Rojewski #define AZX_VS_EM2_L1SEN		BIT(13)
171affc44eSCezary Rojewski #define AZX_VS_EM2_DUM			BIT(23)
18b27f4523SCezary Rojewski 
199fe51c55SCezary Rojewski /* Intel HD Audio General DSP Registers */
209fe51c55SCezary Rojewski #define AVS_ADSP_GEN_BASE		0x0
219fe51c55SCezary Rojewski #define AVS_ADSP_REG_ADSPCS		(AVS_ADSP_GEN_BASE + 0x04)
222879516fSCezary Rojewski #define AVS_ADSP_REG_ADSPIC		(AVS_ADSP_GEN_BASE + 0x08)
232879516fSCezary Rojewski #define AVS_ADSP_REG_ADSPIS		(AVS_ADSP_GEN_BASE + 0x0C)
242879516fSCezary Rojewski 
252879516fSCezary Rojewski #define AVS_ADSP_ADSPIC_IPC		BIT(0)
2645864e49SCezary Rojewski #define AVS_ADSP_ADSPIC_CLDMA		BIT(1)
272879516fSCezary Rojewski #define AVS_ADSP_ADSPIS_IPC		BIT(0)
2845864e49SCezary Rojewski #define AVS_ADSP_ADSPIS_CLDMA		BIT(1)
299fe51c55SCezary Rojewski 
309fe51c55SCezary Rojewski #define AVS_ADSPCS_CRST_MASK(cm)	(cm)
319fe51c55SCezary Rojewski #define AVS_ADSPCS_CSTALL_MASK(cm)	((cm) << 8)
329fe51c55SCezary Rojewski #define AVS_ADSPCS_SPA_MASK(cm)		((cm) << 16)
339fe51c55SCezary Rojewski #define AVS_ADSPCS_CPA_MASK(cm)		((cm) << 24)
349fe51c55SCezary Rojewski #define AVS_MAIN_CORE_MASK		BIT(0)
359fe51c55SCezary Rojewski 
362879516fSCezary Rojewski #define AVS_ADSP_HIPCCTL_BUSY		BIT(0)
372879516fSCezary Rojewski #define AVS_ADSP_HIPCCTL_DONE		BIT(1)
382879516fSCezary Rojewski 
392879516fSCezary Rojewski /* SKL Intel HD Audio Inter-Processor Communication Registers */
402879516fSCezary Rojewski #define SKL_ADSP_IPC_BASE		0x40
412879516fSCezary Rojewski #define SKL_ADSP_REG_HIPCT		(SKL_ADSP_IPC_BASE + 0x00)
422879516fSCezary Rojewski #define SKL_ADSP_REG_HIPCTE		(SKL_ADSP_IPC_BASE + 0x04)
432879516fSCezary Rojewski #define SKL_ADSP_REG_HIPCI		(SKL_ADSP_IPC_BASE + 0x08)
442879516fSCezary Rojewski #define SKL_ADSP_REG_HIPCIE		(SKL_ADSP_IPC_BASE + 0x0C)
452879516fSCezary Rojewski #define SKL_ADSP_REG_HIPCCTL		(SKL_ADSP_IPC_BASE + 0x10)
462879516fSCezary Rojewski 
472879516fSCezary Rojewski #define SKL_ADSP_HIPCI_BUSY		BIT(31)
482879516fSCezary Rojewski #define SKL_ADSP_HIPCIE_DONE		BIT(30)
492879516fSCezary Rojewski #define SKL_ADSP_HIPCT_BUSY		BIT(31)
502879516fSCezary Rojewski 
51b3e29075SCezary Rojewski /* Intel HD Audio SRAM windows base addresses */
52b3e29075SCezary Rojewski #define SKL_ADSP_SRAM_BASE_OFFSET	0x8000
53b3e29075SCezary Rojewski #define SKL_ADSP_SRAM_WINDOW_SIZE	0x2000
54c8c960c1SCezary Rojewski #define APL_ADSP_SRAM_BASE_OFFSET	0x80000
55c8c960c1SCezary Rojewski #define APL_ADSP_SRAM_WINDOW_SIZE	0x20000
56b3e29075SCezary Rojewski 
572879516fSCezary Rojewski /* Constants used when accessing SRAM, space shared with firmware */
58*b9db15cfSCezary Rojewski #define AVS_FW_REG_BASE(adev)		((adev)->spec->sram->base_offset)
592879516fSCezary Rojewski #define AVS_FW_REG_STATUS(adev)		(AVS_FW_REG_BASE(adev) + 0x0)
602879516fSCezary Rojewski #define AVS_FW_REG_ERROR_CODE(adev)	(AVS_FW_REG_BASE(adev) + 0x4)
612879516fSCezary Rojewski 
6285ac9c8cSCezary Rojewski #define AVS_WINDOW_CHUNK_SIZE		PAGE_SIZE
6385ac9c8cSCezary Rojewski #define AVS_FW_REGS_SIZE		AVS_WINDOW_CHUNK_SIZE
642879516fSCezary Rojewski #define AVS_FW_REGS_WINDOW		0
652879516fSCezary Rojewski /* DSP -> HOST communication window */
662879516fSCezary Rojewski #define AVS_UPLINK_WINDOW		AVS_FW_REGS_WINDOW
672879516fSCezary Rojewski /* HOST -> DSP communication window */
682879516fSCezary Rojewski #define AVS_DOWNLINK_WINDOW		1
694b86115cSCezary Rojewski #define AVS_DEBUG_WINDOW		2
702879516fSCezary Rojewski 
712879516fSCezary Rojewski /* registry I/O helpers */
722879516fSCezary Rojewski #define avs_sram_offset(adev, window_idx) \
73*b9db15cfSCezary Rojewski 	((adev)->spec->sram->base_offset + \
74*b9db15cfSCezary Rojewski 	 (adev)->spec->sram->window_size * (window_idx))
752879516fSCezary Rojewski 
762879516fSCezary Rojewski #define avs_sram_addr(adev, window_idx) \
772879516fSCezary Rojewski 	((adev)->dsp_ba + avs_sram_offset(adev, window_idx))
782879516fSCezary Rojewski 
792879516fSCezary Rojewski #define avs_uplink_addr(adev) \
802879516fSCezary Rojewski 	(avs_sram_addr(adev, AVS_UPLINK_WINDOW) + AVS_FW_REGS_SIZE)
812879516fSCezary Rojewski #define avs_downlink_addr(adev) \
822879516fSCezary Rojewski 	avs_sram_addr(adev, AVS_DOWNLINK_WINDOW)
832879516fSCezary Rojewski 
849fe51c55SCezary Rojewski #endif /* __SOUND_SOC_INTEL_AVS_REGS_H */
85