dcn_calcs.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. /*
  2. * Copyright 2017 Advanced Micro Devices, Inc.
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. * OTHER DEALINGS IN THE SOFTWARE.
  21. *
  22. * Authors: AMD
  23. *
  24. */
  25. /**
  26. * Bandwidth and Watermark calculations interface.
  27. * (Refer to "DCEx_mode_support.xlsm" from Perforce.)
  28. */
  29. #ifndef __DCN_CALCS_H__
  30. #define __DCN_CALCS_H__
  31. #include "bw_fixed.h"
  32. #include "display_clock.h"
  33. #include "../dml/display_mode_lib.h"
  34. struct dc;
  35. struct dc_state;
  36. /*******************************************************************************
  37. * DCN data structures.
  38. ******************************************************************************/
  39. #define number_of_planes 6
  40. #define number_of_planes_minus_one 5
  41. #define number_of_states 4
  42. #define number_of_states_plus_one 5
  43. #define ddr4_dram_width 64
  44. #define ddr4_dram_factor_single_Channel 16
  45. enum dcn_bw_defs {
  46. dcn_bw_v_min0p65,
  47. dcn_bw_v_mid0p72,
  48. dcn_bw_v_nom0p8,
  49. dcn_bw_v_max0p9,
  50. dcn_bw_v_max0p91,
  51. dcn_bw_no_support = 5,
  52. dcn_bw_yes,
  53. dcn_bw_hor,
  54. dcn_bw_vert,
  55. dcn_bw_override,
  56. dcn_bw_rgb_sub_64,
  57. dcn_bw_rgb_sub_32,
  58. dcn_bw_rgb_sub_16,
  59. dcn_bw_no,
  60. dcn_bw_sw_linear,
  61. dcn_bw_sw_4_kb_d,
  62. dcn_bw_sw_4_kb_d_x,
  63. dcn_bw_sw_64_kb_d,
  64. dcn_bw_sw_64_kb_d_t,
  65. dcn_bw_sw_64_kb_d_x,
  66. dcn_bw_sw_var_d,
  67. dcn_bw_sw_var_d_x,
  68. dcn_bw_yuv420_sub_8,
  69. dcn_bw_sw_4_kb_s,
  70. dcn_bw_sw_4_kb_s_x,
  71. dcn_bw_sw_64_kb_s,
  72. dcn_bw_sw_64_kb_s_t,
  73. dcn_bw_sw_64_kb_s_x,
  74. dcn_bw_writeback,
  75. dcn_bw_444,
  76. dcn_bw_dp,
  77. dcn_bw_420,
  78. dcn_bw_hdmi,
  79. dcn_bw_sw_var_s,
  80. dcn_bw_sw_var_s_x,
  81. dcn_bw_yuv420_sub_10,
  82. dcn_bw_supported_in_v_active,
  83. dcn_bw_supported_in_v_blank,
  84. dcn_bw_not_supported,
  85. dcn_bw_na,
  86. dcn_bw_encoder_8bpc,
  87. dcn_bw_encoder_10bpc,
  88. dcn_bw_encoder_12bpc,
  89. dcn_bw_encoder_16bpc,
  90. };
  91. /*bounding box parameters*/
  92. /*mode parameters*/
  93. /*system configuration*/
  94. /* display configuration*/
  95. struct dcn_bw_internal_vars {
  96. float voltage[number_of_states_plus_one + 1];
  97. float max_dispclk[number_of_states_plus_one + 1];
  98. float max_dppclk[number_of_states_plus_one + 1];
  99. float dcfclk_per_state[number_of_states_plus_one + 1];
  100. float phyclk_per_state[number_of_states_plus_one + 1];
  101. float fabric_and_dram_bandwidth_per_state[number_of_states_plus_one + 1];
  102. float sr_exit_time;
  103. float sr_enter_plus_exit_time;
  104. float dram_clock_change_latency;
  105. float urgent_latency;
  106. float write_back_latency;
  107. float percent_of_ideal_drambw_received_after_urg_latency;
  108. float dcfclkv_max0p9;
  109. float dcfclkv_nom0p8;
  110. float dcfclkv_mid0p72;
  111. float dcfclkv_min0p65;
  112. float max_dispclk_vmax0p9;
  113. float max_dppclk_vmax0p9;
  114. float max_dispclk_vnom0p8;
  115. float max_dppclk_vnom0p8;
  116. float max_dispclk_vmid0p72;
  117. float max_dppclk_vmid0p72;
  118. float max_dispclk_vmin0p65;
  119. float max_dppclk_vmin0p65;
  120. float socclk;
  121. float fabric_and_dram_bandwidth_vmax0p9;
  122. float fabric_and_dram_bandwidth_vnom0p8;
  123. float fabric_and_dram_bandwidth_vmid0p72;
  124. float fabric_and_dram_bandwidth_vmin0p65;
  125. float round_trip_ping_latency_cycles;
  126. float urgent_out_of_order_return_per_channel;
  127. float number_of_channels;
  128. float vmm_page_size;
  129. float return_bus_width;
  130. float rob_buffer_size_in_kbyte;
  131. float det_buffer_size_in_kbyte;
  132. float dpp_output_buffer_pixels;
  133. float opp_output_buffer_lines;
  134. float pixel_chunk_size_in_kbyte;
  135. float pte_chunk_size;
  136. float meta_chunk_size;
  137. float writeback_chunk_size;
  138. enum dcn_bw_defs odm_capability;
  139. enum dcn_bw_defs dsc_capability;
  140. float line_buffer_size;
  141. enum dcn_bw_defs is_line_buffer_bpp_fixed;
  142. float line_buffer_fixed_bpp;
  143. float max_line_buffer_lines;
  144. float writeback_luma_buffer_size;
  145. float writeback_chroma_buffer_size;
  146. float max_num_dpp;
  147. float max_num_writeback;
  148. float max_dchub_topscl_throughput;
  149. float max_pscl_tolb_throughput;
  150. float max_lb_tovscl_throughput;
  151. float max_vscl_tohscl_throughput;
  152. float max_hscl_ratio;
  153. float max_vscl_ratio;
  154. float max_hscl_taps;
  155. float max_vscl_taps;
  156. float under_scan_factor;
  157. float phyclkv_max0p9;
  158. float phyclkv_nom0p8;
  159. float phyclkv_mid0p72;
  160. float phyclkv_min0p65;
  161. float pte_buffer_size_in_requests;
  162. float dispclk_ramping_margin;
  163. float downspreading;
  164. float max_inter_dcn_tile_repeaters;
  165. enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
  166. enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed;
  167. int mode;
  168. float viewport_width[number_of_planes_minus_one + 1];
  169. float htotal[number_of_planes_minus_one + 1];
  170. float vtotal[number_of_planes_minus_one + 1];
  171. float v_sync_plus_back_porch[number_of_planes_minus_one + 1];
  172. float vactive[number_of_planes_minus_one + 1];
  173. float pixel_clock[number_of_planes_minus_one + 1]; /*MHz*/
  174. float viewport_height[number_of_planes_minus_one + 1];
  175. enum dcn_bw_defs dcc_enable[number_of_planes_minus_one + 1];
  176. float dcc_rate[number_of_planes_minus_one + 1];
  177. enum dcn_bw_defs source_scan[number_of_planes_minus_one + 1];
  178. float lb_bit_per_pixel[number_of_planes_minus_one + 1];
  179. enum dcn_bw_defs source_pixel_format[number_of_planes_minus_one + 1];
  180. enum dcn_bw_defs source_surface_mode[number_of_planes_minus_one + 1];
  181. enum dcn_bw_defs output_format[number_of_planes_minus_one + 1];
  182. enum dcn_bw_defs output_deep_color[number_of_planes_minus_one + 1];
  183. enum dcn_bw_defs output[number_of_planes_minus_one + 1];
  184. float scaler_rec_out_width[number_of_planes_minus_one + 1];
  185. float scaler_recout_height[number_of_planes_minus_one + 1];
  186. float underscan_output[number_of_planes_minus_one + 1];
  187. float interlace_output[number_of_planes_minus_one + 1];
  188. float override_hta_ps[number_of_planes_minus_one + 1];
  189. float override_vta_ps[number_of_planes_minus_one + 1];
  190. float override_hta_pschroma[number_of_planes_minus_one + 1];
  191. float override_vta_pschroma[number_of_planes_minus_one + 1];
  192. float urgent_latency_support_us[number_of_planes_minus_one + 1];
  193. float h_ratio[number_of_planes_minus_one + 1];
  194. float v_ratio[number_of_planes_minus_one + 1];
  195. float htaps[number_of_planes_minus_one + 1];
  196. float vtaps[number_of_planes_minus_one + 1];
  197. float hta_pschroma[number_of_planes_minus_one + 1];
  198. float vta_pschroma[number_of_planes_minus_one + 1];
  199. enum dcn_bw_defs pte_enable;
  200. enum dcn_bw_defs synchronized_vblank;
  201. enum dcn_bw_defs ta_pscalculation;
  202. int voltage_override_level;
  203. int number_of_active_planes;
  204. int voltage_level;
  205. enum dcn_bw_defs immediate_flip_supported;
  206. float dcfclk;
  207. float max_phyclk;
  208. float fabric_and_dram_bandwidth;
  209. float dpp_per_plane_per_ratio[1 + 1][number_of_planes_minus_one + 1];
  210. enum dcn_bw_defs dispclk_dppclk_support_per_ratio[1 + 1];
  211. float required_dispclk_per_ratio[1 + 1];
  212. enum dcn_bw_defs error_message[1 + 1];
  213. int dispclk_dppclk_ratio;
  214. float dpp_per_plane[number_of_planes_minus_one + 1];
  215. float det_buffer_size_y[number_of_planes_minus_one + 1];
  216. float det_buffer_size_c[number_of_planes_minus_one + 1];
  217. float swath_height_y[number_of_planes_minus_one + 1];
  218. float swath_height_c[number_of_planes_minus_one + 1];
  219. enum dcn_bw_defs final_error_message;
  220. float frequency;
  221. float header_line;
  222. float header;
  223. enum dcn_bw_defs voltage_override;
  224. enum dcn_bw_defs allow_different_hratio_vratio;
  225. float acceptable_quality_hta_ps;
  226. float acceptable_quality_vta_ps;
  227. float no_of_dpp[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  228. float swath_width_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  229. float swath_height_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  230. float swath_height_cper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  231. float urgent_latency_support_us_per_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  232. float v_ratio_pre_ywith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  233. float v_ratio_pre_cwith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  234. float required_prefetch_pixel_data_bw_with_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  235. float v_ratio_pre_ywithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  236. float v_ratio_pre_cwithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  237. float required_prefetch_pixel_data_bw_without_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
  238. enum dcn_bw_defs prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
  239. enum dcn_bw_defs prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
  240. enum dcn_bw_defs v_ratio_in_prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
  241. enum dcn_bw_defs v_ratio_in_prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
  242. float required_dispclk[number_of_states_plus_one + 1][1 + 1];
  243. enum dcn_bw_defs dispclk_dppclk_support[number_of_states_plus_one + 1][1 + 1];
  244. enum dcn_bw_defs total_available_pipes_support[number_of_states_plus_one + 1][1 + 1];
  245. float total_number_of_active_dpp[number_of_states_plus_one + 1][1 + 1];
  246. float total_number_of_dcc_active_dpp[number_of_states_plus_one + 1][1 + 1];
  247. enum dcn_bw_defs urgent_latency_support[number_of_states_plus_one + 1][1 + 1];
  248. enum dcn_bw_defs mode_support_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
  249. enum dcn_bw_defs mode_support_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
  250. float return_bw_per_state[number_of_states_plus_one + 1];
  251. enum dcn_bw_defs dio_support[number_of_states_plus_one + 1];
  252. float urgent_round_trip_and_out_of_order_latency_per_state[number_of_states_plus_one + 1];
  253. enum dcn_bw_defs rob_support[number_of_states_plus_one + 1];
  254. enum dcn_bw_defs bandwidth_support[number_of_states_plus_one + 1];
  255. float prefetch_bw[number_of_planes_minus_one + 1];
  256. float meta_pte_bytes_per_frame[number_of_planes_minus_one + 1];
  257. float meta_row_bytes[number_of_planes_minus_one + 1];
  258. float dpte_bytes_per_row[number_of_planes_minus_one + 1];
  259. float prefetch_lines_y[number_of_planes_minus_one + 1];
  260. float prefetch_lines_c[number_of_planes_minus_one + 1];
  261. float max_num_sw_y[number_of_planes_minus_one + 1];
  262. float max_num_sw_c[number_of_planes_minus_one + 1];
  263. float line_times_for_prefetch[number_of_planes_minus_one + 1];
  264. float lines_for_meta_pte_with_immediate_flip[number_of_planes_minus_one + 1];
  265. float lines_for_meta_pte_without_immediate_flip[number_of_planes_minus_one + 1];
  266. float lines_for_meta_and_dpte_row_with_immediate_flip[number_of_planes_minus_one + 1];
  267. float lines_for_meta_and_dpte_row_without_immediate_flip[number_of_planes_minus_one + 1];
  268. float min_dppclk_using_single_dpp[number_of_planes_minus_one + 1];
  269. float swath_width_ysingle_dpp[number_of_planes_minus_one + 1];
  270. float byte_per_pixel_in_dety[number_of_planes_minus_one + 1];
  271. float byte_per_pixel_in_detc[number_of_planes_minus_one + 1];
  272. float number_of_dpp_required_for_det_and_lb_size[number_of_planes_minus_one + 1];
  273. float required_phyclk[number_of_planes_minus_one + 1];
  274. float read256_block_height_y[number_of_planes_minus_one + 1];
  275. float read256_block_width_y[number_of_planes_minus_one + 1];
  276. float read256_block_height_c[number_of_planes_minus_one + 1];
  277. float read256_block_width_c[number_of_planes_minus_one + 1];
  278. float max_swath_height_y[number_of_planes_minus_one + 1];
  279. float max_swath_height_c[number_of_planes_minus_one + 1];
  280. float min_swath_height_y[number_of_planes_minus_one + 1];
  281. float min_swath_height_c[number_of_planes_minus_one + 1];
  282. float read_bandwidth[number_of_planes_minus_one + 1];
  283. float write_bandwidth[number_of_planes_minus_one + 1];
  284. float pscl_factor[number_of_planes_minus_one + 1];
  285. float pscl_factor_chroma[number_of_planes_minus_one + 1];
  286. enum dcn_bw_defs scale_ratio_support;
  287. enum dcn_bw_defs source_format_pixel_and_scan_support;
  288. float total_read_bandwidth_consumed_gbyte_per_second;
  289. float total_write_bandwidth_consumed_gbyte_per_second;
  290. float total_bandwidth_consumed_gbyte_per_second;
  291. enum dcn_bw_defs dcc_enabled_in_any_plane;
  292. float return_bw_todcn_per_state;
  293. float critical_point;
  294. enum dcn_bw_defs writeback_latency_support;
  295. float required_output_bw;
  296. float total_number_of_active_writeback;
  297. enum dcn_bw_defs total_available_writeback_support;
  298. float maximum_swath_width;
  299. float number_of_dpp_required_for_det_size;
  300. float number_of_dpp_required_for_lb_size;
  301. float min_dispclk_using_single_dpp;
  302. float min_dispclk_using_dual_dpp;
  303. enum dcn_bw_defs viewport_size_support;
  304. float swath_width_granularity_y;
  305. float rounded_up_max_swath_size_bytes_y;
  306. float swath_width_granularity_c;
  307. float rounded_up_max_swath_size_bytes_c;
  308. float lines_in_det_luma;
  309. float lines_in_det_chroma;
  310. float effective_lb_latency_hiding_source_lines_luma;
  311. float effective_lb_latency_hiding_source_lines_chroma;
  312. float effective_detlb_lines_luma;
  313. float effective_detlb_lines_chroma;
  314. float projected_dcfclk_deep_sleep;
  315. float meta_req_height_y;
  316. float meta_req_width_y;
  317. float meta_surface_width_y;
  318. float meta_surface_height_y;
  319. float meta_pte_bytes_per_frame_y;
  320. float meta_row_bytes_y;
  321. float macro_tile_block_size_bytes_y;
  322. float macro_tile_block_height_y;
  323. float data_pte_req_height_y;
  324. float data_pte_req_width_y;
  325. float dpte_bytes_per_row_y;
  326. float meta_req_height_c;
  327. float meta_req_width_c;
  328. float meta_surface_width_c;
  329. float meta_surface_height_c;
  330. float meta_pte_bytes_per_frame_c;
  331. float meta_row_bytes_c;
  332. float macro_tile_block_size_bytes_c;
  333. float macro_tile_block_height_c;
  334. float macro_tile_block_width_c;
  335. float data_pte_req_height_c;
  336. float data_pte_req_width_c;
  337. float dpte_bytes_per_row_c;
  338. float v_init_y;
  339. float max_partial_sw_y;
  340. float v_init_c;
  341. float max_partial_sw_c;
  342. float dst_x_after_scaler;
  343. float dst_y_after_scaler;
  344. float time_calc;
  345. float v_update_offset[number_of_planes_minus_one + 1];
  346. float total_repeater_delay;
  347. float v_update_width[number_of_planes_minus_one + 1];
  348. float v_ready_offset[number_of_planes_minus_one + 1];
  349. float time_setup;
  350. float extra_latency;
  351. float maximum_vstartup;
  352. float bw_available_for_immediate_flip;
  353. float total_immediate_flip_bytes[number_of_planes_minus_one + 1];
  354. float time_for_meta_pte_with_immediate_flip;
  355. float time_for_meta_pte_without_immediate_flip;
  356. float time_for_meta_and_dpte_row_with_immediate_flip;
  357. float time_for_meta_and_dpte_row_without_immediate_flip;
  358. float line_times_to_request_prefetch_pixel_data_with_immediate_flip;
  359. float line_times_to_request_prefetch_pixel_data_without_immediate_flip;
  360. float maximum_read_bandwidth_with_prefetch_with_immediate_flip;
  361. float maximum_read_bandwidth_with_prefetch_without_immediate_flip;
  362. float voltage_level_with_immediate_flip;
  363. float voltage_level_without_immediate_flip;
  364. float total_number_of_active_dpp_per_ratio[1 + 1];
  365. float byte_per_pix_dety;
  366. float byte_per_pix_detc;
  367. float read256_bytes_block_height_y;
  368. float read256_bytes_block_width_y;
  369. float read256_bytes_block_height_c;
  370. float read256_bytes_block_width_c;
  371. float maximum_swath_height_y;
  372. float maximum_swath_height_c;
  373. float minimum_swath_height_y;
  374. float minimum_swath_height_c;
  375. float swath_width;
  376. float prefetch_bandwidth[number_of_planes_minus_one + 1];
  377. float v_init_pre_fill_y[number_of_planes_minus_one + 1];
  378. float v_init_pre_fill_c[number_of_planes_minus_one + 1];
  379. float max_num_swath_y[number_of_planes_minus_one + 1];
  380. float max_num_swath_c[number_of_planes_minus_one + 1];
  381. float prefill_y[number_of_planes_minus_one + 1];
  382. float prefill_c[number_of_planes_minus_one + 1];
  383. float v_startup[number_of_planes_minus_one + 1];
  384. enum dcn_bw_defs allow_dram_clock_change_during_vblank[number_of_planes_minus_one + 1];
  385. float allow_dram_self_refresh_during_vblank[number_of_planes_minus_one + 1];
  386. float v_ratio_prefetch_y[number_of_planes_minus_one + 1];
  387. float v_ratio_prefetch_c[number_of_planes_minus_one + 1];
  388. float destination_lines_for_prefetch[number_of_planes_minus_one + 1];
  389. float destination_lines_to_request_vm_inv_blank[number_of_planes_minus_one + 1];
  390. float destination_lines_to_request_row_in_vblank[number_of_planes_minus_one + 1];
  391. float min_ttuv_blank[number_of_planes_minus_one + 1];
  392. float byte_per_pixel_dety[number_of_planes_minus_one + 1];
  393. float byte_per_pixel_detc[number_of_planes_minus_one + 1];
  394. float swath_width_y[number_of_planes_minus_one + 1];
  395. float lines_in_dety[number_of_planes_minus_one + 1];
  396. float lines_in_dety_rounded_down_to_swath[number_of_planes_minus_one + 1];
  397. float lines_in_detc[number_of_planes_minus_one + 1];
  398. float lines_in_detc_rounded_down_to_swath[number_of_planes_minus_one + 1];
  399. float full_det_buffering_time_y[number_of_planes_minus_one + 1];
  400. float full_det_buffering_time_c[number_of_planes_minus_one + 1];
  401. float active_dram_clock_change_latency_margin[number_of_planes_minus_one + 1];
  402. float v_blank_dram_clock_change_latency_margin[number_of_planes_minus_one + 1];
  403. float dcfclk_deep_sleep_per_plane[number_of_planes_minus_one + 1];
  404. float read_bandwidth_plane_luma[number_of_planes_minus_one + 1];
  405. float read_bandwidth_plane_chroma[number_of_planes_minus_one + 1];
  406. float display_pipe_line_delivery_time_luma[number_of_planes_minus_one + 1];
  407. float display_pipe_line_delivery_time_chroma[number_of_planes_minus_one + 1];
  408. float display_pipe_line_delivery_time_luma_prefetch[number_of_planes_minus_one + 1];
  409. float display_pipe_line_delivery_time_chroma_prefetch[number_of_planes_minus_one + 1];
  410. float pixel_pte_bytes_per_row[number_of_planes_minus_one + 1];
  411. float meta_pte_bytes_frame[number_of_planes_minus_one + 1];
  412. float meta_row_byte[number_of_planes_minus_one + 1];
  413. float prefetch_source_lines_y[number_of_planes_minus_one + 1];
  414. float prefetch_source_lines_c[number_of_planes_minus_one + 1];
  415. float pscl_throughput[number_of_planes_minus_one + 1];
  416. float pscl_throughput_chroma[number_of_planes_minus_one + 1];
  417. float output_bpphdmi[number_of_planes_minus_one + 1];
  418. float output_bppdp4_lane_hbr[number_of_planes_minus_one + 1];
  419. float output_bppdp4_lane_hbr2[number_of_planes_minus_one + 1];
  420. float output_bppdp4_lane_hbr3[number_of_planes_minus_one + 1];
  421. float max_vstartup_lines[number_of_planes_minus_one + 1];
  422. float dispclk_with_ramping;
  423. float dispclk_without_ramping;
  424. float dppclk_using_single_dpp_luma;
  425. float dppclk_using_single_dpp;
  426. float dppclk_using_single_dpp_chroma;
  427. enum dcn_bw_defs odm_capable;
  428. float dispclk;
  429. float dppclk;
  430. float return_bandwidth_to_dcn;
  431. enum dcn_bw_defs dcc_enabled_any_plane;
  432. float return_bw;
  433. float critical_compression;
  434. float total_data_read_bandwidth;
  435. float total_active_dpp;
  436. float total_dcc_active_dpp;
  437. float urgent_round_trip_and_out_of_order_latency;
  438. float last_pixel_of_line_extra_watermark;
  439. float data_fabric_line_delivery_time_luma;
  440. float data_fabric_line_delivery_time_chroma;
  441. float urgent_extra_latency;
  442. float urgent_watermark;
  443. float ptemeta_urgent_watermark;
  444. float dram_clock_change_watermark;
  445. float total_active_writeback;
  446. float writeback_dram_clock_change_watermark;
  447. float min_full_det_buffering_time;
  448. float frame_time_for_min_full_det_buffering_time;
  449. float average_read_bandwidth_gbyte_per_second;
  450. float part_of_burst_that_fits_in_rob;
  451. float stutter_burst_time;
  452. float stutter_efficiency_not_including_vblank;
  453. float smallest_vblank;
  454. float v_blank_time;
  455. float stutter_efficiency;
  456. float dcf_clk_deep_sleep;
  457. float stutter_exit_watermark;
  458. float stutter_enter_plus_exit_watermark;
  459. float effective_det_plus_lb_lines_luma;
  460. float urgent_latency_support_us_luma;
  461. float effective_det_plus_lb_lines_chroma;
  462. float urgent_latency_support_us_chroma;
  463. float min_urgent_latency_support_us;
  464. float non_urgent_latency_tolerance;
  465. float block_height256_bytes_y;
  466. float block_height256_bytes_c;
  467. float meta_request_width_y;
  468. float meta_surf_width_y;
  469. float meta_surf_height_y;
  470. float meta_pte_bytes_frame_y;
  471. float meta_row_byte_y;
  472. float macro_tile_size_byte_y;
  473. float macro_tile_height_y;
  474. float pixel_pte_req_height_y;
  475. float pixel_pte_req_width_y;
  476. float pixel_pte_bytes_per_row_y;
  477. float meta_request_width_c;
  478. float meta_surf_width_c;
  479. float meta_surf_height_c;
  480. float meta_pte_bytes_frame_c;
  481. float meta_row_byte_c;
  482. float macro_tile_size_bytes_c;
  483. float macro_tile_height_c;
  484. float pixel_pte_req_height_c;
  485. float pixel_pte_req_width_c;
  486. float pixel_pte_bytes_per_row_c;
  487. float max_partial_swath_y;
  488. float max_partial_swath_c;
  489. float t_calc;
  490. float next_prefetch_mode;
  491. float v_startup_lines;
  492. enum dcn_bw_defs planes_with_room_to_increase_vstartup_prefetch_bw_less_than_active_bw;
  493. enum dcn_bw_defs planes_with_room_to_increase_vstartup_vratio_prefetch_more_than4;
  494. enum dcn_bw_defs planes_with_room_to_increase_vstartup_destination_line_times_for_prefetch_less_than2;
  495. enum dcn_bw_defs v_ratio_prefetch_more_than4;
  496. enum dcn_bw_defs destination_line_times_for_prefetch_less_than2;
  497. float prefetch_mode;
  498. float dstx_after_scaler;
  499. float dsty_after_scaler;
  500. float v_update_offset_pix;
  501. float total_repeater_delay_time;
  502. float v_update_width_pix;
  503. float v_ready_offset_pix;
  504. float t_setup;
  505. float t_wait;
  506. float bandwidth_available_for_immediate_flip;
  507. float tot_immediate_flip_bytes;
  508. float max_rd_bandwidth;
  509. float time_for_fetching_meta_pte;
  510. float time_for_fetching_row_in_vblank;
  511. float lines_to_request_prefetch_pixel_data;
  512. float required_prefetch_pix_data_bw;
  513. enum dcn_bw_defs prefetch_mode_supported;
  514. float active_dp_ps;
  515. float lb_latency_hiding_source_lines_y;
  516. float lb_latency_hiding_source_lines_c;
  517. float effective_lb_latency_hiding_y;
  518. float effective_lb_latency_hiding_c;
  519. float dpp_output_buffer_lines_y;
  520. float dpp_output_buffer_lines_c;
  521. float dppopp_buffering_y;
  522. float max_det_buffering_time_y;
  523. float active_dram_clock_change_latency_margin_y;
  524. float dppopp_buffering_c;
  525. float max_det_buffering_time_c;
  526. float active_dram_clock_change_latency_margin_c;
  527. float writeback_dram_clock_change_latency_margin;
  528. float min_active_dram_clock_change_margin;
  529. float v_blank_of_min_active_dram_clock_change_margin;
  530. float second_min_active_dram_clock_change_margin;
  531. float min_vblank_dram_clock_change_margin;
  532. float dram_clock_change_margin;
  533. float dram_clock_change_support;
  534. float wr_bandwidth;
  535. float max_used_bw;
  536. };
  537. struct dcn_soc_bounding_box {
  538. float sr_exit_time; /*us*/
  539. float sr_enter_plus_exit_time; /*us*/
  540. float urgent_latency; /*us*/
  541. float write_back_latency; /*us*/
  542. float percent_of_ideal_drambw_received_after_urg_latency; /*%*/
  543. int max_request_size; /*bytes*/
  544. float dcfclkv_max0p9; /*MHz*/
  545. float dcfclkv_nom0p8; /*MHz*/
  546. float dcfclkv_mid0p72; /*MHz*/
  547. float dcfclkv_min0p65; /*MHz*/
  548. float max_dispclk_vmax0p9; /*MHz*/
  549. float max_dispclk_vmid0p72; /*MHz*/
  550. float max_dispclk_vnom0p8; /*MHz*/
  551. float max_dispclk_vmin0p65; /*MHz*/
  552. float max_dppclk_vmax0p9; /*MHz*/
  553. float max_dppclk_vnom0p8; /*MHz*/
  554. float max_dppclk_vmid0p72; /*MHz*/
  555. float max_dppclk_vmin0p65; /*MHz*/
  556. float socclk; /*MHz*/
  557. float fabric_and_dram_bandwidth_vmax0p9; /*GB/s*/
  558. float fabric_and_dram_bandwidth_vnom0p8; /*GB/s*/
  559. float fabric_and_dram_bandwidth_vmid0p72; /*GB/s*/
  560. float fabric_and_dram_bandwidth_vmin0p65; /*GB/s*/
  561. float phyclkv_max0p9; /*MHz*/
  562. float phyclkv_nom0p8; /*MHz*/
  563. float phyclkv_mid0p72; /*MHz*/
  564. float phyclkv_min0p65; /*MHz*/
  565. float downspreading; /*%*/
  566. int round_trip_ping_latency_cycles; /*DCFCLK Cycles*/
  567. int urgent_out_of_order_return_per_channel; /*bytes*/
  568. int number_of_channels;
  569. int vmm_page_size; /*bytes*/
  570. float dram_clock_change_latency; /*us*/
  571. int return_bus_width; /*bytes*/
  572. float percent_disp_bw_limit; /*%*/
  573. };
  574. extern const struct dcn_soc_bounding_box dcn10_soc_defaults;
  575. struct dcn_ip_params {
  576. float rob_buffer_size_in_kbyte;
  577. float det_buffer_size_in_kbyte;
  578. float dpp_output_buffer_pixels;
  579. float opp_output_buffer_lines;
  580. float pixel_chunk_size_in_kbyte;
  581. enum dcn_bw_defs pte_enable;
  582. int pte_chunk_size; /*kbytes*/
  583. int meta_chunk_size; /*kbytes*/
  584. int writeback_chunk_size; /*kbytes*/
  585. enum dcn_bw_defs odm_capability;
  586. enum dcn_bw_defs dsc_capability;
  587. int line_buffer_size; /*bit*/
  588. int max_line_buffer_lines;
  589. enum dcn_bw_defs is_line_buffer_bpp_fixed;
  590. int line_buffer_fixed_bpp;
  591. int writeback_luma_buffer_size; /*kbytes*/
  592. int writeback_chroma_buffer_size; /*kbytes*/
  593. int max_num_dpp;
  594. int max_num_writeback;
  595. int max_dchub_topscl_throughput; /*pixels/dppclk*/
  596. int max_pscl_tolb_throughput; /*pixels/dppclk*/
  597. int max_lb_tovscl_throughput; /*pixels/dppclk*/
  598. int max_vscl_tohscl_throughput; /*pixels/dppclk*/
  599. float max_hscl_ratio;
  600. float max_vscl_ratio;
  601. int max_hscl_taps;
  602. int max_vscl_taps;
  603. int pte_buffer_size_in_requests;
  604. float dispclk_ramping_margin; /*%*/
  605. float under_scan_factor;
  606. int max_inter_dcn_tile_repeaters;
  607. enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
  608. enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed;
  609. int dcfclk_cstate_latency;
  610. };
  611. extern const struct dcn_ip_params dcn10_ip_defaults;
  612. bool dcn_validate_bandwidth(
  613. struct dc *dc,
  614. struct dc_state *context);
  615. unsigned int dcn_find_dcfclk_suits_all(
  616. const struct dc *dc,
  617. struct clocks_value *clocks);
  618. void dcn_bw_update_from_pplib(struct dc *dc);
  619. void dcn_bw_notify_pplib_of_wm_ranges(struct dc *dc);
  620. void dcn_bw_sync_calcs_and_dml(struct dc *dc);
  621. #endif /* __DCN_CALCS_H__ */