/* * Copyright 2019 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Authors: AMD * */ #ifndef __DAL_DCN31_HPO_DP_STREAM_ENCODER_H__ #define __DAL_DCN31_HPO_DP_STREAM_ENCODER_H__ #include "dcn30/dcn30_vpg.h" #include "dcn31/dcn31_apg.h" #include "stream_encoder.h" #define DCN3_1_HPO_DP_STREAM_ENC_FROM_HPO_STREAM_ENC(hpo_dp_stream_encoder)\ container_of(hpo_dp_stream_encoder, struct dcn31_hpo_dp_stream_encoder, base) /* Define MSA_DATA_LANE_[0-3] fields to make programming easier */ #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_0__SHIFT 0x0 #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_1__SHIFT 0x8 #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_2__SHIFT 0x10 #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_3__SHIFT 0x18 #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_0_MASK 0x000000FFL #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_1_MASK 0x0000FF00L #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_2_MASK 0x00FF0000L #define DP_SYM32_ENC_VID_MSA__MSA_DATA_LANE_3_MASK 0xFF000000L #define DCN3_1_HPO_DP_STREAM_ENC_REG_LIST(id) \ SR(DP_STREAM_MAPPER_CONTROL0),\ SR(DP_STREAM_MAPPER_CONTROL1),\ SR(DP_STREAM_MAPPER_CONTROL2),\ SR(DP_STREAM_MAPPER_CONTROL3),\ SRI(DP_STREAM_ENC_CLOCK_CONTROL, DP_STREAM_ENC, id),\ SRI(DP_STREAM_ENC_INPUT_MUX_CONTROL, DP_STREAM_ENC, id),\ SRI(DP_STREAM_ENC_AUDIO_CONTROL, DP_STREAM_ENC, id),\ SRI(DP_STREAM_ENC_CLOCK_RAMP_ADJUSTER_FIFO_STATUS_CONTROL0, DP_STREAM_ENC, id),\ SRI(DP_SYM32_ENC_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_PIXEL_FORMAT, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_PIXEL_FORMAT_DOUBLE_BUFFER_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA0, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA1, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA2, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA3, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA4, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA5, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA6, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA7, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA8, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_MSA_DOUBLE_BUFFER_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_FIFO_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_STREAM_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_VBID_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_GSP_CONTROL0, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_GSP_CONTROL2, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_GSP_CONTROL3, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_GSP_CONTROL5, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_GSP_CONTROL11, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_METADATA_PACKET_CONTROL, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_SDP_AUDIO_CONTROL0, DP_SYM32_ENC, id),\ SRI(DP_SYM32_ENC_VID_CRC_CONTROL, DP_SYM32_ENC, id) #define DCN3_1_HPO_DP_STREAM_ENC_REGS \ uint32_t DP_STREAM_MAPPER_CONTROL0;\ uint32_t DP_STREAM_MAPPER_CONTROL1;\ uint32_t DP_STREAM_MAPPER_CONTROL2;\ uint32_t DP_STREAM_MAPPER_CONTROL3;\ uint32_t DP_STREAM_ENC_CLOCK_CONTROL;\ uint32_t DP_STREAM_ENC_INPUT_MUX_CONTROL;\ uint32_t DP_STREAM_ENC_AUDIO_CONTROL;\ uint32_t DP_STREAM_ENC_CLOCK_RAMP_ADJUSTER_FIFO_STATUS_CONTROL0;\ uint32_t DP_SYM32_ENC_CONTROL;\ uint32_t DP_SYM32_ENC_VID_PIXEL_FORMAT;\ uint32_t DP_SYM32_ENC_VID_PIXEL_FORMAT_DOUBLE_BUFFER_CONTROL;\ uint32_t DP_SYM32_ENC_VID_MSA0;\ uint32_t DP_SYM32_ENC_VID_MSA1;\ uint32_t DP_SYM32_ENC_VID_MSA2;\ uint32_t DP_SYM32_ENC_VID_MSA3;\ uint32_t DP_SYM32_ENC_VID_MSA4;\ uint32_t DP_SYM32_ENC_VID_MSA5;\ uint32_t DP_SYM32_ENC_VID_MSA6;\ uint32_t DP_SYM32_ENC_VID_MSA7;\ uint32_t DP_SYM32_ENC_VID_MSA8;\ uint32_t DP_SYM32_ENC_VID_MSA_CONTROL;\ uint32_t DP_SYM32_ENC_VID_MSA_DOUBLE_BUFFER_CONTROL;\ uint32_t DP_SYM32_ENC_VID_FIFO_CONTROL;\ uint32_t DP_SYM32_ENC_VID_STREAM_CONTROL;\ uint32_t DP_SYM32_ENC_VID_VBID_CONTROL;\ uint32_t DP_SYM32_ENC_SDP_CONTROL;\ uint32_t DP_SYM32_ENC_SDP_GSP_CONTROL0;\ uint32_t DP_SYM32_ENC_SDP_GSP_CONTROL2;\ uint32_t DP_SYM32_ENC_SDP_GSP_CONTROL3;\ uint32_t DP_SYM32_ENC_SDP_GSP_CONTROL5;\ uint32_t DP_SYM32_ENC_SDP_GSP_CONTROL11;\ uint32_t DP_SYM32_ENC_SDP_METADATA_PACKET_CONTROL;\ uint32_t DP_SYM32_ENC_SDP_AUDIO_CONTROL0;\ uint32_t DP_SYM32_ENC_VID_CRC_CONTROL #define DCN3_1_HPO_DP_STREAM_ENC_MASK_SH_LIST(mask_sh)\ SE_SF(DP_STREAM_MAPPER_CONTROL0, DP_STREAM_LINK_TARGET, mask_sh),\ SE_SF(DP_STREAM_ENC0_DP_STREAM_ENC_CLOCK_CONTROL, DP_STREAM_ENC_CLOCK_EN, mask_sh),\ SE_SF(DP_STREAM_ENC0_DP_STREAM_ENC_INPUT_MUX_CONTROL, DP_STREAM_ENC_INPUT_MUX_PIXEL_STREAM_SOURCE_SEL, mask_sh),\ SE_SF(DP_STREAM_ENC0_DP_STREAM_ENC_AUDIO_CONTROL, DP_STREAM_ENC_INPUT_MUX_AUDIO_STREAM_SOURCE_SEL, mask_sh),\ SE_SF(DP_STREAM_ENC0_DP_STREAM_ENC_CLOCK_RAMP_ADJUSTER_FIFO_STATUS_CONTROL0, FIFO_RESET, mask_sh),\ SE_SF(DP_STREAM_ENC0_DP_STREAM_ENC_CLOCK_RAMP_ADJUSTER_FIFO_STATUS_CONTROL0, FIFO_RESET_DONE, mask_sh),\ SE_SF(DP_STREAM_ENC0_DP_STREAM_ENC_CLOCK_RAMP_ADJUSTER_FIFO_STATUS_CONTROL0, FIFO_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_CONTROL, DP_SYM32_ENC_RESET, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_CONTROL, DP_SYM32_ENC_RESET_DONE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_CONTROL, DP_SYM32_ENC_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_PIXEL_FORMAT, PIXEL_ENCODING_TYPE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_PIXEL_FORMAT, UNCOMPRESSED_PIXEL_ENCODING, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_PIXEL_FORMAT, UNCOMPRESSED_COMPONENT_DEPTH, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_PIXEL_FORMAT_DOUBLE_BUFFER_CONTROL, PIXEL_FORMAT_DOUBLE_BUFFER_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_MSA_DOUBLE_BUFFER_CONTROL, MSA_DOUBLE_BUFFER_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC_VID_MSA, MSA_DATA_LANE_0, mask_sh),\ SE_SF(DP_SYM32_ENC_VID_MSA, MSA_DATA_LANE_1, mask_sh),\ SE_SF(DP_SYM32_ENC_VID_MSA, MSA_DATA_LANE_2, mask_sh),\ SE_SF(DP_SYM32_ENC_VID_MSA, MSA_DATA_LANE_3, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_FIFO_CONTROL, PIXEL_TO_SYMBOL_FIFO_RESET, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_FIFO_CONTROL, PIXEL_TO_SYMBOL_FIFO_RESET_DONE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_FIFO_CONTROL, PIXEL_TO_SYMBOL_FIFO_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_STREAM_CONTROL, VID_STREAM_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_STREAM_CONTROL, VID_STREAM_STATUS, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_VBID_CONTROL, VBID_6_COMPRESSEDSTREAM_FLAG_SOF_REFERENCE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_VBID_CONTROL, VBID_6_COMPRESSEDSTREAM_FLAG_LINE_NUMBER, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_CONTROL, SDP_STREAM_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_GSP_CONTROL0, GSP_VIDEO_CONTINUOUS_TRANSMISSION_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_GSP_CONTROL0, GSP_PAYLOAD_SIZE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_GSP_CONTROL0, GSP_TRANSMISSION_LINE_NUMBER, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_GSP_CONTROL5, GSP_VIDEO_CONTINUOUS_TRANSMISSION_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_GSP_CONTROL5, GSP_TRANSMISSION_LINE_NUMBER, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_GSP_CONTROL5, GSP_SOF_REFERENCE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_METADATA_PACKET_CONTROL, METADATA_PACKET_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0, AUDIO_MUTE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0, ASP_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0, ATP_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0, AIP_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_SDP_AUDIO_CONTROL0, ACM_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_CRC_CONTROL, CRC_ENABLE, mask_sh),\ SE_SF(DP_SYM32_ENC0_DP_SYM32_ENC_VID_CRC_CONTROL, CRC_CONT_MODE_ENABLE, mask_sh) #define DCN3_1_HPO_DP_STREAM_ENC_REG_FIELD_LIST(type) \ type DP_STREAM_LINK_TARGET;\ type DP_STREAM_ENC_CLOCK_EN;\ type DP_STREAM_ENC_INPUT_MUX_PIXEL_STREAM_SOURCE_SEL;\ type DP_STREAM_ENC_INPUT_MUX_AUDIO_STREAM_SOURCE_SEL;\ type FIFO_RESET;\ type FIFO_RESET_DONE;\ type FIFO_ENABLE;\ type DP_SYM32_ENC_RESET;\ type DP_SYM32_ENC_RESET_DONE;\ type DP_SYM32_ENC_ENABLE;\ type PIXEL_ENCODING_TYPE;\ type UNCOMPRESSED_PIXEL_ENCODING;\ type UNCOMPRESSED_COMPONENT_DEPTH;\ type PIXEL_FORMAT_DOUBLE_BUFFER_ENABLE;\ type MSA_DOUBLE_BUFFER_ENABLE;\ type MSA_DATA_LANE_0;\ type MSA_DATA_LANE_1;\ type MSA_DATA_LANE_2;\ type MSA_DATA_LANE_3;\ type PIXEL_TO_SYMBOL_FIFO_RESET;\ type PIXEL_TO_SYMBOL_FIFO_RESET_DONE;\ type PIXEL_TO_SYMBOL_FIFO_ENABLE;\ type VID_STREAM_ENABLE;\ type VID_STREAM_STATUS;\ type VBID_6_COMPRESSEDSTREAM_FLAG_SOF_REFERENCE;\ type VBID_6_COMPRESSEDSTREAM_FLAG_LINE_NUMBER;\ type SDP_STREAM_ENABLE;\ type AUDIO_MUTE;\ type ASP_ENABLE;\ type ATP_ENABLE;\ type AIP_ENABLE;\ type ACM_ENABLE;\ type GSP_VIDEO_CONTINUOUS_TRANSMISSION_ENABLE;\ type GSP_PAYLOAD_SIZE;\ type GSP_TRANSMISSION_LINE_NUMBER;\ type GSP_SOF_REFERENCE;\ type METADATA_PACKET_ENABLE;\ type CRC_ENABLE;\ type CRC_CONT_MODE_ENABLE struct dcn31_hpo_dp_stream_encoder_registers { DCN3_1_HPO_DP_STREAM_ENC_REGS; }; struct dcn31_hpo_dp_stream_encoder_shift { DCN3_1_HPO_DP_STREAM_ENC_REG_FIELD_LIST(uint8_t); }; struct dcn31_hpo_dp_stream_encoder_mask { DCN3_1_HPO_DP_STREAM_ENC_REG_FIELD_LIST(uint32_t); }; struct dcn31_hpo_dp_stream_encoder { struct hpo_dp_stream_encoder base; const struct dcn31_hpo_dp_stream_encoder_registers *regs; const struct dcn31_hpo_dp_stream_encoder_shift *hpo_se_shift; const struct dcn31_hpo_dp_stream_encoder_mask *hpo_se_mask; }; void dcn31_hpo_dp_stream_encoder_construct( struct dcn31_hpo_dp_stream_encoder *enc3, struct dc_context *ctx, struct dc_bios *bp, uint32_t inst, enum engine_id eng_id, struct vpg *vpg, struct apg *apg, const struct dcn31_hpo_dp_stream_encoder_registers *regs, const struct dcn31_hpo_dp_stream_encoder_shift *hpo_se_shift, const struct dcn31_hpo_dp_stream_encoder_mask *hpo_se_mask); #endif // __DAL_DCN31_HPO_STREAM_ENCODER_H__