tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 2023a53bdf41b7646b1d384b6816af06309f73a5 commit: d0a3ac549f389c1511a4df0d7638536305205d20 ubsan: enable for all*config builds date: 4 months ago config: powerpc64-randconfig-r011-20210404 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 30df6d5d6a8537d3ec7d8fe4299289a4c5a74d5c) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install powerpc64 cross compiling tool for clang build # apt-get install binutils-powerpc64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d0a3ac549f389c1511a4df0d7638536305205d20 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout d0a3ac549f389c1511a4df0d7638536305205d20 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): drivers/gpu/drm/amd/amdgpu/../display/dc/calcs/dcn_calc_auto.c:121:6: warning: stack frame size of 5552 bytes in function 'mode_support_and_system_configuration' [-Wframe-larger-than=] void mode_support_and_system_configuration(struct dcn_bw_internal_vars *v) ^ >> drivers/gpu/drm/amd/amdgpu/../display/dc/calcs/dcn_calc_auto.c:1176:6: warning: stack frame size of 2576 bytes in function 'dispclkdppclkdcfclk_deep_sleep_prefetch_parameters_watermarks_and_performance_calculation' [-Wframe-larger-than=] void dispclkdppclkdcfclk_deep_sleep_prefetch_parameters_watermarks_and_performance_calculation(struct dcn_bw_internal_vars *v) ^ 2 warnings generated. vim +/dispclkdppclkdcfclk_deep_sleep_prefetch_parameters_watermarks_and_performance_calculation +1176 drivers/gpu/drm/amd/amdgpu/../display/dc/calcs/dcn_calc_auto.c 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 120 74c49c7ac14f3a Harry Wentland 2017-05-08 121 void mode_support_and_system_configuration(struct dcn_bw_internal_vars *v) 74c49c7ac14f3a Harry Wentland 2017-05-08 122 { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 123 int i; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 124 int j; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 125 int k; 74c49c7ac14f3a Harry Wentland 2017-05-08 126 /*mode support, voltage state and soc configuration*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 127 74c49c7ac14f3a Harry Wentland 2017-05-08 128 /*scale ratio support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 129 74c49c7ac14f3a Harry Wentland 2017-05-08 130 v->scale_ratio_support = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 131 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 132 if (v->h_ratio[k] > v->max_hscl_ratio || v->v_ratio[k] > v->max_vscl_ratio || v->h_ratio[k] > v->htaps[k] || v->v_ratio[k] > v->vtaps[k] || (v->source_pixel_format[k] != dcn_bw_rgb_sub_64 && v->source_pixel_format[k] != dcn_bw_rgb_sub_32 && v->source_pixel_format[k] != dcn_bw_rgb_sub_16 && (v->h_ratio[k] / 2.0 > v->hta_pschroma[k] || v->v_ratio[k] / 2.0 > v->vta_pschroma[k]))) { 74c49c7ac14f3a Harry Wentland 2017-05-08 133 v->scale_ratio_support = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 134 } 74c49c7ac14f3a Harry Wentland 2017-05-08 135 } 74c49c7ac14f3a Harry Wentland 2017-05-08 136 /*source format, pixel format and scan support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 137 74c49c7ac14f3a Harry Wentland 2017-05-08 138 v->source_format_pixel_and_scan_support = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 139 for (k = 0; k <= v->number_of_active_planes - 1; k++) { afa80d64d20ac1 Dmytro Laktyushkin 2017-06-21 140 if ((v->source_surface_mode[k] == dcn_bw_sw_linear && v->source_scan[k] != dcn_bw_hor) || ((v->source_surface_mode[k] == dcn_bw_sw_4_kb_d || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d_x || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_x || v->source_surface_mode[k] == dcn_bw_sw_var_d || v->source_surface_mode[k] == dcn_bw_sw_var_d_x) && v->source_pixel_format[k] != dcn_bw_rgb_sub_64)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 141 v->source_format_pixel_and_scan_support = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 142 } 74c49c7ac14f3a Harry Wentland 2017-05-08 143 } 74c49c7ac14f3a Harry Wentland 2017-05-08 144 /*bandwidth support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 145 74c49c7ac14f3a Harry Wentland 2017-05-08 146 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 147 if (v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 148 v->swath_width_ysingle_dpp[k] = v->viewport_width[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 149 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 150 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 151 v->swath_width_ysingle_dpp[k] = v->viewport_height[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 152 } 74c49c7ac14f3a Harry Wentland 2017-05-08 153 if (v->source_pixel_format[k] == dcn_bw_rgb_sub_64) { 74c49c7ac14f3a Harry Wentland 2017-05-08 154 v->byte_per_pixel_in_dety[k] = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 155 v->byte_per_pixel_in_detc[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 156 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 157 else if (v->source_pixel_format[k] == dcn_bw_rgb_sub_32) { 74c49c7ac14f3a Harry Wentland 2017-05-08 158 v->byte_per_pixel_in_dety[k] = 4.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 159 v->byte_per_pixel_in_detc[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 160 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 161 else if (v->source_pixel_format[k] == dcn_bw_rgb_sub_16) { 74c49c7ac14f3a Harry Wentland 2017-05-08 162 v->byte_per_pixel_in_dety[k] = 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 163 v->byte_per_pixel_in_detc[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 164 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 165 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_8) { 74c49c7ac14f3a Harry Wentland 2017-05-08 166 v->byte_per_pixel_in_dety[k] = 1.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 167 v->byte_per_pixel_in_detc[k] = 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 168 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 169 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 170 v->byte_per_pixel_in_dety[k] = 4.0f / 3.0f; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 171 v->byte_per_pixel_in_detc[k] = 8.0f / 3.0f; 74c49c7ac14f3a Harry Wentland 2017-05-08 172 } 74c49c7ac14f3a Harry Wentland 2017-05-08 173 } 74c49c7ac14f3a Harry Wentland 2017-05-08 174 v->total_read_bandwidth_consumed_gbyte_per_second = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 175 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 176 v->read_bandwidth[k] = v->swath_width_ysingle_dpp[k] * (dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) * v->v_ratio[k] +dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 2.0 * v->v_ratio[k] / 2) / (v->htotal[k] / v->pixel_clock[k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 177 if (v->dcc_enable[k] == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 178 v->read_bandwidth[k] = v->read_bandwidth[k] * (1 + 1 / 256); 74c49c7ac14f3a Harry Wentland 2017-05-08 179 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 180 if (v->pte_enable == dcn_bw_yes && v->source_scan[k] != dcn_bw_hor && (v->source_surface_mode[k] == dcn_bw_sw_4_kb_s || v->source_surface_mode[k] == dcn_bw_sw_4_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d_x)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 181 v->read_bandwidth[k] = v->read_bandwidth[k] * (1 + 1 / 64); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 182 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 183 else if (v->pte_enable == dcn_bw_yes && v->source_scan[k] == dcn_bw_hor && (v->source_pixel_format[k] == dcn_bw_rgb_sub_64 || v->source_pixel_format[k] == dcn_bw_rgb_sub_32) && (v->source_surface_mode[k] == dcn_bw_sw_64_kb_s || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_x)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 184 v->read_bandwidth[k] = v->read_bandwidth[k] * (1 + 1 / 256); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 185 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 186 else if (v->pte_enable == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 187 v->read_bandwidth[k] = v->read_bandwidth[k] * (1 + 1 / 512); 74c49c7ac14f3a Harry Wentland 2017-05-08 188 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 189 v->total_read_bandwidth_consumed_gbyte_per_second = v->total_read_bandwidth_consumed_gbyte_per_second + v->read_bandwidth[k] / 1000.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 190 } 74c49c7ac14f3a Harry Wentland 2017-05-08 191 v->total_write_bandwidth_consumed_gbyte_per_second = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 192 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 193 if (v->output[k] == dcn_bw_writeback && v->output_format[k] == dcn_bw_444) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 194 v->write_bandwidth[k] = v->scaler_rec_out_width[k] / (v->htotal[k] / v->pixel_clock[k]) * 4.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 195 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 196 else if (v->output[k] == dcn_bw_writeback) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 197 v->write_bandwidth[k] = v->scaler_rec_out_width[k] / (v->htotal[k] / v->pixel_clock[k]) * 1.5; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 198 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 199 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 200 v->write_bandwidth[k] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 201 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 202 v->total_write_bandwidth_consumed_gbyte_per_second = v->total_write_bandwidth_consumed_gbyte_per_second + v->write_bandwidth[k] / 1000.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 203 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 204 v->total_bandwidth_consumed_gbyte_per_second = v->total_read_bandwidth_consumed_gbyte_per_second + v->total_write_bandwidth_consumed_gbyte_per_second; 74c49c7ac14f3a Harry Wentland 2017-05-08 205 v->dcc_enabled_in_any_plane = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 206 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 207 if (v->dcc_enable[k] == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 208 v->dcc_enabled_in_any_plane = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 209 } 74c49c7ac14f3a Harry Wentland 2017-05-08 210 } 74c49c7ac14f3a Harry Wentland 2017-05-08 211 for (i = 0; i <= number_of_states_plus_one; i++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 212 v->return_bw_todcn_per_state =dcn_bw_min2(v->return_bus_width * v->dcfclk_per_state[i], v->fabric_and_dram_bandwidth_per_state[i] * 1000.0 * v->percent_of_ideal_drambw_received_after_urg_latency / 100.0); 74c49c7ac14f3a Harry Wentland 2017-05-08 213 v->return_bw_per_state[i] = v->return_bw_todcn_per_state; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 214 if (v->dcc_enabled_in_any_plane == dcn_bw_yes && v->return_bw_todcn_per_state > v->dcfclk_per_state[i] * v->return_bus_width / 4.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 215 v->return_bw_per_state[i] =dcn_bw_min2(v->return_bw_per_state[i], v->return_bw_todcn_per_state * 4.0 * (1.0 - v->urgent_latency / ((v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0 / (v->return_bw_todcn_per_state - v->dcfclk_per_state[i] * v->return_bus_width / 4.0) + v->urgent_latency))); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 216 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 217 v->critical_point = 2.0 * v->return_bus_width * v->dcfclk_per_state[i] * v->urgent_latency / (v->return_bw_todcn_per_state * v->urgent_latency + (v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 218 if (v->dcc_enabled_in_any_plane == dcn_bw_yes && v->critical_point > 1.0 && v->critical_point < 4.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 219 v->return_bw_per_state[i] =dcn_bw_min2(v->return_bw_per_state[i], dcn_bw_pow(4.0 * v->return_bw_todcn_per_state * (v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0 * v->return_bus_width * v->dcfclk_per_state[i] * v->urgent_latency / (v->return_bw_todcn_per_state * v->urgent_latency + (v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0), 2)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 220 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 221 v->return_bw_todcn_per_state =dcn_bw_min2(v->return_bus_width * v->dcfclk_per_state[i], v->fabric_and_dram_bandwidth_per_state[i] * 1000.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 222 if (v->dcc_enabled_in_any_plane == dcn_bw_yes && v->return_bw_todcn_per_state > v->dcfclk_per_state[i] * v->return_bus_width / 4.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 223 v->return_bw_per_state[i] =dcn_bw_min2(v->return_bw_per_state[i], v->return_bw_todcn_per_state * 4.0 * (1.0 - v->urgent_latency / ((v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0 / (v->return_bw_todcn_per_state - v->dcfclk_per_state[i] * v->return_bus_width / 4.0) + v->urgent_latency))); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 224 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 225 v->critical_point = 2.0 * v->return_bus_width * v->dcfclk_per_state[i] * v->urgent_latency / (v->return_bw_todcn_per_state * v->urgent_latency + (v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 226 if (v->dcc_enabled_in_any_plane == dcn_bw_yes && v->critical_point > 1.0 && v->critical_point < 4.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 227 v->return_bw_per_state[i] =dcn_bw_min2(v->return_bw_per_state[i], dcn_bw_pow(4.0 * v->return_bw_todcn_per_state * (v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0 * v->return_bus_width * v->dcfclk_per_state[i] * v->urgent_latency / (v->return_bw_todcn_per_state * v->urgent_latency + (v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0), 2)); 74c49c7ac14f3a Harry Wentland 2017-05-08 228 } 74c49c7ac14f3a Harry Wentland 2017-05-08 229 } 74c49c7ac14f3a Harry Wentland 2017-05-08 230 for (i = 0; i <= number_of_states_plus_one; i++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 231 if ((v->total_read_bandwidth_consumed_gbyte_per_second * 1000.0 <= v->return_bw_per_state[i]) && (v->total_bandwidth_consumed_gbyte_per_second * 1000.0 <= v->fabric_and_dram_bandwidth_per_state[i] * 1000.0 * v->percent_of_ideal_drambw_received_after_urg_latency / 100.0)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 232 v->bandwidth_support[i] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 233 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 234 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 235 v->bandwidth_support[i] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 236 } 74c49c7ac14f3a Harry Wentland 2017-05-08 237 } 74c49c7ac14f3a Harry Wentland 2017-05-08 238 /*writeback latency support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 239 74c49c7ac14f3a Harry Wentland 2017-05-08 240 v->writeback_latency_support = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 241 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 242 if (v->output[k] == dcn_bw_writeback && v->output_format[k] == dcn_bw_444 && v->scaler_rec_out_width[k] / (v->htotal[k] / v->pixel_clock[k]) * 4.0 > (v->writeback_luma_buffer_size + v->writeback_chroma_buffer_size) * 1024.0 / v->write_back_latency) { 74c49c7ac14f3a Harry Wentland 2017-05-08 243 v->writeback_latency_support = dcn_bw_no; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 244 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 245 else if (v->output[k] == dcn_bw_writeback && v->scaler_rec_out_width[k] / (v->htotal[k] / v->pixel_clock[k]) >dcn_bw_min2(v->writeback_luma_buffer_size, 2.0 * v->writeback_chroma_buffer_size) * 1024.0 / v->write_back_latency) { 74c49c7ac14f3a Harry Wentland 2017-05-08 246 v->writeback_latency_support = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 247 } 74c49c7ac14f3a Harry Wentland 2017-05-08 248 } 74c49c7ac14f3a Harry Wentland 2017-05-08 249 /*re-ordering buffer support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 250 74c49c7ac14f3a Harry Wentland 2017-05-08 251 for (i = 0; i <= number_of_states_plus_one; i++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 252 v->urgent_round_trip_and_out_of_order_latency_per_state[i] = (v->round_trip_ping_latency_cycles + 32.0) / v->dcfclk_per_state[i] + v->urgent_out_of_order_return_per_channel * v->number_of_channels / v->return_bw_per_state[i]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 253 if ((v->rob_buffer_size_in_kbyte - v->pixel_chunk_size_in_kbyte) * 1024.0 / v->return_bw_per_state[i] > v->urgent_round_trip_and_out_of_order_latency_per_state[i]) { 74c49c7ac14f3a Harry Wentland 2017-05-08 254 v->rob_support[i] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 255 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 256 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 257 v->rob_support[i] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 258 } 74c49c7ac14f3a Harry Wentland 2017-05-08 259 } 74c49c7ac14f3a Harry Wentland 2017-05-08 260 /*display io support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 261 74c49c7ac14f3a Harry Wentland 2017-05-08 262 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 263 if (v->output[k] == dcn_bw_dp && v->dsc_capability == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 264 if (v->output_format[k] == dcn_bw_420) { 74c49c7ac14f3a Harry Wentland 2017-05-08 265 v->required_output_bw = v->pixel_clock[k] / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 266 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 267 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 268 v->required_output_bw = v->pixel_clock[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 269 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 270 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 271 else if (v->output_format[k] == dcn_bw_420) { 74c49c7ac14f3a Harry Wentland 2017-05-08 272 v->required_output_bw = v->pixel_clock[k] * 3.0 / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 273 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 274 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 275 v->required_output_bw = v->pixel_clock[k] * 3.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 276 } 74c49c7ac14f3a Harry Wentland 2017-05-08 277 if (v->output[k] == dcn_bw_hdmi) { 6dd28867b1f964 Charlene Liu 2017-07-31 278 v->required_phyclk[k] = v->required_output_bw; 6dd28867b1f964 Charlene Liu 2017-07-31 279 switch (v->output_deep_color[k]) { 6dd28867b1f964 Charlene Liu 2017-07-31 280 case dcn_bw_encoder_10bpc: 6dd28867b1f964 Charlene Liu 2017-07-31 281 v->required_phyclk[k] = v->required_phyclk[k] * 5.0 / 4; 6dd28867b1f964 Charlene Liu 2017-07-31 282 break; 6dd28867b1f964 Charlene Liu 2017-07-31 283 case dcn_bw_encoder_12bpc: 6dd28867b1f964 Charlene Liu 2017-07-31 284 v->required_phyclk[k] = v->required_phyclk[k] * 3.0 / 2; 6dd28867b1f964 Charlene Liu 2017-07-31 285 break; 6dd28867b1f964 Charlene Liu 2017-07-31 286 default: 6dd28867b1f964 Charlene Liu 2017-07-31 287 break; 6dd28867b1f964 Charlene Liu 2017-07-31 288 } f0f8b2db570bf3 Charlene Liu 2017-07-31 289 v->required_phyclk[k] = v->required_phyclk[k] / 3.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 290 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 291 else if (v->output[k] == dcn_bw_dp) { 74c49c7ac14f3a Harry Wentland 2017-05-08 292 v->required_phyclk[k] = v->required_output_bw / 4.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 293 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 294 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 295 v->required_phyclk[k] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 296 } 74c49c7ac14f3a Harry Wentland 2017-05-08 297 } 74c49c7ac14f3a Harry Wentland 2017-05-08 298 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 299 v->dio_support[i] = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 300 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 301 if (v->required_phyclk[k] > v->phyclk_per_state[i] || (v->output[k] == dcn_bw_hdmi && v->required_phyclk[k] > 600.0)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 302 v->dio_support[i] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 303 } 74c49c7ac14f3a Harry Wentland 2017-05-08 304 } 74c49c7ac14f3a Harry Wentland 2017-05-08 305 } 74c49c7ac14f3a Harry Wentland 2017-05-08 306 /*total available writeback support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 307 74c49c7ac14f3a Harry Wentland 2017-05-08 308 v->total_number_of_active_writeback = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 309 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 310 if (v->output[k] == dcn_bw_writeback) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 311 v->total_number_of_active_writeback = v->total_number_of_active_writeback + 1.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 312 } 74c49c7ac14f3a Harry Wentland 2017-05-08 313 } 74c49c7ac14f3a Harry Wentland 2017-05-08 314 if (v->total_number_of_active_writeback <= v->max_num_writeback) { 74c49c7ac14f3a Harry Wentland 2017-05-08 315 v->total_available_writeback_support = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 316 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 317 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 318 v->total_available_writeback_support = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 319 } 74c49c7ac14f3a Harry Wentland 2017-05-08 320 /*maximum dispclk/dppclk support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 321 74c49c7ac14f3a Harry Wentland 2017-05-08 322 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 323 if (v->h_ratio[k] > 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 324 v->pscl_factor[k] =dcn_bw_min2(v->max_dchub_topscl_throughput, v->max_pscl_tolb_throughput * v->h_ratio[k] /dcn_bw_ceil2(v->htaps[k] / 6.0, 1.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 325 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 326 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 327 v->pscl_factor[k] =dcn_bw_min2(v->max_dchub_topscl_throughput, v->max_pscl_tolb_throughput); 74c49c7ac14f3a Harry Wentland 2017-05-08 328 } 74c49c7ac14f3a Harry Wentland 2017-05-08 329 if (v->byte_per_pixel_in_detc[k] == 0.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 330 v->pscl_factor_chroma[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 331 v->min_dppclk_using_single_dpp[k] = v->pixel_clock[k] *dcn_bw_max3(v->vtaps[k] / 6.0 *dcn_bw_min2(1.0, v->h_ratio[k]), v->h_ratio[k] * v->v_ratio[k] / v->pscl_factor[k], 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 332 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 333 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 334 if (v->h_ratio[k] / 2.0 > 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 335 v->pscl_factor_chroma[k] =dcn_bw_min2(v->max_dchub_topscl_throughput, v->max_pscl_tolb_throughput * v->h_ratio[k] / 2.0 /dcn_bw_ceil2(v->hta_pschroma[k] / 6.0, 1.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 336 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 337 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 338 v->pscl_factor_chroma[k] =dcn_bw_min2(v->max_dchub_topscl_throughput, v->max_pscl_tolb_throughput); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 339 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 340 v->min_dppclk_using_single_dpp[k] = v->pixel_clock[k] *dcn_bw_max5(v->vtaps[k] / 6.0 *dcn_bw_min2(1.0, v->h_ratio[k]), v->h_ratio[k] * v->v_ratio[k] / v->pscl_factor[k], v->vta_pschroma[k] / 6.0 *dcn_bw_min2(1.0, v->h_ratio[k] / 2.0), v->h_ratio[k] * v->v_ratio[k] / 4.0 / v->pscl_factor_chroma[k], 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 341 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 342 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 343 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 344 if ((v->source_pixel_format[k] == dcn_bw_rgb_sub_64 || v->source_pixel_format[k] == dcn_bw_rgb_sub_32 || v->source_pixel_format[k] == dcn_bw_rgb_sub_16)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 345 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 346 v->read256_block_height_y[k] = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 347 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 348 else if (v->source_pixel_format[k] == dcn_bw_rgb_sub_64) { 74c49c7ac14f3a Harry Wentland 2017-05-08 349 v->read256_block_height_y[k] = 4.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 350 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 351 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 352 v->read256_block_height_y[k] = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 353 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 354 v->read256_block_width_y[k] = 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / v->read256_block_height_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 355 v->read256_block_height_c[k] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 356 v->read256_block_width_c[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 357 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 358 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 359 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 360 v->read256_block_height_y[k] = 1.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 361 v->read256_block_height_c[k] = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 362 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 363 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_8) { 74c49c7ac14f3a Harry Wentland 2017-05-08 364 v->read256_block_height_y[k] = 16.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 365 v->read256_block_height_c[k] = 8.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 366 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 367 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 368 v->read256_block_height_y[k] = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 369 v->read256_block_height_c[k] = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 370 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 371 v->read256_block_width_y[k] = 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / v->read256_block_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 372 v->read256_block_width_c[k] = 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / v->read256_block_height_c[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 373 } 74c49c7ac14f3a Harry Wentland 2017-05-08 374 if (v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 375 v->max_swath_height_y[k] = v->read256_block_height_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 376 v->max_swath_height_c[k] = v->read256_block_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 377 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 378 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 379 v->max_swath_height_y[k] = v->read256_block_width_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 380 v->max_swath_height_c[k] = v->read256_block_width_c[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 381 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 382 if ((v->source_pixel_format[k] == dcn_bw_rgb_sub_64 || v->source_pixel_format[k] == dcn_bw_rgb_sub_32 || v->source_pixel_format[k] == dcn_bw_rgb_sub_16)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 383 if (v->source_surface_mode[k] == dcn_bw_sw_linear || (v->source_pixel_format[k] == dcn_bw_rgb_sub_64 && (v->source_surface_mode[k] == dcn_bw_sw_4_kb_s || v->source_surface_mode[k] == dcn_bw_sw_4_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_var_s || v->source_surface_mode[k] == dcn_bw_sw_var_s_x) && v->source_scan[k] == dcn_bw_hor)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 384 v->min_swath_height_y[k] = v->max_swath_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 385 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 386 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 387 v->min_swath_height_y[k] = v->max_swath_height_y[k] / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 388 } 74c49c7ac14f3a Harry Wentland 2017-05-08 389 v->min_swath_height_c[k] = v->max_swath_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 390 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 391 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 392 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 393 v->min_swath_height_y[k] = v->max_swath_height_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 394 v->min_swath_height_c[k] = v->max_swath_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 395 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 396 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_8 && v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 397 v->min_swath_height_y[k] = v->max_swath_height_y[k] / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 398 if (v->bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 399 v->min_swath_height_c[k] = v->max_swath_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 400 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 401 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 402 v->min_swath_height_c[k] = v->max_swath_height_c[k] / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 403 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 404 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 405 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_10 && v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 406 v->min_swath_height_c[k] = v->max_swath_height_c[k] / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 407 if (v->bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 408 v->min_swath_height_y[k] = v->max_swath_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 409 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 410 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 411 v->min_swath_height_y[k] = v->max_swath_height_y[k] / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 412 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 413 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 414 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 415 v->min_swath_height_y[k] = v->max_swath_height_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 416 v->min_swath_height_c[k] = v->max_swath_height_c[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 417 } 74c49c7ac14f3a Harry Wentland 2017-05-08 418 } 74c49c7ac14f3a Harry Wentland 2017-05-08 419 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 420 v->maximum_swath_width = 8192.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 421 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 422 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 423 v->maximum_swath_width = 5120.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 424 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 425 v->number_of_dpp_required_for_det_size =dcn_bw_ceil2(v->swath_width_ysingle_dpp[k] /dcn_bw_min2(v->maximum_swath_width, v->det_buffer_size_in_kbyte * 1024.0 / 2.0 / (v->byte_per_pixel_in_dety[k] * v->min_swath_height_y[k] + v->byte_per_pixel_in_detc[k] / 2.0 * v->min_swath_height_c[k])), 1.0); 74c49c7ac14f3a Harry Wentland 2017-05-08 426 if (v->byte_per_pixel_in_detc[k] == 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 427 v->number_of_dpp_required_for_lb_size =dcn_bw_ceil2((v->vtaps[k] +dcn_bw_max2(dcn_bw_ceil2(v->v_ratio[k], 1.0) - 2, 0.0)) * v->swath_width_ysingle_dpp[k] /dcn_bw_max2(v->h_ratio[k], 1.0) * v->lb_bit_per_pixel[k] / v->line_buffer_size, 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 428 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 429 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 430 v->number_of_dpp_required_for_lb_size =dcn_bw_max2(dcn_bw_ceil2((v->vtaps[k] +dcn_bw_max2(dcn_bw_ceil2(v->v_ratio[k], 1.0) - 2, 0.0)) * v->swath_width_ysingle_dpp[k] /dcn_bw_max2(v->h_ratio[k], 1.0) * v->lb_bit_per_pixel[k] / v->line_buffer_size, 1.0),dcn_bw_ceil2((v->vta_pschroma[k] +dcn_bw_max2(dcn_bw_ceil2(v->v_ratio[k] / 2.0, 1.0) - 2, 0.0)) * v->swath_width_ysingle_dpp[k] / 2.0 /dcn_bw_max2(v->h_ratio[k] / 2.0, 1.0) * v->lb_bit_per_pixel[k] / v->line_buffer_size, 1.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 431 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 432 v->number_of_dpp_required_for_det_and_lb_size[k] =dcn_bw_max2(v->number_of_dpp_required_for_det_size, v->number_of_dpp_required_for_lb_size); 74c49c7ac14f3a Harry Wentland 2017-05-08 433 } 74c49c7ac14f3a Harry Wentland 2017-05-08 434 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 435 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 436 v->total_number_of_active_dpp[i][j] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 437 v->required_dispclk[i][j] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 438 v->dispclk_dppclk_support[i][j] = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 439 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 440 v->min_dispclk_using_single_dpp =dcn_bw_max2(v->pixel_clock[k], v->min_dppclk_using_single_dpp[k] * (j + 1)) * (1.0 + v->downspreading / 100.0); 74c49c7ac14f3a Harry Wentland 2017-05-08 441 if (v->odm_capability == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 442 v->min_dispclk_using_dual_dpp =dcn_bw_max2(v->pixel_clock[k] / 2.0, v->min_dppclk_using_single_dpp[k] / 2.0 * (j + 1)) * (1.0 + v->downspreading / 100.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 443 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 444 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 445 v->min_dispclk_using_dual_dpp =dcn_bw_max2(v->pixel_clock[k], v->min_dppclk_using_single_dpp[k] / 2.0 * (j + 1)) * (1.0 + v->downspreading / 100.0); 74c49c7ac14f3a Harry Wentland 2017-05-08 446 } 74c49c7ac14f3a Harry Wentland 2017-05-08 447 if (i < number_of_states) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 448 v->min_dispclk_using_single_dpp = v->min_dispclk_using_single_dpp * (1.0 + v->dispclk_ramping_margin / 100.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 449 v->min_dispclk_using_dual_dpp = v->min_dispclk_using_dual_dpp * (1.0 + v->dispclk_ramping_margin / 100.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 450 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 451 if (v->min_dispclk_using_single_dpp <=dcn_bw_min2(v->max_dispclk[i], (j + 1) * v->max_dppclk[i]) && v->number_of_dpp_required_for_det_and_lb_size[k] <= 1.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 452 v->no_of_dpp[i][j][k] = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 453 v->required_dispclk[i][j] =dcn_bw_max2(v->required_dispclk[i][j], v->min_dispclk_using_single_dpp); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 454 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 455 else if (v->min_dispclk_using_dual_dpp <=dcn_bw_min2(v->max_dispclk[i], (j + 1) * v->max_dppclk[i])) { 74c49c7ac14f3a Harry Wentland 2017-05-08 456 v->no_of_dpp[i][j][k] = 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 457 v->required_dispclk[i][j] =dcn_bw_max2(v->required_dispclk[i][j], v->min_dispclk_using_dual_dpp); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 458 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 459 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 460 v->no_of_dpp[i][j][k] = 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 461 v->required_dispclk[i][j] =dcn_bw_max2(v->required_dispclk[i][j], v->min_dispclk_using_dual_dpp); 74c49c7ac14f3a Harry Wentland 2017-05-08 462 v->dispclk_dppclk_support[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 463 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 464 v->total_number_of_active_dpp[i][j] = v->total_number_of_active_dpp[i][j] + v->no_of_dpp[i][j][k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 465 } 74c49c7ac14f3a Harry Wentland 2017-05-08 466 if (v->total_number_of_active_dpp[i][j] > v->max_num_dpp) { 74c49c7ac14f3a Harry Wentland 2017-05-08 467 v->total_number_of_active_dpp[i][j] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 468 v->required_dispclk[i][j] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 469 v->dispclk_dppclk_support[i][j] = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 470 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 471 v->min_dispclk_using_single_dpp =dcn_bw_max2(v->pixel_clock[k], v->min_dppclk_using_single_dpp[k] * (j + 1)) * (1.0 + v->downspreading / 100.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 472 v->min_dispclk_using_dual_dpp =dcn_bw_max2(v->pixel_clock[k], v->min_dppclk_using_single_dpp[k] / 2.0 * (j + 1)) * (1.0 + v->downspreading / 100.0); 74c49c7ac14f3a Harry Wentland 2017-05-08 473 if (i < number_of_states) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 474 v->min_dispclk_using_single_dpp = v->min_dispclk_using_single_dpp * (1.0 + v->dispclk_ramping_margin / 100.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 475 v->min_dispclk_using_dual_dpp = v->min_dispclk_using_dual_dpp * (1.0 + v->dispclk_ramping_margin / 100.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 476 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 477 if (v->number_of_dpp_required_for_det_and_lb_size[k] <= 1.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 478 v->no_of_dpp[i][j][k] = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 479 v->required_dispclk[i][j] =dcn_bw_max2(v->required_dispclk[i][j], v->min_dispclk_using_single_dpp); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 480 if (v->min_dispclk_using_single_dpp >dcn_bw_min2(v->max_dispclk[i], (j + 1) * v->max_dppclk[i])) { 74c49c7ac14f3a Harry Wentland 2017-05-08 481 v->dispclk_dppclk_support[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 482 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 483 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 484 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 485 v->no_of_dpp[i][j][k] = 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 486 v->required_dispclk[i][j] =dcn_bw_max2(v->required_dispclk[i][j], v->min_dispclk_using_dual_dpp); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 487 if (v->min_dispclk_using_dual_dpp >dcn_bw_min2(v->max_dispclk[i], (j + 1) * v->max_dppclk[i])) { 74c49c7ac14f3a Harry Wentland 2017-05-08 488 v->dispclk_dppclk_support[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 489 } 74c49c7ac14f3a Harry Wentland 2017-05-08 490 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 491 v->total_number_of_active_dpp[i][j] = v->total_number_of_active_dpp[i][j] + v->no_of_dpp[i][j][k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 492 } 74c49c7ac14f3a Harry Wentland 2017-05-08 493 } 74c49c7ac14f3a Harry Wentland 2017-05-08 494 } 74c49c7ac14f3a Harry Wentland 2017-05-08 495 } 74c49c7ac14f3a Harry Wentland 2017-05-08 496 /*viewport size check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 497 74c49c7ac14f3a Harry Wentland 2017-05-08 498 v->viewport_size_support = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 499 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 500 if (v->number_of_dpp_required_for_det_and_lb_size[k] > 2.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 501 v->viewport_size_support = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 502 } 74c49c7ac14f3a Harry Wentland 2017-05-08 503 } 74c49c7ac14f3a Harry Wentland 2017-05-08 504 /*total available pipes support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 505 74c49c7ac14f3a Harry Wentland 2017-05-08 506 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 507 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 508 if (v->total_number_of_active_dpp[i][j] <= v->max_num_dpp) { 74c49c7ac14f3a Harry Wentland 2017-05-08 509 v->total_available_pipes_support[i][j] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 510 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 511 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 512 v->total_available_pipes_support[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 513 } 74c49c7ac14f3a Harry Wentland 2017-05-08 514 } 74c49c7ac14f3a Harry Wentland 2017-05-08 515 } 74c49c7ac14f3a Harry Wentland 2017-05-08 516 /*urgent latency support check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 517 74c49c7ac14f3a Harry Wentland 2017-05-08 518 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 519 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 520 for (j = 0; j <= 1; j++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 521 v->swath_width_yper_state[i][j][k] = v->swath_width_ysingle_dpp[k] / v->no_of_dpp[i][j][k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 522 v->swath_width_granularity_y = 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / v->max_swath_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 523 v->rounded_up_max_swath_size_bytes_y = (dcn_bw_ceil2(v->swath_width_yper_state[i][j][k] - 1.0, v->swath_width_granularity_y) + v->swath_width_granularity_y) * v->byte_per_pixel_in_dety[k] * v->max_swath_height_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 524 if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_10) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 525 v->rounded_up_max_swath_size_bytes_y =dcn_bw_ceil2(v->rounded_up_max_swath_size_bytes_y, 256.0) + 256; 74c49c7ac14f3a Harry Wentland 2017-05-08 526 } 74c49c7ac14f3a Harry Wentland 2017-05-08 527 if (v->max_swath_height_c[k] > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 528 v->swath_width_granularity_c = 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / v->max_swath_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 529 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 530 v->rounded_up_max_swath_size_bytes_c = (dcn_bw_ceil2(v->swath_width_yper_state[i][j][k] / 2.0 - 1.0, v->swath_width_granularity_c) + v->swath_width_granularity_c) * v->byte_per_pixel_in_detc[k] * v->max_swath_height_c[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 531 if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_10) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 532 v->rounded_up_max_swath_size_bytes_c =dcn_bw_ceil2(v->rounded_up_max_swath_size_bytes_c, 256.0) + 256; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 533 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 534 if (v->rounded_up_max_swath_size_bytes_y + v->rounded_up_max_swath_size_bytes_c <= v->det_buffer_size_in_kbyte * 1024.0 / 2.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 535 v->swath_height_yper_state[i][j][k] = v->max_swath_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 536 v->swath_height_cper_state[i][j][k] = v->max_swath_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 537 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 538 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 539 v->swath_height_yper_state[i][j][k] = v->min_swath_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 540 v->swath_height_cper_state[i][j][k] = v->min_swath_height_c[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 541 } 74c49c7ac14f3a Harry Wentland 2017-05-08 542 if (v->byte_per_pixel_in_detc[k] == 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 543 v->lines_in_det_luma = v->det_buffer_size_in_kbyte * 1024.0 / v->byte_per_pixel_in_dety[k] / v->swath_width_yper_state[i][j][k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 544 v->lines_in_det_chroma = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 545 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 546 else if (v->swath_height_yper_state[i][j][k] <= v->swath_height_cper_state[i][j][k]) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 547 v->lines_in_det_luma = v->det_buffer_size_in_kbyte * 1024.0 / 2.0 / v->byte_per_pixel_in_dety[k] / v->swath_width_yper_state[i][j][k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 548 v->lines_in_det_chroma = v->det_buffer_size_in_kbyte * 1024.0 / 2.0 / v->byte_per_pixel_in_detc[k] / (v->swath_width_yper_state[i][j][k] / 2.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 549 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 550 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 551 v->lines_in_det_luma = v->det_buffer_size_in_kbyte * 1024.0 * 2.0 / 3.0 / v->byte_per_pixel_in_dety[k] / v->swath_width_yper_state[i][j][k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 552 v->lines_in_det_chroma = v->det_buffer_size_in_kbyte * 1024.0 / 3.0 / v->byte_per_pixel_in_dety[k] / (v->swath_width_yper_state[i][j][k] / 2.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 553 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 554 v->effective_lb_latency_hiding_source_lines_luma =dcn_bw_min2(v->max_line_buffer_lines,dcn_bw_floor2(v->line_buffer_size / v->lb_bit_per_pixel[k] / (v->swath_width_yper_state[i][j][k] /dcn_bw_max2(v->h_ratio[k], 1.0)), 1.0)) - (v->vtaps[k] - 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 555 v->effective_lb_latency_hiding_source_lines_chroma =dcn_bw_min2(v->max_line_buffer_lines,dcn_bw_floor2(v->line_buffer_size / v->lb_bit_per_pixel[k] / (v->swath_width_yper_state[i][j][k] / 2.0 /dcn_bw_max2(v->h_ratio[k] / 2.0, 1.0)), 1.0)) - (v->vta_pschroma[k] - 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 556 v->effective_detlb_lines_luma =dcn_bw_floor2(v->lines_in_det_luma +dcn_bw_min2(v->lines_in_det_luma * v->required_dispclk[i][j] * v->byte_per_pixel_in_dety[k] * v->pscl_factor[k] / v->return_bw_per_state[i], v->effective_lb_latency_hiding_source_lines_luma), v->swath_height_yper_state[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 557 v->effective_detlb_lines_chroma =dcn_bw_floor2(v->lines_in_det_chroma +dcn_bw_min2(v->lines_in_det_chroma * v->required_dispclk[i][j] * v->byte_per_pixel_in_detc[k] * v->pscl_factor_chroma[k] / v->return_bw_per_state[i], v->effective_lb_latency_hiding_source_lines_chroma), v->swath_height_cper_state[i][j][k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 558 if (v->byte_per_pixel_in_detc[k] == 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 559 v->urgent_latency_support_us_per_state[i][j][k] = v->effective_detlb_lines_luma * (v->htotal[k] / v->pixel_clock[k]) / v->v_ratio[k] - v->effective_detlb_lines_luma * v->swath_width_yper_state[i][j][k] *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / (v->return_bw_per_state[i] / v->no_of_dpp[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 560 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 561 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 562 v->urgent_latency_support_us_per_state[i][j][k] =dcn_bw_min2(v->effective_detlb_lines_luma * (v->htotal[k] / v->pixel_clock[k]) / v->v_ratio[k] - v->effective_detlb_lines_luma * v->swath_width_yper_state[i][j][k] *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / (v->return_bw_per_state[i] / v->no_of_dpp[i][j][k]), v->effective_detlb_lines_chroma * (v->htotal[k] / v->pixel_clock[k]) / (v->v_ratio[k] / 2.0) - v->effective_detlb_lines_chroma * v->swath_width_yper_state[i][j][k] / 2.0 *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / (v->return_bw_per_state[i] / v->no_of_dpp[i][j][k])); 74c49c7ac14f3a Harry Wentland 2017-05-08 563 } 74c49c7ac14f3a Harry Wentland 2017-05-08 564 } 74c49c7ac14f3a Harry Wentland 2017-05-08 565 } 74c49c7ac14f3a Harry Wentland 2017-05-08 566 } 74c49c7ac14f3a Harry Wentland 2017-05-08 567 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 568 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 569 v->urgent_latency_support[i][j] = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 570 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 571 if (v->urgent_latency_support_us_per_state[i][j][k] < v->urgent_latency / 1.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 572 v->urgent_latency_support[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 573 } 74c49c7ac14f3a Harry Wentland 2017-05-08 574 } 74c49c7ac14f3a Harry Wentland 2017-05-08 575 } 74c49c7ac14f3a Harry Wentland 2017-05-08 576 } 74c49c7ac14f3a Harry Wentland 2017-05-08 577 /*prefetch check*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 578 74c49c7ac14f3a Harry Wentland 2017-05-08 579 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 580 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 581 v->total_number_of_dcc_active_dpp[i][j] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 582 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 583 if (v->dcc_enable[k] == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 584 v->total_number_of_dcc_active_dpp[i][j] = v->total_number_of_dcc_active_dpp[i][j] + v->no_of_dpp[i][j][k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 585 } 74c49c7ac14f3a Harry Wentland 2017-05-08 586 } 74c49c7ac14f3a Harry Wentland 2017-05-08 587 } 74c49c7ac14f3a Harry Wentland 2017-05-08 588 } 74c49c7ac14f3a Harry Wentland 2017-05-08 589 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 590 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 591 v->projected_dcfclk_deep_sleep = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 592 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 593 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, v->pixel_clock[k] / 16.0); 74c49c7ac14f3a Harry Wentland 2017-05-08 594 if (v->byte_per_pixel_in_detc[k] == 0.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 595 if (v->v_ratio[k] <= 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 596 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, 1.1 *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 64.0 * v->h_ratio[k] * v->pixel_clock[k] / v->no_of_dpp[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 597 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 598 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 599 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, 1.1 *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 64.0 * v->pscl_factor[k] * v->required_dispclk[i][j] / (1 + j)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 600 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 601 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 602 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 603 if (v->v_ratio[k] <= 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 604 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, 1.1 *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 32.0 * v->h_ratio[k] * v->pixel_clock[k] / v->no_of_dpp[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 605 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 606 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 607 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, 1.1 *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 32.0 * v->pscl_factor[k] * v->required_dispclk[i][j] / (1 + j)); 74c49c7ac14f3a Harry Wentland 2017-05-08 608 } 74c49c7ac14f3a Harry Wentland 2017-05-08 609 if (v->v_ratio[k] / 2.0 <= 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 610 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, 1.1 *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 32.0 * v->h_ratio[k] / 2.0 * v->pixel_clock[k] / v->no_of_dpp[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 611 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 612 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 613 v->projected_dcfclk_deep_sleep =dcn_bw_max2(v->projected_dcfclk_deep_sleep, 1.1 *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 32.0 * v->pscl_factor_chroma[k] * v->required_dispclk[i][j] / (1 + j)); 74c49c7ac14f3a Harry Wentland 2017-05-08 614 } 74c49c7ac14f3a Harry Wentland 2017-05-08 615 } 74c49c7ac14f3a Harry Wentland 2017-05-08 616 } 74c49c7ac14f3a Harry Wentland 2017-05-08 617 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 618 if (v->dcc_enable[k] == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 619 v->meta_req_height_y = 8.0 * v->read256_block_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 620 v->meta_req_width_y = 64.0 * 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / v->meta_req_height_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 621 v->meta_surface_width_y =dcn_bw_ceil2(v->viewport_width[k] / v->no_of_dpp[i][j][k] - 1.0, v->meta_req_width_y) + v->meta_req_width_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 622 v->meta_surface_height_y =dcn_bw_ceil2(v->viewport_height[k] - 1.0, v->meta_req_height_y) + v->meta_req_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 623 if (v->pte_enable == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 624 v->meta_pte_bytes_per_frame_y = (dcn_bw_ceil2((v->meta_surface_width_y * v->meta_surface_height_y *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 256.0 - 4096.0) / 8.0 / 4096.0, 1.0) + 1) * 64.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 625 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 626 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 627 v->meta_pte_bytes_per_frame_y = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 628 } 74c49c7ac14f3a Harry Wentland 2017-05-08 629 if (v->source_scan[k] == dcn_bw_hor) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 630 v->meta_row_bytes_y = v->meta_surface_width_y * v->meta_req_height_y *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 256.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 631 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 632 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 633 v->meta_row_bytes_y = v->meta_surface_height_y * v->meta_req_width_y *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / 256.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 634 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 635 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 636 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 637 v->meta_pte_bytes_per_frame_y = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 638 v->meta_row_bytes_y = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 639 } 74c49c7ac14f3a Harry Wentland 2017-05-08 640 if (v->pte_enable == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 641 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 642 v->macro_tile_block_size_bytes_y = 256.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 643 v->macro_tile_block_height_y = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 644 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 645 else if (v->source_surface_mode[k] == dcn_bw_sw_4_kb_s || v->source_surface_mode[k] == dcn_bw_sw_4_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d_x) { 74c49c7ac14f3a Harry Wentland 2017-05-08 646 v->macro_tile_block_size_bytes_y = 4096.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 647 v->macro_tile_block_height_y = 4.0 * v->read256_block_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 648 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 649 else if (v->source_surface_mode[k] == dcn_bw_sw_64_kb_s || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_x) { 74c49c7ac14f3a Harry Wentland 2017-05-08 650 v->macro_tile_block_size_bytes_y = 64.0 * 1024; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 651 v->macro_tile_block_height_y = 16.0 * v->read256_block_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 652 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 653 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 654 v->macro_tile_block_size_bytes_y = 256.0 * 1024; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 655 v->macro_tile_block_height_y = 32.0 * v->read256_block_height_y[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 656 } 74c49c7ac14f3a Harry Wentland 2017-05-08 657 if (v->macro_tile_block_size_bytes_y <= 65536.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 658 v->data_pte_req_height_y = v->macro_tile_block_height_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 659 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 660 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 661 v->data_pte_req_height_y = 16.0 * v->read256_block_height_y[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 662 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 663 v->data_pte_req_width_y = 4096.0 /dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) / v->data_pte_req_height_y * 8; 74c49c7ac14f3a Harry Wentland 2017-05-08 664 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 665 v->dpte_bytes_per_row_y = 64.0 * (dcn_bw_ceil2((v->viewport_width[k] / v->no_of_dpp[i][j][k] *dcn_bw_min2(128.0, dcn_bw_pow(2.0,dcn_bw_floor2(dcn_bw_log(v->pte_buffer_size_in_requests * v->data_pte_req_width_y / (v->viewport_width[k] / v->no_of_dpp[i][j][k]), 2.0), 1.0))) - 1.0) / v->data_pte_req_width_y, 1.0) + 1); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 666 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 667 else if (v->source_scan[k] == dcn_bw_hor) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 668 v->dpte_bytes_per_row_y = 64.0 * (dcn_bw_ceil2((v->viewport_width[k] / v->no_of_dpp[i][j][k] - 1.0) / v->data_pte_req_width_y, 1.0) + 1); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 669 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 670 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 671 v->dpte_bytes_per_row_y = 64.0 * (dcn_bw_ceil2((v->viewport_height[k] - 1.0) / v->data_pte_req_height_y, 1.0) + 1); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 672 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 673 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 674 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 675 v->dpte_bytes_per_row_y = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 676 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 677 if ((v->source_pixel_format[k] != dcn_bw_rgb_sub_64 && v->source_pixel_format[k] != dcn_bw_rgb_sub_32 && v->source_pixel_format[k] != dcn_bw_rgb_sub_16)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 678 if (v->dcc_enable[k] == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 679 v->meta_req_height_c = 8.0 * v->read256_block_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 680 v->meta_req_width_c = 64.0 * 256.0 /dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / v->meta_req_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 681 v->meta_surface_width_c =dcn_bw_ceil2(v->viewport_width[k] / v->no_of_dpp[i][j][k] / 2.0 - 1.0, v->meta_req_width_c) + v->meta_req_width_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 682 v->meta_surface_height_c =dcn_bw_ceil2(v->viewport_height[k] / 2.0 - 1.0, v->meta_req_height_c) + v->meta_req_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 683 if (v->pte_enable == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 684 v->meta_pte_bytes_per_frame_c = (dcn_bw_ceil2((v->meta_surface_width_c * v->meta_surface_height_c *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 256.0 - 4096.0) / 8.0 / 4096.0, 1.0) + 1) * 64.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 685 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 686 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 687 v->meta_pte_bytes_per_frame_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 688 } 74c49c7ac14f3a Harry Wentland 2017-05-08 689 if (v->source_scan[k] == dcn_bw_hor) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 690 v->meta_row_bytes_c = v->meta_surface_width_c * v->meta_req_height_c *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 256.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 691 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 692 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 693 v->meta_row_bytes_c = v->meta_surface_height_c * v->meta_req_width_c *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 256.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 694 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 695 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 696 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 697 v->meta_pte_bytes_per_frame_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 698 v->meta_row_bytes_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 699 } 74c49c7ac14f3a Harry Wentland 2017-05-08 700 if (v->pte_enable == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 701 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 702 v->macro_tile_block_size_bytes_c = 256.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 703 v->macro_tile_block_height_c = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 704 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 705 else if (v->source_surface_mode[k] == dcn_bw_sw_4_kb_s || v->source_surface_mode[k] == dcn_bw_sw_4_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d || v->source_surface_mode[k] == dcn_bw_sw_4_kb_d_x) { 74c49c7ac14f3a Harry Wentland 2017-05-08 706 v->macro_tile_block_size_bytes_c = 4096.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 707 v->macro_tile_block_height_c = 4.0 * v->read256_block_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 708 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 709 else if (v->source_surface_mode[k] == dcn_bw_sw_64_kb_s || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_d_x) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 710 v->macro_tile_block_size_bytes_c = 64.0 * 1024; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 711 v->macro_tile_block_height_c = 16.0 * v->read256_block_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 712 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 713 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 714 v->macro_tile_block_size_bytes_c = 256.0 * 1024; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 715 v->macro_tile_block_height_c = 32.0 * v->read256_block_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 716 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 717 v->macro_tile_block_width_c = v->macro_tile_block_size_bytes_c /dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / v->macro_tile_block_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 718 if (v->macro_tile_block_size_bytes_c <= 65536.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 719 v->data_pte_req_height_c = v->macro_tile_block_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 720 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 721 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 722 v->data_pte_req_height_c = 16.0 * v->read256_block_height_c[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 723 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 724 v->data_pte_req_width_c = 4096.0 /dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / v->data_pte_req_height_c * 8; 74c49c7ac14f3a Harry Wentland 2017-05-08 725 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 726 v->dpte_bytes_per_row_c = 64.0 * (dcn_bw_ceil2((v->viewport_width[k] / v->no_of_dpp[i][j][k] / 2.0 * dcn_bw_min2(128.0, dcn_bw_pow(2.0,dcn_bw_floor2(dcn_bw_log(v->pte_buffer_size_in_requests * v->data_pte_req_width_c / (v->viewport_width[k] / v->no_of_dpp[i][j][k] / 2.0), 2.0), 1.0))) - 1.0) / v->data_pte_req_width_c, 1.0) + 1); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 727 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 728 else if (v->source_scan[k] == dcn_bw_hor) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 729 v->dpte_bytes_per_row_c = 64.0 * (dcn_bw_ceil2((v->viewport_width[k] / v->no_of_dpp[i][j][k] / 2.0 - 1.0) / v->data_pte_req_width_c, 1.0) + 1); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 730 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 731 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 732 v->dpte_bytes_per_row_c = 64.0 * (dcn_bw_ceil2((v->viewport_height[k] / 2.0 - 1.0) / v->data_pte_req_height_c, 1.0) + 1); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 733 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 734 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 735 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 736 v->dpte_bytes_per_row_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 737 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 738 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 739 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 740 v->dpte_bytes_per_row_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 741 v->meta_pte_bytes_per_frame_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 742 v->meta_row_bytes_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 743 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 744 v->dpte_bytes_per_row[k] = v->dpte_bytes_per_row_y + v->dpte_bytes_per_row_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 745 v->meta_pte_bytes_per_frame[k] = v->meta_pte_bytes_per_frame_y + v->meta_pte_bytes_per_frame_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 746 v->meta_row_bytes[k] = v->meta_row_bytes_y + v->meta_row_bytes_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 747 v->v_init_y = (v->v_ratio[k] + v->vtaps[k] + 1.0 + v->interlace_output[k] * 0.5 * v->v_ratio[k]) / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 748 v->prefill_y[k] =dcn_bw_floor2(v->v_init_y, 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 749 v->max_num_sw_y[k] =dcn_bw_ceil2((v->prefill_y[k] - 1.0) / v->swath_height_yper_state[i][j][k], 1.0) + 1; 74c49c7ac14f3a Harry Wentland 2017-05-08 750 if (v->prefill_y[k] > 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 751 v->max_partial_sw_y =dcn_bw_mod((v->prefill_y[k] - 2.0), v->swath_height_yper_state[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 752 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 753 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 754 v->max_partial_sw_y =dcn_bw_mod((v->prefill_y[k] + v->swath_height_yper_state[i][j][k] - 2.0), v->swath_height_yper_state[i][j][k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 755 } 74c49c7ac14f3a Harry Wentland 2017-05-08 756 v->max_partial_sw_y =dcn_bw_max2(1.0, v->max_partial_sw_y); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 757 v->prefetch_lines_y[k] = v->max_num_sw_y[k] * v->swath_height_yper_state[i][j][k] + v->max_partial_sw_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 758 if ((v->source_pixel_format[k] != dcn_bw_rgb_sub_64 && v->source_pixel_format[k] != dcn_bw_rgb_sub_32 && v->source_pixel_format[k] != dcn_bw_rgb_sub_16)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 759 v->v_init_c = (v->v_ratio[k] / 2.0 + v->vtaps[k] + 1.0 + v->interlace_output[k] * 0.5 * v->v_ratio[k] / 2.0) / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 760 v->prefill_c[k] =dcn_bw_floor2(v->v_init_c, 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 761 v->max_num_sw_c[k] =dcn_bw_ceil2((v->prefill_c[k] - 1.0) / v->swath_height_cper_state[i][j][k], 1.0) + 1; 74c49c7ac14f3a Harry Wentland 2017-05-08 762 if (v->prefill_c[k] > 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 763 v->max_partial_sw_c =dcn_bw_mod((v->prefill_c[k] - 2.0), v->swath_height_cper_state[i][j][k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 764 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 765 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 766 v->max_partial_sw_c =dcn_bw_mod((v->prefill_c[k] + v->swath_height_cper_state[i][j][k] - 2.0), v->swath_height_cper_state[i][j][k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 767 } 74c49c7ac14f3a Harry Wentland 2017-05-08 768 v->max_partial_sw_c =dcn_bw_max2(1.0, v->max_partial_sw_c); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 769 v->prefetch_lines_c[k] = v->max_num_sw_c[k] * v->swath_height_cper_state[i][j][k] + v->max_partial_sw_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 770 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 771 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 772 v->prefetch_lines_c[k] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 773 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 774 v->dst_x_after_scaler = 90.0 * v->pixel_clock[k] / (v->required_dispclk[i][j] / (j + 1)) + 42.0 * v->pixel_clock[k] / v->required_dispclk[i][j]; 74c49c7ac14f3a Harry Wentland 2017-05-08 775 if (v->no_of_dpp[i][j][k] > 1.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 776 v->dst_x_after_scaler = v->dst_x_after_scaler + v->scaler_rec_out_width[k] / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 777 } 74c49c7ac14f3a Harry Wentland 2017-05-08 778 if (v->output_format[k] == dcn_bw_420) { 74c49c7ac14f3a Harry Wentland 2017-05-08 779 v->dst_y_after_scaler = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 780 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 781 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 782 v->dst_y_after_scaler = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 783 } 74c49c7ac14f3a Harry Wentland 2017-05-08 784 v->time_calc = 24.0 / v->projected_dcfclk_deep_sleep; 2961fef7058dcd Dmytro Laktyushkin 2017-12-04 785 v->v_update_offset[k][j] = dcn_bw_ceil2(v->htotal[k] / 4.0, 1.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 786 v->total_repeater_delay = v->max_inter_dcn_tile_repeaters * (2.0 / (v->required_dispclk[i][j] / (j + 1)) + 3.0 / v->required_dispclk[i][j]); 2961fef7058dcd Dmytro Laktyushkin 2017-12-04 787 v->v_update_width[k][j] = (14.0 / v->projected_dcfclk_deep_sleep + 12.0 / (v->required_dispclk[i][j] / (j + 1)) + v->total_repeater_delay) * v->pixel_clock[k]; 2961fef7058dcd Dmytro Laktyushkin 2017-12-04 788 v->v_ready_offset[k][j] = dcn_bw_max2(150.0 / (v->required_dispclk[i][j] / (j + 1)), v->total_repeater_delay + 20.0 / v->projected_dcfclk_deep_sleep + 10.0 / (v->required_dispclk[i][j] / (j + 1))) * v->pixel_clock[k]; 2961fef7058dcd Dmytro Laktyushkin 2017-12-04 789 v->time_setup = (v->v_update_offset[k][j] + v->v_update_width[k][j] + v->v_ready_offset[k][j]) / v->pixel_clock[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 790 v->extra_latency = v->urgent_round_trip_and_out_of_order_latency_per_state[i] + (v->total_number_of_active_dpp[i][j] * v->pixel_chunk_size_in_kbyte + v->total_number_of_dcc_active_dpp[i][j] * v->meta_chunk_size) * 1024.0 / v->return_bw_per_state[i]; 74c49c7ac14f3a Harry Wentland 2017-05-08 791 if (v->pte_enable == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 792 v->extra_latency = v->extra_latency + v->total_number_of_active_dpp[i][j] * v->pte_chunk_size * 1024.0 / v->return_bw_per_state[i]; 74c49c7ac14f3a Harry Wentland 2017-05-08 793 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 794 if (v->can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 795 v->maximum_vstartup = v->vtotal[k] - v->vactive[k] - 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 796 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 797 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 798 v->maximum_vstartup = v->v_sync_plus_back_porch[k] - 1.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 799 } 987741af33e5b8 Eric Yang 2018-11-21 800 987741af33e5b8 Eric Yang 2018-11-21 801 do { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 802 v->line_times_for_prefetch[k] = v->maximum_vstartup - v->urgent_latency / (v->htotal[k] / v->pixel_clock[k]) - (v->time_calc + v->time_setup) / (v->htotal[k] / v->pixel_clock[k]) - (v->dst_y_after_scaler + v->dst_x_after_scaler / v->htotal[k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 803 v->line_times_for_prefetch[k] =dcn_bw_floor2(4.0 * (v->line_times_for_prefetch[k] + 0.125), 1.0) / 4; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 804 v->prefetch_bw[k] = (v->meta_pte_bytes_per_frame[k] + 2.0 * v->meta_row_bytes[k] + 2.0 * v->dpte_bytes_per_row[k] + v->prefetch_lines_y[k] * v->swath_width_yper_state[i][j][k] *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) + v->prefetch_lines_c[k] * v->swath_width_yper_state[i][j][k] / 2.0 *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0)) / (v->line_times_for_prefetch[k] * v->htotal[k] / v->pixel_clock[k]); 987741af33e5b8 Eric Yang 2018-11-21 805 987741af33e5b8 Eric Yang 2018-11-21 806 if (v->pte_enable == dcn_bw_yes && v->dcc_enable[k] == dcn_bw_yes) { 987741af33e5b8 Eric Yang 2018-11-21 807 v->time_for_meta_pte_without_immediate_flip = dcn_bw_max3( 4a673157b8d1e4 Michael Strauss 2020-05-08 808 v->meta_pte_bytes_frame[k] / v->prefetch_bw[k], 987741af33e5b8 Eric Yang 2018-11-21 809 v->extra_latency, 987741af33e5b8 Eric Yang 2018-11-21 810 v->htotal[k] / v->pixel_clock[k] / 4.0); 987741af33e5b8 Eric Yang 2018-11-21 811 } else { 987741af33e5b8 Eric Yang 2018-11-21 812 v->time_for_meta_pte_without_immediate_flip = v->htotal[k] / v->pixel_clock[k] / 4.0; 987741af33e5b8 Eric Yang 2018-11-21 813 } 987741af33e5b8 Eric Yang 2018-11-21 814 987741af33e5b8 Eric Yang 2018-11-21 815 if (v->pte_enable == dcn_bw_yes || v->dcc_enable[k] == dcn_bw_yes) { 987741af33e5b8 Eric Yang 2018-11-21 816 v->time_for_meta_and_dpte_row_without_immediate_flip = dcn_bw_max3(( 4a673157b8d1e4 Michael Strauss 2020-05-08 817 v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) / v->prefetch_bw[k], 987741af33e5b8 Eric Yang 2018-11-21 818 v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_without_immediate_flip, 987741af33e5b8 Eric Yang 2018-11-21 819 v->extra_latency); 987741af33e5b8 Eric Yang 2018-11-21 820 } else { 987741af33e5b8 Eric Yang 2018-11-21 821 v->time_for_meta_and_dpte_row_without_immediate_flip = dcn_bw_max2( 987741af33e5b8 Eric Yang 2018-11-21 822 v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_without_immediate_flip, 987741af33e5b8 Eric Yang 2018-11-21 823 v->extra_latency - v->time_for_meta_pte_with_immediate_flip); 987741af33e5b8 Eric Yang 2018-11-21 824 } 987741af33e5b8 Eric Yang 2018-11-21 825 987741af33e5b8 Eric Yang 2018-11-21 826 v->lines_for_meta_pte_without_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_pte_without_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; 987741af33e5b8 Eric Yang 2018-11-21 827 v->lines_for_meta_and_dpte_row_without_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_and_dpte_row_without_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; 987741af33e5b8 Eric Yang 2018-11-21 828 v->maximum_vstartup = v->maximum_vstartup - 1; 987741af33e5b8 Eric Yang 2018-11-21 829 4a673157b8d1e4 Michael Strauss 2020-05-08 830 if (v->lines_for_meta_pte_without_immediate_flip[k] < 32.0 && v->lines_for_meta_and_dpte_row_without_immediate_flip[k] < 16.0) 987741af33e5b8 Eric Yang 2018-11-21 831 break; 987741af33e5b8 Eric Yang 2018-11-21 832 987741af33e5b8 Eric Yang 2018-11-21 833 } while(1); 74c49c7ac14f3a Harry Wentland 2017-05-08 834 } 74c49c7ac14f3a Harry Wentland 2017-05-08 835 v->bw_available_for_immediate_flip = v->return_bw_per_state[i]; 74c49c7ac14f3a Harry Wentland 2017-05-08 836 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 837 v->bw_available_for_immediate_flip = v->bw_available_for_immediate_flip -dcn_bw_max2(v->read_bandwidth[k], v->prefetch_bw[k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 838 } 74c49c7ac14f3a Harry Wentland 2017-05-08 839 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 840 v->total_immediate_flip_bytes[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 841 if ((v->source_pixel_format[k] != dcn_bw_yuv420_sub_8 && v->source_pixel_format[k] != dcn_bw_yuv420_sub_10)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 842 v->total_immediate_flip_bytes[k] = v->total_immediate_flip_bytes[k] + v->meta_pte_bytes_per_frame[k] + v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 843 } 74c49c7ac14f3a Harry Wentland 2017-05-08 844 } 74c49c7ac14f3a Harry Wentland 2017-05-08 845 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 846 if (v->pte_enable == dcn_bw_yes && v->dcc_enable[k] == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 847 v->time_for_meta_pte_with_immediate_flip =dcn_bw_max5(v->meta_pte_bytes_per_frame[k] / v->prefetch_bw[k], v->meta_pte_bytes_per_frame[k] * v->total_immediate_flip_bytes[k] / (v->bw_available_for_immediate_flip * (v->meta_pte_bytes_per_frame[k] + v->meta_row_bytes[k] + v->dpte_bytes_per_row[k])), v->extra_latency, v->urgent_latency, v->htotal[k] / v->pixel_clock[k] / 4.0); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 848 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 849 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 850 v->time_for_meta_pte_with_immediate_flip = v->htotal[k] / v->pixel_clock[k] / 4.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 851 } 74c49c7ac14f3a Harry Wentland 2017-05-08 852 if (v->pte_enable == dcn_bw_yes || v->dcc_enable[k] == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 853 v->time_for_meta_and_dpte_row_with_immediate_flip =dcn_bw_max5((v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) / v->prefetch_bw[k], (v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) * v->total_immediate_flip_bytes[k] / (v->bw_available_for_immediate_flip * (v->meta_pte_bytes_per_frame[k] + v->meta_row_bytes[k] + v->dpte_bytes_per_row[k])), v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_with_immediate_flip, v->extra_latency, 2.0 * v->urgent_latency); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 854 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 855 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 856 v->time_for_meta_and_dpte_row_with_immediate_flip =dcn_bw_max2(v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_with_immediate_flip, v->extra_latency - v->time_for_meta_pte_with_immediate_flip); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 857 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 858 v->lines_for_meta_pte_with_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_pte_with_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 859 v->lines_for_meta_and_dpte_row_with_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_and_dpte_row_with_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 860 v->line_times_to_request_prefetch_pixel_data_with_immediate_flip = v->line_times_for_prefetch[k] - v->lines_for_meta_pte_with_immediate_flip[k] - v->lines_for_meta_and_dpte_row_with_immediate_flip[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 861 v->line_times_to_request_prefetch_pixel_data_without_immediate_flip = v->line_times_for_prefetch[k] - v->lines_for_meta_pte_without_immediate_flip[k] - v->lines_for_meta_and_dpte_row_without_immediate_flip[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 862 if (v->line_times_to_request_prefetch_pixel_data_with_immediate_flip > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 863 v->v_ratio_pre_ywith_immediate_flip[i][j][k] = v->prefetch_lines_y[k] / v->line_times_to_request_prefetch_pixel_data_with_immediate_flip; 74c49c7ac14f3a Harry Wentland 2017-05-08 864 if ((v->swath_height_yper_state[i][j][k] > 4.0)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 865 if (v->line_times_to_request_prefetch_pixel_data_with_immediate_flip - (v->prefill_y[k] - 3.0) / 2.0 > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 866 v->v_ratio_pre_ywith_immediate_flip[i][j][k] =dcn_bw_max2(v->v_ratio_pre_ywith_immediate_flip[i][j][k], (v->max_num_sw_y[k] * v->swath_height_yper_state[i][j][k]) / (v->line_times_to_request_prefetch_pixel_data_with_immediate_flip - (v->prefill_y[k] - 3.0) / 2.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 867 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 868 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 869 v->v_ratio_pre_ywith_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 870 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 871 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 872 v->v_ratio_pre_cwith_immediate_flip[i][j][k] = v->prefetch_lines_c[k] / v->line_times_to_request_prefetch_pixel_data_with_immediate_flip; 74c49c7ac14f3a Harry Wentland 2017-05-08 873 if ((v->swath_height_cper_state[i][j][k] > 4.0)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 874 if (v->line_times_to_request_prefetch_pixel_data_with_immediate_flip - (v->prefill_c[k] - 3.0) / 2.0 > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 875 v->v_ratio_pre_cwith_immediate_flip[i][j][k] =dcn_bw_max2(v->v_ratio_pre_cwith_immediate_flip[i][j][k], (v->max_num_sw_c[k] * v->swath_height_cper_state[i][j][k]) / (v->line_times_to_request_prefetch_pixel_data_with_immediate_flip - (v->prefill_c[k] - 3.0) / 2.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 876 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 877 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 878 v->v_ratio_pre_cwith_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 879 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 880 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 881 v->required_prefetch_pixel_data_bw_with_immediate_flip[i][j][k] = v->no_of_dpp[i][j][k] * (v->prefetch_lines_y[k] / v->line_times_to_request_prefetch_pixel_data_with_immediate_flip *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) + v->prefetch_lines_c[k] / v->line_times_to_request_prefetch_pixel_data_with_immediate_flip *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 2.0) * v->swath_width_yper_state[i][j][k] / (v->htotal[k] / v->pixel_clock[k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 882 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 883 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 884 v->v_ratio_pre_ywith_immediate_flip[i][j][k] = 999999.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 885 v->v_ratio_pre_cwith_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 886 v->required_prefetch_pixel_data_bw_with_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 887 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 888 if (v->line_times_to_request_prefetch_pixel_data_without_immediate_flip > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 889 v->v_ratio_pre_ywithout_immediate_flip[i][j][k] = v->prefetch_lines_y[k] / v->line_times_to_request_prefetch_pixel_data_without_immediate_flip; 74c49c7ac14f3a Harry Wentland 2017-05-08 890 if ((v->swath_height_yper_state[i][j][k] > 4.0)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 891 if (v->line_times_to_request_prefetch_pixel_data_without_immediate_flip - (v->prefill_y[k] - 3.0) / 2.0 > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 892 v->v_ratio_pre_ywithout_immediate_flip[i][j][k] =dcn_bw_max2(v->v_ratio_pre_ywithout_immediate_flip[i][j][k], (v->max_num_sw_y[k] * v->swath_height_yper_state[i][j][k]) / (v->line_times_to_request_prefetch_pixel_data_without_immediate_flip - (v->prefill_y[k] - 3.0) / 2.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 893 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 894 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 895 v->v_ratio_pre_ywithout_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 896 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 897 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 898 v->v_ratio_pre_cwithout_immediate_flip[i][j][k] = v->prefetch_lines_c[k] / v->line_times_to_request_prefetch_pixel_data_without_immediate_flip; 74c49c7ac14f3a Harry Wentland 2017-05-08 899 if ((v->swath_height_cper_state[i][j][k] > 4.0)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 900 if (v->line_times_to_request_prefetch_pixel_data_without_immediate_flip - (v->prefill_c[k] - 3.0) / 2.0 > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 901 v->v_ratio_pre_cwithout_immediate_flip[i][j][k] =dcn_bw_max2(v->v_ratio_pre_cwithout_immediate_flip[i][j][k], (v->max_num_sw_c[k] * v->swath_height_cper_state[i][j][k]) / (v->line_times_to_request_prefetch_pixel_data_without_immediate_flip - (v->prefill_c[k] - 3.0) / 2.0)); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 902 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 903 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 904 v->v_ratio_pre_cwithout_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 905 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 906 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 907 v->required_prefetch_pixel_data_bw_without_immediate_flip[i][j][k] = v->no_of_dpp[i][j][k] * (v->prefetch_lines_y[k] / v->line_times_to_request_prefetch_pixel_data_without_immediate_flip *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) + v->prefetch_lines_c[k] / v->line_times_to_request_prefetch_pixel_data_without_immediate_flip *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0) / 2.0) * v->swath_width_yper_state[i][j][k] / (v->htotal[k] / v->pixel_clock[k]); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 908 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 909 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 910 v->v_ratio_pre_ywithout_immediate_flip[i][j][k] = 999999.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 911 v->v_ratio_pre_cwithout_immediate_flip[i][j][k] = 999999.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 912 v->required_prefetch_pixel_data_bw_without_immediate_flip[i][j][k] = 999999.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 913 } 74c49c7ac14f3a Harry Wentland 2017-05-08 914 } 74c49c7ac14f3a Harry Wentland 2017-05-08 915 v->maximum_read_bandwidth_with_prefetch_with_immediate_flip = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 916 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 917 if ((v->source_pixel_format[k] != dcn_bw_yuv420_sub_8 && v->source_pixel_format[k] != dcn_bw_yuv420_sub_10)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 918 v->maximum_read_bandwidth_with_prefetch_with_immediate_flip = v->maximum_read_bandwidth_with_prefetch_with_immediate_flip +dcn_bw_max2(v->read_bandwidth[k], v->required_prefetch_pixel_data_bw_with_immediate_flip[i][j][k]) +dcn_bw_max2(v->meta_pte_bytes_per_frame[k] / (v->lines_for_meta_pte_with_immediate_flip[k] * v->htotal[k] / v->pixel_clock[k]), (v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) / (v->lines_for_meta_and_dpte_row_with_immediate_flip[k] * v->htotal[k] / v->pixel_clock[k])); 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 919 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 920 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 921 v->maximum_read_bandwidth_with_prefetch_with_immediate_flip = v->maximum_read_bandwidth_with_prefetch_with_immediate_flip +dcn_bw_max2(v->read_bandwidth[k], v->required_prefetch_pixel_data_bw_without_immediate_flip[i][j][k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 922 } 74c49c7ac14f3a Harry Wentland 2017-05-08 923 } 74c49c7ac14f3a Harry Wentland 2017-05-08 924 v->maximum_read_bandwidth_with_prefetch_without_immediate_flip = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 925 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 926 v->maximum_read_bandwidth_with_prefetch_without_immediate_flip = v->maximum_read_bandwidth_with_prefetch_without_immediate_flip +dcn_bw_max2(v->read_bandwidth[k], v->required_prefetch_pixel_data_bw_without_immediate_flip[i][j][k]); 74c49c7ac14f3a Harry Wentland 2017-05-08 927 } 74c49c7ac14f3a Harry Wentland 2017-05-08 928 v->prefetch_supported_with_immediate_flip[i][j] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 929 if (v->maximum_read_bandwidth_with_prefetch_with_immediate_flip > v->return_bw_per_state[i]) { 74c49c7ac14f3a Harry Wentland 2017-05-08 930 v->prefetch_supported_with_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 931 } 74c49c7ac14f3a Harry Wentland 2017-05-08 932 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 933 if (v->line_times_for_prefetch[k] < 2.0 || v->lines_for_meta_pte_with_immediate_flip[k] >= 8.0 || v->lines_for_meta_and_dpte_row_with_immediate_flip[k] >= 16.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 934 v->prefetch_supported_with_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 935 } 74c49c7ac14f3a Harry Wentland 2017-05-08 936 } 74c49c7ac14f3a Harry Wentland 2017-05-08 937 v->prefetch_supported_without_immediate_flip[i][j] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 938 if (v->maximum_read_bandwidth_with_prefetch_without_immediate_flip > v->return_bw_per_state[i]) { 74c49c7ac14f3a Harry Wentland 2017-05-08 939 v->prefetch_supported_without_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 940 } 74c49c7ac14f3a Harry Wentland 2017-05-08 941 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 942 if (v->line_times_for_prefetch[k] < 2.0 || v->lines_for_meta_pte_without_immediate_flip[k] >= 8.0 || v->lines_for_meta_and_dpte_row_without_immediate_flip[k] >= 16.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 943 v->prefetch_supported_without_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 944 } 74c49c7ac14f3a Harry Wentland 2017-05-08 945 } 74c49c7ac14f3a Harry Wentland 2017-05-08 946 } 74c49c7ac14f3a Harry Wentland 2017-05-08 947 } 74c49c7ac14f3a Harry Wentland 2017-05-08 948 for (i = 0; i <= number_of_states_plus_one; i++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 949 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 950 v->v_ratio_in_prefetch_supported_with_immediate_flip[i][j] = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 951 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 952 if ((((v->source_pixel_format[k] != dcn_bw_yuv420_sub_8 && v->source_pixel_format[k] != dcn_bw_yuv420_sub_10) && (v->v_ratio_pre_ywith_immediate_flip[i][j][k] > 4.0 || v->v_ratio_pre_cwith_immediate_flip[i][j][k] > 4.0)) || ((v->source_pixel_format[k] == dcn_bw_yuv420_sub_8 || v->source_pixel_format[k] == dcn_bw_yuv420_sub_10) && (v->v_ratio_pre_ywithout_immediate_flip[i][j][k] > 4.0 || v->v_ratio_pre_cwithout_immediate_flip[i][j][k] > 4.0)))) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 953 v->v_ratio_in_prefetch_supported_with_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 954 } 74c49c7ac14f3a Harry Wentland 2017-05-08 955 } 74c49c7ac14f3a Harry Wentland 2017-05-08 956 v->v_ratio_in_prefetch_supported_without_immediate_flip[i][j] = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 957 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 958 if ((v->v_ratio_pre_ywithout_immediate_flip[i][j][k] > 4.0 || v->v_ratio_pre_cwithout_immediate_flip[i][j][k] > 4.0)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 959 v->v_ratio_in_prefetch_supported_without_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 960 } 74c49c7ac14f3a Harry Wentland 2017-05-08 961 } 74c49c7ac14f3a Harry Wentland 2017-05-08 962 } 74c49c7ac14f3a Harry Wentland 2017-05-08 963 } 74c49c7ac14f3a Harry Wentland 2017-05-08 964 /*mode support, voltage state and soc configuration*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 965 74c49c7ac14f3a Harry Wentland 2017-05-08 966 for (i = number_of_states_plus_one; i >= 0; i--) { 74c49c7ac14f3a Harry Wentland 2017-05-08 967 for (j = 0; j <= 1; j++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 968 if (v->scale_ratio_support == dcn_bw_yes && v->source_format_pixel_and_scan_support == dcn_bw_yes && v->viewport_size_support == dcn_bw_yes && v->bandwidth_support[i] == dcn_bw_yes && v->dio_support[i] == dcn_bw_yes && v->urgent_latency_support[i][j] == dcn_bw_yes && v->rob_support[i] == dcn_bw_yes && v->dispclk_dppclk_support[i][j] == dcn_bw_yes && v->total_available_pipes_support[i][j] == dcn_bw_yes && v->total_available_writeback_support == dcn_bw_yes && v->writeback_latency_support == dcn_bw_yes) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 969 if (v->prefetch_supported_with_immediate_flip[i][j] == dcn_bw_yes && v->v_ratio_in_prefetch_supported_with_immediate_flip[i][j] == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 970 v->mode_support_with_immediate_flip[i][j] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 971 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 972 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 973 v->mode_support_with_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 974 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 975 if (v->prefetch_supported_without_immediate_flip[i][j] == dcn_bw_yes && v->v_ratio_in_prefetch_supported_without_immediate_flip[i][j] == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 976 v->mode_support_without_immediate_flip[i][j] = dcn_bw_yes; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 977 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 978 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 979 v->mode_support_without_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 980 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 981 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 982 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 983 v->mode_support_with_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 984 v->mode_support_without_immediate_flip[i][j] = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 985 } 74c49c7ac14f3a Harry Wentland 2017-05-08 986 } 74c49c7ac14f3a Harry Wentland 2017-05-08 987 } 74c49c7ac14f3a Harry Wentland 2017-05-08 988 for (i = number_of_states_plus_one; i >= 0; i--) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 989 if ((i == number_of_states_plus_one || v->mode_support_with_immediate_flip[i][1] == dcn_bw_yes || v->mode_support_with_immediate_flip[i][0] == dcn_bw_yes) && i >= v->voltage_override_level) { 74c49c7ac14f3a Harry Wentland 2017-05-08 990 v->voltage_level_with_immediate_flip = i; 74c49c7ac14f3a Harry Wentland 2017-05-08 991 } 74c49c7ac14f3a Harry Wentland 2017-05-08 992 } 74c49c7ac14f3a Harry Wentland 2017-05-08 993 for (i = number_of_states_plus_one; i >= 0; i--) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 994 if ((i == number_of_states_plus_one || v->mode_support_without_immediate_flip[i][1] == dcn_bw_yes || v->mode_support_without_immediate_flip[i][0] == dcn_bw_yes) && i >= v->voltage_override_level) { 74c49c7ac14f3a Harry Wentland 2017-05-08 995 v->voltage_level_without_immediate_flip = i; 74c49c7ac14f3a Harry Wentland 2017-05-08 996 } 74c49c7ac14f3a Harry Wentland 2017-05-08 997 } 74c49c7ac14f3a Harry Wentland 2017-05-08 998 if (v->voltage_level_with_immediate_flip == number_of_states_plus_one) { 74c49c7ac14f3a Harry Wentland 2017-05-08 999 v->immediate_flip_supported = dcn_bw_no; 74c49c7ac14f3a Harry Wentland 2017-05-08 1000 v->voltage_level = v->voltage_level_without_immediate_flip; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1001 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1002 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1003 v->immediate_flip_supported = dcn_bw_yes; 74c49c7ac14f3a Harry Wentland 2017-05-08 1004 v->voltage_level = v->voltage_level_with_immediate_flip; 74c49c7ac14f3a Harry Wentland 2017-05-08 1005 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1006 v->dcfclk = v->dcfclk_per_state[v->voltage_level]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1007 v->fabric_and_dram_bandwidth = v->fabric_and_dram_bandwidth_per_state[v->voltage_level]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1008 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1009 v->required_dispclk_per_ratio[j] = v->required_dispclk[v->voltage_level][j]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1010 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1011 v->dpp_per_plane_per_ratio[j][k] = v->no_of_dpp[v->voltage_level][j][k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1012 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1013 v->dispclk_dppclk_support_per_ratio[j] = v->dispclk_dppclk_support[v->voltage_level][j]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1014 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1015 v->max_phyclk = v->phyclk_per_state[v->voltage_level]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1016 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1017 void display_pipe_configuration(struct dcn_bw_internal_vars *v) 74c49c7ac14f3a Harry Wentland 2017-05-08 1018 { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1019 int j; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1020 int k; 74c49c7ac14f3a Harry Wentland 2017-05-08 1021 /*display pipe configuration*/ 74c49c7ac14f3a Harry Wentland 2017-05-08 1022 74c49c7ac14f3a Harry Wentland 2017-05-08 1023 for (j = 0; j <= 1; j++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1024 v->total_number_of_active_dpp_per_ratio[j] = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1025 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1026 v->total_number_of_active_dpp_per_ratio[j] = v->total_number_of_active_dpp_per_ratio[j] + v->dpp_per_plane_per_ratio[j][k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1027 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1028 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1029 if ((v->dispclk_dppclk_support_per_ratio[0] == dcn_bw_yes && v->dispclk_dppclk_support_per_ratio[1] == dcn_bw_no) || (v->dispclk_dppclk_support_per_ratio[0] == v->dispclk_dppclk_support_per_ratio[1] && (v->total_number_of_active_dpp_per_ratio[0] < v->total_number_of_active_dpp_per_ratio[1] || (((v->total_number_of_active_dpp_per_ratio[0] == v->total_number_of_active_dpp_per_ratio[1]) && v->required_dispclk_per_ratio[0] <= 0.5 * v->required_dispclk_per_ratio[1]))))) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1030 v->dispclk_dppclk_ratio = 1; 74c49c7ac14f3a Harry Wentland 2017-05-08 1031 v->final_error_message = v->error_message[0]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1032 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1033 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1034 v->dispclk_dppclk_ratio = 2; 74c49c7ac14f3a Harry Wentland 2017-05-08 1035 v->final_error_message = v->error_message[1]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1036 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1037 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1038 v->dpp_per_plane[k] = v->dpp_per_plane_per_ratio[v->dispclk_dppclk_ratio - 1][k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1039 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1040 for (k = 0; k <= v->number_of_active_planes - 1; k++) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1041 if (v->source_pixel_format[k] == dcn_bw_rgb_sub_64) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1042 v->byte_per_pix_dety = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1043 v->byte_per_pix_detc = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1044 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1045 else if (v->source_pixel_format[k] == dcn_bw_rgb_sub_32) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1046 v->byte_per_pix_dety = 4.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1047 v->byte_per_pix_detc = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1048 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1049 else if (v->source_pixel_format[k] == dcn_bw_rgb_sub_16) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1050 v->byte_per_pix_dety = 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1051 v->byte_per_pix_detc = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1052 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1053 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_8) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1054 v->byte_per_pix_dety = 1.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1055 v->byte_per_pix_detc = 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1056 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1057 else { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1058 v->byte_per_pix_dety = 4.0f / 3.0f; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1059 v->byte_per_pix_detc = 8.0f / 3.0f; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1060 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1061 if ((v->source_pixel_format[k] == dcn_bw_rgb_sub_64 || v->source_pixel_format[k] == dcn_bw_rgb_sub_32 || v->source_pixel_format[k] == dcn_bw_rgb_sub_16)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1062 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1063 v->read256_bytes_block_height_y = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1064 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1065 else if (v->source_pixel_format[k] == dcn_bw_rgb_sub_64) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1066 v->read256_bytes_block_height_y = 4.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1067 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1068 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1069 v->read256_bytes_block_height_y = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1070 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1071 v->read256_bytes_block_width_y = 256.0 /dcn_bw_ceil2(v->byte_per_pix_dety, 1.0) / v->read256_bytes_block_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1072 v->read256_bytes_block_height_c = 0.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1073 v->read256_bytes_block_width_c = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1074 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1075 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1076 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1077 v->read256_bytes_block_height_y = 1.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1078 v->read256_bytes_block_height_c = 1.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1079 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1080 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_8) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1081 v->read256_bytes_block_height_y = 16.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1082 v->read256_bytes_block_height_c = 8.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1083 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1084 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1085 v->read256_bytes_block_height_y = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1086 v->read256_bytes_block_height_c = 8.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1087 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1088 v->read256_bytes_block_width_y = 256.0 /dcn_bw_ceil2(v->byte_per_pix_dety, 1.0) / v->read256_bytes_block_height_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1089 v->read256_bytes_block_width_c = 256.0 /dcn_bw_ceil2(v->byte_per_pix_detc, 2.0) / v->read256_bytes_block_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 1090 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1091 if (v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1092 v->maximum_swath_height_y = v->read256_bytes_block_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1093 v->maximum_swath_height_c = v->read256_bytes_block_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1094 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1095 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1096 v->maximum_swath_height_y = v->read256_bytes_block_width_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1097 v->maximum_swath_height_c = v->read256_bytes_block_width_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 1098 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1099 if ((v->source_pixel_format[k] == dcn_bw_rgb_sub_64 || v->source_pixel_format[k] == dcn_bw_rgb_sub_32 || v->source_pixel_format[k] == dcn_bw_rgb_sub_16)) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1100 if (v->source_surface_mode[k] == dcn_bw_sw_linear || (v->source_pixel_format[k] == dcn_bw_rgb_sub_64 && (v->source_surface_mode[k] == dcn_bw_sw_4_kb_s || v->source_surface_mode[k] == dcn_bw_sw_4_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_t || v->source_surface_mode[k] == dcn_bw_sw_64_kb_s_x || v->source_surface_mode[k] == dcn_bw_sw_var_s || v->source_surface_mode[k] == dcn_bw_sw_var_s_x) && v->source_scan[k] == dcn_bw_hor)) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1101 v->minimum_swath_height_y = v->maximum_swath_height_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1102 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1103 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1104 v->minimum_swath_height_y = v->maximum_swath_height_y / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1105 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1106 v->minimum_swath_height_c = v->maximum_swath_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1107 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1108 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1109 if (v->source_surface_mode[k] == dcn_bw_sw_linear) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1110 v->minimum_swath_height_y = v->maximum_swath_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1111 v->minimum_swath_height_c = v->maximum_swath_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1112 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1113 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_8 && v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1114 v->minimum_swath_height_y = v->maximum_swath_height_y / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1115 if (v->bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1116 v->minimum_swath_height_c = v->maximum_swath_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1117 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1118 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1119 v->minimum_swath_height_c = v->maximum_swath_height_c / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1120 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1121 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1122 else if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_10 && v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1123 v->minimum_swath_height_c = v->maximum_swath_height_c / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1124 if (v->bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1125 v->minimum_swath_height_y = v->maximum_swath_height_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1126 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1127 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1128 v->minimum_swath_height_y = v->maximum_swath_height_y / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1129 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1130 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1131 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1132 v->minimum_swath_height_y = v->maximum_swath_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1133 v->minimum_swath_height_c = v->maximum_swath_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 1134 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1135 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1136 if (v->source_scan[k] == dcn_bw_hor) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1137 v->swath_width = v->viewport_width[k] / v->dpp_per_plane[k]; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1138 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1139 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1140 v->swath_width = v->viewport_height[k] / v->dpp_per_plane[k]; 74c49c7ac14f3a Harry Wentland 2017-05-08 1141 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1142 v->swath_width_granularity_y = 256.0 /dcn_bw_ceil2(v->byte_per_pix_dety, 1.0) / v->maximum_swath_height_y; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1143 v->rounded_up_max_swath_size_bytes_y = (dcn_bw_ceil2(v->swath_width - 1.0, v->swath_width_granularity_y) + v->swath_width_granularity_y) * v->byte_per_pix_dety * v->maximum_swath_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1144 if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_10) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1145 v->rounded_up_max_swath_size_bytes_y =dcn_bw_ceil2(v->rounded_up_max_swath_size_bytes_y, 256.0) + 256; 74c49c7ac14f3a Harry Wentland 2017-05-08 1146 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1147 if (v->maximum_swath_height_c > 0.0) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1148 v->swath_width_granularity_c = 256.0 /dcn_bw_ceil2(v->byte_per_pix_detc, 2.0) / v->maximum_swath_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 1149 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1150 v->rounded_up_max_swath_size_bytes_c = (dcn_bw_ceil2(v->swath_width / 2.0 - 1.0, v->swath_width_granularity_c) + v->swath_width_granularity_c) * v->byte_per_pix_detc * v->maximum_swath_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 1151 if (v->source_pixel_format[k] == dcn_bw_yuv420_sub_10) { 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1152 v->rounded_up_max_swath_size_bytes_c =dcn_bw_ceil2(v->rounded_up_max_swath_size_bytes_c, 256.0) + 256; 74c49c7ac14f3a Harry Wentland 2017-05-08 1153 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1154 if (v->rounded_up_max_swath_size_bytes_y + v->rounded_up_max_swath_size_bytes_c <= v->det_buffer_size_in_kbyte * 1024.0 / 2.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1155 v->swath_height_y[k] = v->maximum_swath_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1156 v->swath_height_c[k] = v->maximum_swath_height_c; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1157 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1158 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1159 v->swath_height_y[k] = v->minimum_swath_height_y; 74c49c7ac14f3a Harry Wentland 2017-05-08 1160 v->swath_height_c[k] = v->minimum_swath_height_c; 74c49c7ac14f3a Harry Wentland 2017-05-08 1161 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1162 if (v->swath_height_c[k] == 0.0) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1163 v->det_buffer_size_y[k] = v->det_buffer_size_in_kbyte * 1024.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1164 v->det_buffer_size_c[k] = 0.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1165 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1166 else if (v->swath_height_y[k] <= v->swath_height_c[k]) { 74c49c7ac14f3a Harry Wentland 2017-05-08 1167 v->det_buffer_size_y[k] = v->det_buffer_size_in_kbyte * 1024.0 / 2.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1168 v->det_buffer_size_c[k] = v->det_buffer_size_in_kbyte * 1024.0 / 2.0; 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1169 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 1170 else { 74c49c7ac14f3a Harry Wentland 2017-05-08 1171 v->det_buffer_size_y[k] = v->det_buffer_size_in_kbyte * 1024.0 * 2.0 / 3.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1172 v->det_buffer_size_c[k] = v->det_buffer_size_in_kbyte * 1024.0 / 3.0; 74c49c7ac14f3a Harry Wentland 2017-05-08 1173 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1174 } 74c49c7ac14f3a Harry Wentland 2017-05-08 1175 } 5634fb6078dd9b Dmytro Laktyushkin 2017-06-15 @1176 void dispclkdppclkdcfclk_deep_sleep_prefetch_parameters_watermarks_and_performance_calculation(struct dcn_bw_internal_vars *v) :::::: The code at line 1176 was first introduced by commit :::::: 5634fb6078dd9b9f794e93eef2fef52150cdc827 drm/amd/display: dcn bw_calc_auto update rev 247 to 250 :::::: TO: Dmytro Laktyushkin <Dmytro.Laktyushkin@xxxxxxx> :::::: CC: Alex Deucher <alexander.deucher@xxxxxxx> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip