/* SPDX-License-Identifier: MIT */ /* * Copyright 2023 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 __DISPLAY_MODE_CORE_STRUCT_H__ #define __DISPLAY_MODE_CORE_STRUCT_H__ #include "display_mode_lib_defines.h" enum dml_project_id { dml_project_invalid = 0, dml_project_default = 1, dml_project_dcn32 = dml_project_default, dml_project_dcn321 = 2, dml_project_dcn35 = 3, dml_project_dcn351 = 4, }; enum dml_prefetch_modes { dml_prefetch_support_uclk_fclk_and_stutter_if_possible = 0, dml_prefetch_support_uclk_fclk_and_stutter = 1, dml_prefetch_support_fclk_and_stutter = 2, dml_prefetch_support_stutter = 3, dml_prefetch_support_none = 4 }; enum dml_use_mall_for_pstate_change_mode { dml_use_mall_pstate_change_disable = 0, dml_use_mall_pstate_change_full_frame = 1, dml_use_mall_pstate_change_sub_viewport = 2, dml_use_mall_pstate_change_phantom_pipe = 3 }; enum dml_use_mall_for_static_screen_mode { dml_use_mall_static_screen_disable = 0, dml_use_mall_static_screen_enable = 1, dml_use_mall_static_screen_optimize = 2 }; enum dml_output_encoder_class { dml_dp = 0, dml_edp = 1, dml_dp2p0 = 2, dml_hdmi = 3, dml_hdmifrl = 4, dml_none = 5 }; enum dml_output_link_dp_rate{ dml_dp_rate_na = 0, dml_dp_rate_hbr = 1, dml_dp_rate_hbr2 = 2, dml_dp_rate_hbr3 = 3, dml_dp_rate_uhbr10 = 4, dml_dp_rate_uhbr13p5 = 5, dml_dp_rate_uhbr20 = 6 }; enum dml_output_type_and_rate__type{ dml_output_type_unknown = 0, dml_output_type_dp = 1, dml_output_type_edp = 2, dml_output_type_dp2p0 = 3, dml_output_type_hdmi = 4, dml_output_type_hdmifrl = 5 }; enum dml_output_type_and_rate__rate { dml_output_rate_unknown = 0, dml_output_rate_dp_rate_hbr = 1, dml_output_rate_dp_rate_hbr2 = 2, dml_output_rate_dp_rate_hbr3 = 3, dml_output_rate_dp_rate_uhbr10 = 4, dml_output_rate_dp_rate_uhbr13p5 = 5, dml_output_rate_dp_rate_uhbr20 = 6, dml_output_rate_hdmi_rate_3x3 = 7, dml_output_rate_hdmi_rate_6x3 = 8, dml_output_rate_hdmi_rate_6x4 = 9, dml_output_rate_hdmi_rate_8x4 = 10, dml_output_rate_hdmi_rate_10x4 = 11, dml_output_rate_hdmi_rate_12x4 = 12 }; enum dml_output_format_class { dml_444 = 0, dml_s422 = 1, dml_n422 = 2, dml_420 = 3 }; enum dml_source_format_class { dml_444_8 = 0, dml_444_16 = 1, dml_444_32 = 2, dml_444_64 = 3, dml_420_8 = 4, dml_420_10 = 5, dml_420_12 = 6, dml_422_8 = 7, dml_422_10 = 8, dml_rgbe_alpha = 9, dml_rgbe = 10, dml_mono_8 = 11, dml_mono_16 = 12 }; enum dml_output_bpc_class { dml_out_6 = 0, dml_out_8 = 1, dml_out_10 = 2, dml_out_12 = 3, dml_out_16 = 4 }; enum dml_output_standard_class { dml_std_cvt = 0, dml_std_cea = 1, dml_std_cvtr2 = 2 }; enum dml_rotation_angle { dml_rotation_0 = 0, dml_rotation_90 = 1, dml_rotation_180 = 2, dml_rotation_270 = 3, dml_rotation_0m = 4, dml_rotation_90m = 5, dml_rotation_180m = 6, dml_rotation_270m = 7 }; enum dml_swizzle_mode { dml_sw_linear = 0, dml_sw_256b_s = 1, dml_sw_256b_d = 2, dml_sw_256b_r = 3, dml_sw_4kb_z = 4, dml_sw_4kb_s = 5, dml_sw_4kb_d = 6, dml_sw_4kb_r = 7, dml_sw_64kb_z = 8, dml_sw_64kb_s = 9, dml_sw_64kb_d = 10, dml_sw_64kb_r = 11, dml_sw_256kb_z = 12, dml_sw_256kb_s = 13, dml_sw_256kb_d = 14, dml_sw_256kb_r = 15, dml_sw_64kb_z_t = 16, dml_sw_64kb_s_t = 17, dml_sw_64kb_d_t = 18, dml_sw_64kb_r_t = 19, dml_sw_4kb_z_x = 20, dml_sw_4kb_s_x = 21, dml_sw_4kb_d_x = 22, dml_sw_4kb_r_x = 23, dml_sw_64kb_z_x = 24, dml_sw_64kb_s_x = 25, dml_sw_64kb_d_x = 26, dml_sw_64kb_r_x = 27, dml_sw_256kb_z_x = 28, dml_sw_256kb_s_x = 29, dml_sw_256kb_d_x = 30, dml_sw_256kb_r_x = 31 }; enum dml_lb_depth { dml_lb_6 = 0, dml_lb_8 = 1, dml_lb_10 = 2, dml_lb_12 = 3, dml_lb_16 = 4 }; enum dml_voltage_state { dml_vmin_lv = 0, dml_vmin = 1, dml_vmid = 2, dml_vnom = 3, dml_vmax = 4 }; enum dml_source_macro_tile_size { dml_4k_tile = 0, dml_64k_tile = 1, dml_256k_tile = 2 }; enum dml_cursor_bpp { dml_cur_2bit = 0, dml_cur_32bit = 1, dml_cur_64bit = 2 }; enum dml_dram_clock_change_support { dml_dram_clock_change_vactive = 0, dml_dram_clock_change_vblank = 1, dml_dram_clock_change_vblank_drr = 2, dml_dram_clock_change_vactive_w_mall_full_frame = 3, dml_dram_clock_change_vactive_w_mall_sub_vp = 4, dml_dram_clock_change_vblank_w_mall_full_frame = 5, dml_dram_clock_change_vblank_drr_w_mall_full_frame = 6, dml_dram_clock_change_vblank_w_mall_sub_vp = 7, dml_dram_clock_change_vblank_drr_w_mall_sub_vp = 8, dml_dram_clock_change_unsupported = 9 }; enum dml_fclock_change_support { dml_fclock_change_vactive = 0, dml_fclock_change_vblank = 1, dml_fclock_change_unsupported = 2 }; enum dml_dsc_enable { dml_dsc_disable = 0, dml_dsc_enable = 1, dml_dsc_enable_if_necessary = 2 }; enum dml_mpc_use_policy { dml_mpc_disabled = 0, dml_mpc_as_possible = 1, dml_mpc_as_needed_for_voltage = 2, dml_mpc_as_needed_for_pstate_and_voltage = 3 }; enum dml_odm_use_policy { dml_odm_use_policy_bypass = 0, dml_odm_use_policy_combine_as_needed = 1, dml_odm_use_policy_combine_2to1 = 2, dml_odm_use_policy_combine_4to1 = 3, dml_odm_use_policy_split_1to2 = 4, dml_odm_use_policy_mso_1to2 = 5, dml_odm_use_policy_mso_1to4 = 6 }; enum dml_odm_mode { dml_odm_mode_bypass = 0, dml_odm_mode_combine_2to1 = 1, dml_odm_mode_combine_4to1 = 2, dml_odm_mode_split_1to2 = 3, dml_odm_mode_mso_1to2 = 4, dml_odm_mode_mso_1to4 = 5 }; enum dml_writeback_configuration { dml_whole_buffer_for_single_stream_no_interleave = 0, dml_whole_buffer_for_single_stream_interleave = 1 }; enum dml_immediate_flip_requirement { dml_immediate_flip_not_required = 0, dml_immediate_flip_required = 1, dml_immediate_flip_if_possible = 2 }; enum dml_unbounded_requesting_policy { dml_unbounded_requesting_enable = 0, dml_unbounded_requesting_edp_only = 1, dml_unbounded_requesting_disable = 2 }; enum dml_clk_cfg_policy { dml_use_required_freq = 0, dml_use_override_freq = 1, dml_use_state_freq = 2 }; struct soc_state_bounding_box_st { dml_float_t socclk_mhz; dml_float_t dscclk_mhz; dml_float_t phyclk_mhz; dml_float_t phyclk_d18_mhz; dml_float_t phyclk_d32_mhz; dml_float_t dtbclk_mhz; dml_float_t fabricclk_mhz; dml_float_t dcfclk_mhz; dml_float_t dispclk_mhz; dml_float_t dppclk_mhz; dml_float_t dram_speed_mts; dml_float_t urgent_latency_pixel_data_only_us; dml_float_t urgent_latency_pixel_mixed_with_vm_data_us; dml_float_t urgent_latency_vm_data_only_us; dml_float_t writeback_latency_us; dml_float_t urgent_latency_adjustment_fabric_clock_component_us; dml_float_t urgent_latency_adjustment_fabric_clock_reference_mhz; dml_float_t sr_exit_time_us; dml_float_t sr_enter_plus_exit_time_us; dml_float_t sr_exit_z8_time_us; dml_float_t sr_enter_plus_exit_z8_time_us; dml_float_t dram_clock_change_latency_us; dml_float_t fclk_change_latency_us; dml_float_t usr_retraining_latency_us; dml_bool_t use_ideal_dram_bw_strobe; }; struct soc_bounding_box_st { dml_float_t dprefclk_mhz; dml_float_t xtalclk_mhz; dml_float_t pcierefclk_mhz; dml_float_t refclk_mhz; dml_float_t amclk_mhz; dml_float_t max_outstanding_reqs; dml_float_t pct_ideal_sdp_bw_after_urgent; dml_float_t pct_ideal_fabric_bw_after_urgent; dml_float_t pct_ideal_dram_bw_after_urgent_pixel_only; dml_float_t pct_ideal_dram_bw_after_urgent_pixel_and_vm; dml_float_t pct_ideal_dram_bw_after_urgent_vm_only; dml_float_t pct_ideal_dram_bw_after_urgent_strobe; dml_float_t max_avg_sdp_bw_use_normal_percent; dml_float_t max_avg_fabric_bw_use_normal_percent; dml_float_t max_avg_dram_bw_use_normal_percent; dml_float_t max_avg_dram_bw_use_normal_strobe_percent; dml_uint_t round_trip_ping_latency_dcfclk_cycles; dml_uint_t urgent_out_of_order_return_per_channel_pixel_only_bytes; dml_uint_t urgent_out_of_order_return_per_channel_pixel_and_vm_bytes; dml_uint_t urgent_out_of_order_return_per_channel_vm_only_bytes; dml_uint_t num_chans; dml_uint_t return_bus_width_bytes; dml_uint_t dram_channel_width_bytes; dml_uint_t fabric_datapath_to_dcn_data_return_bytes; dml_uint_t hostvm_min_page_size_kbytes; dml_uint_t gpuvm_min_page_size_kbytes; dml_float_t phy_downspread_percent; dml_float_t dcn_downspread_percent; dml_float_t smn_latency_us; dml_uint_t mall_allocated_for_dcn_mbytes; dml_float_t dispclk_dppclk_vco_speed_mhz; dml_bool_t do_urgent_latency_adjustment; }; struct ip_params_st { dml_uint_t vblank_nom_default_us; dml_uint_t rob_buffer_size_kbytes; dml_uint_t config_return_buffer_size_in_kbytes; dml_uint_t config_return_buffer_segment_size_in_kbytes; dml_uint_t compressed_buffer_segment_size_in_kbytes; dml_uint_t meta_fifo_size_in_kentries; dml_uint_t zero_size_buffer_entries; dml_uint_t dpte_buffer_size_in_pte_reqs_luma; dml_uint_t dpte_buffer_size_in_pte_reqs_chroma; dml_uint_t dcc_meta_buffer_size_bytes; dml_bool_t gpuvm_enable; dml_bool_t hostvm_enable; dml_uint_t gpuvm_max_page_table_levels; dml_uint_t hostvm_max_page_table_levels; dml_uint_t pixel_chunk_size_kbytes; dml_uint_t alpha_pixel_chunk_size_kbytes; dml_uint_t min_pixel_chunk_size_bytes; dml_uint_t meta_chunk_size_kbytes; dml_uint_t min_meta_chunk_size_bytes; dml_uint_t writeback_chunk_size_kbytes; dml_uint_t line_buffer_size_bits; dml_uint_t max_line_buffer_lines; dml_uint_t writeback_interface_buffer_size_kbytes; dml_uint_t max_num_dpp; dml_uint_t max_num_otg; dml_uint_t max_num_wb; dml_uint_t max_dchub_pscl_bw_pix_per_clk; dml_uint_t max_pscl_lb_bw_pix_per_clk; dml_uint_t max_lb_vscl_bw_pix_per_clk; dml_uint_t max_vscl_hscl_bw_pix_per_clk; dml_float_t max_hscl_ratio; dml_float_t max_vscl_ratio; dml_uint_t max_hscl_taps; dml_uint_t max_vscl_taps; dml_uint_t num_dsc; dml_uint_t maximum_dsc_bits_per_component; dml_uint_t maximum_pixels_per_line_per_dsc_unit; dml_bool_t dsc422_native_support; dml_bool_t cursor_64bpp_support; dml_float_t dispclk_ramp_margin_percent; dml_uint_t dppclk_delay_subtotal; dml_uint_t dppclk_delay_scl; dml_uint_t dppclk_delay_scl_lb_only; dml_uint_t dppclk_delay_cnvc_formatter; dml_uint_t dppclk_delay_cnvc_cursor; dml_uint_t cursor_buffer_size; dml_uint_t cursor_chunk_size; dml_uint_t dispclk_delay_subtotal; dml_bool_t dynamic_metadata_vm_enabled; dml_uint_t max_inter_dcn_tile_repeaters; dml_uint_t max_num_hdmi_frl_outputs; dml_uint_t max_num_dp2p0_outputs; dml_uint_t max_num_dp2p0_streams; dml_bool_t dcc_supported; dml_bool_t ptoi_supported; dml_float_t writeback_max_hscl_ratio; dml_float_t writeback_max_vscl_ratio; dml_float_t writeback_min_hscl_ratio; dml_float_t writeback_min_vscl_ratio; dml_uint_t writeback_max_hscl_taps; dml_uint_t writeback_max_vscl_taps; dml_uint_t writeback_line_buffer_buffer_size; }; struct DmlPipe { dml_float_t Dppclk; dml_float_t Dispclk; dml_float_t PixelClock; dml_float_t DCFClkDeepSleep; dml_uint_t DPPPerSurface; dml_bool_t ScalerEnabled; enum dml_rotation_angle SourceScan; dml_uint_t ViewportHeight; dml_uint_t ViewportHeightChroma; dml_uint_t BlockWidth256BytesY; dml_uint_t BlockHeight256BytesY; dml_uint_t BlockWidth256BytesC; dml_uint_t BlockHeight256BytesC; dml_uint_t BlockWidthY; dml_uint_t BlockHeightY; dml_uint_t BlockWidthC; dml_uint_t BlockHeightC; dml_uint_t InterlaceEnable; dml_uint_t NumberOfCursors; dml_uint_t VBlank; dml_uint_t HTotal; dml_uint_t HActive; dml_bool_t DCCEnable; enum dml_odm_mode ODMMode; enum dml_source_format_class SourcePixelFormat; enum dml_swizzle_mode SurfaceTiling; dml_uint_t BytePerPixelY; dml_uint_t BytePerPixelC; dml_bool_t ProgressiveToInterlaceUnitInOPP; dml_float_t VRatio; dml_float_t VRatioChroma; dml_uint_t VTaps; dml_uint_t VTapsChroma; dml_uint_t PitchY; dml_uint_t DCCMetaPitchY; dml_uint_t PitchC; dml_uint_t DCCMetaPitchC; dml_bool_t ViewportStationary; dml_uint_t ViewportXStart; dml_uint_t ViewportYStart; dml_uint_t ViewportXStartC; dml_uint_t ViewportYStartC; dml_bool_t FORCE_ONE_ROW_FOR_FRAME; dml_uint_t SwathHeightY; dml_uint_t SwathHeightC; }; struct Watermarks { dml_float_t UrgentWatermark; dml_float_t WritebackUrgentWatermark; dml_float_t DRAMClockChangeWatermark; dml_float_t FCLKChangeWatermark; dml_float_t WritebackDRAMClockChangeWatermark; dml_float_t WritebackFCLKChangeWatermark; dml_float_t StutterExitWatermark; dml_float_t StutterEnterPlusExitWatermark; dml_float_t Z8StutterExitWatermark; dml_float_t Z8StutterEnterPlusExitWatermark; dml_float_t USRRetrainingWatermark; }; struct SOCParametersList { dml_float_t UrgentLatency; dml_float_t ExtraLatency; dml_float_t WritebackLatency; dml_float_t DRAMClockChangeLatency; dml_float_t FCLKChangeLatency; dml_float_t SRExitTime; dml_float_t SREnterPlusExitTime; dml_float_t SRExitZ8Time; dml_float_t SREnterPlusExitZ8Time; dml_float_t USRRetrainingLatency; dml_float_t SMNLatency; }; /// @brief Struct that represent Plane configration of a display cfg struct dml_plane_cfg_st { // // Pipe/Surface Parameters // dml_bool_t GPUVMEnable; ///