.. | .. |
---|
29 | 29 | #include "dc_types.h" |
---|
30 | 30 | #include "grph_object_defs.h" |
---|
31 | 31 | #include "logger_types.h" |
---|
| 32 | +#if defined(CONFIG_DRM_AMD_DC_HDCP) |
---|
| 33 | +#include "hdcp_types.h" |
---|
| 34 | +#endif |
---|
32 | 35 | #include "gpio_types.h" |
---|
33 | 36 | #include "link_service_types.h" |
---|
34 | 37 | #include "grph_object_ctrl_defs.h" |
---|
.. | .. |
---|
36 | 39 | |
---|
37 | 40 | #include "inc/hw_sequencer.h" |
---|
38 | 41 | #include "inc/compressor.h" |
---|
| 42 | +#include "inc/hw/dmcu.h" |
---|
39 | 43 | #include "dml/display_mode_lib.h" |
---|
40 | 44 | |
---|
41 | | -#define DC_VER "3.1.59" |
---|
| 45 | +#define DC_VER "3.2.104" |
---|
42 | 46 | |
---|
43 | 47 | #define MAX_SURFACES 3 |
---|
| 48 | +#define MAX_PLANES 6 |
---|
44 | 49 | #define MAX_STREAMS 6 |
---|
45 | 50 | #define MAX_SINKS_PER_LINK 4 |
---|
46 | | - |
---|
47 | 51 | |
---|
48 | 52 | /******************************************************************************* |
---|
49 | 53 | * Display Core Interfaces |
---|
50 | 54 | ******************************************************************************/ |
---|
51 | | -struct dmcu_version { |
---|
52 | | - unsigned int date; |
---|
53 | | - unsigned int month; |
---|
54 | | - unsigned int year; |
---|
55 | | - unsigned int interface_version; |
---|
56 | | -}; |
---|
57 | | - |
---|
58 | 55 | struct dc_versions { |
---|
59 | 56 | const char *dc_ver; |
---|
60 | 57 | struct dmcu_version dmcu_version; |
---|
| 58 | +}; |
---|
| 59 | + |
---|
| 60 | +enum dp_protocol_version { |
---|
| 61 | + DP_VERSION_1_4, |
---|
| 62 | +}; |
---|
| 63 | + |
---|
| 64 | +enum dc_plane_type { |
---|
| 65 | + DC_PLANE_TYPE_INVALID, |
---|
| 66 | + DC_PLANE_TYPE_DCE_RGB, |
---|
| 67 | + DC_PLANE_TYPE_DCE_UNDERLAY, |
---|
| 68 | + DC_PLANE_TYPE_DCN_UNIVERSAL, |
---|
| 69 | +}; |
---|
| 70 | + |
---|
| 71 | +struct dc_plane_cap { |
---|
| 72 | + enum dc_plane_type type; |
---|
| 73 | + uint32_t blends_with_above : 1; |
---|
| 74 | + uint32_t blends_with_below : 1; |
---|
| 75 | + uint32_t per_pixel_alpha : 1; |
---|
| 76 | + struct { |
---|
| 77 | + uint32_t argb8888 : 1; |
---|
| 78 | + uint32_t nv12 : 1; |
---|
| 79 | + uint32_t fp16 : 1; |
---|
| 80 | + uint32_t p010 : 1; |
---|
| 81 | + uint32_t ayuv : 1; |
---|
| 82 | + } pixel_format_support; |
---|
| 83 | + // max upscaling factor x1000 |
---|
| 84 | + // upscaling factors are always >= 1 |
---|
| 85 | + // for example, 1080p -> 8K is 4.0, or 4000 raw value |
---|
| 86 | + struct { |
---|
| 87 | + uint32_t argb8888; |
---|
| 88 | + uint32_t nv12; |
---|
| 89 | + uint32_t fp16; |
---|
| 90 | + } max_upscale_factor; |
---|
| 91 | + // max downscale factor x1000 |
---|
| 92 | + // downscale factors are always <= 1 |
---|
| 93 | + // for example, 8K -> 1080p is 0.25, or 250 raw value |
---|
| 94 | + struct { |
---|
| 95 | + uint32_t argb8888; |
---|
| 96 | + uint32_t nv12; |
---|
| 97 | + uint32_t fp16; |
---|
| 98 | + } max_downscale_factor; |
---|
| 99 | + // minimal width/height |
---|
| 100 | + uint32_t min_width; |
---|
| 101 | + uint32_t min_height; |
---|
| 102 | +}; |
---|
| 103 | + |
---|
| 104 | +// Color management caps (DPP and MPC) |
---|
| 105 | +struct rom_curve_caps { |
---|
| 106 | + uint16_t srgb : 1; |
---|
| 107 | + uint16_t bt2020 : 1; |
---|
| 108 | + uint16_t gamma2_2 : 1; |
---|
| 109 | + uint16_t pq : 1; |
---|
| 110 | + uint16_t hlg : 1; |
---|
| 111 | +}; |
---|
| 112 | + |
---|
| 113 | +struct dpp_color_caps { |
---|
| 114 | + uint16_t dcn_arch : 1; // all DCE generations treated the same |
---|
| 115 | + // input lut is different than most LUTs, just plain 256-entry lookup |
---|
| 116 | + uint16_t input_lut_shared : 1; // shared with DGAM |
---|
| 117 | + uint16_t icsc : 1; |
---|
| 118 | + uint16_t dgam_ram : 1; |
---|
| 119 | + uint16_t post_csc : 1; // before gamut remap |
---|
| 120 | + uint16_t gamma_corr : 1; |
---|
| 121 | + |
---|
| 122 | + // hdr_mult and gamut remap always available in DPP (in that order) |
---|
| 123 | + // 3d lut implies shaper LUT, |
---|
| 124 | + // it may be shared with MPC - check MPC:shared_3d_lut flag |
---|
| 125 | + uint16_t hw_3d_lut : 1; |
---|
| 126 | + uint16_t ogam_ram : 1; // blnd gam |
---|
| 127 | + uint16_t ocsc : 1; |
---|
| 128 | + struct rom_curve_caps dgam_rom_caps; |
---|
| 129 | + struct rom_curve_caps ogam_rom_caps; |
---|
| 130 | +}; |
---|
| 131 | + |
---|
| 132 | +struct mpc_color_caps { |
---|
| 133 | + uint16_t gamut_remap : 1; |
---|
| 134 | + uint16_t ogam_ram : 1; |
---|
| 135 | + uint16_t ocsc : 1; |
---|
| 136 | + uint16_t num_3dluts : 3; //3d lut always assumes a preceding shaper LUT |
---|
| 137 | + uint16_t shared_3d_lut:1; //can be in either DPP or MPC, but single instance |
---|
| 138 | + |
---|
| 139 | + struct rom_curve_caps ogam_rom_caps; |
---|
| 140 | +}; |
---|
| 141 | + |
---|
| 142 | +struct dc_color_caps { |
---|
| 143 | + struct dpp_color_caps dpp; |
---|
| 144 | + struct mpc_color_caps mpc; |
---|
61 | 145 | }; |
---|
62 | 146 | |
---|
63 | 147 | struct dc_caps { |
---|
.. | .. |
---|
80 | 164 | bool force_dp_tps4_for_cp2520; |
---|
81 | 165 | bool disable_dp_clk_share; |
---|
82 | 166 | bool psp_setup_panel_mode; |
---|
| 167 | + bool extended_aux_timeout_support; |
---|
| 168 | + bool dmcub_support; |
---|
| 169 | + enum dp_protocol_version max_dp_protocol_version; |
---|
| 170 | + struct dc_plane_cap planes[MAX_PLANES]; |
---|
| 171 | + struct dc_color_caps color; |
---|
| 172 | +}; |
---|
| 173 | + |
---|
| 174 | +struct dc_bug_wa { |
---|
| 175 | + bool no_connect_phy_config; |
---|
| 176 | + bool dedcn20_305_wa; |
---|
| 177 | + bool skip_clock_update; |
---|
| 178 | + bool lt_early_cr_pattern; |
---|
83 | 179 | }; |
---|
84 | 180 | |
---|
85 | 181 | struct dc_dcc_surface_param { |
---|
.. | .. |
---|
93 | 189 | unsigned int max_compressed_blk_size; |
---|
94 | 190 | unsigned int max_uncompressed_blk_size; |
---|
95 | 191 | bool independent_64b_blks; |
---|
| 192 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 193 | + //These bitfields to be used starting with DCN 3.0 |
---|
| 194 | + struct { |
---|
| 195 | + uint32_t dcc_256_64_64 : 1;//available in ASICs before DCN 3.0 (the worst compression case) |
---|
| 196 | + uint32_t dcc_128_128_uncontrained : 1; //available in ASICs before DCN 3.0 |
---|
| 197 | + uint32_t dcc_256_128_128 : 1; //available starting with DCN 3.0 |
---|
| 198 | + uint32_t dcc_256_256_unconstrained : 1; //available in ASICs before DCN 3.0 (the best compression case) |
---|
| 199 | + } dcc_controls; |
---|
| 200 | +#endif |
---|
96 | 201 | }; |
---|
97 | 202 | |
---|
98 | 203 | struct dc_surface_dcc_cap { |
---|
.. | .. |
---|
111 | 216 | bool const_color_support; |
---|
112 | 217 | }; |
---|
113 | 218 | |
---|
114 | | -struct dc_static_screen_events { |
---|
115 | | - bool force_trigger; |
---|
116 | | - bool cursor_update; |
---|
117 | | - bool surface_update; |
---|
118 | | - bool overlay_update; |
---|
| 219 | +struct dc_static_screen_params { |
---|
| 220 | + struct { |
---|
| 221 | + bool force_trigger; |
---|
| 222 | + bool cursor_update; |
---|
| 223 | + bool surface_update; |
---|
| 224 | + bool overlay_update; |
---|
| 225 | + } triggers; |
---|
| 226 | + unsigned int num_frames; |
---|
119 | 227 | }; |
---|
120 | 228 | |
---|
121 | 229 | |
---|
.. | .. |
---|
170 | 278 | struct dc_config { |
---|
171 | 279 | bool gpu_vm_support; |
---|
172 | 280 | bool disable_disp_pll_sharing; |
---|
| 281 | + bool fbc_support; |
---|
| 282 | + bool optimize_edp_link_rate; |
---|
| 283 | + bool disable_fractional_pwm; |
---|
| 284 | + bool allow_seamless_boot_optimization; |
---|
| 285 | + bool power_down_display_on_boot; |
---|
| 286 | + bool edp_not_connected; |
---|
| 287 | + bool force_enum_edp; |
---|
| 288 | + bool forced_clocks; |
---|
| 289 | + bool allow_lttpr_non_transparent_mode; |
---|
| 290 | + bool multi_mon_pp_mclk_switch; |
---|
| 291 | + bool disable_dmcu; |
---|
| 292 | + bool enable_4to1MPC; |
---|
| 293 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 294 | + bool clamp_min_dcfclk; |
---|
| 295 | +#endif |
---|
173 | 296 | }; |
---|
174 | 297 | |
---|
175 | 298 | enum visual_confirm { |
---|
176 | 299 | VISUAL_CONFIRM_DISABLE = 0, |
---|
177 | 300 | VISUAL_CONFIRM_SURFACE = 1, |
---|
178 | 301 | VISUAL_CONFIRM_HDR = 2, |
---|
| 302 | + VISUAL_CONFIRM_MPCTREE = 4, |
---|
| 303 | + VISUAL_CONFIRM_PSR = 5, |
---|
179 | 304 | }; |
---|
180 | 305 | |
---|
181 | 306 | enum dcc_option { |
---|
.. | .. |
---|
194 | 319 | WM_REPORT_DEFAULT = 0, |
---|
195 | 320 | WM_REPORT_OVERRIDE = 1, |
---|
196 | 321 | }; |
---|
| 322 | +enum dtm_pstate{ |
---|
| 323 | + dtm_level_p0 = 0,/*highest voltage*/ |
---|
| 324 | + dtm_level_p1, |
---|
| 325 | + dtm_level_p2, |
---|
| 326 | + dtm_level_p3, |
---|
| 327 | + dtm_level_p4,/*when active_display_count = 0*/ |
---|
| 328 | +}; |
---|
| 329 | + |
---|
| 330 | +enum dcn_pwr_state { |
---|
| 331 | + DCN_PWR_STATE_UNKNOWN = -1, |
---|
| 332 | + DCN_PWR_STATE_MISSION_MODE = 0, |
---|
| 333 | + DCN_PWR_STATE_LOW_POWER = 3, |
---|
| 334 | +}; |
---|
197 | 335 | |
---|
198 | 336 | /* |
---|
199 | 337 | * For any clocks that may differ per pipe |
---|
.. | .. |
---|
201 | 339 | */ |
---|
202 | 340 | struct dc_clocks { |
---|
203 | 341 | int dispclk_khz; |
---|
204 | | - int max_supported_dppclk_khz; |
---|
205 | 342 | int dppclk_khz; |
---|
| 343 | + int disp_dpp_voltage_level_khz; |
---|
206 | 344 | int dcfclk_khz; |
---|
207 | 345 | int socclk_khz; |
---|
208 | 346 | int dcfclk_deep_sleep_khz; |
---|
209 | 347 | int fclk_khz; |
---|
210 | 348 | int phyclk_khz; |
---|
| 349 | + int dramclk_khz; |
---|
| 350 | + bool p_state_change_support; |
---|
| 351 | + enum dcn_pwr_state pwr_state; |
---|
| 352 | + /* |
---|
| 353 | + * Elements below are not compared for the purposes of |
---|
| 354 | + * optimization required |
---|
| 355 | + */ |
---|
| 356 | + bool prev_p_state_change_support; |
---|
| 357 | + enum dtm_pstate dtm_level; |
---|
| 358 | + int max_supported_dppclk_khz; |
---|
| 359 | + int max_supported_dispclk_khz; |
---|
| 360 | + int bw_dppclk_khz; /*a copy of dppclk_khz*/ |
---|
| 361 | + int bw_dispclk_khz; |
---|
211 | 362 | }; |
---|
| 363 | + |
---|
| 364 | +struct dc_bw_validation_profile { |
---|
| 365 | + bool enable; |
---|
| 366 | + |
---|
| 367 | + unsigned long long total_ticks; |
---|
| 368 | + unsigned long long voltage_level_ticks; |
---|
| 369 | + unsigned long long watermark_ticks; |
---|
| 370 | + unsigned long long rq_dlg_ticks; |
---|
| 371 | + |
---|
| 372 | + unsigned long long total_count; |
---|
| 373 | + unsigned long long skip_fast_count; |
---|
| 374 | + unsigned long long skip_pass_count; |
---|
| 375 | + unsigned long long skip_fail_count; |
---|
| 376 | +}; |
---|
| 377 | + |
---|
| 378 | +#define BW_VAL_TRACE_SETUP() \ |
---|
| 379 | + unsigned long long end_tick = 0; \ |
---|
| 380 | + unsigned long long voltage_level_tick = 0; \ |
---|
| 381 | + unsigned long long watermark_tick = 0; \ |
---|
| 382 | + unsigned long long start_tick = dc->debug.bw_val_profile.enable ? \ |
---|
| 383 | + dm_get_timestamp(dc->ctx) : 0 |
---|
| 384 | + |
---|
| 385 | +#define BW_VAL_TRACE_COUNT() \ |
---|
| 386 | + if (dc->debug.bw_val_profile.enable) \ |
---|
| 387 | + dc->debug.bw_val_profile.total_count++ |
---|
| 388 | + |
---|
| 389 | +#define BW_VAL_TRACE_SKIP(status) \ |
---|
| 390 | + if (dc->debug.bw_val_profile.enable) { \ |
---|
| 391 | + if (!voltage_level_tick) \ |
---|
| 392 | + voltage_level_tick = dm_get_timestamp(dc->ctx); \ |
---|
| 393 | + dc->debug.bw_val_profile.skip_ ## status ## _count++; \ |
---|
| 394 | + } |
---|
| 395 | + |
---|
| 396 | +#define BW_VAL_TRACE_END_VOLTAGE_LEVEL() \ |
---|
| 397 | + if (dc->debug.bw_val_profile.enable) \ |
---|
| 398 | + voltage_level_tick = dm_get_timestamp(dc->ctx) |
---|
| 399 | + |
---|
| 400 | +#define BW_VAL_TRACE_END_WATERMARKS() \ |
---|
| 401 | + if (dc->debug.bw_val_profile.enable) \ |
---|
| 402 | + watermark_tick = dm_get_timestamp(dc->ctx) |
---|
| 403 | + |
---|
| 404 | +#define BW_VAL_TRACE_FINISH() \ |
---|
| 405 | + if (dc->debug.bw_val_profile.enable) { \ |
---|
| 406 | + end_tick = dm_get_timestamp(dc->ctx); \ |
---|
| 407 | + dc->debug.bw_val_profile.total_ticks += end_tick - start_tick; \ |
---|
| 408 | + dc->debug.bw_val_profile.voltage_level_ticks += voltage_level_tick - start_tick; \ |
---|
| 409 | + if (watermark_tick) { \ |
---|
| 410 | + dc->debug.bw_val_profile.watermark_ticks += watermark_tick - voltage_level_tick; \ |
---|
| 411 | + dc->debug.bw_val_profile.rq_dlg_ticks += end_tick - watermark_tick; \ |
---|
| 412 | + } \ |
---|
| 413 | + } |
---|
212 | 414 | |
---|
213 | 415 | struct dc_debug_options { |
---|
214 | 416 | enum visual_confirm visual_confirm; |
---|
.. | .. |
---|
232 | 434 | bool disable_dfs_bypass; |
---|
233 | 435 | bool disable_dpp_power_gate; |
---|
234 | 436 | bool disable_hubp_power_gate; |
---|
| 437 | + bool disable_dsc_power_gate; |
---|
| 438 | + int dsc_min_slice_height_override; |
---|
| 439 | + int dsc_bpp_increment_div; |
---|
| 440 | + bool native422_support; |
---|
235 | 441 | bool disable_pplib_wm_range; |
---|
236 | 442 | enum wm_report_mode pplib_wm_report_mode; |
---|
237 | 443 | unsigned int min_disp_clk_khz; |
---|
| 444 | + unsigned int min_dpp_clk_khz; |
---|
238 | 445 | int sr_exit_time_dpm0_ns; |
---|
239 | 446 | int sr_enter_plus_exit_time_dpm0_ns; |
---|
240 | 447 | int sr_exit_time_ns; |
---|
241 | 448 | int sr_enter_plus_exit_time_ns; |
---|
242 | 449 | int urgent_latency_ns; |
---|
| 450 | + uint32_t underflow_assert_delay_us; |
---|
243 | 451 | int percent_of_ideal_drambw; |
---|
244 | 452 | int dram_clock_change_latency_ns; |
---|
245 | 453 | bool optimized_watermark; |
---|
246 | 454 | int always_scale; |
---|
247 | 455 | bool disable_pplib_clock_request; |
---|
248 | 456 | bool disable_clock_gate; |
---|
| 457 | + bool disable_mem_low_power; |
---|
249 | 458 | bool disable_dmcu; |
---|
250 | 459 | bool disable_psr; |
---|
251 | 460 | bool force_abm_enable; |
---|
252 | | - bool disable_hbup_pg; |
---|
253 | | - bool disable_dpp_pg; |
---|
254 | 461 | bool disable_stereo_support; |
---|
255 | 462 | bool vsr_support; |
---|
256 | 463 | bool performance_trace; |
---|
.. | .. |
---|
262 | 469 | bool scl_reset_length10; |
---|
263 | 470 | bool hdmi20_disable; |
---|
264 | 471 | bool skip_detection_link_training; |
---|
| 472 | + bool edid_read_retry_times; |
---|
| 473 | + bool remove_disconnect_edp; |
---|
| 474 | + unsigned int force_odm_combine; //bit vector based on otg inst |
---|
| 475 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 476 | + unsigned int force_odm_combine_4to1; //bit vector based on otg inst |
---|
| 477 | +#endif |
---|
| 478 | + unsigned int force_fclk_khz; |
---|
| 479 | + bool enable_tri_buf; |
---|
| 480 | + bool dmub_offload_enabled; |
---|
| 481 | + bool dmcub_emulation; |
---|
| 482 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 483 | + bool disable_idle_power_optimizations; |
---|
| 484 | +#endif |
---|
| 485 | + bool dmub_command_table; /* for testing only */ |
---|
| 486 | + struct dc_bw_validation_profile bw_val_profile; |
---|
| 487 | + bool disable_fec; |
---|
| 488 | + bool disable_48mhz_pwrdwn; |
---|
| 489 | + /* This forces a hard min on the DCFCLK requested to SMU/PP |
---|
| 490 | + * watermarks are not affected. |
---|
| 491 | + */ |
---|
| 492 | + unsigned int force_min_dcfclk_mhz; |
---|
| 493 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 494 | + int dwb_fi_phase; |
---|
| 495 | +#endif |
---|
| 496 | + bool disable_timing_sync; |
---|
| 497 | + bool cm_in_bypass; |
---|
| 498 | + int force_clock_mode;/*every mode change.*/ |
---|
| 499 | + |
---|
| 500 | + bool disable_dram_clock_change_vactive_support; |
---|
| 501 | + bool validate_dml_output; |
---|
| 502 | + bool enable_dmcub_surface_flip; |
---|
| 503 | + bool usbc_combo_phy_reset_wa; |
---|
| 504 | + bool disable_dsc; |
---|
| 505 | + bool enable_dram_clock_change_one_display_vactive; |
---|
| 506 | + bool force_ignore_link_settings; |
---|
265 | 507 | }; |
---|
266 | 508 | |
---|
267 | 509 | struct dc_debug_data { |
---|
.. | .. |
---|
270 | 512 | uint32_t auxErrorCount; |
---|
271 | 513 | }; |
---|
272 | 514 | |
---|
| 515 | +struct dc_phy_addr_space_config { |
---|
| 516 | + struct { |
---|
| 517 | + uint64_t start_addr; |
---|
| 518 | + uint64_t end_addr; |
---|
| 519 | + uint64_t fb_top; |
---|
| 520 | + uint64_t fb_offset; |
---|
| 521 | + uint64_t fb_base; |
---|
| 522 | + uint64_t agp_top; |
---|
| 523 | + uint64_t agp_bot; |
---|
| 524 | + uint64_t agp_base; |
---|
| 525 | + } system_aperture; |
---|
| 526 | + |
---|
| 527 | + struct { |
---|
| 528 | + uint64_t page_table_start_addr; |
---|
| 529 | + uint64_t page_table_end_addr; |
---|
| 530 | + uint64_t page_table_base_addr; |
---|
| 531 | + } gart_config; |
---|
| 532 | + |
---|
| 533 | + bool valid; |
---|
| 534 | + bool is_hvm_enabled; |
---|
| 535 | + uint64_t page_table_default_page_addr; |
---|
| 536 | +}; |
---|
| 537 | + |
---|
| 538 | +struct dc_virtual_addr_space_config { |
---|
| 539 | + uint64_t page_table_base_addr; |
---|
| 540 | + uint64_t page_table_start_addr; |
---|
| 541 | + uint64_t page_table_end_addr; |
---|
| 542 | + uint32_t page_table_block_size_in_bytes; |
---|
| 543 | + uint8_t page_table_depth; // 1 = 1 level, 2 = 2 level, etc. 0 = invalid |
---|
| 544 | +}; |
---|
| 545 | + |
---|
| 546 | +struct dc_bounding_box_overrides { |
---|
| 547 | + int sr_exit_time_ns; |
---|
| 548 | + int sr_enter_plus_exit_time_ns; |
---|
| 549 | + int urgent_latency_ns; |
---|
| 550 | + int percent_of_ideal_drambw; |
---|
| 551 | + int dram_clock_change_latency_ns; |
---|
| 552 | + int dummy_clock_change_latency_ns; |
---|
| 553 | + /* This forces a hard min on the DCFCLK we use |
---|
| 554 | + * for DML. Unlike the debug option for forcing |
---|
| 555 | + * DCFCLK, this override affects watermark calculations |
---|
| 556 | + */ |
---|
| 557 | + int min_dcfclk_mhz; |
---|
| 558 | +}; |
---|
273 | 559 | |
---|
274 | 560 | struct dc_state; |
---|
275 | 561 | struct resource_pool; |
---|
276 | 562 | struct dce_hwseq; |
---|
| 563 | +struct gpu_info_soc_bounding_box_v1_0; |
---|
277 | 564 | struct dc { |
---|
278 | 565 | struct dc_versions versions; |
---|
279 | 566 | struct dc_caps caps; |
---|
280 | 567 | struct dc_cap_funcs cap_funcs; |
---|
281 | 568 | struct dc_config config; |
---|
282 | 569 | struct dc_debug_options debug; |
---|
| 570 | + struct dc_bounding_box_overrides bb_overrides; |
---|
| 571 | + struct dc_bug_wa work_arounds; |
---|
283 | 572 | struct dc_context *ctx; |
---|
| 573 | + struct dc_phy_addr_space_config vm_pa_config; |
---|
284 | 574 | |
---|
285 | 575 | uint8_t link_count; |
---|
286 | 576 | struct dc_link *links[MAX_PIPES * 2]; |
---|
.. | .. |
---|
288 | 578 | struct dc_state *current_state; |
---|
289 | 579 | struct resource_pool *res_pool; |
---|
290 | 580 | |
---|
| 581 | + struct clk_mgr *clk_mgr; |
---|
| 582 | + |
---|
291 | 583 | /* Display Engine Clock levels */ |
---|
292 | 584 | struct dm_pp_clock_levels sclk_lvls; |
---|
293 | 585 | |
---|
294 | 586 | /* Inputs into BW and WM calculations. */ |
---|
295 | 587 | struct bw_calcs_dceip *bw_dceip; |
---|
296 | 588 | struct bw_calcs_vbios *bw_vbios; |
---|
297 | | -#ifdef CONFIG_DRM_AMD_DC_DCN1_0 |
---|
| 589 | +#ifdef CONFIG_DRM_AMD_DC_DCN |
---|
298 | 590 | struct dcn_soc_bounding_box *dcn_soc; |
---|
299 | 591 | struct dcn_ip_params *dcn_ip; |
---|
300 | 592 | struct display_mode_lib dml; |
---|
.. | .. |
---|
304 | 596 | struct hw_sequencer_funcs hwss; |
---|
305 | 597 | struct dce_hwseq *hwseq; |
---|
306 | 598 | |
---|
307 | | - /* temp store of dm_pp_display_configuration |
---|
308 | | - * to compare to see if display config changed |
---|
309 | | - */ |
---|
310 | | - struct dm_pp_display_configuration prev_display_config; |
---|
311 | | - |
---|
| 599 | + /* Require to optimize clocks and bandwidth for added/removed planes */ |
---|
312 | 600 | bool optimized_required; |
---|
| 601 | + bool wm_optimized_required; |
---|
| 602 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 603 | + bool idle_optimizations_allowed; |
---|
| 604 | +#endif |
---|
313 | 605 | |
---|
314 | | - bool apply_edp_fast_boot_optimization; |
---|
| 606 | + /* Require to maintain clocks and bandwidth for UEFI enabled HW */ |
---|
| 607 | + int optimize_seamless_boot_streams; |
---|
315 | 608 | |
---|
316 | 609 | /* FBC compressor */ |
---|
317 | 610 | struct compressor *fbc_compressor; |
---|
318 | 611 | |
---|
319 | 612 | struct dc_debug_data debug_data; |
---|
| 613 | + struct dpcd_vendor_signature vendor_signature; |
---|
| 614 | + |
---|
| 615 | + const char *build_id; |
---|
| 616 | + struct vm_helper *vm_helper; |
---|
| 617 | + const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box; |
---|
320 | 618 | }; |
---|
321 | 619 | |
---|
322 | 620 | enum frame_buffer_mode { |
---|
.. | .. |
---|
338 | 636 | struct hw_asic_id asic_id; |
---|
339 | 637 | void *driver; /* ctx */ |
---|
340 | 638 | struct cgs_device *cgs_device; |
---|
| 639 | + struct dc_bounding_box_overrides bb_overrides; |
---|
341 | 640 | |
---|
342 | 641 | int num_virtual_links; |
---|
343 | 642 | /* |
---|
.. | .. |
---|
347 | 646 | struct dc_bios *vbios_override; |
---|
348 | 647 | enum dce_environment dce_environment; |
---|
349 | 648 | |
---|
| 649 | + struct dmub_offload_funcs *dmub_if; |
---|
| 650 | + struct dc_reg_helper_state *dmub_offload; |
---|
| 651 | + |
---|
350 | 652 | struct dc_config flags; |
---|
351 | | - uint32_t log_mask; |
---|
| 653 | + uint64_t log_mask; |
---|
| 654 | + |
---|
| 655 | + /** |
---|
| 656 | + * gpu_info FW provided soc bounding box struct or 0 if not |
---|
| 657 | + * available in FW |
---|
| 658 | + */ |
---|
| 659 | + const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box; |
---|
| 660 | + struct dpcd_vendor_signature vendor_signature; |
---|
| 661 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 662 | + bool force_smu_not_present; |
---|
| 663 | +#endif |
---|
| 664 | + bool force_ignore_link_settings; |
---|
| 665 | +}; |
---|
| 666 | + |
---|
| 667 | +struct dc_callback_init { |
---|
| 668 | +#ifdef CONFIG_DRM_AMD_DC_HDCP |
---|
| 669 | + struct cp_psp cp_psp; |
---|
| 670 | +#else |
---|
| 671 | + uint8_t reserved; |
---|
| 672 | +#endif |
---|
352 | 673 | }; |
---|
353 | 674 | |
---|
354 | 675 | struct dc *dc_create(const struct dc_init_data *init_params); |
---|
| 676 | +void dc_hardware_init(struct dc *dc); |
---|
355 | 677 | |
---|
| 678 | +int dc_get_vmid_use_vector(struct dc *dc); |
---|
| 679 | +void dc_setup_vm_context(struct dc *dc, struct dc_virtual_addr_space_config *va_config, int vmid); |
---|
| 680 | +/* Returns the number of vmids supported */ |
---|
| 681 | +int dc_setup_system_context(struct dc *dc, struct dc_phy_addr_space_config *pa_config); |
---|
| 682 | +void dc_init_callbacks(struct dc *dc, |
---|
| 683 | + const struct dc_callback_init *init_params); |
---|
| 684 | +void dc_deinit_callbacks(struct dc *dc); |
---|
356 | 685 | void dc_destroy(struct dc **dc); |
---|
357 | 686 | |
---|
358 | 687 | /******************************************************************************* |
---|
.. | .. |
---|
406 | 735 | TRANSFER_FUNCTION_UNITY, |
---|
407 | 736 | TRANSFER_FUNCTION_HLG, |
---|
408 | 737 | TRANSFER_FUNCTION_HLG12, |
---|
409 | | - TRANSFER_FUNCTION_GAMMA22 |
---|
| 738 | + TRANSFER_FUNCTION_GAMMA22, |
---|
| 739 | + TRANSFER_FUNCTION_GAMMA24, |
---|
| 740 | + TRANSFER_FUNCTION_GAMMA26 |
---|
410 | 741 | }; |
---|
| 742 | + |
---|
411 | 743 | |
---|
412 | 744 | struct dc_transfer_func { |
---|
413 | 745 | struct kref refcount; |
---|
.. | .. |
---|
415 | 747 | enum dc_transfer_func_predefined tf; |
---|
416 | 748 | /* FP16 1.0 reference level in nits, default is 80 nits, only for PQ*/ |
---|
417 | 749 | uint32_t sdr_ref_white_level; |
---|
418 | | - struct dc_context *ctx; |
---|
419 | 750 | union { |
---|
420 | 751 | struct pwl_params pwl; |
---|
421 | 752 | struct dc_transfer_func_distributed_points tf_pts; |
---|
422 | 753 | }; |
---|
423 | 754 | }; |
---|
424 | 755 | |
---|
| 756 | + |
---|
| 757 | +union dc_3dlut_state { |
---|
| 758 | + struct { |
---|
| 759 | + uint32_t initialized:1; /*if 3dlut is went through color module for initialization */ |
---|
| 760 | + uint32_t rmu_idx_valid:1; /*if mux settings are valid*/ |
---|
| 761 | + uint32_t rmu_mux_num:3; /*index of mux to use*/ |
---|
| 762 | + uint32_t mpc_rmu0_mux:4; /*select mpcc on mux, one of the following : mpcc0, mpcc1, mpcc2, mpcc3*/ |
---|
| 763 | + uint32_t mpc_rmu1_mux:4; |
---|
| 764 | + uint32_t mpc_rmu2_mux:4; |
---|
| 765 | + uint32_t reserved:15; |
---|
| 766 | + } bits; |
---|
| 767 | + uint32_t raw; |
---|
| 768 | +}; |
---|
| 769 | + |
---|
| 770 | + |
---|
| 771 | +struct dc_3dlut { |
---|
| 772 | + struct kref refcount; |
---|
| 773 | + struct tetrahedral_params lut_3d; |
---|
| 774 | + struct fixed31_32 hdr_multiplier; |
---|
| 775 | + union dc_3dlut_state state; |
---|
| 776 | +}; |
---|
425 | 777 | /* |
---|
426 | 778 | * This structure is filled in by dc_surface_get_status and contains |
---|
427 | 779 | * the last requested address and the currently active address so the called |
---|
.. | .. |
---|
437 | 789 | union surface_update_flags { |
---|
438 | 790 | |
---|
439 | 791 | struct { |
---|
| 792 | + uint32_t addr_update:1; |
---|
440 | 793 | /* Medium updates */ |
---|
441 | 794 | uint32_t dcc_change:1; |
---|
442 | 795 | uint32_t color_space_change:1; |
---|
443 | 796 | uint32_t horizontal_mirror_change:1; |
---|
444 | 797 | uint32_t per_pixel_alpha_change:1; |
---|
| 798 | + uint32_t global_alpha_change:1; |
---|
| 799 | + uint32_t hdr_mult:1; |
---|
445 | 800 | uint32_t rotation_change:1; |
---|
446 | 801 | uint32_t swizzle_change:1; |
---|
447 | 802 | uint32_t scaling_change:1; |
---|
.. | .. |
---|
451 | 806 | uint32_t coeff_reduction_change:1; |
---|
452 | 807 | uint32_t output_tf_change:1; |
---|
453 | 808 | uint32_t pixel_format_change:1; |
---|
| 809 | + uint32_t plane_size_change:1; |
---|
| 810 | + uint32_t gamut_remap_change:1; |
---|
454 | 811 | |
---|
455 | 812 | /* Full updates */ |
---|
456 | 813 | uint32_t new_plane:1; |
---|
.. | .. |
---|
468 | 825 | struct dc_plane_state { |
---|
469 | 826 | struct dc_plane_address address; |
---|
470 | 827 | struct dc_plane_flip_time time; |
---|
| 828 | + bool triplebuffer_flips; |
---|
471 | 829 | struct scaling_taps scaling_quality; |
---|
472 | 830 | struct rect src_rect; |
---|
473 | 831 | struct rect dst_rect; |
---|
474 | 832 | struct rect clip_rect; |
---|
475 | 833 | |
---|
476 | | - union plane_size plane_size; |
---|
| 834 | + struct plane_size plane_size; |
---|
477 | 835 | union dc_tiling_info tiling_info; |
---|
478 | 836 | |
---|
479 | 837 | struct dc_plane_dcc_param dcc; |
---|
.. | .. |
---|
483 | 841 | struct dc_bias_and_scale *bias_and_scale; |
---|
484 | 842 | struct dc_csc_transform input_csc_color_matrix; |
---|
485 | 843 | struct fixed31_32 coeff_reduction_factor; |
---|
486 | | - uint32_t sdr_white_level; |
---|
| 844 | + struct fixed31_32 hdr_mult; |
---|
| 845 | + struct colorspace_transform gamut_remap_matrix; |
---|
487 | 846 | |
---|
488 | 847 | // TODO: No longer used, remove |
---|
489 | 848 | struct dc_hdr_static_metadata hdr_static_ctx; |
---|
490 | 849 | |
---|
491 | 850 | enum dc_color_space color_space; |
---|
492 | 851 | |
---|
| 852 | + struct dc_3dlut *lut3d_func; |
---|
| 853 | + struct dc_transfer_func *in_shaper_func; |
---|
| 854 | + struct dc_transfer_func *blend_tf; |
---|
| 855 | + |
---|
| 856 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 857 | + struct dc_transfer_func *gamcor_tf; |
---|
| 858 | +#endif |
---|
493 | 859 | enum surface_pixel_format format; |
---|
494 | 860 | enum dc_rotation_angle rotation; |
---|
495 | 861 | enum plane_stereo_format stereo_format; |
---|
496 | 862 | |
---|
497 | 863 | bool is_tiling_rotated; |
---|
498 | 864 | bool per_pixel_alpha; |
---|
| 865 | + bool global_alpha; |
---|
| 866 | + int global_alpha_value; |
---|
499 | 867 | bool visible; |
---|
500 | 868 | bool flip_immediate; |
---|
501 | 869 | bool horizontal_mirror; |
---|
| 870 | + int layer_index; |
---|
502 | 871 | |
---|
503 | 872 | union surface_update_flags update_flags; |
---|
504 | 873 | /* private to DC core */ |
---|
.. | .. |
---|
514 | 883 | }; |
---|
515 | 884 | |
---|
516 | 885 | struct dc_plane_info { |
---|
517 | | - union plane_size plane_size; |
---|
| 886 | + struct plane_size plane_size; |
---|
518 | 887 | union dc_tiling_info tiling_info; |
---|
519 | 888 | struct dc_plane_dcc_param dcc; |
---|
520 | 889 | enum surface_pixel_format format; |
---|
521 | 890 | enum dc_rotation_angle rotation; |
---|
522 | 891 | enum plane_stereo_format stereo_format; |
---|
523 | 892 | enum dc_color_space color_space; |
---|
524 | | - unsigned int sdr_white_level; |
---|
525 | 893 | bool horizontal_mirror; |
---|
526 | 894 | bool visible; |
---|
527 | 895 | bool per_pixel_alpha; |
---|
| 896 | + bool global_alpha; |
---|
| 897 | + int global_alpha_value; |
---|
528 | 898 | bool input_csc_enabled; |
---|
| 899 | + int layer_index; |
---|
529 | 900 | }; |
---|
530 | 901 | |
---|
531 | 902 | struct dc_scaling_info { |
---|
.. | .. |
---|
542 | 913 | const struct dc_flip_addrs *flip_addr; |
---|
543 | 914 | const struct dc_plane_info *plane_info; |
---|
544 | 915 | const struct dc_scaling_info *scaling_info; |
---|
545 | | - |
---|
| 916 | + struct fixed31_32 hdr_mult; |
---|
546 | 917 | /* following updates require alloc/sleep/spin that is not isr safe, |
---|
547 | 918 | * null means no updates |
---|
548 | 919 | */ |
---|
.. | .. |
---|
551 | 922 | |
---|
552 | 923 | const struct dc_csc_transform *input_csc_color_matrix; |
---|
553 | 924 | const struct fixed31_32 *coeff_reduction_factor; |
---|
| 925 | + const struct dc_transfer_func *func_shaper; |
---|
| 926 | + const struct dc_3dlut *lut3d_func; |
---|
| 927 | + const struct dc_transfer_func *blend_tf; |
---|
| 928 | + const struct colorspace_transform *gamut_remap_matrix; |
---|
554 | 929 | }; |
---|
555 | 930 | |
---|
556 | 931 | /* |
---|
.. | .. |
---|
571 | 946 | void dc_transfer_func_release(struct dc_transfer_func *dc_tf); |
---|
572 | 947 | struct dc_transfer_func *dc_create_transfer_func(void); |
---|
573 | 948 | |
---|
| 949 | +struct dc_3dlut *dc_create_3dlut_func(void); |
---|
| 950 | +void dc_3dlut_func_release(struct dc_3dlut *lut); |
---|
| 951 | +void dc_3dlut_func_retain(struct dc_3dlut *lut); |
---|
574 | 952 | /* |
---|
575 | 953 | * This structure holds a surface address. There could be multiple addresses |
---|
576 | 954 | * in cases such as Stereo 3D, Planar YUV, etc. Other per-flip attributes such |
---|
.. | .. |
---|
581 | 959 | unsigned int flip_timestamp_in_us; |
---|
582 | 960 | bool flip_immediate; |
---|
583 | 961 | /* TODO: add flip duration for FreeSync */ |
---|
| 962 | + bool triplebuffer_flips; |
---|
584 | 963 | }; |
---|
585 | 964 | |
---|
586 | 965 | bool dc_post_update_surfaces_to_stream( |
---|
.. | .. |
---|
597 | 976 | uint8_t plane_count; |
---|
598 | 977 | }; |
---|
599 | 978 | |
---|
| 979 | +bool dc_validate_seamless_boot_timing(const struct dc *dc, |
---|
| 980 | + const struct dc_sink *sink, |
---|
| 981 | + struct dc_crtc_timing *crtc_timing); |
---|
| 982 | + |
---|
600 | 983 | enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *plane_state); |
---|
601 | 984 | |
---|
| 985 | +void get_clock_requirements_for_state(struct dc_state *state, struct AsicStateEx *info); |
---|
| 986 | + |
---|
| 987 | +bool dc_set_generic_gpio_for_stereo(bool enable, |
---|
| 988 | + struct gpio_service *gpio_service); |
---|
| 989 | + |
---|
| 990 | +/* |
---|
| 991 | + * fast_validate: we return after determining if we can support the new state, |
---|
| 992 | + * but before we populate the programming info |
---|
| 993 | + */ |
---|
602 | 994 | enum dc_status dc_validate_global_state( |
---|
603 | 995 | struct dc *dc, |
---|
604 | | - struct dc_state *new_ctx); |
---|
| 996 | + struct dc_state *new_ctx, |
---|
| 997 | + bool fast_validate); |
---|
605 | 998 | |
---|
606 | 999 | |
---|
607 | 1000 | void dc_resource_state_construct( |
---|
608 | 1001 | const struct dc *dc, |
---|
609 | 1002 | struct dc_state *dst_ctx); |
---|
| 1003 | + |
---|
| 1004 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 1005 | +bool dc_acquire_release_mpc_3dlut( |
---|
| 1006 | + struct dc *dc, bool acquire, |
---|
| 1007 | + struct dc_stream_state *stream, |
---|
| 1008 | + struct dc_3dlut **lut, |
---|
| 1009 | + struct dc_transfer_func **shaper); |
---|
| 1010 | +#endif |
---|
610 | 1011 | |
---|
611 | 1012 | void dc_resource_state_copy_construct( |
---|
612 | 1013 | const struct dc_state *src_ctx, |
---|
.. | .. |
---|
617 | 1018 | struct dc_state *dst_ctx); |
---|
618 | 1019 | |
---|
619 | 1020 | void dc_resource_state_destruct(struct dc_state *context); |
---|
| 1021 | + |
---|
| 1022 | +bool dc_resource_is_dsc_encoding_supported(const struct dc *dc); |
---|
620 | 1023 | |
---|
621 | 1024 | /* |
---|
622 | 1025 | * TODO update to make it about validation sets |
---|
.. | .. |
---|
629 | 1032 | */ |
---|
630 | 1033 | bool dc_commit_state(struct dc *dc, struct dc_state *context); |
---|
631 | 1034 | |
---|
| 1035 | +void dc_power_down_on_boot(struct dc *dc); |
---|
632 | 1036 | |
---|
633 | | -struct dc_state *dc_create_state(void); |
---|
| 1037 | +struct dc_state *dc_create_state(struct dc *dc); |
---|
| 1038 | +struct dc_state *dc_copy_state(struct dc_state *src_ctx); |
---|
634 | 1039 | void dc_retain_state(struct dc_state *context); |
---|
635 | 1040 | void dc_release_state(struct dc_state *context); |
---|
636 | 1041 | |
---|
.. | .. |
---|
642 | 1047 | union dpcd_rev dpcd_rev; |
---|
643 | 1048 | union max_lane_count max_ln_count; |
---|
644 | 1049 | union max_down_spread max_down_spread; |
---|
| 1050 | + union dprx_feature dprx_feature; |
---|
| 1051 | + |
---|
| 1052 | + /* valid only for eDP v1.4 or higher*/ |
---|
| 1053 | + uint8_t edp_supported_link_rates_count; |
---|
| 1054 | + enum dc_link_rate edp_supported_link_rates[8]; |
---|
645 | 1055 | |
---|
646 | 1056 | /* dongle type (DP converter, CV smart dongle) */ |
---|
647 | 1057 | enum display_dongle_type dongle_type; |
---|
| 1058 | + /* branch device or sink device */ |
---|
| 1059 | + bool is_branch_dev; |
---|
648 | 1060 | /* Dongle's downstream count. */ |
---|
649 | 1061 | union sink_count sink_count; |
---|
650 | 1062 | /* If dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER, |
---|
.. | .. |
---|
664 | 1076 | bool allow_invalid_MSA_timing_param; |
---|
665 | 1077 | bool panel_mode_edp; |
---|
666 | 1078 | bool dpcd_display_control_capable; |
---|
| 1079 | + bool ext_receiver_cap_field_present; |
---|
| 1080 | + union dpcd_fec_capability fec_cap; |
---|
| 1081 | + struct dpcd_dsc_capabilities dsc_caps; |
---|
| 1082 | + struct dc_lttpr_caps lttpr_caps; |
---|
| 1083 | + struct psr_caps psr_caps; |
---|
| 1084 | + |
---|
667 | 1085 | }; |
---|
| 1086 | + |
---|
| 1087 | +union dpcd_sink_ext_caps { |
---|
| 1088 | + struct { |
---|
| 1089 | + /* 0 - Sink supports backlight adjust via PWM during SDR/HDR mode |
---|
| 1090 | + * 1 - Sink supports backlight adjust via AUX during SDR/HDR mode. |
---|
| 1091 | + */ |
---|
| 1092 | + uint8_t sdr_aux_backlight_control : 1; |
---|
| 1093 | + uint8_t hdr_aux_backlight_control : 1; |
---|
| 1094 | + uint8_t reserved_1 : 2; |
---|
| 1095 | + uint8_t oled : 1; |
---|
| 1096 | + uint8_t reserved : 3; |
---|
| 1097 | + } bits; |
---|
| 1098 | + uint8_t raw; |
---|
| 1099 | +}; |
---|
| 1100 | + |
---|
| 1101 | +#if defined(CONFIG_DRM_AMD_DC_HDCP) |
---|
| 1102 | +union hdcp_rx_caps { |
---|
| 1103 | + struct { |
---|
| 1104 | + uint8_t version; |
---|
| 1105 | + uint8_t reserved; |
---|
| 1106 | + struct { |
---|
| 1107 | + uint8_t repeater : 1; |
---|
| 1108 | + uint8_t hdcp_capable : 1; |
---|
| 1109 | + uint8_t reserved : 6; |
---|
| 1110 | + } byte0; |
---|
| 1111 | + } fields; |
---|
| 1112 | + uint8_t raw[3]; |
---|
| 1113 | +}; |
---|
| 1114 | + |
---|
| 1115 | +union hdcp_bcaps { |
---|
| 1116 | + struct { |
---|
| 1117 | + uint8_t HDCP_CAPABLE:1; |
---|
| 1118 | + uint8_t REPEATER:1; |
---|
| 1119 | + uint8_t RESERVED:6; |
---|
| 1120 | + } bits; |
---|
| 1121 | + uint8_t raw; |
---|
| 1122 | +}; |
---|
| 1123 | + |
---|
| 1124 | +struct hdcp_caps { |
---|
| 1125 | + union hdcp_rx_caps rx_caps; |
---|
| 1126 | + union hdcp_bcaps bcaps; |
---|
| 1127 | +}; |
---|
| 1128 | +#endif |
---|
668 | 1129 | |
---|
669 | 1130 | #include "dc_link.h" |
---|
670 | 1131 | |
---|
| 1132 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 1133 | +uint32_t dc_get_opp_for_plane(struct dc *dc, struct dc_plane_state *plane); |
---|
| 1134 | + |
---|
| 1135 | +#endif |
---|
671 | 1136 | /******************************************************************************* |
---|
672 | 1137 | * Sink Interfaces - A sink corresponds to a display output device |
---|
673 | 1138 | ******************************************************************************/ |
---|
.. | .. |
---|
684 | 1149 | }; |
---|
685 | 1150 | |
---|
686 | 1151 | |
---|
| 1152 | +struct dc_sink_dsc_caps { |
---|
| 1153 | + // 'true' if these are virtual DPCD's DSC caps (immediately upstream of sink in MST topology), |
---|
| 1154 | + // 'false' if they are sink's DSC caps |
---|
| 1155 | + bool is_virtual_dpcd_dsc; |
---|
| 1156 | + struct dsc_dec_dpcd_caps dsc_dec_caps; |
---|
| 1157 | +}; |
---|
| 1158 | + |
---|
| 1159 | +struct dc_sink_fec_caps { |
---|
| 1160 | + bool is_rx_fec_supported; |
---|
| 1161 | + bool is_topology_fec_supported; |
---|
| 1162 | +}; |
---|
687 | 1163 | |
---|
688 | 1164 | /* |
---|
689 | 1165 | * The sink structure contains EDID and other display device properties |
---|
.. | .. |
---|
697 | 1173 | void *priv; |
---|
698 | 1174 | struct stereo_3d_features features_3d[TIMING_3D_FORMAT_MAX]; |
---|
699 | 1175 | bool converter_disable_audio; |
---|
| 1176 | + bool is_mst_legacy; |
---|
| 1177 | + struct dc_sink_dsc_caps dsc_caps; |
---|
| 1178 | + struct dc_sink_fec_caps fec_caps; |
---|
| 1179 | + |
---|
| 1180 | + bool is_vsc_sdp_colorimetry_supported; |
---|
700 | 1181 | |
---|
701 | 1182 | /* private to DC core */ |
---|
702 | 1183 | struct dc_link *link; |
---|
.. | .. |
---|
719 | 1200 | struct dc_link *link; |
---|
720 | 1201 | uint32_t dongle_max_pix_clk; |
---|
721 | 1202 | bool converter_disable_audio; |
---|
| 1203 | + bool sink_is_legacy; |
---|
722 | 1204 | }; |
---|
723 | 1205 | |
---|
724 | 1206 | struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params); |
---|
.. | .. |
---|
751 | 1233 | enum dc_acpi_cm_power_state power_state); |
---|
752 | 1234 | void dc_resume(struct dc *dc); |
---|
753 | 1235 | |
---|
| 1236 | +void dc_power_down_on_boot(struct dc *dc); |
---|
| 1237 | + |
---|
| 1238 | +#if defined(CONFIG_DRM_AMD_DC_HDCP) |
---|
| 1239 | +/* |
---|
| 1240 | + * HDCP Interfaces |
---|
| 1241 | + */ |
---|
| 1242 | +enum hdcp_message_status dc_process_hdcp_msg( |
---|
| 1243 | + enum signal_type signal, |
---|
| 1244 | + struct dc_link *link, |
---|
| 1245 | + struct hdcp_protection_message *message_info); |
---|
| 1246 | +#endif |
---|
| 1247 | +bool dc_is_dmcu_initialized(struct dc *dc); |
---|
| 1248 | + |
---|
| 1249 | +enum dc_status dc_set_clock(struct dc *dc, enum dc_clock_type clock_type, uint32_t clk_khz, uint32_t stepping); |
---|
| 1250 | +void dc_get_clock(struct dc *dc, enum dc_clock_type clock_type, struct dc_clock_config *clock_cfg); |
---|
| 1251 | +#if defined(CONFIG_DRM_AMD_DC_DCN3_0) |
---|
| 1252 | + |
---|
| 1253 | +bool dc_is_plane_eligible_for_idle_optimizations(struct dc *dc, |
---|
| 1254 | + struct dc_plane_state *plane); |
---|
| 1255 | + |
---|
| 1256 | +void dc_allow_idle_optimizations(struct dc *dc, bool allow); |
---|
| 1257 | + |
---|
| 1258 | +/* |
---|
| 1259 | + * blank all streams, and set min and max memory clock to |
---|
| 1260 | + * lowest and highest DPM level, respectively |
---|
| 1261 | + */ |
---|
| 1262 | +void dc_unlock_memory_clock_frequency(struct dc *dc); |
---|
| 1263 | + |
---|
| 1264 | +/* |
---|
| 1265 | + * set min memory clock to the min required for current mode, |
---|
| 1266 | + * max to maxDPM, and unblank streams |
---|
| 1267 | + */ |
---|
| 1268 | +void dc_lock_memory_clock_frequency(struct dc *dc); |
---|
| 1269 | + |
---|
| 1270 | +#endif |
---|
| 1271 | + |
---|
| 1272 | +bool dc_set_psr_allow_active(struct dc *dc, bool enable); |
---|
| 1273 | + |
---|
| 1274 | +/******************************************************************************* |
---|
| 1275 | + * DSC Interfaces |
---|
| 1276 | + ******************************************************************************/ |
---|
| 1277 | +#include "dc_dsc.h" |
---|
754 | 1278 | #endif /* DC_INTERFACE_H_ */ |
---|