@@ -66,6 +66,73 @@ struct dml2_core_ip_params core_dcn4_ip_caps_base = {
66
66
.cursor_64bpp_support = true,
67
67
.dynamic_metadata_vm_enabled = false,
68
68
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
+
69
136
.max_num_hdmi_frl_outputs = 1 ,
70
137
.max_num_dp2p0_outputs = 4 ,
71
138
.max_num_dp2p0_streams = 4 ,
@@ -76,6 +143,16 @@ struct dml2_core_ip_params core_dcn4_ip_caps_base = {
76
143
.subvp_fw_processing_delay_us = 15 ,
77
144
.subvp_pstate_allow_width_us = 20 ,
78
145
.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 ,
79
156
};
80
157
81
158
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
85
162
ip_caps -> num_dsc = ip_params -> num_dsc ;
86
163
ip_caps -> max_num_dp2p0_streams = ip_params -> max_num_dp2p0_streams ;
87
164
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 ;
88
166
ip_caps -> rob_buffer_size_kbytes = ip_params -> rob_buffer_size_kbytes ;
89
167
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 ;
90
169
ip_caps -> meta_fifo_size_in_kentries = ip_params -> meta_fifo_size_in_kentries ;
91
170
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 ;
92
173
93
174
// FIXME_STAGE2: cleanup after adding all dv override to ip_caps
94
175
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,
104
185
ip_params -> num_dsc = ip_caps -> num_dsc ;
105
186
ip_params -> max_num_dp2p0_streams = ip_caps -> max_num_dp2p0_streams ;
106
187
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 ;
107
189
ip_params -> rob_buffer_size_kbytes = ip_caps -> rob_buffer_size_kbytes ;
108
190
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 ;
109
192
ip_params -> meta_fifo_size_in_kentries = ip_caps -> meta_fifo_size_in_kentries ;
110
193
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 ;
111
196
}
112
197
113
198
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
343
428
344
429
programming -> stream_programming [main_plane -> stream_index ].uclk_pstate_method = programming -> plane_programming [plane_index ].uclk_pstate_support_method ;
345
430
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 );
354
437
355
438
stream_already_populated_mask |= (0x1 << main_plane -> stream_index );
356
439
}
@@ -394,7 +477,7 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
394
477
395
478
bool result ;
396
479
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 ;
398
481
399
482
expand_implict_subvp (in_out -> display_cfg , & l -> svp_expanded_display_cfg , & core -> scratch );
400
483
@@ -448,6 +531,10 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
448
531
449
532
stream_bitmask = 0 ;
450
533
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
+
451
538
switch (l -> mode_support_ex_params .out_evaluation_info -> ODMMode [i ]) {
452
539
case dml2_odm_mode_bypass :
453
540
odm_count = 1 ;
@@ -467,7 +554,11 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
467
554
break ;
468
555
case dml2_odm_mode_split_1to2 :
469
556
case dml2_odm_mode_mso_1to2 :
557
+ num_odm_output_segments = 2 ;
558
+ break ;
470
559
case dml2_odm_mode_mso_1to4 :
560
+ num_odm_output_segments = 4 ;
561
+ break ;
471
562
case dml2_odm_mode_auto :
472
563
default :
473
564
odm_count = 1 ;
@@ -486,6 +577,7 @@ bool core_dcn4_mode_support(struct dml2_core_mode_support_in_out *in_out)
486
577
487
578
if (!((stream_bitmask >> stream_index ) & 0x1 )) {
488
579
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 ;
489
581
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 ];
490
582
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 ];
491
583
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