Skip to content

Commit a00e857

Browse files
Rodrigo Siqueiraalexdeucher
authored andcommitted
drm/amd/display: Update DML2.1 generated code
Most of the DML code is generated, and it is necessary to update some parts of it from time to time. This commit brings the latest generated code for DML 2.1. Signed-off-by: Rodrigo Siqueira <[email protected]> Acked-by: Harry Wentland <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 91b586c commit a00e857

25 files changed

+2069
-1179
lines changed

drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ void dml21_apply_soc_bb_overrides(struct dml2_initialize_instance_in_out *dml_in
338338
}
339339

340340
static void populate_dml21_timing_config_from_stream_state(struct dml2_timing_cfg *timing,
341-
struct dc_stream_state *stream)
341+
struct dc_stream_state *stream,
342+
struct dml2_context *dml_ctx)
342343
{
343344
unsigned int hblank_start, vblank_start;
344345

@@ -372,7 +373,12 @@ static void populate_dml21_timing_config_from_stream_state(struct dml2_timing_cf
372373
timing->drr_config.drr_active_variable = stream->vrr_active_variable;
373374
timing->drr_config.drr_active_fixed = stream->vrr_active_fixed;
374375
timing->drr_config.disallowed = !stream->allow_freesync;
375-
//timing->drr_config.max_instant_vtotal_delta = timing-><drr no flicker delta lum>;
376+
377+
if (dml_ctx->config.callbacks.get_max_flickerless_instant_vtotal_increase &&
378+
stream->ctx->dc->config.enable_fpo_flicker_detection == 1)
379+
timing->drr_config.max_instant_vtotal_delta = dml_ctx->config.callbacks.get_max_flickerless_instant_vtotal_increase(stream, false);
380+
else
381+
timing->drr_config.max_instant_vtotal_delta = 0;
376382

377383
if (stream->timing.flags.DSC) {
378384
timing->dsc.enable = dml2_dsc_enable;
@@ -505,7 +511,8 @@ static void populate_dml21_stream_overrides_from_stream_state(
505511
stream_desc->overrides.odm_mode = dml2_odm_mode_auto;
506512
break;
507513
}
508-
if (!stream->ctx->dc->debug.enable_single_display_2to1_odm_policy)
514+
if (!stream->ctx->dc->debug.enable_single_display_2to1_odm_policy ||
515+
stream->debug.force_odm_combine_segments > 0)
509516
stream_desc->overrides.disable_dynamic_odm = true;
510517
stream_desc->overrides.disable_subvp = stream->ctx->dc->debug.force_disable_subvp;
511518
}
@@ -699,7 +706,7 @@ static const struct scaler_data *get_scaler_data_for_plane(
699706
temp_pipe->stream = pipe->stream;
700707
temp_pipe->plane_state = pipe->plane_state;
701708
temp_pipe->plane_res.scl_data.taps = pipe->plane_res.scl_data.taps;
702-
709+
temp_pipe->stream_res = pipe->stream_res;
703710
dml_ctx->config.callbacks.build_scaling_params(temp_pipe);
704711
break;
705712
}
@@ -956,7 +963,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct dc *in_dc, struct dc_s
956963
disp_cfg_stream_location = dml_dispcfg->num_streams++;
957964

958965
ASSERT(disp_cfg_stream_location >= 0 && disp_cfg_stream_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
959-
populate_dml21_timing_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].timing, context->streams[stream_index]);
966+
populate_dml21_timing_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].timing, context->streams[stream_index], dml_ctx);
960967
populate_dml21_output_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].output, context->streams[stream_index], &context->res_ctx.pipe_ctx[stream_index]);
961968
populate_dml21_stream_overrides_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location], context->streams[stream_index]);
962969

