dce_calcs.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. /*
  2. * Copyright 2015-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 __DCE_CALCS_H__
  30. #define __DCE_CALCS_H__
  31. #include "bw_fixed.h"
  32. struct pipe_ctx;
  33. struct dc;
  34. struct dc_state;
  35. struct dce_bw_output;
  36. enum bw_calcs_version {
  37. BW_CALCS_VERSION_INVALID,
  38. BW_CALCS_VERSION_CARRIZO,
  39. BW_CALCS_VERSION_POLARIS10,
  40. BW_CALCS_VERSION_POLARIS11,
  41. BW_CALCS_VERSION_STONEY,
  42. BW_CALCS_VERSION_VEGA10
  43. };
  44. /*******************************************************************************
  45. * There are three types of input into Calculations:
  46. * 1. per-DCE static values - these are "hardcoded" properties of the DCEIP
  47. * 2. board-level values - these are generally coming from VBIOS parser
  48. * 3. mode/configuration values - depending Mode, Scaling number of Displays etc.
  49. ******************************************************************************/
  50. enum bw_defines {
  51. //Common
  52. bw_def_no = 0,
  53. bw_def_none = 0,
  54. bw_def_yes = 1,
  55. bw_def_ok = 1,
  56. bw_def_high = 2,
  57. bw_def_mid = 1,
  58. bw_def_low = 0,
  59. //Internal
  60. bw_defs_start = 255,
  61. bw_def_underlay422,
  62. bw_def_underlay420_luma,
  63. bw_def_underlay420_chroma,
  64. bw_def_underlay444,
  65. bw_def_graphics,
  66. bw_def_display_write_back420_luma,
  67. bw_def_display_write_back420_chroma,
  68. bw_def_portrait,
  69. bw_def_hsr_mtn_4,
  70. bw_def_hsr_mtn_h_taps,
  71. bw_def_ceiling__h_taps_div_4___meq_hsr,
  72. bw_def_invalid_linear_or_stereo_mode,
  73. bw_def_invalid_rotation_or_bpp_or_stereo,
  74. bw_def_vsr_mtn_v_taps,
  75. bw_def_vsr_mtn_4,
  76. bw_def_auto,
  77. bw_def_manual,
  78. bw_def_exceeded_allowed_maximum_sclk,
  79. bw_def_exceeded_allowed_page_close_open,
  80. bw_def_exceeded_allowed_outstanding_pte_req_queue_size,
  81. bw_def_exceeded_allowed_maximum_bw,
  82. bw_def_landscape,
  83. //Panning and bezel
  84. bw_def_any_lines,
  85. //Underlay mode
  86. bw_def_underlay_only,
  87. bw_def_blended,
  88. bw_def_blend,
  89. //Stereo mode
  90. bw_def_mono,
  91. bw_def_side_by_side,
  92. bw_def_top_bottom,
  93. //Underlay surface type
  94. bw_def_420,
  95. bw_def_422,
  96. bw_def_444,
  97. //Tiling mode
  98. bw_def_linear,
  99. bw_def_tiled,
  100. bw_def_array_linear_general,
  101. bw_def_array_linear_aligned,
  102. bw_def_rotated_micro_tiling,
  103. bw_def_display_micro_tiling,
  104. //Memory type
  105. bw_def_gddr5,
  106. bw_def_hbm,
  107. //Voltage
  108. bw_def_high_no_nbp_state_change,
  109. bw_def_0_72,
  110. bw_def_0_8,
  111. bw_def_0_9,
  112. bw_def_notok = -1,
  113. bw_def_na = -1
  114. };
  115. struct bw_calcs_dceip {
  116. enum bw_calcs_version version;
  117. bool large_cursor;
  118. uint32_t cursor_max_outstanding_group_num;
  119. bool dmif_pipe_en_fbc_chunk_tracker;
  120. struct bw_fixed dmif_request_buffer_size;
  121. uint32_t lines_interleaved_into_lb;
  122. uint32_t low_power_tiling_mode;
  123. uint32_t chunk_width;
  124. uint32_t number_of_graphics_pipes;
  125. uint32_t number_of_underlay_pipes;
  126. bool display_write_back_supported;
  127. bool argb_compression_support;
  128. struct bw_fixed underlay_vscaler_efficiency6_bit_per_component;
  129. struct bw_fixed underlay_vscaler_efficiency8_bit_per_component;
  130. struct bw_fixed underlay_vscaler_efficiency10_bit_per_component;
  131. struct bw_fixed underlay_vscaler_efficiency12_bit_per_component;
  132. struct bw_fixed graphics_vscaler_efficiency6_bit_per_component;
  133. struct bw_fixed graphics_vscaler_efficiency8_bit_per_component;
  134. struct bw_fixed graphics_vscaler_efficiency10_bit_per_component;
  135. struct bw_fixed graphics_vscaler_efficiency12_bit_per_component;
  136. struct bw_fixed alpha_vscaler_efficiency;
  137. uint32_t max_dmif_buffer_allocated;
  138. uint32_t graphics_dmif_size;
  139. uint32_t underlay_luma_dmif_size;
  140. uint32_t underlay_chroma_dmif_size;
  141. bool pre_downscaler_enabled;
  142. bool underlay_downscale_prefetch_enabled;
  143. struct bw_fixed lb_write_pixels_per_dispclk;
  144. struct bw_fixed lb_size_per_component444;
  145. bool graphics_lb_nodownscaling_multi_line_prefetching;
  146. struct bw_fixed stutter_and_dram_clock_state_change_gated_before_cursor;
  147. struct bw_fixed underlay420_luma_lb_size_per_component;
  148. struct bw_fixed underlay420_chroma_lb_size_per_component;
  149. struct bw_fixed underlay422_lb_size_per_component;
  150. struct bw_fixed cursor_chunk_width;
  151. struct bw_fixed cursor_dcp_buffer_lines;
  152. struct bw_fixed underlay_maximum_width_efficient_for_tiling;
  153. struct bw_fixed underlay_maximum_height_efficient_for_tiling;
  154. struct bw_fixed peak_pte_request_to_eviction_ratio_limiting_multiple_displays_or_single_rotated_display;
  155. struct bw_fixed peak_pte_request_to_eviction_ratio_limiting_single_display_no_rotation;
  156. struct bw_fixed minimum_outstanding_pte_request_limit;
  157. struct bw_fixed maximum_total_outstanding_pte_requests_allowed_by_saw;
  158. bool limit_excessive_outstanding_dmif_requests;
  159. struct bw_fixed linear_mode_line_request_alternation_slice;
  160. uint32_t scatter_gather_lines_of_pte_prefetching_in_linear_mode;
  161. uint32_t display_write_back420_luma_mcifwr_buffer_size;
  162. uint32_t display_write_back420_chroma_mcifwr_buffer_size;
  163. struct bw_fixed request_efficiency;
  164. struct bw_fixed dispclk_per_request;
  165. struct bw_fixed dispclk_ramping_factor;
  166. struct bw_fixed display_pipe_throughput_factor;
  167. uint32_t scatter_gather_pte_request_rows_in_tiling_mode;
  168. struct bw_fixed mcifwr_all_surfaces_burst_time;
  169. };
  170. struct bw_calcs_vbios {
  171. enum bw_defines memory_type;
  172. uint32_t dram_channel_width_in_bits;
  173. uint32_t number_of_dram_channels;
  174. uint32_t number_of_dram_banks;
  175. struct bw_fixed low_yclk; /*m_hz*/
  176. struct bw_fixed mid_yclk; /*m_hz*/
  177. struct bw_fixed high_yclk; /*m_hz*/
  178. struct bw_fixed low_sclk; /*m_hz*/
  179. struct bw_fixed mid1_sclk; /*m_hz*/
  180. struct bw_fixed mid2_sclk; /*m_hz*/
  181. struct bw_fixed mid3_sclk; /*m_hz*/
  182. struct bw_fixed mid4_sclk; /*m_hz*/
  183. struct bw_fixed mid5_sclk; /*m_hz*/
  184. struct bw_fixed mid6_sclk; /*m_hz*/
  185. struct bw_fixed high_sclk; /*m_hz*/
  186. struct bw_fixed low_voltage_max_dispclk; /*m_hz*/
  187. struct bw_fixed mid_voltage_max_dispclk; /*m_hz*/
  188. struct bw_fixed high_voltage_max_dispclk; /*m_hz*/
  189. struct bw_fixed low_voltage_max_phyclk;
  190. struct bw_fixed mid_voltage_max_phyclk;
  191. struct bw_fixed high_voltage_max_phyclk;
  192. struct bw_fixed data_return_bus_width;
  193. struct bw_fixed trc;
  194. struct bw_fixed dmifmc_urgent_latency;
  195. struct bw_fixed stutter_self_refresh_exit_latency;
  196. struct bw_fixed stutter_self_refresh_entry_latency;
  197. struct bw_fixed nbp_state_change_latency;
  198. struct bw_fixed mcifwrmc_urgent_latency;
  199. bool scatter_gather_enable;
  200. struct bw_fixed down_spread_percentage;
  201. uint32_t cursor_width;
  202. uint32_t average_compression_rate;
  203. uint32_t number_of_request_slots_gmc_reserves_for_dmif_per_channel;
  204. struct bw_fixed blackout_duration;
  205. struct bw_fixed maximum_blackout_recovery_time;
  206. };
  207. /*******************************************************************************
  208. * Temporary data structure(s).
  209. ******************************************************************************/
  210. #define maximum_number_of_surfaces 12
  211. /*Units : MHz, us */
  212. struct bw_calcs_data {
  213. /* data for all displays */
  214. uint32_t number_of_displays;
  215. enum bw_defines underlay_surface_type;
  216. enum bw_defines panning_and_bezel_adjustment;
  217. enum bw_defines graphics_tiling_mode;
  218. uint32_t graphics_lb_bpc;
  219. uint32_t underlay_lb_bpc;
  220. enum bw_defines underlay_tiling_mode;
  221. enum bw_defines d0_underlay_mode;
  222. bool d1_display_write_back_dwb_enable;
  223. enum bw_defines d1_underlay_mode;
  224. bool cpup_state_change_enable;
  225. bool cpuc_state_change_enable;
  226. bool nbp_state_change_enable;
  227. bool stutter_mode_enable;
  228. uint32_t y_clk_level;
  229. uint32_t sclk_level;
  230. uint32_t number_of_underlay_surfaces;
  231. uint32_t number_of_dram_wrchannels;
  232. uint32_t chunk_request_delay;
  233. uint32_t number_of_dram_channels;
  234. enum bw_defines underlay_micro_tile_mode;
  235. enum bw_defines graphics_micro_tile_mode;
  236. struct bw_fixed max_phyclk;
  237. struct bw_fixed dram_efficiency;
  238. struct bw_fixed src_width_after_surface_type;
  239. struct bw_fixed src_height_after_surface_type;
  240. struct bw_fixed hsr_after_surface_type;
  241. struct bw_fixed vsr_after_surface_type;
  242. struct bw_fixed src_width_after_rotation;
  243. struct bw_fixed src_height_after_rotation;
  244. struct bw_fixed hsr_after_rotation;
  245. struct bw_fixed vsr_after_rotation;
  246. struct bw_fixed source_height_pixels;
  247. struct bw_fixed hsr_after_stereo;
  248. struct bw_fixed vsr_after_stereo;
  249. struct bw_fixed source_width_in_lb;
  250. struct bw_fixed lb_line_pitch;
  251. struct bw_fixed underlay_maximum_source_efficient_for_tiling;
  252. struct bw_fixed num_lines_at_frame_start;
  253. struct bw_fixed min_dmif_size_in_time;
  254. struct bw_fixed min_mcifwr_size_in_time;
  255. struct bw_fixed total_requests_for_dmif_size;
  256. struct bw_fixed peak_pte_request_to_eviction_ratio_limiting;
  257. struct bw_fixed useful_pte_per_pte_request;
  258. struct bw_fixed scatter_gather_pte_request_rows;
  259. struct bw_fixed scatter_gather_row_height;
  260. struct bw_fixed scatter_gather_pte_requests_in_vblank;
  261. struct bw_fixed inefficient_linear_pitch_in_bytes;
  262. struct bw_fixed cursor_total_data;
  263. struct bw_fixed cursor_total_request_groups;
  264. struct bw_fixed scatter_gather_total_pte_requests;
  265. struct bw_fixed scatter_gather_total_pte_request_groups;
  266. struct bw_fixed tile_width_in_pixels;
  267. struct bw_fixed dmif_total_number_of_data_request_page_close_open;
  268. struct bw_fixed mcifwr_total_number_of_data_request_page_close_open;
  269. struct bw_fixed bytes_per_page_close_open;
  270. struct bw_fixed mcifwr_total_page_close_open_time;
  271. struct bw_fixed total_requests_for_adjusted_dmif_size;
  272. struct bw_fixed total_dmifmc_urgent_trips;
  273. struct bw_fixed total_dmifmc_urgent_latency;
  274. struct bw_fixed total_display_reads_required_data;
  275. struct bw_fixed total_display_reads_required_dram_access_data;
  276. struct bw_fixed total_display_writes_required_data;
  277. struct bw_fixed total_display_writes_required_dram_access_data;
  278. struct bw_fixed display_reads_required_data;
  279. struct bw_fixed display_reads_required_dram_access_data;
  280. struct bw_fixed dmif_total_page_close_open_time;
  281. struct bw_fixed min_cursor_memory_interface_buffer_size_in_time;
  282. struct bw_fixed min_read_buffer_size_in_time;
  283. struct bw_fixed display_reads_time_for_data_transfer;
  284. struct bw_fixed display_writes_time_for_data_transfer;
  285. struct bw_fixed dmif_required_dram_bandwidth;
  286. struct bw_fixed mcifwr_required_dram_bandwidth;
  287. struct bw_fixed required_dmifmc_urgent_latency_for_page_close_open;
  288. struct bw_fixed required_mcifmcwr_urgent_latency;
  289. struct bw_fixed required_dram_bandwidth_gbyte_per_second;
  290. struct bw_fixed dram_bandwidth;
  291. struct bw_fixed dmif_required_sclk;
  292. struct bw_fixed mcifwr_required_sclk;
  293. struct bw_fixed required_sclk;
  294. struct bw_fixed downspread_factor;
  295. struct bw_fixed v_scaler_efficiency;
  296. struct bw_fixed scaler_limits_factor;
  297. struct bw_fixed display_pipe_pixel_throughput;
  298. struct bw_fixed total_dispclk_required_with_ramping;
  299. struct bw_fixed total_dispclk_required_without_ramping;
  300. struct bw_fixed total_read_request_bandwidth;
  301. struct bw_fixed total_write_request_bandwidth;
  302. struct bw_fixed dispclk_required_for_total_read_request_bandwidth;
  303. struct bw_fixed total_dispclk_required_with_ramping_with_request_bandwidth;
  304. struct bw_fixed total_dispclk_required_without_ramping_with_request_bandwidth;
  305. struct bw_fixed dispclk;
  306. struct bw_fixed blackout_recovery_time;
  307. struct bw_fixed min_pixels_per_data_fifo_entry;
  308. struct bw_fixed sclk_deep_sleep;
  309. struct bw_fixed chunk_request_time;
  310. struct bw_fixed cursor_request_time;
  311. struct bw_fixed line_source_pixels_transfer_time;
  312. struct bw_fixed dmifdram_access_efficiency;
  313. struct bw_fixed mcifwrdram_access_efficiency;
  314. struct bw_fixed total_average_bandwidth_no_compression;
  315. struct bw_fixed total_average_bandwidth;
  316. struct bw_fixed total_stutter_cycle_duration;
  317. struct bw_fixed stutter_burst_time;
  318. struct bw_fixed time_in_self_refresh;
  319. struct bw_fixed stutter_efficiency;
  320. struct bw_fixed worst_number_of_trips_to_memory;
  321. struct bw_fixed immediate_flip_time;
  322. struct bw_fixed latency_for_non_dmif_clients;
  323. struct bw_fixed latency_for_non_mcifwr_clients;
  324. struct bw_fixed dmifmc_urgent_latency_supported_in_high_sclk_and_yclk;
  325. struct bw_fixed nbp_state_dram_speed_change_margin;
  326. struct bw_fixed display_reads_time_for_data_transfer_and_urgent_latency;
  327. struct bw_fixed dram_speed_change_margin;
  328. struct bw_fixed min_vblank_dram_speed_change_margin;
  329. struct bw_fixed min_stutter_refresh_duration;
  330. uint32_t total_stutter_dmif_buffer_size;
  331. uint32_t total_bytes_requested;
  332. uint32_t min_stutter_dmif_buffer_size;
  333. uint32_t num_stutter_bursts;
  334. struct bw_fixed v_blank_nbp_state_dram_speed_change_latency_supported;
  335. struct bw_fixed nbp_state_dram_speed_change_latency_supported;
  336. bool fbc_en[maximum_number_of_surfaces];
  337. bool lpt_en[maximum_number_of_surfaces];
  338. bool displays_match_flag[maximum_number_of_surfaces];
  339. bool use_alpha[maximum_number_of_surfaces];
  340. bool orthogonal_rotation[maximum_number_of_surfaces];
  341. bool enable[maximum_number_of_surfaces];
  342. bool access_one_channel_only[maximum_number_of_surfaces];
  343. bool scatter_gather_enable_for_pipe[maximum_number_of_surfaces];
  344. bool interlace_mode[maximum_number_of_surfaces];
  345. bool display_pstate_change_enable[maximum_number_of_surfaces];
  346. bool line_buffer_prefetch[maximum_number_of_surfaces];
  347. uint32_t bytes_per_pixel[maximum_number_of_surfaces];
  348. uint32_t max_chunks_non_fbc_mode[maximum_number_of_surfaces];
  349. uint32_t lb_bpc[maximum_number_of_surfaces];
  350. uint32_t output_bpphdmi[maximum_number_of_surfaces];
  351. uint32_t output_bppdp4_lane_hbr[maximum_number_of_surfaces];
  352. uint32_t output_bppdp4_lane_hbr2[maximum_number_of_surfaces];
  353. uint32_t output_bppdp4_lane_hbr3[maximum_number_of_surfaces];
  354. enum bw_defines stereo_mode[maximum_number_of_surfaces];
  355. struct bw_fixed dmif_buffer_transfer_time[maximum_number_of_surfaces];
  356. struct bw_fixed displays_with_same_mode[maximum_number_of_surfaces];
  357. struct bw_fixed stutter_dmif_buffer_size[maximum_number_of_surfaces];
  358. struct bw_fixed stutter_refresh_duration[maximum_number_of_surfaces];
  359. struct bw_fixed stutter_exit_watermark[maximum_number_of_surfaces];
  360. struct bw_fixed stutter_entry_watermark[maximum_number_of_surfaces];
  361. struct bw_fixed h_total[maximum_number_of_surfaces];
  362. struct bw_fixed v_total[maximum_number_of_surfaces];
  363. struct bw_fixed pixel_rate[maximum_number_of_surfaces];
  364. struct bw_fixed src_width[maximum_number_of_surfaces];
  365. struct bw_fixed pitch_in_pixels[maximum_number_of_surfaces];
  366. struct bw_fixed pitch_in_pixels_after_surface_type[maximum_number_of_surfaces];
  367. struct bw_fixed src_height[maximum_number_of_surfaces];
  368. struct bw_fixed scale_ratio[maximum_number_of_surfaces];
  369. struct bw_fixed h_taps[maximum_number_of_surfaces];
  370. struct bw_fixed v_taps[maximum_number_of_surfaces];
  371. struct bw_fixed h_scale_ratio[maximum_number_of_surfaces];
  372. struct bw_fixed v_scale_ratio[maximum_number_of_surfaces];
  373. struct bw_fixed rotation_angle[maximum_number_of_surfaces];
  374. struct bw_fixed compression_rate[maximum_number_of_surfaces];
  375. struct bw_fixed hsr[maximum_number_of_surfaces];
  376. struct bw_fixed vsr[maximum_number_of_surfaces];
  377. struct bw_fixed source_width_rounded_up_to_chunks[maximum_number_of_surfaces];
  378. struct bw_fixed source_width_pixels[maximum_number_of_surfaces];
  379. struct bw_fixed source_height_rounded_up_to_chunks[maximum_number_of_surfaces];
  380. struct bw_fixed display_bandwidth[maximum_number_of_surfaces];
  381. struct bw_fixed request_bandwidth[maximum_number_of_surfaces];
  382. struct bw_fixed bytes_per_request[maximum_number_of_surfaces];
  383. struct bw_fixed useful_bytes_per_request[maximum_number_of_surfaces];
  384. struct bw_fixed lines_interleaved_in_mem_access[maximum_number_of_surfaces];
  385. struct bw_fixed latency_hiding_lines[maximum_number_of_surfaces];
  386. struct bw_fixed lb_partitions[maximum_number_of_surfaces];
  387. struct bw_fixed lb_partitions_max[maximum_number_of_surfaces];
  388. struct bw_fixed dispclk_required_with_ramping[maximum_number_of_surfaces];
  389. struct bw_fixed dispclk_required_without_ramping[maximum_number_of_surfaces];
  390. struct bw_fixed data_buffer_size[maximum_number_of_surfaces];
  391. struct bw_fixed outstanding_chunk_request_limit[maximum_number_of_surfaces];
  392. struct bw_fixed urgent_watermark[maximum_number_of_surfaces];
  393. struct bw_fixed nbp_state_change_watermark[maximum_number_of_surfaces];
  394. struct bw_fixed v_filter_init[maximum_number_of_surfaces];
  395. struct bw_fixed stutter_cycle_duration[maximum_number_of_surfaces];
  396. struct bw_fixed average_bandwidth[maximum_number_of_surfaces];
  397. struct bw_fixed average_bandwidth_no_compression[maximum_number_of_surfaces];
  398. struct bw_fixed scatter_gather_pte_request_limit[maximum_number_of_surfaces];
  399. struct bw_fixed lb_size_per_component[maximum_number_of_surfaces];
  400. struct bw_fixed memory_chunk_size_in_bytes[maximum_number_of_surfaces];
  401. struct bw_fixed pipe_chunk_size_in_bytes[maximum_number_of_surfaces];
  402. struct bw_fixed number_of_trips_to_memory_for_getting_apte_row[maximum_number_of_surfaces];
  403. struct bw_fixed adjusted_data_buffer_size[maximum_number_of_surfaces];
  404. struct bw_fixed adjusted_data_buffer_size_in_memory[maximum_number_of_surfaces];
  405. struct bw_fixed pixels_per_data_fifo_entry[maximum_number_of_surfaces];
  406. struct bw_fixed scatter_gather_pte_requests_in_row[maximum_number_of_surfaces];
  407. struct bw_fixed pte_request_per_chunk[maximum_number_of_surfaces];
  408. struct bw_fixed scatter_gather_page_width[maximum_number_of_surfaces];
  409. struct bw_fixed scatter_gather_page_height[maximum_number_of_surfaces];
  410. struct bw_fixed lb_lines_in_per_line_out_in_beginning_of_frame[maximum_number_of_surfaces];
  411. struct bw_fixed lb_lines_in_per_line_out_in_middle_of_frame[maximum_number_of_surfaces];
  412. struct bw_fixed cursor_width_pixels[maximum_number_of_surfaces];
  413. struct bw_fixed minimum_latency_hiding[maximum_number_of_surfaces];
  414. struct bw_fixed maximum_latency_hiding[maximum_number_of_surfaces];
  415. struct bw_fixed minimum_latency_hiding_with_cursor[maximum_number_of_surfaces];
  416. struct bw_fixed maximum_latency_hiding_with_cursor[maximum_number_of_surfaces];
  417. struct bw_fixed src_pixels_for_first_output_pixel[maximum_number_of_surfaces];
  418. struct bw_fixed src_pixels_for_last_output_pixel[maximum_number_of_surfaces];
  419. struct bw_fixed src_data_for_first_output_pixel[maximum_number_of_surfaces];
  420. struct bw_fixed src_data_for_last_output_pixel[maximum_number_of_surfaces];
  421. struct bw_fixed active_time[maximum_number_of_surfaces];
  422. struct bw_fixed horizontal_blank_and_chunk_granularity_factor[maximum_number_of_surfaces];
  423. struct bw_fixed cursor_latency_hiding[maximum_number_of_surfaces];
  424. struct bw_fixed v_blank_dram_speed_change_margin[maximum_number_of_surfaces];
  425. uint32_t num_displays_with_margin[3][8];
  426. struct bw_fixed dmif_burst_time[3][8];
  427. struct bw_fixed mcifwr_burst_time[3][8];
  428. struct bw_fixed line_source_transfer_time[maximum_number_of_surfaces][3][8];
  429. struct bw_fixed dram_speed_change_line_source_transfer_time[maximum_number_of_surfaces][3][8];
  430. struct bw_fixed min_dram_speed_change_margin[3][8];
  431. struct bw_fixed dispclk_required_for_dram_speed_change[3][8];
  432. struct bw_fixed blackout_duration_margin[3][8];
  433. struct bw_fixed dispclk_required_for_blackout_duration[3][8];
  434. struct bw_fixed dispclk_required_for_blackout_recovery[3][8];
  435. struct bw_fixed dmif_required_sclk_for_urgent_latency[6];
  436. };
  437. /**
  438. * Initialize structures with data which will NOT change at runtime.
  439. */
  440. void bw_calcs_init(
  441. struct bw_calcs_dceip *bw_dceip,
  442. struct bw_calcs_vbios *bw_vbios,
  443. struct hw_asic_id asic_id);
  444. /**
  445. * Return:
  446. * true - Display(s) configuration supported.
  447. * In this case 'calcs_output' contains data for HW programming
  448. * false - Display(s) configuration not supported (not enough bandwidth).
  449. */
  450. bool bw_calcs(
  451. struct dc_context *ctx,
  452. const struct bw_calcs_dceip *dceip,
  453. const struct bw_calcs_vbios *vbios,
  454. const struct pipe_ctx *pipe,
  455. int pipe_count,
  456. struct dce_bw_output *calcs_output);
  457. #endif /* __BANDWIDTH_CALCS_H__ */