0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #ifndef __DAL_AUDIO_DCE_110_H__
0026 #define __DAL_AUDIO_DCE_110_H__
0027
0028 #include "audio.h"
0029
0030 #define AUD_COMMON_REG_LIST(id)\
0031 SRI(AZALIA_F0_CODEC_ENDPOINT_INDEX, AZF0ENDPOINT, id),\
0032 SRI(AZALIA_F0_CODEC_ENDPOINT_DATA, AZF0ENDPOINT, id),\
0033 SR(AZALIA_F0_CODEC_FUNCTION_PARAMETER_STREAM_FORMATS),\
0034 SR(AZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES),\
0035 SR(AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES),\
0036 SR(DCCG_AUDIO_DTO_SOURCE),\
0037 SR(DCCG_AUDIO_DTO0_MODULE),\
0038 SR(DCCG_AUDIO_DTO0_PHASE),\
0039 SR(DCCG_AUDIO_DTO1_MODULE),\
0040 SR(DCCG_AUDIO_DTO1_PHASE)
0041
0042
0043
0044 #define SF(reg_name, field_name, post_fix)\
0045 .field_name = reg_name ## __ ## field_name ## post_fix
0046
0047
0048 #define AUD_COMMON_MASK_SH_LIST_BASE(mask_sh)\
0049 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_SOURCE_SEL, mask_sh),\
0050 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO_SEL, mask_sh),\
0051 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO2_USE_512FBR_DTO, mask_sh),\
0052 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_USE_512FBR_DTO, mask_sh),\
0053 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO1_USE_512FBR_DTO, mask_sh),\
0054 SF(DCCG_AUDIO_DTO0_MODULE, DCCG_AUDIO_DTO0_MODULE, mask_sh),\
0055 SF(DCCG_AUDIO_DTO0_PHASE, DCCG_AUDIO_DTO0_PHASE, mask_sh),\
0056 SF(DCCG_AUDIO_DTO1_MODULE, DCCG_AUDIO_DTO1_MODULE, mask_sh),\
0057 SF(DCCG_AUDIO_DTO1_PHASE, DCCG_AUDIO_DTO1_PHASE, mask_sh),\
0058 SF(AZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES, AUDIO_RATE_CAPABILITIES, mask_sh),\
0059 SF(AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES, CLKSTOP, mask_sh),\
0060 SF(AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES, EPSS, mask_sh)
0061
0062 #define AUD_COMMON_MASK_SH_LIST(mask_sh)\
0063 AUD_COMMON_MASK_SH_LIST_BASE(mask_sh),\
0064 SF(AZALIA_F0_CODEC_ENDPOINT_INDEX, AZALIA_ENDPOINT_REG_INDEX, mask_sh),\
0065 SF(AZALIA_F0_CODEC_ENDPOINT_DATA, AZALIA_ENDPOINT_REG_DATA, mask_sh)
0066
0067 #if defined(CONFIG_DRM_AMD_DC_SI)
0068 #define AUD_DCE60_MASK_SH_LIST(mask_sh)\
0069 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_SOURCE_SEL, mask_sh),\
0070 SF(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO_SEL, mask_sh),\
0071 SF(DCCG_AUDIO_DTO0_MODULE, DCCG_AUDIO_DTO0_MODULE, mask_sh),\
0072 SF(DCCG_AUDIO_DTO0_PHASE, DCCG_AUDIO_DTO0_PHASE, mask_sh),\
0073 SF(DCCG_AUDIO_DTO1_MODULE, DCCG_AUDIO_DTO1_MODULE, mask_sh),\
0074 SF(DCCG_AUDIO_DTO1_PHASE, DCCG_AUDIO_DTO1_PHASE, mask_sh),\
0075 SF(AZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES, AUDIO_RATE_CAPABILITIES, mask_sh),\
0076 SF(AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES, CLKSTOP, mask_sh),\
0077 SF(AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES, EPSS, mask_sh), \
0078 SF(AZALIA_F0_CODEC_ENDPOINT_INDEX, AZALIA_ENDPOINT_REG_INDEX, mask_sh),\
0079 SF(AZALIA_F0_CODEC_ENDPOINT_DATA, AZALIA_ENDPOINT_REG_DATA, mask_sh)
0080 #endif
0081
0082 struct dce_audio_registers {
0083 uint32_t AZALIA_F0_CODEC_ENDPOINT_INDEX;
0084 uint32_t AZALIA_F0_CODEC_ENDPOINT_DATA;
0085
0086 uint32_t AZALIA_F0_CODEC_FUNCTION_PARAMETER_STREAM_FORMATS;
0087 uint32_t AZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES;
0088 uint32_t AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES;
0089
0090 uint32_t DCCG_AUDIO_DTO_SOURCE;
0091 uint32_t DCCG_AUDIO_DTO0_MODULE;
0092 uint32_t DCCG_AUDIO_DTO0_PHASE;
0093 uint32_t DCCG_AUDIO_DTO1_MODULE;
0094 uint32_t DCCG_AUDIO_DTO1_PHASE;
0095
0096 uint32_t AUDIO_RATE_CAPABILITIES;
0097 };
0098
0099 struct dce_audio_shift {
0100 uint8_t AZALIA_ENDPOINT_REG_INDEX;
0101 uint8_t AZALIA_ENDPOINT_REG_DATA;
0102
0103 uint8_t AUDIO_RATE_CAPABILITIES;
0104 uint8_t CLKSTOP;
0105 uint8_t EPSS;
0106
0107 uint8_t DCCG_AUDIO_DTO0_SOURCE_SEL;
0108 uint8_t DCCG_AUDIO_DTO_SEL;
0109 uint8_t DCCG_AUDIO_DTO0_MODULE;
0110 uint8_t DCCG_AUDIO_DTO0_PHASE;
0111 uint8_t DCCG_AUDIO_DTO1_MODULE;
0112 uint8_t DCCG_AUDIO_DTO1_PHASE;
0113 uint8_t DCCG_AUDIO_DTO2_USE_512FBR_DTO;
0114 uint32_t DCCG_AUDIO_DTO0_USE_512FBR_DTO;
0115 uint32_t DCCG_AUDIO_DTO1_USE_512FBR_DTO;
0116 uint32_t CLOCK_GATING_DISABLE;
0117 };
0118
0119 struct dce_audio_mask {
0120 uint32_t AZALIA_ENDPOINT_REG_INDEX;
0121 uint32_t AZALIA_ENDPOINT_REG_DATA;
0122
0123 uint32_t AUDIO_RATE_CAPABILITIES;
0124 uint32_t CLKSTOP;
0125 uint32_t EPSS;
0126
0127 uint32_t DCCG_AUDIO_DTO0_SOURCE_SEL;
0128 uint32_t DCCG_AUDIO_DTO_SEL;
0129 uint32_t DCCG_AUDIO_DTO0_MODULE;
0130 uint32_t DCCG_AUDIO_DTO0_PHASE;
0131 uint32_t DCCG_AUDIO_DTO1_MODULE;
0132 uint32_t DCCG_AUDIO_DTO1_PHASE;
0133 uint32_t DCCG_AUDIO_DTO2_USE_512FBR_DTO;
0134 uint32_t DCCG_AUDIO_DTO0_USE_512FBR_DTO;
0135 uint32_t DCCG_AUDIO_DTO1_USE_512FBR_DTO;
0136 uint32_t CLOCK_GATING_DISABLE;
0137
0138 };
0139
0140 struct dce_audio {
0141 struct audio base;
0142 const struct dce_audio_registers *regs;
0143 const struct dce_audio_shift *shifts;
0144 const struct dce_audio_mask *masks;
0145 };
0146
0147 struct audio *dce_audio_create(
0148 struct dc_context *ctx,
0149 unsigned int inst,
0150 const struct dce_audio_registers *reg,
0151 const struct dce_audio_shift *shifts,
0152 const struct dce_audio_mask *masks);
0153
0154 #if defined(CONFIG_DRM_AMD_DC_SI)
0155 struct audio *dce60_audio_create(
0156 struct dc_context *ctx,
0157 unsigned int inst,
0158 const struct dce_audio_registers *reg,
0159 const struct dce_audio_shift *shifts,
0160 const struct dce_audio_mask *masks);
0161 #endif
0162
0163 void dce_aud_destroy(struct audio **audio);
0164
0165 void dce_aud_hw_init(struct audio *audio);
0166
0167 void dce_aud_az_enable(struct audio *audio);
0168 void dce_aud_az_disable(struct audio *audio);
0169
0170 void dce_aud_az_configure(struct audio *audio,
0171 enum signal_type signal,
0172 const struct audio_crtc_info *crtc_info,
0173 const struct audio_info *audio_info);
0174
0175 void dce_aud_wall_dto_setup(struct audio *audio,
0176 enum signal_type signal,
0177 const struct audio_crtc_info *crtc_info,
0178 const struct audio_pll_info *pll_info);
0179
0180 #endif