@@ -1007,6 +1014,8 @@ void dml21_copy_clocks_to_dc_state(struct dml2_context *in_ctx, struct dc_state
10071014
context->bw_ctx.bw.dcn.clk.dcfclk_khz = in_ctx->v21.mode_programming.programming->min_clocks.dcn4.active.dcfclk_khz;
10081015
context->bw_ctx.bw.dcn.clk.dramclk_khz = in_ctx->v21.mode_programming.programming->min_clocks.dcn4.active.uclk_khz;
10091016
context->bw_ctx.bw.dcn.clk.fclk_khz = in_ctx->v21.mode_programming.programming->min_clocks.dcn4.active.fclk_khz;
1017+
context->bw_ctx.bw.dcn.clk.idle_dramclk_khz = in_ctx->v21.mode_programming.programming->min_clocks.dcn4.idle.uclk_khz;
1018+
context->bw_ctx.bw.dcn.clk.idle_fclk_khz = in_ctx->v21.mode_programming.programming->min_clocks.dcn4.idle.fclk_khz;
10101019
context->bw_ctx.bw.dcn.clk.dcfclk_deep_sleep_khz = in_ctx->v21.mode_programming.programming->min_clocks.dcn4.deepsleep_dcfclk_khz;
10111020
context->bw_ctx.bw.dcn.clk.fclk_p_state_change_support = in_ctx->v21.mode_programming.programming->fclk_pstate_supported;
10121021
context->bw_ctx.bw.dcn.clk.p_state_change_support = in_ctx->v21.mode_programming.programming->uclk_pstate_supported;

drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static void dml21_apply_debug_options(const struct dc *in_dc, struct dml2_contex
5959
pmo_options->disable_svp = ((in_dc->debug.dml21_disable_pstate_method_mask >> 2) & 1) ||
6060
in_dc->debug.force_disable_subvp ||
6161
disable_fams2;
62-
pmo_options->disable_drr_fixed = ((in_dc->debug.dml21_disable_pstate_method_mask >> 3) & 1) ||
62+
pmo_options->disable_drr_clamped = ((in_dc->debug.dml21_disable_pstate_method_mask >> 3) & 1) ||
6363
disable_fams2;
6464
pmo_options->disable_drr_var = ((in_dc->debug.dml21_disable_pstate_method_mask >> 4) & 1) ||
6565
disable_fams2;

drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/bounding_boxes/dcn4_soc_bb.h

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ static const struct dml2_soc_bb dml2_socbb_dcn401 = {
120120
.num_clk_values = 2,
121121
},
122122
.phyclk_d18 = {
123-
.clk_values_khz = {667000, 667000},
123+
.clk_values_khz = {625000, 625000},
124124
.num_clk_values = 2,
125125
},
126126
.phyclk_d32 = {
127-
.clk_values_khz = {2000000, 2000000},
127+
.clk_values_khz = {625000, 625000},
128128
.num_clk_values = 2,
129129
},
130130
.dram_config = {
@@ -289,17 +289,29 @@ static const struct dml2_soc_bb dml2_socbb_dcn401 = {
289289
.dram_clk_change_blackout_us = 400,
290290
.fclk_change_blackout_us = 0,
291291
.g7_ppt_blackout_us = 0,
292-
.stutter_enter_plus_exit_latency_us = 21,
293-
.stutter_exit_latency_us = 16,
292+
.stutter_enter_plus_exit_latency_us = 54,
293+
.stutter_exit_latency_us = 41,
294294
.z8_stutter_enter_plus_exit_latency_us = 0,
295295
.z8_stutter_exit_latency_us = 0,
296+
/*
297+
.g6_temp_read_blackout_us = {
298+
23.00,
299+
10.00,
300+
10.00,
301+
8.00,
302+
8.00,
303+
5.00,
304+
5.00,
305+
5.00,
306+
},
307+
*/
296308
},
297309

298310
.vmin_limit = {
299311
.dispclk_khz = 600 * 1000,
300312
},
301313

302-
.dprefclk_mhz = 700,
314+
.dprefclk_mhz = 720,
303315
.xtalclk_mhz = 100,
304316
.pcie_refclk_mhz = 100,
305317
.dchub_refclk_mhz = 50,
@@ -309,8 +321,8 @@ static const struct dml2_soc_bb dml2_socbb_dcn401 = {
309321
.return_bus_width_bytes = 64,
310322
.hostvm_min_page_size_kbytes = 0,
311323
.gpuvm_min_page_size_kbytes = 256,
312-
.phy_downspread_percent = 0,
313-
.dcn_downspread_percent = 0,
324+
.phy_downspread_percent = 0.38,
325+
.dcn_downspread_percent = 0.38,
314326
.dispclk_dppclk_vco_speed_mhz = 4500,
315327
.do_urgent_latency_adjustment = 0,
316328
.mem_word_bytes = 32,
@@ -329,6 +341,7 @@ static const struct dml2_ip_capabilities dml2_dcn401_max_ip_caps = {
329341
.max_num_dp2p0_outputs = 4,
330342
.rob_buffer_size_kbytes = 192,
331343
.config_return_buffer_size_in_kbytes = 1344,
344+
.config_return_buffer_segment_size_in_kbytes = 64,
332345
.meta_fifo_size_in_kentries = 22,
333346
.compressed_buffer_segment_size_in_kbytes = 64,
334347
.subvp_drr_scheduling_margin_us = 100,

drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_display_cfg_types.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,11 @@ struct dml2_plane_parameters {
380380
enum dml2_refresh_from_mall_mode_override refresh_from_mall;
381381
unsigned int det_size_override_kb;
382382
unsigned int mpcc_combine_factor;
383-
long reserved_vblank_time_ns; // 0 = no override, -ve = no reserved time, +ve = explicit reserved time
383+
384+
// reserved_vblank_time_ns is the minimum time to reserve in vblank for Twait
385+
// The actual reserved vblank time used for the corresponding stream in mode_programming would be at least as much as this per-plane override.
386+
long reserved_vblank_time_ns;
387+
unsigned int max_vactive_det_fill_delay_us; // 0 = no reserved time, +ve = explicit max delay
384388
unsigned int gpuvm_min_page_size_kbytes;
385389

386390
enum dml2_svp_mode_override legacy_svp_config; //TODO remove in favor of svp_config
@@ -407,6 +411,7 @@ struct dml2_stream_parameters {
407411
enum dml2_odm_mode odm_mode;
408412
bool disable_dynamic_odm;
409413
bool disable_subvp;
414+
bool disable_fams2_drr;
410415
int minimum_vblank_idle_requirement_us;
411416
bool minimize_active_latency_hiding;
412417

@@ -429,7 +434,7 @@ struct dml2_display_cfg {
429434
bool minimize_det_reallocation;
430435

431436
unsigned int gpuvm_max_page_table_levels;
432-
unsigned int hostvm_max_page_table_levels;
437+
unsigned int hostvm_max_non_cached_page_table_levels;
433438

434439
struct dml2_plane_parameters plane_descriptors[DML2_MAX_PLANES];
435440
struct dml2_stream_parameters stream_descriptors[DML2_MAX_PLANES];

drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_soc_parameter_types.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ struct dml2_ip_capabilities {
169169
unsigned int max_num_dp2p0_outputs;
170170
unsigned int rob_buffer_size_kbytes;
171171
unsigned int config_return_buffer_size_in_kbytes;
172+
unsigned int config_return_buffer_segment_size_in_kbytes;
172173
unsigned int meta_fifo_size_in_kentries;
173174
unsigned int compressed_buffer_segment_size_in_kbytes;
175+
unsigned int max_flip_time_us;
176+
unsigned int hostvm_mode;
174177
unsigned int subvp_drr_scheduling_margin_us;
175178
unsigned int subvp_prefetch_end_to_mall_start_us;
176179
unsigned int subvp_fw_processing_delay;

drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_types.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,10 @@ struct dml2_pmo_options {
7272
bool disable_vblank;
7373
bool disable_svp;
7474
bool disable_drr_var;
75-
bool disable_drr_fixed;
75+
bool disable_drr_clamped;
7676
bool disable_drr_var_when_var_active;
7777
bool disable_fams2;
78+
bool disable_vactive_det_fill_bw_pad; /* dml2_project_dcn4x_stage2_auto_drr_svp and above only */
7879
bool disable_dyn_odm;
7980
bool disable_dyn_odm_for_multi_stream;
8081
bool disable_dyn_odm_for_stream_with_svp;
@@ -331,7 +332,6 @@ struct dml2_mode_support_info {
331332
bool DTBCLKRequiredMoreThanSupported;
332333
bool LinkCapacitySupport;
333334
bool ROBSupport;
334-
bool ROBUrgencyAvoidance;
335335
bool OutstandingRequestsSupport;
336336
bool OutstandingRequestsUrgencyAvoidance;
337337
bool PTEBufferSizeNotExceeded;
@@ -659,6 +659,7 @@ struct dml2_display_cfg_programming {
659659
double DSCDelay[DML2_MAX_PLANES];
660660
double MaxActiveDRAMClockChangeLatencySupported[DML2_MAX_PLANES];
661661
unsigned int PrefetchMode[DML2_MAX_PLANES]; // LEGACY_ONLY
662+
bool ROBUrgencyAvoidance;
662663
} misc;
663664

664665
struct dml2_mode_support_info mode_support_info;
@@ -715,4 +716,5 @@ struct dml2_unit_test_in_out {
715716
struct dml2_instance *dml2_instance;
716717
};
717718

719+
718720
#endif

drivers/gpu/drm/amd/display/dc/dml2/dml21/src/dml2_core/dml2_core_dcn4.c

Lines changed: 101 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,73 @@ struct dml2_core_ip_params core_dcn4_ip_caps_base = {
6666
.cursor_64bpp_support = true,
6767
.dynamic_metadata_vm_enabled = false,
6868

69+
.max_num_dp2p0_outputs = 4,
70+
.max_num_dp2p0_streams = 4,
71+
.imall_supported = 1,
72+
.max_flip_time_us = 80,
73+
.words_per_channel = 16,
74+
75+
.subvp_fw_processing_delay_us = 15,
76+
.subvp_pstate_allow_width_us = 20,
77+
.subvp_swath_height_margin_lines = 16,
78+
};
79+
80+
struct dml2_core_ip_params core_dcn4sw_ip_caps_base = {
81+
.vblank_nom_default_us = 668,
82+
.remote_iommu_outstanding_translations = 256,
83+
.rob_buffer_size_kbytes = 192,
84+
.config_return_buffer_size_in_kbytes = 1280,
85+
.config_return_buffer_segment_size_in_kbytes = 64,
86+
.compressed_buffer_segment_size_in_kbytes = 64,
87+
.dpte_buffer_size_in_pte_reqs_luma = 68,
88+
.dpte_buffer_size_in_pte_reqs_chroma = 36,
89+
.pixel_chunk_size_kbytes = 8,
90+
.alpha_pixel_chunk_size_kbytes = 4,
91+
.min_pixel_chunk_size_bytes = 1024,
92+
.writeback_chunk_size_kbytes = 8,
93+
.line_buffer_size_bits = 1171920,
94+
.max_line_buffer_lines = 32,
95+
.writeback_interface_buffer_size_kbytes = 90,
96+
97+
//Number of pipes after DCN Pipe harvesting
98+
.max_num_dpp = 4,
99+
.max_num_otg = 4,
100+
.max_num_wb = 1,
101+
.max_dchub_pscl_bw_pix_per_clk = 4,
102+
.max_pscl_lb_bw_pix_per_clk = 2,
103+
.max_lb_vscl_bw_pix_per_clk = 4,
104+
.max_vscl_hscl_bw_pix_per_clk = 4,
105+
.max_hscl_ratio = 6,
106+
.max_vscl_ratio = 6,
107+
.max_hscl_taps = 8,
108+
.max_vscl_taps = 8,
109+
.dispclk_ramp_margin_percent = 1,
110+
.dppclk_delay_subtotal = 47,
111+
.dppclk_delay_scl = 50,
112+
.dppclk_delay_scl_lb_only = 16,
113+
.dppclk_delay_cnvc_formatter = 28,
114+
.dppclk_delay_cnvc_cursor = 6,
115+
.cursor_buffer_size = 24,
116+
.cursor_chunk_size = 2,
117+
.dispclk_delay_subtotal = 125,
118+
.max_inter_dcn_tile_repeaters = 8,
119+
.writeback_max_hscl_ratio = 1,
120+
.writeback_max_vscl_ratio = 1,
121+
.writeback_min_hscl_ratio = 1,
122+
.writeback_min_vscl_ratio = 1,
123+
.writeback_max_hscl_taps = 1,
124+
.writeback_max_vscl_taps = 1,
125+
.writeback_line_buffer_buffer_size = 0,
126+
.num_dsc = 4,
127+
.maximum_dsc_bits_per_component = 12,
128+
.maximum_pixels_per_line_per_dsc_unit = 5760,
129+
.dsc422_native_support = true,
130+
.dcc_supported = true,
131+
.ptoi_supported = false,
132+
133+
.cursor_64bpp_support = true,
134+
.dynamic_metadata_vm_enabled = false,
135+
69136
.max_num_hdmi_frl_outputs = 1,
70137
.max_num_dp2p0_outputs = 4,
71138
.max_num_dp2p0_streams = 4,
@@ -76,6 +143,16 @@ struct dml2_core_ip_params core_dcn4_ip_caps_base = {
76143
.subvp_fw_processing_delay_us = 15,
77144
.subvp_pstate_allow_width_us = 20,
78145
.subvp_swath_height_margin_lines = 16,
146+
147+
.dcn_mrq_present = 1,
148+
.zero_size_buffer_entries = 512,
149+
.compbuf_reserved_space_zs = 64,
150+
.dcc_meta_buffer_size_bytes = 6272,
151+
.meta_chunk_size_kbytes = 2,
152+
.min_meta_chunk_size_bytes = 256,
153+
154+
.dchub_arb_to_ret_delay = 102,
155+
.hostvm_mode = 1,
79156
};
80157

81158
static void patch_ip_caps_with_explicit_ip_params(struct dml2_ip_capabilities *ip_caps, const struct dml2_core_ip_params *ip_params)
@@ -85,10 +162,14 @@ static void patch_ip_caps_with_explicit_ip_params(struct dml2_ip_capabilities *i
85162
ip_caps->num_dsc = ip_params->num_dsc;
86163
ip_caps->max_num_dp2p0_streams = ip_params->max_num_dp2p0_streams;
87164
ip_caps->max_num_dp2p0_outputs = ip_params->max_num_dp2p0_outputs;
165+
ip_caps->max_num_hdmi_frl_outputs = ip_params->max_num_hdmi_frl_outputs;
88166
ip_caps->rob_buffer_size_kbytes = ip_params->rob_buffer_size_kbytes;
89167
ip_caps->config_return_buffer_size_in_kbytes = ip_params->config_return_buffer_size_in_kbytes;
168+
ip_caps->config_return_buffer_segment_size_in_kbytes = ip_params->config_return_buffer_segment_size_in_kbytes;
90169
ip_caps->meta_fifo_size_in_kentries = ip_params->meta_fifo_size_in_kentries;
91170
ip_caps->compressed_buffer_segment_size_in_kbytes = ip_params->compressed_buffer_segment_size_in_kbytes;
171+
ip_caps->max_flip_time_us = ip_params->max_flip_time_us;
172+
ip_caps->hostvm_mode = ip_params->hostvm_mode;
92173

93174
// FIXME_STAGE2: cleanup after adding all dv override to ip_caps
94175
ip_caps->subvp_drr_scheduling_margin_us = 100;
@@ -104,10 +185,14 @@ static void patch_ip_params_with_ip_caps(struct dml2_core_ip_params *ip_params,
104185
ip_params->num_dsc = ip_caps->num_dsc;
105186
ip_params->max_num_dp2p0_streams = ip_caps->max_num_dp2p0_streams;
106187
ip_params->max_num_dp2p0_outputs = ip_caps->max_num_dp2p0_outputs;
188+
ip_params->max_num_hdmi_frl_outputs = ip_caps->max_num_hdmi_frl_outputs;
107189
ip_params->rob_buffer_size_kbytes = ip_caps->rob_buffer_size_kbytes;
108190
ip_params->config_return_buffer_size_in_kbytes = ip_caps->config_return_buffer_size_in_kbytes;
191+
ip_params->config_return_buffer_segment_size_in_kbytes = ip_caps->config_return_buffer_segment_size_in_kbytes;
109192
ip_params->meta_fifo_size_in_kentries = ip_caps->meta_fifo_size_in_kentries;
110193
ip_params->compressed_buffer_segment_size_in_kbytes = ip_caps->compressed_buffer_segment_size_in_kbytes;
194+
ip_params->max_flip_time_us = ip_caps->max_flip_time_us;
195+
ip_params->hostvm_mode = ip_caps->hostvm_mode;
111196
}
112197

113198
bool core_dcn4_initialize(struct dml2_core_initialize_in_out *in_out)
@@ -343,14 +428,12 @@ static void pack_mode_programming_params_with_implicit_subvp(struct dml2_core_in
343428

344429
programming->stream_programming[main_plane->stream_index].uclk_pstate_method = programming->plane_programming[plane_index].uclk_pstate_support_method;
345430

346-
// If FAMS2 is required, populate stream params
347-
if (programming->fams2_required) {
348-
dml2_core_calcs_get_stream_fams2_programming(&core->clean_me_up.mode_lib,
349-
display_cfg,
350-
&programming->stream_programming[main_plane->stream_index].fams2_params,
351-
programming->stream_programming[main_plane->stream_index].uclk_pstate_method,
352-
plane_index);
353-
}
431+
/* unconditionally populate fams2 params */
432+
dml2_core_calcs_get_stream_fams2_programming(&core->clean_me_up.mode_lib,
433+
display_cfg,
434+
&programming->stream_programming[main_plane->stream_index].fams2_params,
435+
programming->stream_programming[main_plane->stream_index].uclk_pstate_method,
436+
plane_index);
354437

355438
stream_already_populated_mask |= (0x1 << main_plane->stream_index);
356439
}
@@ -394,7 +477,7 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
394477

395478
bool result;
396479
unsigned int i, stream_index, stream_bitmask;
397-
int unsigned odm_count, dpp_count;
480+
int unsigned odm_count, num_odm_output_segments, dpp_count;
398481

399482
expand_implict_subvp(in_out->display_cfg, &l->svp_expanded_display_cfg, &core->scratch);
400483

@@ -448,6 +531,10 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
448531

449532
stream_bitmask = 0;
450533
for (i = 0; i < l->svp_expanded_display_cfg.num_planes; i++) {
534+
odm_count = 1;
535+
dpp_count = l->mode_support_ex_params.out_evaluation_info->DPPPerSurface[i];
536+
num_odm_output_segments = 1;
537+
451538
switch (l->mode_support_ex_params.out_evaluation_info->ODMMode[i]) {
452539
case dml2_odm_mode_bypass:
453540
odm_count = 1;
@@ -467,7 +554,11 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
467554
break;
468555
case dml2_odm_mode_split_1to2:
469556
case dml2_odm_mode_mso_1to2:
557+
num_odm_output_segments = 2;
558+
break;
470559
case dml2_odm_mode_mso_1to4:
560+
num_odm_output_segments = 4;
561+
break;
471562
case dml2_odm_mode_auto:
472563
default:
473564
odm_count = 1;
@@ -486,6 +577,7 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
486577

487578
if (!((stream_bitmask >> stream_index) & 0x1)) {
488579
in_out->mode_support_result.cfg_support_info.stream_support_info[stream_index].odms_used = odm_count;
580+
in_out->mode_support_result.cfg_support_info.stream_support_info[stream_index].num_odm_output_segments = num_odm_output_segments;
489581
in_out->mode_support_result.cfg_support_info.stream_support_info[stream_index].dsc_enable = l->mode_support_ex_params.out_evaluation_info->DSCEnabled[i];
490582
in_out->mode_support_result.cfg_support_info.stream_support_info[stream_index].num_dsc_slices = l->mode_support_ex_params.out_evaluation_info->NumberOfDSCSlices[i];
491583
dml2_core_calcs_get_stream_support_info(&l->svp_expanded_display_cfg, &core->clean_me_up.mode_lib, &in_out->mode_support_result.cfg_support_info.stream_support_info[stream_index], i);

0 commit comments

Comments
 (0)