#ifndef __DML_TOP_DISPLAY_CFG_TYPES_H__
#define __DML_TOP_DISPLAY_CFG_TYPES_H__
#include "dml2_external_lib_deps.h"
#define DML2_MAX_PLANES 8
#define DML2_MAX_DCN_PIPES 8
#define DML2_MAX_MCACHES 8
#define DML2_MAX_WRITEBACK 3
enum dml2_swizzle_mode {
dml2_sw_linear,
dml2_sw_256b_2d,
dml2_sw_4kb_2d,
dml2_sw_64kb_2d,
dml2_sw_256kb_2d,
dml2_gfx11_sw_linear,
dml2_gfx11_sw_64kb_d,
dml2_gfx11_sw_64kb_d_t,
dml2_gfx11_sw_64kb_d_x,
dml2_gfx11_sw_64kb_r_x,
dml2_gfx11_sw_256kb_d_x,
dml2_gfx11_sw_256kb_r_x,
};
enum dml2_source_format_class {
dml2_444_8 = 0,
dml2_444_16 = 1,
dml2_444_32 = 2,
dml2_444_64 = 3,
dml2_420_8 = 4,
dml2_420_10 = 5,
dml2_420_12 = 6,
dml2_rgbe_alpha = 9,
dml2_rgbe = 10,
dml2_mono_8 = 11,
dml2_mono_16 = 12,
dml2_422_planar_8 = 13,
dml2_422_planar_10 = 14,
dml2_422_planar_12 = 15,
dml2_422_packed_8 = 16,
dml2_422_packed_10 = 17,
dml2_422_packed_12 = 18
};
enum dml2_sample_positioning {
dml2_interstitial = 0,
dml2_cosited = 1
};
enum dml2_rotation_angle {
dml2_rotation_0 = 0,
dml2_rotation_90 = 1,
dml2_rotation_180 = 2,
dml2_rotation_270 = 3
};
enum dml2_output_format_class {
dml2_444 = 0,
dml2_s422 = 1,
dml2_n422 = 2,
dml2_420 = 3
};
enum dml2_output_encoder_class {
dml2_dp = 0,
dml2_edp = 1,
dml2_dp2p0 = 2,
dml2_hdmi = 3,
dml2_hdmifrl = 4,
dml2_none = 5
};
enum dml2_output_link_dp_rate {
dml2_dp_rate_na = 0,
dml2_dp_rate_hbr = 1,
dml2_dp_rate_hbr2 = 2,
dml2_dp_rate_hbr3 = 3,
dml2_dp_rate_uhbr10 = 4,
dml2_dp_rate_uhbr13p5 = 5,
dml2_dp_rate_uhbr20 = 6
};
enum dml2_pstate_type {
dml2_pstate_type_uclk = 0,
dml2_pstate_type_fclk = 1,
dml2_pstate_type_ppt = 2,
dml2_pstate_type_temp_read = 3,
dml2_pstate_type_dummy_pstate = 4,
dml2_pstate_type_count = 5
};
enum dml2_uclk_pstate_change_strategy {
dml2_uclk_pstate_change_strategy_auto = 0,
dml2_uclk_pstate_change_strategy_force_vactive = 1,
dml2_uclk_pstate_change_strategy_force_vblank = 2,
dml2_uclk_pstate_change_strategy_force_drr = 3,
dml2_uclk_pstate_change_strategy_force_mall_svp = 4,
dml2_uclk_pstate_change_strategy_force_mall_full_frame = 5,
};
enum dml2_svp_mode_override {
dml2_svp_mode_override_auto = 0,
dml2_svp_mode_override_main_pipe = 1,
dml2_svp_mode_override_phantom_pipe = 2,
dml2_svp_mode_override_phantom_pipe_no_data_return = 3,
dml2_svp_mode_override_imall = 4
};
enum dml2_refresh_from_mall_mode_override {
dml2_refresh_from_mall_mode_override_auto = 0,
dml2_refresh_from_mall_mode_override_force_disable = 1,
dml2_refresh_from_mall_mode_override_force_enable = 2
};
enum dml2_odm_mode {
dml2_odm_mode_auto = 0,
dml2_odm_mode_bypass,
dml2_odm_mode_combine_2to1,
dml2_odm_mode_combine_3to1,
dml2_odm_mode_combine_4to1,
dml2_odm_mode_split_1to2,
dml2_odm_mode_mso_1to2,
dml2_odm_mode_mso_1to4
};
enum dml2_scaling_transform {
dml2_scaling_transform_explicit = 0,
dml2_scaling_transform_fullscreen,
dml2_scaling_transform_aspect_ratio,
dml2_scaling_transform_centered
};
enum dml2_dsc_enable_option {
dml2_dsc_disable = 0,
dml2_dsc_enable = 1,
dml2_dsc_enable_if_necessary = 2
};
enum dml2_tdlut_addressing_mode {
dml2_tdlut_sw_linear = 0,
dml2_tdlut_simple_linear = 1
};
enum dml2_tdlut_width_mode {
dml2_tdlut_width_17_cube = 0,
dml2_tdlut_width_33_cube = 1
};
enum dml2_twait_budgeting_setting {
dml2_twait_budgeting_setting_ignore = 0,
dml2_twait_budgeting_setting_if_needed,
dml2_twait_budgeting_setting_try,
};
struct dml2_get_cursor_dlg_reg{
unsigned int cursor_x_position;
unsigned int cursor_hotspot_x;
unsigned int cursor_primary_offset;
unsigned int cursor_secondary_offset;
bool cursor_stereo_en;
bool cursor_2x_magnify;
double hratio;
double pixel_rate_mhz;
double dlg_refclk_mhz;
};
struct dml2_surface_cfg {
enum dml2_swizzle_mode tiling;
struct {
unsigned long pitch;
unsigned long width;
unsigned long height;
} plane0;
struct {
unsigned long pitch;
unsigned long width;
unsigned long height;
} plane1;
struct {
bool enable;
struct {
unsigned long pitch;
} plane0;
struct {
unsigned long pitch;
} plane1;
struct {
double dcc_rate_plane0;
double dcc_rate_plane1;
double fraction_of_zero_size_request_plane0;
double fraction_of_zero_size_request_plane1;
} informative;
} dcc;
};
struct dml2_composition_cfg {
enum dml2_rotation_angle rotation_angle;
bool mirrored;
enum dml2_scaling_transform scaling_transform;
bool rect_out_height_spans_vactive;
struct {
bool stationary;
struct {
unsigned long width;
unsigned long height;
unsigned long x_start;
unsigned long y_start;
} plane0;
struct {
unsigned long width;
unsigned long height;
unsigned long x_start;
unsigned long y_start;
} plane1;
} viewport;
struct {
bool enabled;
bool easf_enabled;
bool isharp_enabled;
bool upsp_enabled;
enum dml2_sample_positioning upsp_sample_positioning;
unsigned int upsp_vtaps;
struct {
double h_ratio;
double v_ratio;
unsigned int h_taps;
unsigned int v_taps;
} plane0;
struct {
double h_ratio;
double v_ratio;
unsigned int h_taps;
unsigned int v_taps;
} plane1;
unsigned long rect_out_width;
} scaler_info;
};
struct dml2_timing_cfg {
unsigned long h_total;
unsigned long v_total;
unsigned long h_blank_end;
unsigned long v_blank_end;
unsigned long h_front_porch;
unsigned long v_front_porch;
unsigned long h_sync_width;
unsigned long pixel_clock_khz;
unsigned long h_active;
unsigned long v_active;
unsigned int bpc;
struct {
enum dml2_dsc_enable_option enable;
unsigned int dsc_compressed_bpp_x16;
struct {
unsigned int num_slices;
} overrides;
} dsc;
bool interlaced;
struct {
bool enabled;
unsigned long min_refresh_uhz;
unsigned int max_instant_vtotal_delta;
bool disallowed;
bool drr_active_variable;
bool drr_active_fixed;
} drr_config;
unsigned long vblank_nom;
};
struct dml2_link_output_cfg {
enum dml2_output_format_class output_format;
enum dml2_output_encoder_class output_encoder;
unsigned int output_dp_lane_count;
enum dml2_output_link_dp_rate output_dp_link_rate;
unsigned long audio_sample_rate;
unsigned long audio_sample_layout;
bool output_disabled;
bool validate_output;
};
struct dml2_writeback_info {
enum dml2_source_format_class pixel_format;
unsigned long input_width;
unsigned long input_height;
unsigned long output_width;
unsigned long output_height;
unsigned long v_taps;
unsigned long h_taps;
unsigned long v_taps_chroma;
unsigned long h_taps_chroma;
double h_ratio;
double v_ratio;
};
struct dml2_writeback_cfg {
unsigned int active_writebacks_per_stream;
struct dml2_writeback_info writeback_stream[DML2_MAX_WRITEBACK];
};
struct dml2_plane_parameters {
unsigned int stream_index;
enum dml2_source_format_class pixel_format;
struct dml2_surface_cfg surface;
struct dml2_composition_cfg composition;
struct {
bool enable;
unsigned long lines_before_active_required;
unsigned long transmitted_bytes;
} dynamic_meta_data;
struct {
unsigned int num_cursors;
unsigned long cursor_width;
unsigned long cursor_bpp;
} cursor;
struct {
bool setup_for_tdlut;
enum dml2_tdlut_addressing_mode tdlut_addressing_mode;
enum dml2_tdlut_width_mode tdlut_width_mode;
bool tdlut_mpc_width_flag;
} tdlut;
bool immediate_flip;
struct {
enum dml2_uclk_pstate_change_strategy uclk_pstate_change_strategy;
enum dml2_refresh_from_mall_mode_override refresh_from_mall;
unsigned int det_size_override_kb;
unsigned int mpcc_combine_factor;
long reserved_vblank_time_ns;
unsigned int max_vactive_det_fill_delay_us[dml2_pstate_type_count];
unsigned int gpuvm_min_page_size_kbytes;
unsigned int hostvm_min_page_size_kbytes;
enum dml2_svp_mode_override legacy_svp_config;
bool use_max_lsw;
struct {
bool force_one_row_for_frame;
struct {
bool enable;
bool value;
} force_pte_buffer_mode;
double dppclk_mhz;
} hw;
} overrides;
};
struct dml2_stream_parameters {
struct dml2_timing_cfg timing;
struct dml2_link_output_cfg output;
struct dml2_writeback_cfg writeback;
struct {
enum dml2_odm_mode odm_mode;
bool disable_dynamic_odm;
bool disable_subvp;
int minimum_vblank_idle_requirement_us;
struct {
struct {
enum dml2_twait_budgeting_setting uclk_pstate;
enum dml2_twait_budgeting_setting fclk_pstate;
enum dml2_twait_budgeting_setting stutter_enter_exit;
} twait_budgeting;
} hw;
} overrides;
};
struct dml2_display_cfg {
bool gpuvm_enable;
bool ffbm_enable;
bool hostvm_enable;
bool minimize_det_reallocation;
unsigned int gpuvm_max_page_table_levels;
unsigned int hostvm_max_non_cached_page_table_levels;
struct dml2_plane_parameters plane_descriptors[DML2_MAX_PLANES];
struct dml2_stream_parameters stream_descriptors[DML2_MAX_PLANES];
unsigned int num_planes;
unsigned int num_streams;
struct {
struct {
struct {
bool enable;
bool value;
} force_unbounded_requesting;
struct {
bool enable;
bool value;
} force_nom_det_size_kbytes;
bool mode_support_check_disable;
bool mcache_admissibility_check_disable;
bool surface_viewport_size_check_disable;
double dlg_ref_clk_mhz;
double dispclk_mhz;
double dcfclk_mhz;
bool optimize_tdlut_scheduling;
} hw;
struct {
bool uclk_pstate_change_disable;
bool fclk_pstate_change_disable;
bool g6_temp_read_pstate_disable;
bool g7_ppt_pstate_disable;
} power_management;
bool enhanced_prefetch_schedule_acceleration;
bool dcc_programming_assumes_scan_direction_unknown;
bool synchronize_timings;
bool synchronize_ddr_displays_for_uclk_pstate_change;
bool max_outstanding_when_urgent_expected_disable;
bool enable_subvp_implicit_pmo;
bool all_streams_blanked;
} overrides;
};
struct dml2_pipe_configuration_descriptor {
struct {
unsigned int viewport_x_start;
unsigned int viewport_width;
} plane0;
struct {
unsigned int viewport_x_start;
unsigned int viewport_width;
} plane1;
bool plane1_enabled;
bool imall_enabled;
};
struct dml2_plane_mcache_configuration_descriptor {
const struct dml2_plane_parameters *plane_descriptor;
const struct dml2_mcache_surface_allocation *mcache_allocation;
struct dml2_pipe_configuration_descriptor pipe_configurations[DML2_MAX_DCN_PIPES];
char num_pipes;
};
#endif