[agd5f:drm-next-7.3 244/308] drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/sr c/dml2_core/dml2_core_dcn5_funcs_mode_programmin g.c:1131:74: sparse: sparse: Using plain integer as NULL pointer
kernel test robot <[email protected]>
| Newsgroups | dev.linux.lists.oe-kbuild-all |
|---|---|
| Message-ID | <[email protected]> |
tree: https://gitlab.freedesktop.org/agd5f/linux.git drm-next-7.3 head: daaeec235e46b45a0dbd4facfb275cc43022028d commit: 992694ad28584188725751f695a85661e8e3797a [244/308] drm/amd/display: Enable DCN6 sources compilation config: riscv-randconfig-r111-20260807 (https://download.01.org/0day-ci/archive/20260810/[email protected]/config) compiler: riscv64-linux-gcc (GCC) 16.1.0 sparse: v0.6.5-rc1 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260810/[email protected]/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ sparse warnings: (new ones prefixed by >>) WARNING: invalid argument to '-march': '_zacas_zabha' WARNING: invalid argument to '-march': '_zacas_zabha' drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_funcs_mode_programming.c: note: in included file (through drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/inc/dml2_internal_shared_types.h, ...): drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/inc/bounding_boxes/utm_qos_model_dchub_v3.h:53:45: sparse: sparse: no newline at end of file >> drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_funcs_mode_programming.c:1131:74: sparse: sparse: Using plain integer as NULL pointer drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_funcs_mode_programming.c:1132:70: sparse: sparse: Using plain integer as NULL pointer -- WARNING: invalid argument to '-march': '_zacas_zabha' >> drivers/gpu/drm/amd/amdgpu/../display/dmub/src/dmub_dcn60.c:586:9: sparse: sparse: static assertion failed: "DMUB command size mismatch" drivers/gpu/drm/amd/amdgpu/../display/dmub/src/dmub_dcn60.c:662:9: sparse: sparse: static assertion failed: "DMUB command size mismatch" -- WARNING: invalid argument to '-march': '_zacas_zabha' WARNING: invalid argument to '-march': '_zacas_zabha' drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_pmo/dml2_pmo_dcn6_stage_optimizers.c: note: in included file (through drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/inc/dml2_internal_shared_types.h, ...): drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/inc/bounding_boxes/utm_qos_model_dchub_v3.h:53:45: sparse: sparse: no newline at end of file >> drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_pmo/dml2_pmo_dcn6_stage_optimizers.c:1417:87: sparse: sparse: Using plain integer as NULL pointer drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_pmo/dml2_pmo_dcn6_stage_optimizers.c:1417:90: sparse: sparse: Using plain integer as NULL pointer vim +1131 drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_funcs_mode_programming.c 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 10 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 11 static bool dcn5_mode_programming(struct dml2_core_calcs_mode_programming_ex *in_out_params) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 12 { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 13 const struct dml2_display_cfg *display_cfg = in_out_params->in_display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 14 const struct dml2_utm_soc_bb *utm_soc_bb = in_out_params->utm_soc_bb; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 15 const struct dml2_sop_table *sop_table = &in_out_params->utm_soc_bb->sop_table; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 16 const struct core_display_cfg_support_info *cfg_support_info = in_out_params->cfg_support_info; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 17 struct dml2_core_internal_display_mode_lib *mode_lib = in_out_params->mode_lib; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 18 const struct dml2_display_cfg_programming *programming = in_out_params->programming; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 19 struct dml2_core_calcs_mode_programming_locals *s = &mode_lib->scratch.dml_core_mode_programming_locals; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 20 struct dml2_core_calcs_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport_params *CalculateWatermarks_params = &mode_lib->scratch.CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 21 struct dml2_core_calcs_CalculateVMRowAndSwath_params *CalculateVMRowAndSwath_params = &mode_lib->scratch.CalculateVMRowAndSwath_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 22 struct dml2_core_calcs_CalculateSwathAndDETConfiguration_params *CalculateSwathAndDETConfiguration_params = &mode_lib->scratch.CalculateSwathAndDETConfiguration_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 23 struct dml2_core_calcs_CalculateStutterEfficiency_params *CalculateStutterEfficiency_params = &mode_lib->scratch.CalculateStutterEfficiency_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 24 struct dml2_core_calcs_CalculatePrefetchSchedule_params *CalculatePrefetchSchedule_params = &mode_lib->scratch.CalculatePrefetchSchedule_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 25 struct dml2_core_calcs_calculate_mcache_setting_params *calculate_mcache_setting_params = &mode_lib->scratch.calculate_mcache_setting_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 26 struct dml2_core_calcs_calculate_tdlut_setting_params *calculate_tdlut_setting_params = &mode_lib->scratch.calculate_tdlut_setting_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 27 struct dml2_core_shared_CalculateMetaAndPTETimes_params *CalculateMetaAndPTETimes_params = &mode_lib->scratch.CalculateMetaAndPTETimes_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 28 struct dml2_core_calcs_calculate_peak_bandwidth_required_params *calculate_peak_bandwidth_params = &mode_lib->scratch.calculate_peak_bandwidth_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 29 struct dml2_core_calcs_calculate_bytes_to_fetch_required_to_hide_latency_params *calculate_bytes_to_fetch_required_to_hide_latency_params = &mode_lib->scratch.calculate_bytes_to_fetch_required_to_hide_latency_params; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 30 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 31 unsigned int k, j; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 32 bool must_support_iflip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 33 const long min_return_uclk_cycles = 83; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 34 const long min_return_fclk_cycles = 75; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 35 struct dml2_soc_operating_point max_sop; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 36 struct dml2_soc_operating_point min_sop; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 37 double min_return_latency_in_DCFCLK_cycles = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 38 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 39 DML_LOG_VERBOSE("DML::%s: --- START --- \n", __func__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 40 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 41 s->num_active_planes = display_cfg->num_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 42 dml2_core_utils_get_stream_output_bpp(s->OutputBpp, display_cfg); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 43 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 44 mode_lib->mp.num_active_pipes = dml2_core_util_get_num_active_pipes(display_cfg->num_planes, cfg_support_info); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 45 dml2_core_utils_pipe_plane_mapping(cfg_support_info, mode_lib->mp.pipe_plane); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 46 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 47 mode_lib->mp.GlobalDPPCLK = programming->min_clocks.dcn4x.dpprefclk_khz / 1000.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 48 sop_table->get_max_sop(sop_table, &max_sop); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 49 sop_table->get_min_sop(sop_table, &min_sop); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 50 s->SOCCLK = min_sop.socclk_khz / 1000.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 51 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 52 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 53 unsigned int stream_index = display_cfg->plane_descriptors[k].stream_index; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 54 DML_ASSERT(cfg_support_info->stream_support_info[stream_index].odms_used <= 4); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 55 DML_ASSERT(cfg_support_info->stream_support_info[stream_index].num_odm_output_segments == 4 || 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 56 cfg_support_info->stream_support_info[stream_index].num_odm_output_segments == 2 || 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 57 cfg_support_info->stream_support_info[stream_index].num_odm_output_segments == 1); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 58 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 59 if (cfg_support_info->stream_support_info[stream_index].odms_used > 1) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 60 DML_ASSERT(cfg_support_info->stream_support_info[stream_index].num_odm_output_segments == 1); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 61 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 62 switch (cfg_support_info->stream_support_info[stream_index].odms_used) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 63 case (4): 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 64 mode_lib->mp.ODMMode[k] = dml2_odm_mode_combine_4to1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 65 break; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 66 case (3): 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 67 mode_lib->mp.ODMMode[k] = dml2_odm_mode_combine_3to1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 68 break; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 69 case (2): 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 70 mode_lib->mp.ODMMode[k] = dml2_odm_mode_combine_2to1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 71 break; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 72 default: 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 73 if (cfg_support_info->stream_support_info[stream_index].num_odm_output_segments == 4) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 74 mode_lib->mp.ODMMode[k] = dml2_odm_mode_mso_1to4; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 75 else if (cfg_support_info->stream_support_info[stream_index].num_odm_output_segments == 2) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 76 mode_lib->mp.ODMMode[k] = dml2_odm_mode_mso_1to2; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 77 else 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 78 mode_lib->mp.ODMMode[k] = dml2_odm_mode_bypass; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 79 break; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 80 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 81 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 82 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 83 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 84 mode_lib->mp.NoOfDPP[k] = cfg_support_info->plane_support_info[k].dpps_used; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 85 mode_lib->mp.Dppclk[k] = programming->plane_programming[k].min_clocks.dcn4x.dppclk_khz / 1000.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 86 DML_ASSERT(mode_lib->mp.Dppclk[k] > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 87 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 88 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 89 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 90 unsigned int stream_index = display_cfg->plane_descriptors[k].stream_index; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 91 mode_lib->mp.DSCCLK[k] = programming->stream_programming[stream_index].min_clocks.dcn4x.dscclk_khz / 1000.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 92 DML_LOG_VERBOSE("DML::%s: k=%d stream_index=%d, mode_lib->mp.DSCCLK = %f\n", __func__, k, stream_index, mode_lib->mp.DSCCLK[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 93 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 94 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 95 mode_lib->mp.Dispclk = programming->min_clocks.dcn4x.dispclk_khz / 1000.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 96 mode_lib->mp.DCFCLKDeepSleep = programming->min_clocks.dcn4x.deepsleep_dcfclk_khz / 1000.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 97 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 98 memcpy(mode_lib->mp.uclk_pstate_switch_modes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 99 in_out_params->uclk_params->pstate_switch_modes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 100 sizeof(in_out_params->uclk_params->pstate_switch_modes)); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 101 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 102 DML_ASSERT(mode_lib->mp.Dcfclk > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 103 DML_ASSERT(mode_lib->mp.FabricClock > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 104 DML_ASSERT(mode_lib->mp.uclk_freq_mhz > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 105 DML_ASSERT(mode_lib->mp.GlobalDPPCLK > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 106 DML_ASSERT(mode_lib->mp.Dispclk > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 107 DML_ASSERT(mode_lib->mp.DCFCLKDeepSleep > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 108 DML_ASSERT(s->SOCCLK > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 109 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 110 DML_LOG_VERBOSE("DML::%s: num_active_planes = %u\n", __func__, s->num_active_planes); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 111 DML_LOG_VERBOSE("DML::%s: num_active_pipes = %u\n", __func__, mode_lib->mp.num_active_pipes); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 112 DML_LOG_VERBOSE("DML::%s: Dcfclk = %f\n", __func__, mode_lib->mp.Dcfclk); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 113 DML_LOG_VERBOSE("DML::%s: FabricClock = %f\n", __func__, mode_lib->mp.FabricClock); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 114 DML_LOG_VERBOSE("DML::%s: uclk_freq_mhz = %f\n", __func__, mode_lib->mp.uclk_freq_mhz); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 115 DML_LOG_VERBOSE("DML::%s: Dispclk = %f\n", __func__, mode_lib->mp.Dispclk); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 116 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 117 DML_LOG_VERBOSE("DML::%s: Dppclk[%0d] = %f\n", __func__, k, mode_lib->mp.Dppclk[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 118 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 119 DML_LOG_VERBOSE("DML::%s: GlobalDPPCLK = %f\n", __func__, mode_lib->mp.GlobalDPPCLK); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 120 DML_LOG_VERBOSE("DML::%s: DCFCLKDeepSleep = %f\n", __func__, mode_lib->mp.DCFCLKDeepSleep); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 121 DML_LOG_VERBOSE("DML::%s: SOCCLK = %f\n", __func__, s->SOCCLK); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 122 for (k = 0; k < mode_lib->mp.num_active_pipes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 123 DML_LOG_VERBOSE("DML::%s: pipe=%d is in plane=%d\n", __func__, k, mode_lib->mp.pipe_plane[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 124 DML_LOG_VERBOSE("DML::%s: Per-plane DPPPerSurface[%0d] = %d\n", __func__, k, mode_lib->mp.NoOfDPP[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 125 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 126 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 127 for (k = 0; k < s->num_active_planes; k++) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 128 DML_LOG_VERBOSE("DML::%s: plane_%d: reserved_vblank_time_ns = %lu\n", __func__, k, display_cfg->plane_descriptors[k].overrides.reserved_vblank_time_ns); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 129 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 130 dcn5_calculate_max_det_and_min_compressed_buffer_size( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 131 mode_lib->ip.config_return_buffer_size_in_kbytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 132 mode_lib->ip.config_return_buffer_segment_size_in_kbytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 133 mode_lib->ip.rob_buffer_size_kbytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 134 mode_lib->ip.max_num_dpp, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 135 display_cfg->overrides.hw.force_nom_det_size_kbytes.enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 136 display_cfg->overrides.hw.force_nom_det_size_kbytes.value, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 137 mode_lib->ip.dcn_mrq_present, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 138 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 139 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 140 &s->MaxTotalDETInKByte, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 141 &s->NomDETInKByte, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 142 &s->MinCompressedBufferSizeInKByte); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 143 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 144 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 145 dcn5_adjust_pixel_clock_for_progressive_to_interlace_unit(display_cfg, mode_lib->ip.ptoi_supported, s->PixelClockBackEnd); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 146 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 147 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 148 dcn5_calculate_single_pipe_dppclk_and_scl_throughput( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 149 display_cfg->plane_descriptors[k].composition.scaler_info.plane0.h_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 150 display_cfg->plane_descriptors[k].composition.scaler_info.plane1.h_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 151 display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 152 display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 153 mode_lib->ip.max_dchub_pscl_bw_pix_per_clk, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 154 mode_lib->ip.max_pscl_lb_bw_pix_per_clk, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 155 ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000), 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 156 display_cfg->plane_descriptors[k].pixel_format, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 157 display_cfg->plane_descriptors[k].composition.scaler_info.plane0.h_taps, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 158 display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_taps, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 159 display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_taps, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 160 display_cfg->plane_descriptors[k].composition.scaler_info.plane1.h_taps, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 161 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 162 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 163 &mode_lib->mp.PSCL_THROUGHPUT[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 164 &mode_lib->mp.PSCL_THROUGHPUT_CHROMA[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 165 &mode_lib->mp.DPPCLKUsingSingleDPP[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 166 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 167 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 168 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 169 dcn5_calculate_byte_per_pixel_and_block_sizes( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 170 display_cfg->plane_descriptors[k].pixel_format, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 171 display_cfg->plane_descriptors[k].surface.tiling, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 172 display_cfg->plane_descriptors[k].surface.plane0.pitch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 173 display_cfg->plane_descriptors[k].surface.plane1.pitch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 174 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 175 // Output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 176 &mode_lib->mp.BytePerPixelY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 177 &mode_lib->mp.BytePerPixelC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 178 &mode_lib->mp.BytePerPixelInDETY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 179 &mode_lib->mp.BytePerPixelInDETC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 180 &mode_lib->mp.Read256BlockHeightY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 181 &mode_lib->mp.Read256BlockHeightC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 182 &mode_lib->mp.Read256BlockWidthY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 183 &mode_lib->mp.Read256BlockWidthC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 184 &mode_lib->mp.MacroTileHeightY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 185 &mode_lib->mp.MacroTileHeightC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 186 &mode_lib->mp.MacroTileWidthY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 187 &mode_lib->mp.MacroTileWidthC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 188 &mode_lib->mp.surf_linear128_l[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 189 &mode_lib->mp.surf_linear128_c[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 190 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 191 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 192 dcn5_calculate_swath_width( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 193 display_cfg, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 194 false, // ForceSingleDPP 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 195 s->num_active_planes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 196 mode_lib->mp.ODMMode, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 197 mode_lib->mp.BytePerPixelY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 198 mode_lib->mp.BytePerPixelC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 199 mode_lib->mp.Read256BlockHeightY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 200 mode_lib->mp.Read256BlockHeightC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 201 mode_lib->mp.Read256BlockWidthY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 202 mode_lib->mp.Read256BlockWidthC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 203 mode_lib->mp.surf_linear128_l, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 204 mode_lib->mp.surf_linear128_c, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 205 mode_lib->mp.NoOfDPP, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 206 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 207 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 208 mode_lib->mp.req_per_swath_ub_l, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 209 mode_lib->mp.req_per_swath_ub_c, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 210 mode_lib->mp.SwathWidthSingleDPPY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 211 mode_lib->mp.SwathWidthSingleDPPC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 212 mode_lib->mp.SwathWidthY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 213 mode_lib->mp.SwathWidthC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 214 s->dummy_integer_array[0], // unsigned int MaximumSwathHeightY[] 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 215 s->dummy_integer_array[1], // unsigned int MaximumSwathHeightC[] 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 216 mode_lib->mp.swath_width_luma_ub, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 217 mode_lib->mp.swath_width_chroma_ub, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 218 s->dummy_integer_array[2], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 219 s->dummy_integer_array[3]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 220 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 221 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 222 mode_lib->mp.cursor_bw[k] = display_cfg->plane_descriptors[k].cursor.num_cursors * display_cfg->plane_descriptors[k].cursor.cursor_width * display_cfg->plane_descriptors[k].cursor.cursor_bpp / 8.0 / 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 223 ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000)); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 224 mode_lib->mp.vactive_sw_bw_l[k] = mode_lib->mp.SwathWidthSingleDPPY[k] * mode_lib->mp.BytePerPixelY[k] / (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000)) * display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 225 mode_lib->mp.vactive_sw_bw_c[k] = mode_lib->mp.SwathWidthSingleDPPC[k] * mode_lib->mp.BytePerPixelC[k] / (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000)) * display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_ratio; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 226 DML_LOG_VERBOSE("DML::%s: vactive_sw_bw_l[%i] = %fBps\n", __func__, k, mode_lib->mp.vactive_sw_bw_l[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 227 DML_LOG_VERBOSE("DML::%s: vactive_sw_bw_c[%i] = %fBps\n", __func__, k, mode_lib->mp.vactive_sw_bw_c[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 228 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 229 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 230 CalculateSwathAndDETConfiguration_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 231 CalculateSwathAndDETConfiguration_params->ConfigReturnBufferSizeInKByte = mode_lib->ip.config_return_buffer_size_in_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 232 CalculateSwathAndDETConfiguration_params->MaxTotalDETInKByte = s->MaxTotalDETInKByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 233 CalculateSwathAndDETConfiguration_params->MinCompressedBufferSizeInKByte = s->MinCompressedBufferSizeInKByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 234 CalculateSwathAndDETConfiguration_params->rob_buffer_size_kbytes = mode_lib->ip.rob_buffer_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 235 CalculateSwathAndDETConfiguration_params->pixel_chunk_size_kbytes = mode_lib->ip.pixel_chunk_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 236 CalculateSwathAndDETConfiguration_params->rob_buffer_size_kbytes = mode_lib->ip.rob_buffer_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 237 CalculateSwathAndDETConfiguration_params->pixel_chunk_size_kbytes = mode_lib->ip.pixel_chunk_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 238 CalculateSwathAndDETConfiguration_params->ForceSingleDPP = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 239 CalculateSwathAndDETConfiguration_params->NumberOfActiveSurfaces = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 240 CalculateSwathAndDETConfiguration_params->nomDETInKByte = s->NomDETInKByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 241 CalculateSwathAndDETConfiguration_params->ConfigReturnBufferSegmentSizeInkByte = mode_lib->ip.config_return_buffer_segment_size_in_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 242 CalculateSwathAndDETConfiguration_params->CompressedBufferSegmentSizeInkByte = mode_lib->ip.compressed_buffer_segment_size_in_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 243 CalculateSwathAndDETConfiguration_params->ReadBandwidthLuma = mode_lib->mp.vactive_sw_bw_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 244 CalculateSwathAndDETConfiguration_params->ReadBandwidthChroma = mode_lib->mp.vactive_sw_bw_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 245 CalculateSwathAndDETConfiguration_params->MaximumSwathWidthLuma = s->dummy_single_array[0]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 246 CalculateSwathAndDETConfiguration_params->MaximumSwathWidthChroma = s->dummy_single_array[1]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 247 CalculateSwathAndDETConfiguration_params->Read256BytesBlockHeightY = mode_lib->mp.Read256BlockHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 248 CalculateSwathAndDETConfiguration_params->Read256BytesBlockHeightC = mode_lib->mp.Read256BlockHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 249 CalculateSwathAndDETConfiguration_params->Read256BytesBlockWidthY = mode_lib->mp.Read256BlockWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 250 CalculateSwathAndDETConfiguration_params->Read256BytesBlockWidthC = mode_lib->mp.Read256BlockWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 251 CalculateSwathAndDETConfiguration_params->surf_linear128_l = mode_lib->mp.surf_linear128_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 252 CalculateSwathAndDETConfiguration_params->surf_linear128_c = mode_lib->mp.surf_linear128_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 253 CalculateSwathAndDETConfiguration_params->ODMMode = mode_lib->mp.ODMMode; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 254 CalculateSwathAndDETConfiguration_params->DPPPerSurface = mode_lib->mp.NoOfDPP; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 255 CalculateSwathAndDETConfiguration_params->BytePerPixY = mode_lib->mp.BytePerPixelY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 256 CalculateSwathAndDETConfiguration_params->BytePerPixC = mode_lib->mp.BytePerPixelC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 257 CalculateSwathAndDETConfiguration_params->BytePerPixDETY = mode_lib->mp.BytePerPixelInDETY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 258 CalculateSwathAndDETConfiguration_params->BytePerPixDETC = mode_lib->mp.BytePerPixelInDETC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 259 CalculateSwathAndDETConfiguration_params->mrq_present = mode_lib->ip.dcn_mrq_present; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 260 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 261 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 262 CalculateSwathAndDETConfiguration_params->req_per_swath_ub_l = mode_lib->mp.req_per_swath_ub_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 263 CalculateSwathAndDETConfiguration_params->req_per_swath_ub_c = mode_lib->mp.req_per_swath_ub_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 264 CalculateSwathAndDETConfiguration_params->swath_width_luma_ub = s->dummy_long_array[0]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 265 CalculateSwathAndDETConfiguration_params->swath_width_chroma_ub = s->dummy_long_array[1]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 266 CalculateSwathAndDETConfiguration_params->SwathWidth = s->dummy_long_array[2]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 267 CalculateSwathAndDETConfiguration_params->SwathWidthChroma = s->dummy_long_array[3]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 268 CalculateSwathAndDETConfiguration_params->SwathHeightY = mode_lib->mp.SwathHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 269 CalculateSwathAndDETConfiguration_params->SwathHeightC = mode_lib->mp.SwathHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 270 CalculateSwathAndDETConfiguration_params->request_size_bytes_luma = mode_lib->mp.request_size_bytes_luma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 271 CalculateSwathAndDETConfiguration_params->request_size_bytes_chroma = mode_lib->mp.request_size_bytes_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 272 CalculateSwathAndDETConfiguration_params->DETBufferSizeInKByte = mode_lib->mp.DETBufferSizeInKByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 273 CalculateSwathAndDETConfiguration_params->DETBufferSizeY = mode_lib->mp.DETBufferSizeY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 274 CalculateSwathAndDETConfiguration_params->DETBufferSizeC = mode_lib->mp.DETBufferSizeC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 275 CalculateSwathAndDETConfiguration_params->full_swath_bytes_l = s->full_swath_bytes_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 276 CalculateSwathAndDETConfiguration_params->full_swath_bytes_c = s->full_swath_bytes_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 277 CalculateSwathAndDETConfiguration_params->full_swath_bytes_single_dpp_l = s->dummy_long_array[4]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 278 CalculateSwathAndDETConfiguration_params->full_swath_bytes_single_dpp_c = s->dummy_long_array[5]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 279 CalculateSwathAndDETConfiguration_params->UnboundedRequestEnabled = &mode_lib->mp.UnboundedRequestEnabled; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 280 CalculateSwathAndDETConfiguration_params->compbuf_reserved_space_64b = &mode_lib->mp.compbuf_reserved_space_64b; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 281 CalculateSwathAndDETConfiguration_params->hw_debug5 = &mode_lib->mp.hw_debug5; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 282 CalculateSwathAndDETConfiguration_params->CompressedBufferSizeInkByte = &mode_lib->mp.CompressedBufferSizeInkByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 283 CalculateSwathAndDETConfiguration_params->ViewportSizeSupportPerSurface = &s->dummy_boolean_array[0][0]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 284 CalculateSwathAndDETConfiguration_params->ViewportSizeSupport = &s->dummy_boolean[0]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 285 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 286 // Calculate DET size, swath height here. 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 287 dcn5_calculate_swath_and_det_configuration(&mode_lib->scratch, CalculateSwathAndDETConfiguration_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 288 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 289 // DSC Delay 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 290 mode_lib->mp.use_legacy_dsc_delay_formula = mode_lib->ip.use_legacy_dsc_delay_formula; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 291 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 292 mode_lib->mp.DSCDelay[k] = dcn5_calculate_dsc_delay_requirement(cfg_support_info->stream_support_info[display_cfg->plane_descriptors[k].stream_index].dsc_enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 293 mode_lib->mp.ODMMode[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 294 mode_lib->ip.maximum_dsc_bits_per_component, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 295 s->OutputBpp[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 296 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_active, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 297 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 298 cfg_support_info->stream_support_info[display_cfg->plane_descriptors[k].stream_index].num_dsc_slices, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 299 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].output.output_format, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 300 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].output.output_encoder, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 301 ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000), 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 302 s->PixelClockBackEnd[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 303 mode_lib->mp.use_legacy_dsc_delay_formula); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 304 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 305 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 306 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 307 s->SurfaceParameters[k].PixelClock = ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 308 s->SurfaceParameters[k].DPPPerSurface = mode_lib->mp.NoOfDPP[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 309 s->SurfaceParameters[k].RotationAngle = display_cfg->plane_descriptors[k].composition.rotation_angle; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 310 s->SurfaceParameters[k].ViewportHeight = display_cfg->plane_descriptors[k].composition.viewport.plane0.height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 311 s->SurfaceParameters[k].ViewportHeightC = display_cfg->plane_descriptors[k].composition.viewport.plane1.height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 312 s->SurfaceParameters[k].BlockWidth256BytesY = mode_lib->mp.Read256BlockWidthY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 313 s->SurfaceParameters[k].BlockHeight256BytesY = mode_lib->mp.Read256BlockHeightY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 314 s->SurfaceParameters[k].BlockWidth256BytesC = mode_lib->mp.Read256BlockWidthC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 315 s->SurfaceParameters[k].BlockHeight256BytesC = mode_lib->mp.Read256BlockHeightC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 316 s->SurfaceParameters[k].BlockWidthY = mode_lib->mp.MacroTileWidthY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 317 s->SurfaceParameters[k].BlockHeightY = mode_lib->mp.MacroTileHeightY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 318 s->SurfaceParameters[k].BlockWidthC = mode_lib->mp.MacroTileWidthC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 319 s->SurfaceParameters[k].BlockHeightC = mode_lib->mp.MacroTileHeightC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 320 s->SurfaceParameters[k].InterlaceEnable = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.interlaced; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 321 s->SurfaceParameters[k].HTotal = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 322 s->SurfaceParameters[k].DCCEnable = display_cfg->plane_descriptors[k].surface.dcc.enable; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 323 s->SurfaceParameters[k].SourcePixelFormat = display_cfg->plane_descriptors[k].pixel_format; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 324 s->SurfaceParameters[k].SurfaceTiling = display_cfg->plane_descriptors[k].surface.tiling; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 325 s->SurfaceParameters[k].BytePerPixelY = mode_lib->mp.BytePerPixelY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 326 s->SurfaceParameters[k].BytePerPixelC = mode_lib->mp.BytePerPixelC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 327 s->SurfaceParameters[k].ProgressiveToInterlaceUnitInOPP = mode_lib->ip.ptoi_supported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 328 s->SurfaceParameters[k].VRatio = display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 329 s->SurfaceParameters[k].VRatioChroma = display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_ratio; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 330 s->SurfaceParameters[k].VTaps = display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_taps; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 331 s->SurfaceParameters[k].VTapsChroma = display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_taps; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 332 s->SurfaceParameters[k].PitchY = display_cfg->plane_descriptors[k].surface.plane0.pitch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 333 s->SurfaceParameters[k].PitchC = display_cfg->plane_descriptors[k].surface.plane1.pitch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 334 s->SurfaceParameters[k].ViewportStationary = display_cfg->plane_descriptors[k].composition.viewport.stationary; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 335 s->SurfaceParameters[k].ViewportXStart = display_cfg->plane_descriptors[k].composition.viewport.plane0.x_start; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 336 s->SurfaceParameters[k].ViewportYStart = display_cfg->plane_descriptors[k].composition.viewport.plane0.y_start; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 337 s->SurfaceParameters[k].ViewportXStartC = display_cfg->plane_descriptors[k].composition.viewport.plane1.y_start; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 338 s->SurfaceParameters[k].ViewportYStartC = display_cfg->plane_descriptors[k].composition.viewport.plane1.y_start; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 339 s->SurfaceParameters[k].FORCE_ONE_ROW_FOR_FRAME = display_cfg->plane_descriptors[k].overrides.hw.force_one_row_for_frame; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 340 s->SurfaceParameters[k].SwathHeightY = mode_lib->mp.SwathHeightY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 341 s->SurfaceParameters[k].SwathHeightC = mode_lib->mp.SwathHeightC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 342 s->SurfaceParameters[k].DCCMetaPitchY = display_cfg->plane_descriptors[k].surface.dcc.plane0.pitch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 343 s->SurfaceParameters[k].DCCMetaPitchC = display_cfg->plane_descriptors[k].surface.dcc.plane1.pitch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 344 s->SurfaceParameters[k].UPSPEnabled = display_cfg->plane_descriptors[k].composition.scaler_info.upsp_enabled; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 345 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 346 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 347 CalculateVMRowAndSwath_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 348 CalculateVMRowAndSwath_params->uclk_pstate_switch_modes = mode_lib->ms.uclk_pstate_switch_modes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 349 CalculateVMRowAndSwath_params->NumberOfActiveSurfaces = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 350 CalculateVMRowAndSwath_params->myPipe = s->SurfaceParameters; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 351 CalculateVMRowAndSwath_params->PTEBufferSizeInRequestsLuma = mode_lib->ip.dpte_buffer_size_in_pte_reqs_luma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 352 CalculateVMRowAndSwath_params->PTEBufferSizeInRequestsChroma = mode_lib->ip.dpte_buffer_size_in_pte_reqs_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 353 CalculateVMRowAndSwath_params->SwathWidthY = mode_lib->mp.SwathWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 354 CalculateVMRowAndSwath_params->SwathWidthC = mode_lib->mp.SwathWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 355 CalculateVMRowAndSwath_params->DCCMetaBufferSizeBytes = mode_lib->ip.dcc_meta_buffer_size_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 356 CalculateVMRowAndSwath_params->mrq_present = mode_lib->ip.dcn_mrq_present; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 357 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 358 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 359 CalculateVMRowAndSwath_params->PTEBufferSizeNotExceeded = s->dummy_boolean_array[0]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 360 CalculateVMRowAndSwath_params->dpte_row_width_luma_ub = mode_lib->mp.dpte_row_width_luma_ub; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 361 CalculateVMRowAndSwath_params->dpte_row_width_chroma_ub = mode_lib->mp.dpte_row_width_chroma_ub; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 362 CalculateVMRowAndSwath_params->dpte_row_height_luma = mode_lib->mp.dpte_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 363 CalculateVMRowAndSwath_params->dpte_row_height_chroma = mode_lib->mp.dpte_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 364 CalculateVMRowAndSwath_params->dpte_row_height_linear_luma = mode_lib->mp.dpte_row_height_linear; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 365 CalculateVMRowAndSwath_params->dpte_row_height_linear_chroma = mode_lib->mp.dpte_row_height_linear_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 366 CalculateVMRowAndSwath_params->vm_group_bytes = mode_lib->mp.vm_group_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 367 CalculateVMRowAndSwath_params->dpte_group_bytes = mode_lib->mp.dpte_group_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 368 CalculateVMRowAndSwath_params->PixelPTEReqWidthY = mode_lib->mp.PixelPTEReqWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 369 CalculateVMRowAndSwath_params->PixelPTEReqHeightY = mode_lib->mp.PixelPTEReqHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 370 CalculateVMRowAndSwath_params->PTERequestSizeY = mode_lib->mp.PTERequestSizeY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 371 CalculateVMRowAndSwath_params->PixelPTEReqWidthC = mode_lib->mp.PixelPTEReqWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 372 CalculateVMRowAndSwath_params->PixelPTEReqHeightC = mode_lib->mp.PixelPTEReqHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 373 CalculateVMRowAndSwath_params->PTERequestSizeC = mode_lib->mp.PTERequestSizeC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 374 CalculateVMRowAndSwath_params->vmpg_width_y = s->vmpg_width_y; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 375 CalculateVMRowAndSwath_params->vmpg_height_y = s->vmpg_height_y; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 376 CalculateVMRowAndSwath_params->vmpg_width_c = s->vmpg_width_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 377 CalculateVMRowAndSwath_params->vmpg_height_c = s->vmpg_height_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 378 CalculateVMRowAndSwath_params->dpde0_bytes_per_frame_ub_l = mode_lib->mp.dpde0_bytes_per_frame_ub_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 379 CalculateVMRowAndSwath_params->dpde0_bytes_per_frame_ub_c = mode_lib->mp.dpde0_bytes_per_frame_ub_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 380 CalculateVMRowAndSwath_params->PrefetchSourceLinesY = mode_lib->mp.PrefetchSourceLinesY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 381 CalculateVMRowAndSwath_params->PrefetchSourceLinesC = mode_lib->mp.PrefetchSourceLinesC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 382 CalculateVMRowAndSwath_params->VInitPreFillY = mode_lib->mp.VInitPreFillY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 383 CalculateVMRowAndSwath_params->VInitPreFillC = mode_lib->mp.VInitPreFillC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 384 CalculateVMRowAndSwath_params->MaxNumSwathY = mode_lib->mp.MaxNumSwathY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 385 CalculateVMRowAndSwath_params->MaxNumSwathC = mode_lib->mp.MaxNumSwathC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 386 CalculateVMRowAndSwath_params->dpte_row_bw = mode_lib->mp.dpte_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 387 CalculateVMRowAndSwath_params->PixelPTEBytesPerRow = mode_lib->mp.PixelPTEBytesPerRow; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 388 CalculateVMRowAndSwath_params->dpte_row_bytes_per_row_l = s->dpte_row_bytes_per_row_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 389 CalculateVMRowAndSwath_params->dpte_row_bytes_per_row_c = s->dpte_row_bytes_per_row_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 390 CalculateVMRowAndSwath_params->vm_bytes = mode_lib->mp.vm_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 391 CalculateVMRowAndSwath_params->use_one_row_for_frame = mode_lib->mp.use_one_row_for_frame; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 392 CalculateVMRowAndSwath_params->use_one_row_for_frame_flip = mode_lib->mp.use_one_row_for_frame_flip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 393 CalculateVMRowAndSwath_params->PTE_BUFFER_MODE = mode_lib->mp.PTE_BUFFER_MODE; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 394 CalculateVMRowAndSwath_params->BIGK_FRAGMENT_SIZE = mode_lib->mp.BIGK_FRAGMENT_SIZE; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 395 CalculateVMRowAndSwath_params->DCCMetaBufferSizeNotExceeded = s->dummy_boolean_array[1]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 396 CalculateVMRowAndSwath_params->meta_row_bw = mode_lib->mp.meta_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 397 CalculateVMRowAndSwath_params->meta_row_bytes = mode_lib->mp.meta_row_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 398 CalculateVMRowAndSwath_params->meta_row_bytes_per_row_ub_l = s->meta_row_bytes_per_row_ub_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 399 CalculateVMRowAndSwath_params->meta_row_bytes_per_row_ub_c = s->meta_row_bytes_per_row_ub_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 400 CalculateVMRowAndSwath_params->meta_req_width_luma = mode_lib->mp.meta_req_width; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 401 CalculateVMRowAndSwath_params->meta_req_height_luma = mode_lib->mp.meta_req_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 402 CalculateVMRowAndSwath_params->meta_row_width_luma = mode_lib->mp.meta_row_width; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 403 CalculateVMRowAndSwath_params->meta_row_height_luma = mode_lib->mp.meta_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 404 CalculateVMRowAndSwath_params->meta_pte_bytes_per_frame_ub_l = mode_lib->mp.meta_pte_bytes_per_frame_ub_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 405 CalculateVMRowAndSwath_params->meta_req_width_chroma = mode_lib->mp.meta_req_width_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 406 CalculateVMRowAndSwath_params->meta_row_height_chroma = mode_lib->mp.meta_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 407 CalculateVMRowAndSwath_params->meta_row_width_chroma = mode_lib->mp.meta_row_width_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 408 CalculateVMRowAndSwath_params->meta_req_height_chroma = mode_lib->mp.meta_req_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 409 CalculateVMRowAndSwath_params->meta_pte_bytes_per_frame_ub_c = mode_lib->mp.meta_pte_bytes_per_frame_ub_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 410 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 411 dcn5_calculate_vm_row_and_swath(&mode_lib->scratch, CalculateVMRowAndSwath_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 412 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 413 memset(calculate_mcache_setting_params, 0, sizeof(struct dml2_core_calcs_calculate_mcache_setting_params)); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 414 for (k = 0; k < s->num_active_planes; k++) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 415 mode_lib->mp.dcc_dram_bw_nom_overhead_factor_p0[k] = 1.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 416 mode_lib->mp.dcc_dram_bw_pref_overhead_factor_p0[k] = 1.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 417 mode_lib->mp.dcc_dram_bw_nom_overhead_factor_p1[k] = 1.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 418 mode_lib->mp.dcc_dram_bw_pref_overhead_factor_p1[k] = 1.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 419 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 420 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 421 dcn5_calculate_hostvm_inefficiency_factor( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 422 &s->HostVMInefficiencyFactor, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 423 &s->HostVMInefficiencyFactorPrefetch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 424 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 425 display_cfg->gpuvm_enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 426 display_cfg->hostvm_enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 427 mode_lib->ip.remote_iommu_outstanding_translations, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 428 utm_soc_bb->max_outstanding_reqs, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 429 1.0, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 430 0.5); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 431 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 432 s->TotalDCCActiveDPP = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 433 s->TotalActiveDPP = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 434 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 435 s->TotalActiveDPP = s->TotalActiveDPP + mode_lib->mp.NoOfDPP[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 436 if (display_cfg->plane_descriptors[k].surface.dcc.enable) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 437 s->TotalDCCActiveDPP = s->TotalDCCActiveDPP + mode_lib->mp.NoOfDPP[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 438 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 439 // Calculate tdlut schedule related terms 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 440 for (k = 0; k <= s->num_active_planes - 1; k++) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 441 calculate_tdlut_setting_params->dispclk_mhz = mode_lib->mp.Dispclk; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 442 calculate_tdlut_setting_params->setup_for_tdlut = display_cfg->plane_descriptors[k].tdlut.setup_for_tdlut; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 443 calculate_tdlut_setting_params->tdlut_width_mode = display_cfg->plane_descriptors[k].tdlut.tdlut_width_mode; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 444 calculate_tdlut_setting_params->tdlut_addressing_mode = display_cfg->plane_descriptors[k].tdlut.tdlut_addressing_mode; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 445 calculate_tdlut_setting_params->cursor_buffer_size = mode_lib->ip.cursor_buffer_size; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 446 calculate_tdlut_setting_params->gpuvm_enable = display_cfg->gpuvm_enable; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 447 calculate_tdlut_setting_params->gpuvm_page_size_kbytes = display_cfg->plane_descriptors[k].overrides.gpuvm_min_page_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 448 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 449 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 450 calculate_tdlut_setting_params->tdlut_pte_bytes_per_frame = &s->tdlut_pte_bytes_per_frame[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 451 calculate_tdlut_setting_params->tdlut_bytes_per_frame = &s->tdlut_bytes_per_frame[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 452 calculate_tdlut_setting_params->tdlut_groups_per_2row_ub = &s->tdlut_groups_per_2row_ub[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 453 calculate_tdlut_setting_params->tdlut_opt_time = &s->tdlut_opt_time[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 454 calculate_tdlut_setting_params->tdlut_drain_time = &s->tdlut_drain_time[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 455 calculate_tdlut_setting_params->tdlut_bytes_per_group = &s->tdlut_bytes_per_group[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 456 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 457 dcn5_calculate_tdlut_setting(&mode_lib->scratch, calculate_tdlut_setting_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 458 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 459 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 460 dcn5_calculate_extra_latency( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 461 display_cfg, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 462 mode_lib->ip.rob_buffer_size_kbytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 463 0, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 464 s->ReorderingBytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 465 mode_lib->mp.Dcfclk, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 466 mode_lib->mp.FabricClock, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 467 mode_lib->ip.pixel_chunk_size_kbytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 468 mode_lib->mp.dram_bw_mbps, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 469 s->num_active_planes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 470 mode_lib->mp.NoOfDPP, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 471 mode_lib->mp.dpte_group_bytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 472 s->tdlut_bytes_per_group, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 473 s->HostVMInefficiencyFactor, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 474 s->HostVMInefficiencyFactorPrefetch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 475 dml2_qos_param_type_dcn4x, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 476 !(display_cfg->overrides.max_outstanding_when_urgent_expected_disable), 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 477 utm_soc_bb->max_outstanding_reqs, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 478 mode_lib->mp.request_size_bytes_luma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 479 mode_lib->mp.request_size_bytes_chroma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 480 mode_lib->ip.meta_chunk_size_kbytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 481 mode_lib->ip.dchub_arb_to_ret_delay, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 482 mode_lib->mp.TripToMemory, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 483 mode_lib->ip.hostvm_mode, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 484 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 485 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 486 &mode_lib->mp.ExtraLatency, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 487 &mode_lib->mp.ExtraLatency_sr, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 488 &mode_lib->mp.ExtraLatencyPrefetch); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 489 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 490 mode_lib->mp.TCalc = 24.0 / mode_lib->mp.DCFCLKDeepSleep; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 491 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 492 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 493 mode_lib->mp.WritebackDelay[k] = 0.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 494 for (j = 0; j < display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream; ++j) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 495 mode_lib->mp.WritebackDelay[k] = math_max2(mode_lib->mp.WritebackDelay[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 496 utm_soc_bb->writeback_base_latency_us 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 497 + dcn5_calculate_write_back_delay( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 498 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].pixel_format, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 499 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].h_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 500 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 501 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].v_taps, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 502 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].v_taps_chroma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 503 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].output_width, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 504 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].output_height, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 505 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].input_width, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 506 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[j].input_height, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 507 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 508 / mode_lib->mp.Dispclk); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 509 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 510 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 511 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 512 /* VActive bytes to fetch for UCLK P-State */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 513 calculate_bytes_to_fetch_required_to_hide_latency_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 514 calculate_bytes_to_fetch_required_to_hide_latency_params->mrq_present = mode_lib->ip.dcn_mrq_present; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 515 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 516 calculate_bytes_to_fetch_required_to_hide_latency_params->num_active_planes = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 517 calculate_bytes_to_fetch_required_to_hide_latency_params->num_of_dpp = mode_lib->mp.NoOfDPP; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 518 calculate_bytes_to_fetch_required_to_hide_latency_params->meta_row_height_l = mode_lib->mp.meta_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 519 calculate_bytes_to_fetch_required_to_hide_latency_params->meta_row_height_c = mode_lib->mp.meta_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 520 calculate_bytes_to_fetch_required_to_hide_latency_params->meta_row_bytes_per_row_ub_l = s->meta_row_bytes_per_row_ub_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 521 calculate_bytes_to_fetch_required_to_hide_latency_params->meta_row_bytes_per_row_ub_c = s->meta_row_bytes_per_row_ub_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 522 calculate_bytes_to_fetch_required_to_hide_latency_params->dpte_row_height_l = mode_lib->mp.dpte_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 523 calculate_bytes_to_fetch_required_to_hide_latency_params->dpte_row_height_c = mode_lib->mp.dpte_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 524 calculate_bytes_to_fetch_required_to_hide_latency_params->dpte_bytes_per_row_l = s->dpte_row_bytes_per_row_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 525 calculate_bytes_to_fetch_required_to_hide_latency_params->dpte_bytes_per_row_c = s->dpte_row_bytes_per_row_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 526 calculate_bytes_to_fetch_required_to_hide_latency_params->byte_per_pix_l = mode_lib->mp.BytePerPixelY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 527 calculate_bytes_to_fetch_required_to_hide_latency_params->byte_per_pix_c = mode_lib->mp.BytePerPixelC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 528 calculate_bytes_to_fetch_required_to_hide_latency_params->swath_width_l = mode_lib->mp.SwathWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 529 calculate_bytes_to_fetch_required_to_hide_latency_params->swath_width_c = mode_lib->mp.SwathWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 530 calculate_bytes_to_fetch_required_to_hide_latency_params->swath_height_l = mode_lib->mp.SwathHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 531 calculate_bytes_to_fetch_required_to_hide_latency_params->swath_height_c = mode_lib->mp.SwathHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 532 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 533 calculate_bytes_to_fetch_required_to_hide_latency_params->latency_to_hide_us[k] = utm_soc_bb->power_management_parameters.dram_clk_change_blackout_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 534 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 535 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 536 /* outputs */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 537 calculate_bytes_to_fetch_required_to_hide_latency_params->bytes_required_l = s->pstate_bytes_required_l[dml2_pstate_type_uclk]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 538 calculate_bytes_to_fetch_required_to_hide_latency_params->bytes_required_c = s->pstate_bytes_required_c[dml2_pstate_type_uclk]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 539 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 540 dcn5_calculate_bytes_to_fetch_required_to_hide_latency(calculate_bytes_to_fetch_required_to_hide_latency_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 541 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 542 /* Excess VActive bandwidth required to fill DET */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 543 dcn5_calculate_excess_vactive_bandwidth_required( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 544 display_cfg, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 545 s->num_active_planes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 546 s->pstate_bytes_required_l[dml2_pstate_type_uclk], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 547 s->pstate_bytes_required_c[dml2_pstate_type_uclk], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 548 /* outputs */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 549 mode_lib->mp.excess_vactive_fill_bw_l, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 550 mode_lib->mp.excess_vactive_fill_bw_c); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 551 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 552 mode_lib->mp.TripToMemory = math_max2(mode_lib->mp.UrgentLatency, mode_lib->mp.TripToMemory); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 553 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 554 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 555 bool cursor_not_enough_urgent_latency_hiding = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 556 double line_time_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 557 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 558 dcn5_calculate_cursor_req_attributes( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 559 display_cfg->plane_descriptors[k].cursor.cursor_width, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 560 display_cfg->plane_descriptors[k].cursor.cursor_bpp, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 561 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 562 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 563 &s->cursor_lines_per_chunk[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 564 &s->cursor_bytes_per_line[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 565 &s->cursor_bytes_per_chunk[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 566 &s->cursor_bytes[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 567 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 568 line_time_us = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 569 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 570 dcn5_calculate_cursor_urgent_burst_factor( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 571 mode_lib->ip.cursor_buffer_size, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 572 display_cfg->plane_descriptors[k].cursor.cursor_width, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 573 s->cursor_bytes_per_chunk[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 574 s->cursor_lines_per_chunk[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 575 line_time_us, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 576 mode_lib->mp.UrgentLatency, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 577 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 578 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 579 &mode_lib->mp.UrgentBurstFactorCursor[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 580 &cursor_not_enough_urgent_latency_hiding); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 581 mode_lib->mp.UrgentBurstFactorCursorPre[k] = mode_lib->mp.UrgentBurstFactorCursor[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 582 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 583 dcn5_calculate_urgent_burst_factor( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 584 &display_cfg->plane_descriptors[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 585 mode_lib->mp.swath_width_luma_ub[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 586 mode_lib->mp.swath_width_chroma_ub[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 587 mode_lib->mp.SwathHeightY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 588 mode_lib->mp.SwathHeightC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 589 line_time_us, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 590 mode_lib->mp.UrgentLatency, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 591 display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 592 display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 593 mode_lib->mp.BytePerPixelInDETY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 594 mode_lib->mp.BytePerPixelInDETC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 595 mode_lib->mp.DETBufferSizeY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 596 mode_lib->mp.DETBufferSizeC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 597 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 598 /* output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 599 &mode_lib->mp.UrgentBurstFactorLuma[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 600 &mode_lib->mp.UrgentBurstFactorChroma[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 601 &mode_lib->mp.NotEnoughUrgentLatencyHiding[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 602 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 603 mode_lib->mp.NotEnoughUrgentLatencyHiding[k] = mode_lib->mp.NotEnoughUrgentLatencyHiding[k] || cursor_not_enough_urgent_latency_hiding; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 604 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 605 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 606 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 607 s->MaxVStartupLines[k] = dcn5_calculate_max_vstartup( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 608 mode_lib->ip.ptoi_supported, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 609 mode_lib->ip.vblank_nom_default_us, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 610 &display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 611 mode_lib->mp.WritebackDelay[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 612 DML_LOG_VERBOSE("DML::%s: k=%u MaxVStartupLines = %u\n", __func__, k, s->MaxVStartupLines[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 613 DML_LOG_VERBOSE("DML::%s: k=%u WritebackDelay = %f\n", __func__, k, mode_lib->mp.WritebackDelay[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 614 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 615 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 616 s->immediate_flip_required = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 617 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 618 s->immediate_flip_required = s->immediate_flip_required || display_cfg->plane_descriptors[k].immediate_flip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 619 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 620 DML_LOG_VERBOSE("DML::%s: immediate_flip_required = %u\n", __func__, s->immediate_flip_required); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 621 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 622 { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 623 s->DestinationLineTimesForPrefetchLessThan2 = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 624 s->VRatioPrefetchMoreThanMax = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 625 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 626 DML_LOG_VERBOSE("DML::%s: Start one iteration of prefetch schedule evaluation\n", __func__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 627 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 628 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 629 struct dml2_core_internal_DmlPipe *myPipe = &s->myPipe; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 630 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 631 DML_LOG_VERBOSE("DML::%s: k=%d MaxVStartupLines = %u\n", __func__, k, s->MaxVStartupLines[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 632 mode_lib->mp.TWait[k] = dcn5_calculate_t_wait( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 633 display_cfg->plane_descriptors[k].overrides.reserved_vblank_time_ns, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 634 mode_lib->mp.UrgentLatency, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 635 mode_lib->mp.TripToMemory, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 636 utm_soc_bb->power_management_parameters.g7_ppt_blackout_us, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 637 display_cfg->stream_descriptors->timing.drr_config.enabled); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 638 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 639 myPipe->Dppclk = mode_lib->mp.Dppclk[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 640 myPipe->Dispclk = mode_lib->mp.Dispclk; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 641 myPipe->PixelClock = ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 642 myPipe->DCFClkDeepSleep = mode_lib->mp.DCFCLKDeepSleep; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 643 myPipe->DPPPerSurface = mode_lib->mp.NoOfDPP[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 644 myPipe->ScalerEnabled = display_cfg->plane_descriptors[k].composition.scaler_info.enabled; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 645 myPipe->VRatio = display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 646 myPipe->VRatioChroma = display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_ratio; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 647 myPipe->VTaps = display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_taps; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 648 myPipe->VTapsChroma = display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_taps; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 649 myPipe->RotationAngle = display_cfg->plane_descriptors[k].composition.rotation_angle; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 650 myPipe->mirrored = display_cfg->plane_descriptors[k].composition.mirrored; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 651 myPipe->BlockWidth256BytesY = mode_lib->mp.Read256BlockWidthY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 652 myPipe->BlockHeight256BytesY = mode_lib->mp.Read256BlockHeightY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 653 myPipe->BlockWidth256BytesC = mode_lib->mp.Read256BlockWidthC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 654 myPipe->BlockHeight256BytesC = mode_lib->mp.Read256BlockHeightC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 655 myPipe->InterlaceEnable = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.interlaced; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 656 myPipe->NumberOfCursors = display_cfg->plane_descriptors[k].cursor.num_cursors; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 657 myPipe->VBlank = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_active; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 658 myPipe->HTotal = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 659 myPipe->HActive = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_active; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 660 myPipe->DCCEnable = display_cfg->plane_descriptors[k].surface.dcc.enable; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 661 myPipe->ODMMode = mode_lib->mp.ODMMode[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 662 myPipe->SourcePixelFormat = display_cfg->plane_descriptors[k].pixel_format; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 663 myPipe->BytePerPixelY = mode_lib->mp.BytePerPixelY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 664 myPipe->BytePerPixelC = mode_lib->mp.BytePerPixelC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 665 myPipe->ProgressiveToInterlaceUnitInOPP = mode_lib->ip.ptoi_supported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 666 DML_LOG_VERBOSE("DML::%s: Calling CalculatePrefetchSchedule for k=%u\n", __func__, k); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 667 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 668 CalculatePrefetchSchedule_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 669 CalculatePrefetchSchedule_params->HostVMInefficiencyFactor = s->HostVMInefficiencyFactorPrefetch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 670 CalculatePrefetchSchedule_params->myPipe = myPipe; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 671 CalculatePrefetchSchedule_params->DSCDelay = mode_lib->mp.DSCDelay[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 672 CalculatePrefetchSchedule_params->DPPCLKDelaySubtotalPlusCNVCFormater = mode_lib->ip.dppclk_delay_subtotal + mode_lib->ip.dppclk_delay_cnvc_formatter; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 673 CalculatePrefetchSchedule_params->DPPCLKDelaySCL = mode_lib->ip.dppclk_delay_scl; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 674 CalculatePrefetchSchedule_params->DPPCLKDelaySCLLBOnly = mode_lib->ip.dppclk_delay_scl_lb_only; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 675 CalculatePrefetchSchedule_params->DPPCLKDelayCNVCCursor = mode_lib->ip.dppclk_delay_cnvc_cursor; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 676 CalculatePrefetchSchedule_params->DISPCLKDelaySubtotal = mode_lib->ip.dispclk_delay_subtotal; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 677 CalculatePrefetchSchedule_params->DPP_RECOUT_WIDTH = (unsigned int)(mode_lib->mp.SwathWidthY[k] / display_cfg->plane_descriptors[k].composition.scaler_info.plane0.h_ratio); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 678 CalculatePrefetchSchedule_params->OutputFormat = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].output.output_format; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 679 CalculatePrefetchSchedule_params->MaxInterDCNTileRepeaters = mode_lib->ip.max_inter_dcn_tile_repeaters; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 680 CalculatePrefetchSchedule_params->VStartup = s->MaxVStartupLines[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 681 CalculatePrefetchSchedule_params->HostVMMinPageSize = display_cfg->plane_descriptors[k].overrides.hostvm_min_page_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 682 CalculatePrefetchSchedule_params->DynamicMetadataEnable = display_cfg->plane_descriptors[k].dynamic_meta_data.enable; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 683 CalculatePrefetchSchedule_params->DynamicMetadataVMEnabled = mode_lib->ip.dynamic_metadata_vm_enabled; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 684 CalculatePrefetchSchedule_params->DynamicMetadataLinesBeforeActiveRequired = display_cfg->plane_descriptors[k].dynamic_meta_data.lines_before_active_required; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 685 CalculatePrefetchSchedule_params->DynamicMetadataTransmittedBytes = display_cfg->plane_descriptors[k].dynamic_meta_data.transmitted_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 686 CalculatePrefetchSchedule_params->ExtraLatencyPrefetch = mode_lib->mp.ExtraLatencyPrefetch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 687 CalculatePrefetchSchedule_params->TCalc = mode_lib->mp.TCalc; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 688 CalculatePrefetchSchedule_params->vm_bytes = mode_lib->mp.vm_bytes[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 689 CalculatePrefetchSchedule_params->PixelPTEBytesPerRow = mode_lib->mp.PixelPTEBytesPerRow[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 690 CalculatePrefetchSchedule_params->PrefetchSourceLinesY = mode_lib->mp.PrefetchSourceLinesY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 691 CalculatePrefetchSchedule_params->VInitPreFillY = mode_lib->mp.VInitPreFillY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 692 CalculatePrefetchSchedule_params->MaxNumSwathY = mode_lib->mp.MaxNumSwathY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 693 CalculatePrefetchSchedule_params->PrefetchSourceLinesC = mode_lib->mp.PrefetchSourceLinesC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 694 CalculatePrefetchSchedule_params->VInitPreFillC = mode_lib->mp.VInitPreFillC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 695 CalculatePrefetchSchedule_params->MaxNumSwathC = mode_lib->mp.MaxNumSwathC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 696 CalculatePrefetchSchedule_params->swath_width_luma_ub = mode_lib->mp.swath_width_luma_ub[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 697 CalculatePrefetchSchedule_params->swath_width_chroma_ub = mode_lib->mp.swath_width_chroma_ub[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 698 CalculatePrefetchSchedule_params->SwathHeightY = mode_lib->mp.SwathHeightY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 699 CalculatePrefetchSchedule_params->SwathHeightC = mode_lib->mp.SwathHeightC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 700 CalculatePrefetchSchedule_params->TWait = mode_lib->mp.TWait[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 701 CalculatePrefetchSchedule_params->Ttrip = mode_lib->mp.TripToMemory; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 702 CalculatePrefetchSchedule_params->Turg = mode_lib->mp.UrgentLatency; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 703 CalculatePrefetchSchedule_params->setup_for_tdlut = display_cfg->plane_descriptors[k].tdlut.setup_for_tdlut; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 704 CalculatePrefetchSchedule_params->tdlut_pte_bytes_per_frame = s->tdlut_pte_bytes_per_frame[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 705 CalculatePrefetchSchedule_params->tdlut_bytes_per_frame = s->tdlut_bytes_per_frame[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 706 CalculatePrefetchSchedule_params->tdlut_opt_time = s->tdlut_opt_time[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 707 CalculatePrefetchSchedule_params->tdlut_drain_time = s->tdlut_drain_time[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 708 CalculatePrefetchSchedule_params->num_cursors = (display_cfg->plane_descriptors[k].cursor.cursor_width > 0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 709 CalculatePrefetchSchedule_params->cursor_bytes_per_chunk = s->cursor_bytes_per_chunk[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 710 CalculatePrefetchSchedule_params->cursor_bytes_per_line = s->cursor_bytes_per_line[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 711 CalculatePrefetchSchedule_params->dcc_enable = display_cfg->plane_descriptors[k].surface.dcc.enable; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 712 CalculatePrefetchSchedule_params->mrq_present = mode_lib->ip.dcn_mrq_present; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 713 CalculatePrefetchSchedule_params->meta_row_bytes = mode_lib->mp.meta_row_bytes[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 714 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 715 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 716 CalculatePrefetchSchedule_params->DSTXAfterScaler = &mode_lib->mp.DSTXAfterScaler[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 717 CalculatePrefetchSchedule_params->DSTYAfterScaler = &mode_lib->mp.DSTYAfterScaler[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 718 CalculatePrefetchSchedule_params->dst_y_prefetch = &mode_lib->mp.dst_y_prefetch[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 719 CalculatePrefetchSchedule_params->dst_y_per_vm_vblank = &mode_lib->mp.dst_y_per_vm_vblank[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 720 CalculatePrefetchSchedule_params->dst_y_per_row_vblank = &mode_lib->mp.dst_y_per_row_vblank[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 721 CalculatePrefetchSchedule_params->VRatioPrefetchY = &mode_lib->mp.VRatioPrefetchY[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 722 CalculatePrefetchSchedule_params->VRatioPrefetchC = &mode_lib->mp.VRatioPrefetchC[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 723 CalculatePrefetchSchedule_params->RequiredPrefetchPixelDataBWLuma = &mode_lib->mp.RequiredPrefetchPixelDataBWLuma[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 724 CalculatePrefetchSchedule_params->RequiredPrefetchPixelDataBWChroma = &mode_lib->mp.RequiredPrefetchPixelDataBWChroma[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 725 CalculatePrefetchSchedule_params->NotEnoughTimeForDynamicMetadata = &mode_lib->mp.NotEnoughTimeForDynamicMetadata[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 726 CalculatePrefetchSchedule_params->Tno_bw = &mode_lib->mp.Tno_bw[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 727 CalculatePrefetchSchedule_params->Tno_bw_flip = &mode_lib->mp.Tno_bw_flip[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 728 CalculatePrefetchSchedule_params->prefetch_vmrow_bw = &mode_lib->mp.prefetch_vmrow_bw[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 729 CalculatePrefetchSchedule_params->Tdmdl_vm = &mode_lib->mp.Tdmdl_vm[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 730 CalculatePrefetchSchedule_params->Tdmdl = &mode_lib->mp.Tdmdl[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 731 CalculatePrefetchSchedule_params->TSetup = &mode_lib->mp.TSetup[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 732 CalculatePrefetchSchedule_params->Tvm_trips = &s->Tvm_trips[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 733 CalculatePrefetchSchedule_params->Tr0_trips = &s->Tr0_trips[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 734 CalculatePrefetchSchedule_params->Tvm_trips_flip = &s->Tvm_trips_flip[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 735 CalculatePrefetchSchedule_params->Tr0_trips_flip = &s->Tr0_trips_flip[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 736 CalculatePrefetchSchedule_params->Tvm_trips_flip_rounded = &s->Tvm_trips_flip_rounded[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 737 CalculatePrefetchSchedule_params->Tr0_trips_flip_rounded = &s->Tr0_trips_flip_rounded[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 738 CalculatePrefetchSchedule_params->VUpdateOffsetPix = &mode_lib->mp.VUpdateOffsetPix[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 739 CalculatePrefetchSchedule_params->VUpdateWidthPix = &mode_lib->mp.VUpdateWidthPix[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 740 CalculatePrefetchSchedule_params->VReadyOffsetPix = &mode_lib->mp.VReadyOffsetPix[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 741 CalculatePrefetchSchedule_params->prefetch_cursor_bw = &mode_lib->mp.prefetch_cursor_bw[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 742 CalculatePrefetchSchedule_params->prefetch_sw_bytes = &s->prefetch_sw_bytes[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 743 CalculatePrefetchSchedule_params->Tpre_rounded = &s->Tpre_rounded[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 744 CalculatePrefetchSchedule_params->Tpre_oto = &s->Tpre_oto[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 745 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 746 mode_lib->mp.NoTimeToPrefetch[k] = dcn5_calculate_prefetch_schedule(&mode_lib->scratch, CalculatePrefetchSchedule_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 747 DML_LOG_VERBOSE("DML::%s: k=%0u NoTimeToPrefetch=%0d\n", __func__, k, mode_lib->mp.NoTimeToPrefetch[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 748 mode_lib->mp.VStartupMin[k] = s->MaxVStartupLines[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 749 } // for k 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 750 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 751 mode_lib->mp.PrefetchModeSupported = true; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 752 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 753 if (mode_lib->mp.NoTimeToPrefetch[k] == true || 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 754 mode_lib->mp.NotEnoughTimeForDynamicMetadata[k] || 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 755 mode_lib->mp.DSTYAfterScaler[k] > 8) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 756 DML_LOG_VERBOSE("DML::%s: k=%u, NoTimeToPrefetch = %0d\n", __func__, k, mode_lib->mp.NoTimeToPrefetch[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 757 DML_LOG_VERBOSE("DML::%s: k=%u, NotEnoughTimeForDynamicMetadata=%u\n", __func__, k, mode_lib->mp.NotEnoughTimeForDynamicMetadata[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 758 DML_LOG_VERBOSE("DML::%s: k=%u, DSTYAfterScaler=%u (should be <= 0)\n", __func__, k, mode_lib->mp.DSTYAfterScaler[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 759 mode_lib->mp.PrefetchModeSupported = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 760 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 761 if (mode_lib->mp.dst_y_prefetch[k] < 2) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 762 s->DestinationLineTimesForPrefetchLessThan2 = true; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 763 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 764 if (mode_lib->mp.VRatioPrefetchY[k] > __DML2_CALCS_MAX_VRATIO_PRE__ || 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 765 mode_lib->mp.VRatioPrefetchC[k] > __DML2_CALCS_MAX_VRATIO_PRE__) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 766 s->VRatioPrefetchMoreThanMax = true; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 767 DML_LOG_VERBOSE("DML::%s: k=%d, VRatioPrefetchY=%f (should not be < %f)\n", __func__, k, mode_lib->mp.VRatioPrefetchY[k], __DML2_CALCS_MAX_VRATIO_PRE__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 768 DML_LOG_VERBOSE("DML::%s: k=%d, VRatioPrefetchC=%f (should not be < %f)\n", __func__, k, mode_lib->mp.VRatioPrefetchC[k], __DML2_CALCS_MAX_VRATIO_PRE__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 769 DML_LOG_VERBOSE("DML::%s: VRatioPrefetchMoreThanMax = %u\n", __func__, s->VRatioPrefetchMoreThanMax); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 770 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 771 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 772 if (mode_lib->mp.NotEnoughUrgentLatencyHiding[k]) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 773 DML_LOG_VERBOSE("DML::%s: k=%u, NotEnoughUrgentLatencyHiding = %u\n", __func__, k, mode_lib->mp.NotEnoughUrgentLatencyHiding[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 774 mode_lib->mp.PrefetchModeSupported = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 775 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 776 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 777 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 778 if (s->VRatioPrefetchMoreThanMax == true || s->DestinationLineTimesForPrefetchLessThan2 == true) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 779 DML_LOG_VERBOSE("DML::%s: VRatioPrefetchMoreThanMax = %u\n", __func__, s->VRatioPrefetchMoreThanMax); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 780 DML_LOG_VERBOSE("DML::%s: DestinationLineTimesForPrefetchLessThan2 = %u\n", __func__, s->DestinationLineTimesForPrefetchLessThan2); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 781 mode_lib->mp.PrefetchModeSupported = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 782 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 783 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 784 DML_LOG_VERBOSE("DML::%s: Prefetch schedule is %sOK at vstartup = %u\n", __func__, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 785 mode_lib->mp.PrefetchModeSupported ? "" : "NOT ", CalculatePrefetchSchedule_params->VStartup); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 786 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 787 // Prefetch schedule OK, now check prefetch bw 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 788 if (mode_lib->mp.PrefetchModeSupported == true) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 789 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 790 double line_time_us = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 791 ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 792 dcn5_calculate_urgent_burst_factor( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 793 &display_cfg->plane_descriptors[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 794 mode_lib->mp.swath_width_luma_ub[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 795 mode_lib->mp.swath_width_chroma_ub[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 796 mode_lib->mp.SwathHeightY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 797 mode_lib->mp.SwathHeightC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 798 line_time_us, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 799 mode_lib->mp.UrgentLatency, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 800 mode_lib->mp.VRatioPrefetchY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 801 mode_lib->mp.VRatioPrefetchC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 802 mode_lib->mp.BytePerPixelInDETY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 803 mode_lib->mp.BytePerPixelInDETC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 804 mode_lib->mp.DETBufferSizeY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 805 mode_lib->mp.DETBufferSizeC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 806 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 807 &mode_lib->mp.UrgentBurstFactorLumaPre[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 808 &mode_lib->mp.UrgentBurstFactorChromaPre[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 809 &mode_lib->mp.NotEnoughUrgentLatencyHidingPre[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 810 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 811 DML_LOG_VERBOSE("DML::%s: k=%0u DPPPerSurface=%u\n", __func__, k, mode_lib->mp.NoOfDPP[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 812 DML_LOG_VERBOSE("DML::%s: k=%0u UrgentBurstFactorLuma=%f\n", __func__, k, mode_lib->mp.UrgentBurstFactorLuma[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 813 DML_LOG_VERBOSE("DML::%s: k=%0u UrgentBurstFactorChroma=%f\n", __func__, k, mode_lib->mp.UrgentBurstFactorChroma[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 814 DML_LOG_VERBOSE("DML::%s: k=%0u UrgentBurstFactorLumaPre=%f\n", __func__, k, mode_lib->mp.UrgentBurstFactorLumaPre[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 815 DML_LOG_VERBOSE("DML::%s: k=%0u UrgentBurstFactorChromaPre=%f\n", __func__, k, mode_lib->mp.UrgentBurstFactorChromaPre[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 816 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 817 DML_LOG_VERBOSE("DML::%s: k=%0u VRatioPrefetchY=%f\n", __func__, k, mode_lib->mp.VRatioPrefetchY[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 818 DML_LOG_VERBOSE("DML::%s: k=%0u VRatioY=%f\n", __func__, k, display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 819 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 820 DML_LOG_VERBOSE("DML::%s: k=%0u prefetch_vmrow_bw=%f\n", __func__, k, mode_lib->mp.prefetch_vmrow_bw[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 821 DML_LOG_VERBOSE("DML::%s: k=%0u vactive_sw_bw_l=%f\n", __func__, k, mode_lib->mp.vactive_sw_bw_l[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 822 DML_LOG_VERBOSE("DML::%s: k=%0u vactive_sw_bw_c=%f\n", __func__, k, mode_lib->mp.vactive_sw_bw_c[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 823 DML_LOG_VERBOSE("DML::%s: k=%0u cursor_bw=%f\n", __func__, k, mode_lib->mp.cursor_bw[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 824 DML_LOG_VERBOSE("DML::%s: k=%0u dpte_row_bw=%f\n", __func__, k, mode_lib->mp.dpte_row_bw[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 825 DML_LOG_VERBOSE("DML::%s: k=%0u meta_row_bw=%f\n", __func__, k, mode_lib->mp.meta_row_bw[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 826 DML_LOG_VERBOSE("DML::%s: k=%0u RequiredPrefetchPixelDataBWLuma=%f\n", __func__, k, mode_lib->mp.RequiredPrefetchPixelDataBWLuma[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 827 DML_LOG_VERBOSE("DML::%s: k=%0u RequiredPrefetchPixelDataBWChroma=%f\n", __func__, k, mode_lib->mp.RequiredPrefetchPixelDataBWChroma[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 828 DML_LOG_VERBOSE("DML::%s: k=%0u prefetch_cursor_bw=%f\n", __func__, k, mode_lib->mp.prefetch_cursor_bw[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 829 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 830 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 831 for (k = 0; k <= s->num_active_planes - 1; k++) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 832 mode_lib->mp.final_flip_bw[k] = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 833 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 834 calculate_peak_bandwidth_params->urg_vactive_bandwidth_required = mode_lib->mp.urg_vactive_bandwidth_required; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 835 calculate_peak_bandwidth_params->urg_bandwidth_required = mode_lib->mp.urg_bandwidth_required; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 836 calculate_peak_bandwidth_params->urg_bandwidth_required_qual = mode_lib->mp.urg_bandwidth_required_qual; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 837 calculate_peak_bandwidth_params->non_urg_bandwidth_required = mode_lib->mp.non_urg_bandwidth_required; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 838 calculate_peak_bandwidth_params->surface_avg_vactive_required_bw = s->surface_dummy_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 839 calculate_peak_bandwidth_params->surface_peak_required_bw = s->surface_dummy_bw0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 840 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 841 calculate_peak_bandwidth_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 842 calculate_peak_bandwidth_params->inc_flip_bw = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 843 calculate_peak_bandwidth_params->num_active_planes = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 844 calculate_peak_bandwidth_params->num_of_dpp = mode_lib->mp.NoOfDPP; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 845 calculate_peak_bandwidth_params->dcc_dram_bw_nom_overhead_factor_p0 = mode_lib->mp.dcc_dram_bw_nom_overhead_factor_p0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 846 calculate_peak_bandwidth_params->dcc_dram_bw_nom_overhead_factor_p1 = mode_lib->mp.dcc_dram_bw_nom_overhead_factor_p1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 847 calculate_peak_bandwidth_params->dcc_dram_bw_pref_overhead_factor_p0 = mode_lib->mp.dcc_dram_bw_pref_overhead_factor_p0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 848 calculate_peak_bandwidth_params->dcc_dram_bw_pref_overhead_factor_p1 = mode_lib->mp.dcc_dram_bw_pref_overhead_factor_p1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 849 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 850 calculate_peak_bandwidth_params->surface_read_bandwidth_l = mode_lib->mp.vactive_sw_bw_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 851 calculate_peak_bandwidth_params->surface_read_bandwidth_c = mode_lib->mp.vactive_sw_bw_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 852 calculate_peak_bandwidth_params->prefetch_bandwidth_l = mode_lib->mp.RequiredPrefetchPixelDataBWLuma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 853 calculate_peak_bandwidth_params->prefetch_bandwidth_c = mode_lib->mp.RequiredPrefetchPixelDataBWChroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 854 calculate_peak_bandwidth_params->excess_vactive_fill_bw_l = mode_lib->mp.excess_vactive_fill_bw_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 855 calculate_peak_bandwidth_params->excess_vactive_fill_bw_c = mode_lib->mp.excess_vactive_fill_bw_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 856 calculate_peak_bandwidth_params->cursor_bw = mode_lib->mp.cursor_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 857 calculate_peak_bandwidth_params->dpte_row_bw = mode_lib->mp.dpte_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 858 calculate_peak_bandwidth_params->meta_row_bw = mode_lib->mp.meta_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 859 calculate_peak_bandwidth_params->prefetch_cursor_bw = mode_lib->mp.prefetch_cursor_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 860 calculate_peak_bandwidth_params->prefetch_vmrow_bw = mode_lib->mp.prefetch_vmrow_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 861 calculate_peak_bandwidth_params->flip_bw = mode_lib->mp.final_flip_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 862 calculate_peak_bandwidth_params->urgent_burst_factor_l = mode_lib->mp.UrgentBurstFactorLuma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 863 calculate_peak_bandwidth_params->urgent_burst_factor_c = mode_lib->mp.UrgentBurstFactorChroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 864 calculate_peak_bandwidth_params->urgent_burst_factor_cursor = mode_lib->mp.UrgentBurstFactorCursor; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 865 calculate_peak_bandwidth_params->urgent_burst_factor_prefetch_l = mode_lib->mp.UrgentBurstFactorLumaPre; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 866 calculate_peak_bandwidth_params->urgent_burst_factor_prefetch_c = mode_lib->mp.UrgentBurstFactorChromaPre; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 867 calculate_peak_bandwidth_params->urgent_burst_factor_prefetch_cursor = mode_lib->mp.UrgentBurstFactorCursorPre; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 868 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 869 dcn5_calculate_peak_bandwidth_required( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 870 &mode_lib->scratch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 871 calculate_peak_bandwidth_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 872 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 873 // Check urg peak bandwidth against available urg bw 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 874 // check at SDP and DRAM, for all soc states (Sys Active) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 875 dcn5_check_urgent_bandwidth_support( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 876 &mode_lib->mp.FractionOfUrgentBandwidth, // double* frac_urg_bandwidth 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 877 &mode_lib->mp.PrefetchModeSupported, // prefetch bw ok 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 878 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 879 **mode_lib->mp.non_urg_bandwidth_required, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 880 **mode_lib->mp.urg_bandwidth_required, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 881 mode_lib->mp.dram_bw_mbps); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 882 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 883 if (!mode_lib->mp.PrefetchModeSupported) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 884 DML_LOG_VERBOSE("DML::%s: Bandwidth not sufficient for prefetch!\n", __func__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 885 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 886 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 887 if (mode_lib->mp.NotEnoughUrgentLatencyHidingPre[k]) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 888 DML_LOG_VERBOSE("DML::%s: k=%u, NotEnoughUrgentLatencyHidingPre = %u\n", __func__, k, mode_lib->mp.NotEnoughUrgentLatencyHidingPre[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 889 mode_lib->mp.PrefetchModeSupported = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 890 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 891 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 892 } // prefetch schedule ok 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 893 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 894 // Prefetch schedule and prefetch bw ok, now check flip bw 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 895 if (mode_lib->mp.PrefetchModeSupported == true) { // prefetch schedule and prefetch bw ok, now check flip bw 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 896 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 897 mode_lib->mp.BandwidthAvailableForImmediateFlip = 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 898 dcn5_get_bandwidth_available_for_immediate_flip( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 899 **mode_lib->mp.urg_bandwidth_required_qual, // no flip 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 900 mode_lib->mp.dram_bw_mbps); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 901 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 902 mode_lib->mp.TotImmediateFlipBytes = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 903 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 904 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 905 if (display_cfg->plane_descriptors[k].immediate_flip) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 906 s->per_pipe_flip_bytes[k] = dcn5_get_pipe_flip_bytes(s->HostVMInefficiencyFactor, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 907 mode_lib->mp.vm_bytes[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 908 mode_lib->mp.PixelPTEBytesPerRow[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 909 mode_lib->mp.meta_row_bytes[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 910 } else { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 911 s->per_pipe_flip_bytes[k] = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 912 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 913 mode_lib->mp.TotImmediateFlipBytes += s->per_pipe_flip_bytes[k] * mode_lib->mp.NoOfDPP[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 914 DML_LOG_VERBOSE("DML::%s: k = %u\n", __func__, k); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 915 DML_LOG_VERBOSE("DML::%s: DPPPerSurface = %u\n", __func__, mode_lib->mp.NoOfDPP[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 916 DML_LOG_VERBOSE("DML::%s: vm_bytes = %u\n", __func__, mode_lib->mp.vm_bytes[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 917 DML_LOG_VERBOSE("DML::%s: PixelPTEBytesPerRow = %u\n", __func__, mode_lib->mp.PixelPTEBytesPerRow[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 918 DML_LOG_VERBOSE("DML::%s: meta_row_bytes = %u\n", __func__, mode_lib->mp.meta_row_bytes[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 919 DML_LOG_VERBOSE("DML::%s: TotImmediateFlipBytes = %u\n", __func__, mode_lib->mp.TotImmediateFlipBytes); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 920 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 921 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 922 dcn5_calculate_flip_schedule( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 923 &mode_lib->scratch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 924 display_cfg->plane_descriptors[k].immediate_flip, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 925 0, // use_lb_flip_bw 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 926 s->HostVMInefficiencyFactor, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 927 s->Tvm_trips_flip[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 928 s->Tr0_trips_flip[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 929 s->Tvm_trips_flip_rounded[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 930 s->Tr0_trips_flip_rounded[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 931 display_cfg->gpuvm_enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 932 mode_lib->mp.vm_bytes[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 933 mode_lib->mp.PixelPTEBytesPerRow[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 934 mode_lib->mp.BandwidthAvailableForImmediateFlip, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 935 mode_lib->mp.TotImmediateFlipBytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 936 display_cfg->plane_descriptors[k].pixel_format, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 937 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000), 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 938 display_cfg->plane_descriptors[k].composition.scaler_info.plane0.v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 939 display_cfg->plane_descriptors[k].composition.scaler_info.plane1.v_ratio, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 940 mode_lib->mp.Tno_bw[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 941 mode_lib->mp.dpte_row_height[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 942 mode_lib->mp.dpte_row_height_chroma[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 943 mode_lib->mp.use_one_row_for_frame_flip[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 944 mode_lib->ip.max_flip_time_us, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 945 mode_lib->ip.max_flip_time_lines, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 946 s->per_pipe_flip_bytes[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 947 mode_lib->mp.meta_row_bytes[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 948 mode_lib->mp.meta_row_height[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 949 mode_lib->mp.meta_row_height_chroma[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 950 mode_lib->ip.dcn_mrq_present && display_cfg->plane_descriptors[k].surface.dcc.enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 951 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 952 // Output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 953 &mode_lib->mp.dst_y_per_vm_flip[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 954 &mode_lib->mp.dst_y_per_row_flip[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 955 &mode_lib->mp.final_flip_bw[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 956 &mode_lib->mp.ImmediateFlipSupportedForPipe[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 957 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 958 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 959 calculate_peak_bandwidth_params->urg_vactive_bandwidth_required = s->dummy_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 960 calculate_peak_bandwidth_params->urg_bandwidth_required = mode_lib->mp.urg_bandwidth_required_flip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 961 calculate_peak_bandwidth_params->urg_bandwidth_required_qual = s->dummy_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 962 calculate_peak_bandwidth_params->non_urg_bandwidth_required = mode_lib->mp.non_urg_bandwidth_required_flip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 963 calculate_peak_bandwidth_params->surface_avg_vactive_required_bw = s->surface_dummy_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 964 calculate_peak_bandwidth_params->surface_peak_required_bw = s->surface_dummy_bw0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 965 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 966 calculate_peak_bandwidth_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 967 calculate_peak_bandwidth_params->inc_flip_bw = 1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 968 calculate_peak_bandwidth_params->num_active_planes = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 969 calculate_peak_bandwidth_params->num_of_dpp = mode_lib->mp.NoOfDPP; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 970 calculate_peak_bandwidth_params->dcc_dram_bw_nom_overhead_factor_p0 = mode_lib->mp.dcc_dram_bw_nom_overhead_factor_p0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 971 calculate_peak_bandwidth_params->dcc_dram_bw_nom_overhead_factor_p1 = mode_lib->mp.dcc_dram_bw_nom_overhead_factor_p1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 972 calculate_peak_bandwidth_params->dcc_dram_bw_pref_overhead_factor_p0 = mode_lib->mp.dcc_dram_bw_pref_overhead_factor_p0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 973 calculate_peak_bandwidth_params->dcc_dram_bw_pref_overhead_factor_p1 = mode_lib->mp.dcc_dram_bw_pref_overhead_factor_p1; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 974 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 975 calculate_peak_bandwidth_params->surface_read_bandwidth_l = mode_lib->mp.vactive_sw_bw_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 976 calculate_peak_bandwidth_params->surface_read_bandwidth_c = mode_lib->mp.vactive_sw_bw_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 977 calculate_peak_bandwidth_params->prefetch_bandwidth_l = mode_lib->mp.RequiredPrefetchPixelDataBWLuma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 978 calculate_peak_bandwidth_params->prefetch_bandwidth_c = mode_lib->mp.RequiredPrefetchPixelDataBWChroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 979 calculate_peak_bandwidth_params->excess_vactive_fill_bw_l = mode_lib->mp.excess_vactive_fill_bw_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 980 calculate_peak_bandwidth_params->excess_vactive_fill_bw_c = mode_lib->mp.excess_vactive_fill_bw_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 981 calculate_peak_bandwidth_params->cursor_bw = mode_lib->mp.cursor_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 982 calculate_peak_bandwidth_params->dpte_row_bw = mode_lib->mp.dpte_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 983 calculate_peak_bandwidth_params->meta_row_bw = mode_lib->mp.meta_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 984 calculate_peak_bandwidth_params->prefetch_cursor_bw = mode_lib->mp.prefetch_cursor_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 985 calculate_peak_bandwidth_params->prefetch_vmrow_bw = mode_lib->mp.prefetch_vmrow_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 986 calculate_peak_bandwidth_params->flip_bw = mode_lib->mp.final_flip_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 987 calculate_peak_bandwidth_params->urgent_burst_factor_l = mode_lib->mp.UrgentBurstFactorLuma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 988 calculate_peak_bandwidth_params->urgent_burst_factor_c = mode_lib->mp.UrgentBurstFactorChroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 989 calculate_peak_bandwidth_params->urgent_burst_factor_cursor = mode_lib->mp.UrgentBurstFactorCursor; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 990 calculate_peak_bandwidth_params->urgent_burst_factor_prefetch_l = mode_lib->mp.UrgentBurstFactorLumaPre; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 991 calculate_peak_bandwidth_params->urgent_burst_factor_prefetch_c = mode_lib->mp.UrgentBurstFactorChromaPre; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 992 calculate_peak_bandwidth_params->urgent_burst_factor_prefetch_cursor = mode_lib->mp.UrgentBurstFactorCursorPre; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 993 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 994 dcn5_calculate_peak_bandwidth_required( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 995 &mode_lib->scratch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 996 calculate_peak_bandwidth_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 997 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 998 dcn5_check_immediate_flip_bandwidth_support( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 999 &mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip, // double* frac_urg_bandwidth_flip 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1000 &mode_lib->mp.ImmediateFlipSupported, // bool* flip_bandwidth_support_ok 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1001 **mode_lib->mp.urg_bandwidth_required_flip, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1002 **mode_lib->mp.non_urg_bandwidth_required_flip, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1003 mode_lib->mp.dram_bw_mbps); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1004 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1005 if (!mode_lib->mp.ImmediateFlipSupported) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1006 DML_LOG_VERBOSE("DML::%s: Bandwidth not sufficient for flip!", __func__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1007 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1008 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1009 if (display_cfg->plane_descriptors[k].immediate_flip && mode_lib->mp.ImmediateFlipSupportedForPipe[k] == false) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1010 mode_lib->mp.ImmediateFlipSupported = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1011 DML_LOG_VERBOSE("DML::%s: Pipe %0d not supporting iflip!\n", __func__, k); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1012 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1013 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1014 } else { // flip or prefetch not support 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1015 mode_lib->mp.ImmediateFlipSupported = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1016 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1017 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1018 // consider flip support is okay if the flip bw is ok or (when user does't require a iflip and there is no host vm) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1019 must_support_iflip = display_cfg->hostvm_enable || s->immediate_flip_required; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1020 mode_lib->mp.PrefetchAndImmediateFlipSupported = (mode_lib->mp.PrefetchModeSupported == true && (!must_support_iflip || mode_lib->mp.ImmediateFlipSupported)); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1021 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1022 DML_LOG_VERBOSE("DML::%s: PrefetchModeSupported = %u\n", __func__, mode_lib->mp.PrefetchModeSupported); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1023 for (k = 0; k < s->num_active_planes; ++k) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1024 DML_LOG_VERBOSE("DML::%s: immediate_flip_required[%u] = %u\n", __func__, k, display_cfg->plane_descriptors[k].immediate_flip); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1025 DML_LOG_VERBOSE("DML::%s: HostVMEnable = %u\n", __func__, display_cfg->hostvm_enable); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1026 DML_LOG_VERBOSE("DML::%s: ImmediateFlipSupported = %u\n", __func__, mode_lib->mp.ImmediateFlipSupported); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1027 DML_LOG_VERBOSE("DML::%s: PrefetchAndImmediateFlipSupported = %u\n", __func__, mode_lib->mp.PrefetchAndImmediateFlipSupported); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1028 DML_LOG_VERBOSE("DML::%s: Done one iteration: k=%d, MaxVStartupLines=%u\n", __func__, k, s->MaxVStartupLines[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1029 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1030 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1031 for (k = 0; k < s->num_active_planes; ++k) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1032 DML_LOG_VERBOSE("DML::%s: k=%d MaxVStartupLines = %u\n", __func__, k, s->MaxVStartupLines[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1033 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1034 if (!mode_lib->mp.PrefetchAndImmediateFlipSupported) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1035 DML_LOG_VERBOSE("DML::%s: Bad, Prefetch and flip scheduling solution NOT found!\n", __func__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1036 } else { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1037 DML_LOG_VERBOSE("DML::%s: Good, Prefetch and flip scheduling solution found\n", __func__); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1038 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1039 // DCC Configuration 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1040 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1041 DML_LOG_VERBOSE("DML::%s: Calculate DCC configuration for surface k=%u\n", __func__, k); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1042 dcn5_calculate_dcc_configuration( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1043 display_cfg->plane_descriptors[k].surface.dcc.enable, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1044 display_cfg->overrides.dcc_programming_assumes_scan_direction_unknown, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1045 display_cfg->plane_descriptors[k].pixel_format, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1046 display_cfg->plane_descriptors[k].surface.plane0.width, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1047 display_cfg->plane_descriptors[k].surface.plane1.width, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1048 display_cfg->plane_descriptors[k].surface.plane0.height, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1049 display_cfg->plane_descriptors[k].surface.plane1.height, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1050 s->NomDETInKByte, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1051 mode_lib->mp.Read256BlockHeightY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1052 mode_lib->mp.Read256BlockHeightC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1053 display_cfg->plane_descriptors[k].surface.tiling, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1054 mode_lib->mp.BytePerPixelY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1055 mode_lib->mp.BytePerPixelC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1056 mode_lib->mp.BytePerPixelInDETY[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1057 mode_lib->mp.BytePerPixelInDETC[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1058 display_cfg->plane_descriptors[k].composition.rotation_angle, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1059 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1060 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1061 &mode_lib->mp.RequestLuma[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1062 &mode_lib->mp.RequestChroma[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1063 &mode_lib->mp.DCCYMaxUncompressedBlock[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1064 &mode_lib->mp.DCCCMaxUncompressedBlock[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1065 &mode_lib->mp.DCCYMaxCompressedBlock[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1066 &mode_lib->mp.DCCCMaxCompressedBlock[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1067 &mode_lib->mp.DCCYIndependentBlock[k], 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1068 &mode_lib->mp.DCCCIndependentBlock[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1069 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1070 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1071 //Watermarks and NB P-State/DRAM Clock Change Support 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1072 s->mmSOCParameters.UrgentLatency = mode_lib->mp.UrgentLatency; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1073 s->mmSOCParameters.ExtraLatency = mode_lib->mp.ExtraLatency; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1074 s->mmSOCParameters.ExtraLatency_sr = mode_lib->mp.ExtraLatency_sr; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1075 s->mmSOCParameters.WritebackLatency = utm_soc_bb->writeback_base_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1076 s->mmSOCParameters.DRAMClockChangeLatency = utm_soc_bb->power_management_parameters.dram_clk_change_blackout_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1077 s->mmSOCParameters.FCLKChangeLatency = utm_soc_bb->power_management_parameters.fclk_change_blackout_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1078 s->mmSOCParameters.SRExitTime = utm_soc_bb->power_management_parameters.stutter_exit_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1079 s->mmSOCParameters.SREnterPlusExitTime = utm_soc_bb->power_management_parameters.stutter_enter_plus_exit_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1080 s->mmSOCParameters.SRExitZ8Time = utm_soc_bb->power_management_parameters.z8_stutter_exit_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1081 s->mmSOCParameters.SREnterPlusExitZ8Time = utm_soc_bb->power_management_parameters.z8_stutter_enter_plus_exit_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1082 s->mmSOCParameters.USRRetrainingLatency = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1083 s->mmSOCParameters.SMNLatency = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1084 s->mmSOCParameters.temp_read_or_ppt_blackout_us = utm_soc_bb->power_management_parameters.g7_ppt_blackout_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1085 s->mmSOCParameters.qos_type = dml2_qos_param_type_dcn4x; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1086 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1087 CalculateWatermarks_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1088 CalculateWatermarks_params->USRRetrainingRequired = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1089 CalculateWatermarks_params->NumberOfActiveSurfaces = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1090 CalculateWatermarks_params->MaxLineBufferLines = mode_lib->ip.max_line_buffer_lines; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1091 CalculateWatermarks_params->LineBufferSize = mode_lib->ip.line_buffer_size_bits; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1092 CalculateWatermarks_params->WritebackInterfaceBufferSize = mode_lib->ip.writeback_interface_buffer_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1093 CalculateWatermarks_params->DCFCLK = mode_lib->mp.Dcfclk; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1094 CalculateWatermarks_params->SynchronizeTimings = display_cfg->overrides.synchronize_timings; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1095 CalculateWatermarks_params->SynchronizeDRRDisplaysForUCLKPStateChange = display_cfg->overrides.synchronize_ddr_displays_for_uclk_pstate_change; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1096 CalculateWatermarks_params->dpte_group_bytes = mode_lib->mp.dpte_group_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1097 CalculateWatermarks_params->mmSOCParameters = s->mmSOCParameters; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1098 CalculateWatermarks_params->WritebackChunkSize = mode_lib->ip.writeback_chunk_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1099 CalculateWatermarks_params->SOCCLK = s->SOCCLK; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1100 CalculateWatermarks_params->DCFClkDeepSleep = mode_lib->mp.DCFCLKDeepSleep; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1101 CalculateWatermarks_params->DETBufferSizeY = mode_lib->mp.DETBufferSizeY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1102 CalculateWatermarks_params->DETBufferSizeC = mode_lib->mp.DETBufferSizeC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1103 CalculateWatermarks_params->SwathHeightY = mode_lib->mp.SwathHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1104 CalculateWatermarks_params->SwathHeightC = mode_lib->mp.SwathHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1105 //CalculateWatermarks_params->LBBitPerPixel = 57; //FIXME_STAGE2 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1106 CalculateWatermarks_params->SwathWidthY = mode_lib->mp.SwathWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1107 CalculateWatermarks_params->SwathWidthC = mode_lib->mp.SwathWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1108 CalculateWatermarks_params->BytePerPixelDETY = mode_lib->mp.BytePerPixelInDETY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1109 CalculateWatermarks_params->BytePerPixelDETC = mode_lib->mp.BytePerPixelInDETC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1110 CalculateWatermarks_params->DSTXAfterScaler = mode_lib->mp.DSTXAfterScaler; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1111 CalculateWatermarks_params->DSTYAfterScaler = mode_lib->mp.DSTYAfterScaler; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1112 CalculateWatermarks_params->UnboundedRequestEnabled = mode_lib->mp.UnboundedRequestEnabled; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1113 CalculateWatermarks_params->CompressedBufferSizeInkByte = mode_lib->mp.CompressedBufferSizeInkByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1114 CalculateWatermarks_params->meta_row_height_l = mode_lib->mp.meta_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1115 CalculateWatermarks_params->meta_row_height_c = mode_lib->mp.meta_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1116 CalculateWatermarks_params->DPPPerSurface = mode_lib->mp.NoOfDPP; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1117 CalculateWatermarks_params->uclk_pstate_switch_modes = mode_lib->mp.uclk_pstate_switch_modes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1118 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1119 // Output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1120 CalculateWatermarks_params->Watermark = &mode_lib->mp.Watermark; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1121 CalculateWatermarks_params->DRAMClockChangeSupport = mode_lib->mp.DRAMClockChangeSupport; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1122 CalculateWatermarks_params->global_dram_clock_change_support_required = &s->dummy_boolean[0]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1123 CalculateWatermarks_params->global_dram_clock_change_supported = &mode_lib->mp.global_dram_clock_change_supported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1124 CalculateWatermarks_params->MaxActiveDRAMClockChangeLatencySupported = mode_lib->mp.MaxActiveDRAMClockChangeLatencySupported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1125 CalculateWatermarks_params->FCLKChangeSupport = mode_lib->mp.FCLKChangeSupport; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1126 CalculateWatermarks_params->global_fclk_change_supported = &mode_lib->mp.global_fclk_change_supported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1127 CalculateWatermarks_params->MaxActiveFCLKChangeLatencySupported = &mode_lib->mp.MaxActiveFCLKChangeLatencySupported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1128 CalculateWatermarks_params->USRRetrainingSupport = &mode_lib->mp.USRRetrainingSupport; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1129 CalculateWatermarks_params->temp_read_or_ppt_support = mode_lib->mp.temp_read_or_ppt_support; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1130 CalculateWatermarks_params->global_temp_read_or_ppt_supported = &mode_lib->mp.global_temp_read_or_ppt_supported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 @1131 CalculateWatermarks_params->VActiveLatencyHidingMargin = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1132 CalculateWatermarks_params->VActiveLatencyHidingUs = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1133 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1134 dcn5_calculate_watermarks_and_dram_speed_change_support(&mode_lib->scratch, CalculateWatermarks_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1135 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1136 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1137 if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1138 mode_lib->mp.WritebackAllowDRAMClockChangeEndPosition[k] = math_max2(0, mode_lib->mp.VStartupMin[k] * display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1139 ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000) - mode_lib->mp.Watermark.WritebackDRAMClockChangeWatermark); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1140 mode_lib->mp.WritebackAllowFCLKChangeEndPosition[k] = math_max2(0, mode_lib->mp.VStartupMin[k] * display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1141 ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000) - mode_lib->mp.Watermark.WritebackFCLKChangeWatermark); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1142 } else { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1143 mode_lib->mp.WritebackAllowDRAMClockChangeEndPosition[k] = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1144 mode_lib->mp.WritebackAllowFCLKChangeEndPosition[k] = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1145 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1146 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1147 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1148 dcn5_calculate_pstate_keepout_dst_lines(display_cfg, &mode_lib->mp.Watermark, mode_lib->mp.pstate_keepout_dst_lines); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1149 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1150 DML_LOG_VERBOSE("DML::%s: DEBUG stream_index = %0d\n", __func__, display_cfg->plane_descriptors[0].stream_index); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1151 DML_LOG_VERBOSE("DML::%s: DEBUG PixelClock = %ld kHz\n", __func__, (display_cfg->stream_descriptors[display_cfg->plane_descriptors[0].stream_index].timing.pixel_clock_khz)); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1152 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1153 //Display Pipeline Delivery Time in Prefetch, Groups 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1154 dcn5_calculate_pixel_delivery_times( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1155 display_cfg, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1156 mode_lib->mp.NoOfDPP, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1157 s->num_active_planes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1158 mode_lib->mp.VRatioPrefetchY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1159 mode_lib->mp.VRatioPrefetchC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1160 mode_lib->mp.swath_width_luma_ub, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1161 mode_lib->mp.swath_width_chroma_ub, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1162 mode_lib->mp.PSCL_THROUGHPUT, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1163 mode_lib->mp.PSCL_THROUGHPUT_CHROMA, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1164 mode_lib->mp.Dppclk, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1165 mode_lib->mp.DCFCLKDeepSleep, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1166 mode_lib->mp.BytePerPixelY, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1167 mode_lib->mp.BytePerPixelC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1168 mode_lib->mp.req_per_swath_ub_l, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1169 mode_lib->mp.req_per_swath_ub_c, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1170 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1171 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1172 mode_lib->mp.DisplayPipeLineDeliveryTimeLuma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1173 mode_lib->mp.DisplayPipeLineDeliveryTimeChroma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1174 mode_lib->mp.DisplayPipeLineDeliveryTimeLumaPrefetch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1175 mode_lib->mp.DisplayPipeLineDeliveryTimeChromaPrefetch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1176 mode_lib->mp.DisplayPipeRequestDeliveryTimeLuma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1177 mode_lib->mp.DisplayPipeRequestDeliveryTimeChroma, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1178 mode_lib->mp.DisplayPipeRequestDeliveryTimeLumaPrefetch, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1179 mode_lib->mp.DisplayPipeRequestDeliveryTimeChromaPrefetch); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1180 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1181 CalculateMetaAndPTETimes_params->scratch = &mode_lib->scratch; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1182 CalculateMetaAndPTETimes_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1183 CalculateMetaAndPTETimes_params->NumberOfActiveSurfaces = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1184 CalculateMetaAndPTETimes_params->use_one_row_for_frame = mode_lib->mp.use_one_row_for_frame; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1185 CalculateMetaAndPTETimes_params->dst_y_per_row_vblank = mode_lib->mp.dst_y_per_row_vblank; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1186 CalculateMetaAndPTETimes_params->dst_y_per_row_flip = mode_lib->mp.dst_y_per_row_flip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1187 CalculateMetaAndPTETimes_params->BytePerPixelY = mode_lib->mp.BytePerPixelY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1188 CalculateMetaAndPTETimes_params->BytePerPixelC = mode_lib->mp.BytePerPixelC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1189 CalculateMetaAndPTETimes_params->dpte_row_height = mode_lib->mp.dpte_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1190 CalculateMetaAndPTETimes_params->dpte_row_height_chroma = mode_lib->mp.dpte_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1191 CalculateMetaAndPTETimes_params->dpte_group_bytes = mode_lib->mp.dpte_group_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1192 CalculateMetaAndPTETimes_params->PTERequestSizeY = mode_lib->mp.PTERequestSizeY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1193 CalculateMetaAndPTETimes_params->PTERequestSizeC = mode_lib->mp.PTERequestSizeC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1194 CalculateMetaAndPTETimes_params->PixelPTEReqWidthY = mode_lib->mp.PixelPTEReqWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1195 CalculateMetaAndPTETimes_params->PixelPTEReqHeightY = mode_lib->mp.PixelPTEReqHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1196 CalculateMetaAndPTETimes_params->PixelPTEReqWidthC = mode_lib->mp.PixelPTEReqWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1197 CalculateMetaAndPTETimes_params->PixelPTEReqHeightC = mode_lib->mp.PixelPTEReqHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1198 CalculateMetaAndPTETimes_params->dpte_row_width_luma_ub = mode_lib->mp.dpte_row_width_luma_ub; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1199 CalculateMetaAndPTETimes_params->dpte_row_width_chroma_ub = mode_lib->mp.dpte_row_width_chroma_ub; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1200 CalculateMetaAndPTETimes_params->tdlut_groups_per_2row_ub = s->tdlut_groups_per_2row_ub; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1201 CalculateMetaAndPTETimes_params->mrq_present = mode_lib->ip.dcn_mrq_present; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1202 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1203 CalculateMetaAndPTETimes_params->MetaChunkSize = mode_lib->ip.meta_chunk_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1204 CalculateMetaAndPTETimes_params->MinMetaChunkSizeBytes = mode_lib->ip.min_meta_chunk_size_bytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1205 CalculateMetaAndPTETimes_params->meta_row_width = mode_lib->mp.meta_row_width; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1206 CalculateMetaAndPTETimes_params->meta_row_width_chroma = mode_lib->mp.meta_row_width_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1207 CalculateMetaAndPTETimes_params->meta_row_height = mode_lib->mp.meta_row_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1208 CalculateMetaAndPTETimes_params->meta_row_height_chroma = mode_lib->mp.meta_row_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1209 CalculateMetaAndPTETimes_params->meta_req_width = mode_lib->mp.meta_req_width; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1210 CalculateMetaAndPTETimes_params->meta_req_width_chroma = mode_lib->mp.meta_req_width_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1211 CalculateMetaAndPTETimes_params->meta_req_height = mode_lib->mp.meta_req_height; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1212 CalculateMetaAndPTETimes_params->meta_req_height_chroma = mode_lib->mp.meta_req_height_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1213 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1214 CalculateMetaAndPTETimes_params->time_per_tdlut_group = mode_lib->mp.time_per_tdlut_group; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1215 CalculateMetaAndPTETimes_params->DST_Y_PER_PTE_ROW_NOM_L = mode_lib->mp.DST_Y_PER_PTE_ROW_NOM_L; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1216 CalculateMetaAndPTETimes_params->DST_Y_PER_PTE_ROW_NOM_C = mode_lib->mp.DST_Y_PER_PTE_ROW_NOM_C; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1217 CalculateMetaAndPTETimes_params->time_per_pte_group_nom_luma = mode_lib->mp.time_per_pte_group_nom_luma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1218 CalculateMetaAndPTETimes_params->time_per_pte_group_vblank_luma = mode_lib->mp.time_per_pte_group_vblank_luma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1219 CalculateMetaAndPTETimes_params->time_per_pte_group_flip_luma = mode_lib->mp.time_per_pte_group_flip_luma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1220 CalculateMetaAndPTETimes_params->time_per_pte_group_nom_chroma = mode_lib->mp.time_per_pte_group_nom_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1221 CalculateMetaAndPTETimes_params->time_per_pte_group_vblank_chroma = mode_lib->mp.time_per_pte_group_vblank_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1222 CalculateMetaAndPTETimes_params->time_per_pte_group_flip_chroma = mode_lib->mp.time_per_pte_group_flip_chroma; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1223 CalculateMetaAndPTETimes_params->DST_Y_PER_META_ROW_NOM_L = mode_lib->mp.DST_Y_PER_META_ROW_NOM_L; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1224 CalculateMetaAndPTETimes_params->DST_Y_PER_META_ROW_NOM_C = mode_lib->mp.DST_Y_PER_META_ROW_NOM_C; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1225 CalculateMetaAndPTETimes_params->TimePerMetaChunkNominal = mode_lib->mp.TimePerMetaChunkNominal; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1226 CalculateMetaAndPTETimes_params->TimePerChromaMetaChunkNominal = mode_lib->mp.TimePerChromaMetaChunkNominal; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1227 CalculateMetaAndPTETimes_params->TimePerMetaChunkVBlank = mode_lib->mp.TimePerMetaChunkVBlank; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1228 CalculateMetaAndPTETimes_params->TimePerChromaMetaChunkVBlank = mode_lib->mp.TimePerChromaMetaChunkVBlank; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1229 CalculateMetaAndPTETimes_params->TimePerMetaChunkFlip = mode_lib->mp.TimePerMetaChunkFlip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1230 CalculateMetaAndPTETimes_params->TimePerChromaMetaChunkFlip = mode_lib->mp.TimePerChromaMetaChunkFlip; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1231 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1232 dcn5_calculate_meta_and_pte_times(CalculateMetaAndPTETimes_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1233 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1234 dcn5_calculate_vm_group_and_request_times( 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1235 display_cfg, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1236 s->num_active_planes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1237 mode_lib->mp.BytePerPixelC, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1238 mode_lib->mp.dst_y_per_vm_vblank, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1239 mode_lib->mp.dst_y_per_vm_flip, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1240 mode_lib->mp.dpte_row_width_luma_ub, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1241 mode_lib->mp.dpte_row_width_chroma_ub, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1242 mode_lib->mp.vm_group_bytes, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1243 mode_lib->mp.dpde0_bytes_per_frame_ub_l, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1244 mode_lib->mp.dpde0_bytes_per_frame_ub_c, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1245 s->tdlut_pte_bytes_per_frame, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1246 mode_lib->mp.meta_pte_bytes_per_frame_ub_l, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1247 mode_lib->mp.meta_pte_bytes_per_frame_ub_c, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1248 mode_lib->ip.dcn_mrq_present, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1249 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1250 /* Output */ 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1251 mode_lib->mp.TimePerVMGroupVBlank, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1252 mode_lib->mp.TimePerVMGroupFlip, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1253 mode_lib->mp.TimePerVMRequestVBlank, 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1254 mode_lib->mp.TimePerVMRequestFlip); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1255 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1256 // VStartup Adjustment 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1257 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1258 bool isInterlaceTiming; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1259 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1260 mode_lib->mp.MinTTUVBlank[k] = mode_lib->mp.TWait[k] + mode_lib->mp.ExtraLatency; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1261 if (!display_cfg->plane_descriptors[k].dynamic_meta_data.enable) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1262 mode_lib->mp.MinTTUVBlank[k] = mode_lib->mp.TCalc + mode_lib->mp.MinTTUVBlank[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1263 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1264 DML_LOG_VERBOSE("DML::%s: k=%u, MinTTUVBlank = %f (before vstartup margin)\n", __func__, k, mode_lib->mp.MinTTUVBlank[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1265 s->Tvstartup_margin = (s->MaxVStartupLines[k] - mode_lib->mp.VStartupMin[k]) * display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1266 mode_lib->mp.MinTTUVBlank[k] = mode_lib->mp.MinTTUVBlank[k] + s->Tvstartup_margin; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1267 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1268 DML_LOG_VERBOSE("DML::%s: k=%u, Tvstartup_margin = %f\n", __func__, k, s->Tvstartup_margin); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1269 DML_LOG_VERBOSE("DML::%s: k=%u, MaxVStartupLines = %u\n", __func__, k, s->MaxVStartupLines[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1270 DML_LOG_VERBOSE("DML::%s: k=%u, MinTTUVBlank = %f\n", __func__, k, mode_lib->mp.MinTTUVBlank[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1271 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1272 mode_lib->mp.Tdmdl[k] = mode_lib->mp.Tdmdl[k] + s->Tvstartup_margin; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1273 if (display_cfg->plane_descriptors[k].dynamic_meta_data.enable && mode_lib->ip.dynamic_metadata_vm_enabled) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1274 mode_lib->mp.Tdmdl_vm[k] = mode_lib->mp.Tdmdl_vm[k] + s->Tvstartup_margin; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1275 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1276 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1277 isInterlaceTiming = (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.interlaced && !mode_lib->ip.ptoi_supported); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1278 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1279 // The actual positioning of the vstartup 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1280 mode_lib->mp.VStartup[k] = (isInterlaceTiming ? (2 * s->MaxVStartupLines[k]) : s->MaxVStartupLines[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1281 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1282 s->dlg_vblank_start = ((isInterlaceTiming ? math_floor2((display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_front_porch) / 2.0, 1.0) : 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1283 display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total) - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_front_porch); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1284 s->LSetup = math_floor2(4.0 * mode_lib->mp.TSetup[k] / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total / ((double)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.pixel_clock_khz / 1000)), 1.0) / 4.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1285 s->blank_lines_remaining = (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_active) - mode_lib->mp.VStartup[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1286 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1287 if (s->blank_lines_remaining < 0) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1288 DML_LOG_VERBOSE("ERROR: Vstartup is larger than vblank!?\n"); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1289 s->blank_lines_remaining = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1290 DML_ASSERT(0); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1291 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1292 mode_lib->mp.MIN_DST_Y_NEXT_START[k] = s->dlg_vblank_start + s->blank_lines_remaining + s->LSetup; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1293 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1294 // debug only 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1295 if (((mode_lib->mp.VUpdateOffsetPix[k] + mode_lib->mp.VUpdateWidthPix[k] + mode_lib->mp.VReadyOffsetPix[k]) / (double) display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total) <= 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1296 (isInterlaceTiming ? 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1297 math_floor2((display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_active - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_front_porch - mode_lib->mp.VStartup[k]) / 2.0, 1.0) : 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1298 (int)(display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_active - display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_front_porch - mode_lib->mp.VStartup[k]))) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1299 mode_lib->mp.VREADY_AT_OR_AFTER_VSYNC[k] = true; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1300 } else { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1301 mode_lib->mp.VREADY_AT_OR_AFTER_VSYNC[k] = false; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1302 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1303 DML_LOG_VERBOSE("DML::%s: k=%u, VStartup = %u (max)\n", __func__, k, mode_lib->mp.VStartup[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1304 DML_LOG_VERBOSE("DML::%s: k=%u, VStartupMin = %u (max)\n", __func__, k, mode_lib->mp.VStartupMin[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1305 DML_LOG_VERBOSE("DML::%s: k=%u, VUpdateOffsetPix = %u\n", __func__, k, mode_lib->mp.VUpdateOffsetPix[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1306 DML_LOG_VERBOSE("DML::%s: k=%u, VUpdateWidthPix = %u\n", __func__, k, mode_lib->mp.VUpdateWidthPix[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1307 DML_LOG_VERBOSE("DML::%s: k=%u, VReadyOffsetPix = %u\n", __func__, k, mode_lib->mp.VReadyOffsetPix[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1308 DML_LOG_VERBOSE("DML::%s: k=%u, HTotal = %lu\n", __func__, k, display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.h_total); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1309 DML_LOG_VERBOSE("DML::%s: k=%u, VTotal = %lu\n", __func__, k, display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_total); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1310 DML_LOG_VERBOSE("DML::%s: k=%u, VActive = %lu\n", __func__, k, display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_active); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1311 DML_LOG_VERBOSE("DML::%s: k=%u, VFrontPorch = %lu\n", __func__, k, display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].timing.v_front_porch); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1312 DML_LOG_VERBOSE("DML::%s: k=%u, TSetup = %f\n", __func__, k, mode_lib->mp.TSetup[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1313 DML_LOG_VERBOSE("DML::%s: k=%u, MIN_DST_Y_NEXT_START = %f\n", __func__, k, mode_lib->mp.MIN_DST_Y_NEXT_START[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1314 DML_LOG_VERBOSE("DML::%s: k=%u, VREADY_AT_OR_AFTER_VSYNC = %u\n", __func__, k, mode_lib->mp.VREADY_AT_OR_AFTER_VSYNC[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1315 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1316 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1317 //Maximum Bandwidth Used 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1318 mode_lib->mp.TotalWRBandwidth = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1319 for (k = 0; k < display_cfg->num_streams; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1320 for (j = 0; j < display_cfg->stream_descriptors[k].writeback.active_writebacks_per_stream; ++j) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1321 double writeback_bytes_per_pixel; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1322 if (display_cfg->stream_descriptors[k].writeback.writeback_stream[j].pixel_format == dml2_444_64) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1323 writeback_bytes_per_pixel = 8.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1324 else if (display_cfg->stream_descriptors[k].writeback.writeback_stream[j].pixel_format == dml2_444_32) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1325 writeback_bytes_per_pixel = 4.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1326 else if (display_cfg->stream_descriptors[k].writeback.writeback_stream[j].pixel_format == dml2_420_8) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1327 writeback_bytes_per_pixel = 1.5; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1328 else if (display_cfg->stream_descriptors[k].writeback.writeback_stream[j].pixel_format == dml2_420_10) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1329 writeback_bytes_per_pixel = 3.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1330 else if (display_cfg->stream_descriptors[k].writeback.writeback_stream[j].pixel_format == dml2_422_packed_8) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1331 writeback_bytes_per_pixel = 2.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1332 else if (display_cfg->stream_descriptors[k].writeback.writeback_stream[j].pixel_format == dml2_422_packed_10) 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1333 writeback_bytes_per_pixel = 4.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1334 else 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1335 writeback_bytes_per_pixel = 0.0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1336 s->WRBandwidth = display_cfg->stream_descriptors[k].writeback.writeback_stream[j].output_height 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1337 * display_cfg->stream_descriptors[k].writeback.writeback_stream[j].output_width 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1338 / (display_cfg->stream_descriptors[k].timing.h_total 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1339 * display_cfg->stream_descriptors[k].writeback.writeback_stream[j].input_height 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1340 / ((double)display_cfg->stream_descriptors[k].timing.pixel_clock_khz / 1000)) * writeback_bytes_per_pixel; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1341 mode_lib->mp.TotalWRBandwidth = mode_lib->mp.TotalWRBandwidth + s->WRBandwidth; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1342 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1343 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1344 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1345 mode_lib->mp.TotalDataReadBandwidth = 0; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1346 for (k = 0; k < s->num_active_planes; ++k) { 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1347 mode_lib->mp.TotalDataReadBandwidth = mode_lib->mp.TotalDataReadBandwidth + mode_lib->mp.vactive_sw_bw_l[k] + mode_lib->mp.vactive_sw_bw_c[k]; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1348 DML_LOG_VERBOSE("DML::%s: k=%u, TotalDataReadBandwidth = %f\n", __func__, k, mode_lib->mp.TotalDataReadBandwidth); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1349 DML_LOG_VERBOSE("DML::%s: k=%u, vactive_sw_bw_l = %f\n", __func__, k, mode_lib->mp.vactive_sw_bw_l[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1350 DML_LOG_VERBOSE("DML::%s: k=%u, vactive_sw_bw_c = %f\n", __func__, k, mode_lib->mp.vactive_sw_bw_c[k]); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1351 } 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1352 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1353 CalculateStutterEfficiency_params->display_cfg = display_cfg; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1354 CalculateStutterEfficiency_params->CompressedBufferSizeInkByte = mode_lib->mp.CompressedBufferSizeInkByte; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1355 CalculateStutterEfficiency_params->UnboundedRequestEnabled = mode_lib->mp.UnboundedRequestEnabled; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1356 CalculateStutterEfficiency_params->MetaFIFOSizeInKEntries = mode_lib->ip.meta_fifo_size_in_kentries; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1357 CalculateStutterEfficiency_params->ZeroSizeBufferEntries = mode_lib->ip.zero_size_buffer_entries; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1358 CalculateStutterEfficiency_params->PixelChunkSizeInKByte = mode_lib->ip.pixel_chunk_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1359 CalculateStutterEfficiency_params->NumberOfActiveSurfaces = s->num_active_planes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1360 CalculateStutterEfficiency_params->ROBBufferSizeInKByte = mode_lib->ip.rob_buffer_size_kbytes; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1361 CalculateStutterEfficiency_params->TotalDataReadBandwidth = mode_lib->mp.TotalDataReadBandwidth; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1362 CalculateStutterEfficiency_params->DCFCLK = mode_lib->mp.Dcfclk; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1363 CalculateStutterEfficiency_params->ReturnBW = mode_lib->mp.dram_bw_mbps; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1364 CalculateStutterEfficiency_params->CompbufReservedSpace64B = mode_lib->mp.compbuf_reserved_space_64b; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1365 CalculateStutterEfficiency_params->CompbufReservedSpaceZs = mode_lib->ip.compbuf_reserved_space_zs; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1366 CalculateStutterEfficiency_params->SRExitTime = utm_soc_bb->power_management_parameters.stutter_exit_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1367 CalculateStutterEfficiency_params->SRExitZ8Time = utm_soc_bb->power_management_parameters.z8_stutter_exit_latency_us; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1368 CalculateStutterEfficiency_params->SynchronizeTimings = display_cfg->overrides.synchronize_timings; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1369 CalculateStutterEfficiency_params->StutterEnterPlusExitWatermark = mode_lib->mp.Watermark.StutterEnterPlusExitWatermark; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1370 CalculateStutterEfficiency_params->Z8StutterEnterPlusExitWatermark = mode_lib->mp.Watermark.Z8StutterEnterPlusExitWatermark; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1371 CalculateStutterEfficiency_params->ProgressiveToInterlaceUnitInOPP = mode_lib->ip.ptoi_supported; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1372 CalculateStutterEfficiency_params->MinTTUVBlank = mode_lib->mp.MinTTUVBlank; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1373 CalculateStutterEfficiency_params->DPPPerSurface = mode_lib->mp.NoOfDPP; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1374 CalculateStutterEfficiency_params->DETBufferSizeY = mode_lib->mp.DETBufferSizeY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1375 CalculateStutterEfficiency_params->BytePerPixelY = mode_lib->mp.BytePerPixelY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1376 CalculateStutterEfficiency_params->BytePerPixelDETY = mode_lib->mp.BytePerPixelInDETY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1377 CalculateStutterEfficiency_params->SwathWidthY = mode_lib->mp.SwathWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1378 CalculateStutterEfficiency_params->SwathHeightY = mode_lib->mp.SwathHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1379 CalculateStutterEfficiency_params->SwathHeightC = mode_lib->mp.SwathHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1380 CalculateStutterEfficiency_params->BlockHeight256BytesY = mode_lib->mp.Read256BlockHeightY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1381 CalculateStutterEfficiency_params->BlockWidth256BytesY = mode_lib->mp.Read256BlockWidthY; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1382 CalculateStutterEfficiency_params->BlockHeight256BytesC = mode_lib->mp.Read256BlockHeightC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1383 CalculateStutterEfficiency_params->BlockWidth256BytesC = mode_lib->mp.Read256BlockWidthC; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1384 CalculateStutterEfficiency_params->DCCYMaxUncompressedBlock = mode_lib->mp.DCCYMaxUncompressedBlock; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1385 CalculateStutterEfficiency_params->DCCCMaxUncompressedBlock = mode_lib->mp.DCCCMaxUncompressedBlock; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1386 CalculateStutterEfficiency_params->ReadBandwidthSurfaceLuma = mode_lib->mp.vactive_sw_bw_l; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1387 CalculateStutterEfficiency_params->ReadBandwidthSurfaceChroma = mode_lib->mp.vactive_sw_bw_c; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1388 CalculateStutterEfficiency_params->dpte_row_bw = mode_lib->mp.dpte_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1389 CalculateStutterEfficiency_params->meta_row_bw = mode_lib->mp.meta_row_bw; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1390 CalculateStutterEfficiency_params->rob_alloc_compressed = mode_lib->ip.dcn_mrq_present; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1391 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1392 // output 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1393 CalculateStutterEfficiency_params->StutterEfficiencyNotIncludingVBlank = &mode_lib->mp.StutterEfficiencyNotIncludingVBlank; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1394 CalculateStutterEfficiency_params->StutterEfficiency = &mode_lib->mp.StutterEfficiency; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1395 CalculateStutterEfficiency_params->NumberOfStutterBurstsPerFrame = &mode_lib->mp.NumberOfStutterBurstsPerFrame; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1396 CalculateStutterEfficiency_params->Z8StutterEfficiencyNotIncludingVBlank = &mode_lib->mp.Z8StutterEfficiencyNotIncludingVBlank; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1397 CalculateStutterEfficiency_params->Z8StutterEfficiency = &mode_lib->mp.Z8StutterEfficiency; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1398 CalculateStutterEfficiency_params->Z8NumberOfStutterBurstsPerFrame = &mode_lib->mp.Z8NumberOfStutterBurstsPerFrame; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1399 CalculateStutterEfficiency_params->StutterPeriod = &mode_lib->mp.StutterPeriod; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1400 CalculateStutterEfficiency_params->DCHUBBUB_ARB_CSTATE_MAX_CAP_MODE = &mode_lib->mp.DCHUBBUB_ARB_CSTATE_MAX_CAP_MODE; 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1401 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1402 // Stutter Efficiency 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1403 dcn5_calculate_stutter_efficiency(&mode_lib->scratch, CalculateStutterEfficiency_params); 7f7d7ea1fa51515 Aurabindo Pillai 2026-07-22 1404 :::::: The code at line 1131 was first introduced by commit :::::: 7f7d7ea1fa515157162d0d21245925551ed103a1 drm/amd/display: Add new sources for DCN6 :::::: TO: Aurabindo Pillai <[email protected]> :::::: CC: Alex Deucher <[email protected]> -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki