drm/amdgpu/display: Add calcs code for DCN
Bandwidth and scaling calculations for DCN. Signed-off-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
03ea364c8e
commit
74c49c7ac1
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DCN_CALC_AUTO_H_
|
||||
#define _DCN_CALC_AUTO_H_
|
||||
|
||||
#include "dcn_calcs.h"
|
||||
|
||||
void scaler_settings_calculation(struct dcn_bw_internal_vars *v);
|
||||
void mode_support_and_system_configuration(struct dcn_bw_internal_vars *v);
|
||||
void display_pipe_configuration(struct dcn_bw_internal_vars *v);
|
||||
void dispclkdppclkdcfclk_deep_sleep_prefetch_parameters_watermarks_and_performance_calculation(
|
||||
struct dcn_bw_internal_vars *v);
|
||||
|
||||
#endif /* _DCN_CALC_AUTO_H_ */
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dcn_calc_math.h"
|
||||
|
||||
float dcn_bw_mod(const float arg1, const float arg2)
|
||||
{
|
||||
return arg1 - arg1 * ((int) (arg1 / arg2));
|
||||
}
|
||||
|
||||
float dcn_bw_min2(const float arg1, const float arg2)
|
||||
{
|
||||
return arg1 < arg2 ? arg1 : arg2;
|
||||
}
|
||||
|
||||
unsigned int dcn_bw_max(const unsigned int arg1, const unsigned int arg2)
|
||||
{
|
||||
return arg1 > arg2 ? arg1 : arg2;
|
||||
}
|
||||
float dcn_bw_max2(const float arg1, const float arg2)
|
||||
{
|
||||
return arg1 > arg2 ? arg1 : arg2;
|
||||
}
|
||||
|
||||
float dcn_bw_floor2(const float arg, const float significance)
|
||||
{
|
||||
if (significance == 0)
|
||||
return 0;
|
||||
return ((int) (arg / significance)) * significance;
|
||||
}
|
||||
|
||||
float dcn_bw_ceil2(const float arg, const float significance)
|
||||
{
|
||||
float flr = dcn_bw_floor2(arg, significance);
|
||||
if (significance == 0)
|
||||
return 0;
|
||||
return flr + 0.00001 >= arg ? arg : flr + significance;
|
||||
}
|
||||
|
||||
float dcn_bw_max3(float v1, float v2, float v3)
|
||||
{
|
||||
return v3 > dcn_bw_max2(v1, v2) ? v3 : dcn_bw_max2(v1, v2);
|
||||
}
|
||||
|
||||
float dcn_bw_max5(float v1, float v2, float v3, float v4, float v5)
|
||||
{
|
||||
return dcn_bw_max3(v1, v2, v3) > dcn_bw_max2(v4, v5) ? dcn_bw_max3(v1, v2, v3) : dcn_bw_max2(v4, v5);
|
||||
}
|
||||
|
||||
float dcn_bw_pow(float a, float exp)
|
||||
{
|
||||
float temp;
|
||||
/*ASSERT(exp == (int)exp);*/
|
||||
if ((int)exp == 0)
|
||||
return 1;
|
||||
temp = dcn_bw_pow(a, (int)(exp / 2));
|
||||
if (((int)exp % 2) == 0) {
|
||||
return temp * temp;
|
||||
} else {
|
||||
if ((int)exp > 0)
|
||||
return a * temp * temp;
|
||||
else
|
||||
return (temp * temp) / a;
|
||||
}
|
||||
}
|
||||
|
||||
float dcn_bw_log(float a, float b)
|
||||
{
|
||||
int * const exp_ptr = (int *)(&a);
|
||||
int x = *exp_ptr;
|
||||
const int log_2 = ((x >> 23) & 255) - 128;
|
||||
x &= ~(255 << 23);
|
||||
x += 127 << 23;
|
||||
*exp_ptr = x;
|
||||
|
||||
a = ((-1.0f / 3) * a + 2) * a - 2.0f / 3;
|
||||
|
||||
if (b > 2.00001 || b < 1.99999)
|
||||
return (a + log_2) / dcn_bw_log(b, 2);
|
||||
else
|
||||
return (a + log_2);
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DCN_CALC_MATH_H_
|
||||
#define _DCN_CALC_MATH_H_
|
||||
|
||||
float dcn_bw_mod(const float arg1, const float arg2);
|
||||
float dcn_bw_min2(const float arg1, const float arg2);
|
||||
unsigned int dcn_bw_max(const unsigned int arg1, const unsigned int arg2);
|
||||
float dcn_bw_max2(const float arg1, const float arg2);
|
||||
float dcn_bw_floor2(const float arg, const float significance);
|
||||
float dcn_bw_ceil2(const float arg, const float significance);
|
||||
float dcn_bw_max3(float v1, float v2, float v3);
|
||||
float dcn_bw_max5(float v1, float v2, float v3, float v4, float v5);
|
||||
float dcn_bw_pow(float a, float exp);
|
||||
float dcn_bw_log(float a, float b);
|
||||
|
||||
#endif /* _DCN_CALC_MATH_H_ */
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,629 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Bandwidth and Watermark calculations interface.
|
||||
* (Refer to "DCEx_mode_support.xlsm" from Perforce.)
|
||||
*/
|
||||
#ifndef __DCN_CALCS_H__
|
||||
#define __DCN_CALCS_H__
|
||||
|
||||
#include "bw_fixed.h"
|
||||
#include "display_clock.h"
|
||||
#include "../dml/display_mode_lib.h"
|
||||
|
||||
struct core_dc;
|
||||
struct validate_context;
|
||||
|
||||
/*******************************************************************************
|
||||
* DCN data structures.
|
||||
******************************************************************************/
|
||||
|
||||
#define number_of_planes 6
|
||||
#define number_of_planes_minus_one 5
|
||||
#define number_of_states 4
|
||||
#define number_of_states_plus_one 5
|
||||
|
||||
#define ddr4_dram_width 64
|
||||
#define ddr4_dram_factor_single_Channel 16
|
||||
enum dcn_bw_defs {
|
||||
dcn_bw_v_min0p65,
|
||||
dcn_bw_v_mid0p72,
|
||||
dcn_bw_v_nom0p8,
|
||||
dcn_bw_v_max0p9,
|
||||
dcn_bw_v_max0p91,
|
||||
dcn_bw_no_support = 5,
|
||||
dcn_bw_yes,
|
||||
dcn_bw_hor,
|
||||
dcn_bw_vert,
|
||||
dcn_bw_override,
|
||||
dcn_bw_rgb_sub_64,
|
||||
dcn_bw_rgb_sub_32,
|
||||
dcn_bw_rgb_sub_16,
|
||||
dcn_bw_no,
|
||||
dcn_bw_sw_linear,
|
||||
dcn_bw_sw_4_kb_d,
|
||||
dcn_bw_sw_4_kb_d_x,
|
||||
dcn_bw_sw_64_kb_d,
|
||||
dcn_bw_sw_64_kb_d_t,
|
||||
dcn_bw_sw_64_kb_d_x,
|
||||
dcn_bw_sw_var_d,
|
||||
dcn_bw_sw_var_d_x,
|
||||
dcn_bw_yuv420_sub_8,
|
||||
dcn_bw_sw_4_kb_s,
|
||||
dcn_bw_sw_4_kb_s_x,
|
||||
dcn_bw_sw_64_kb_s,
|
||||
dcn_bw_sw_64_kb_s_t,
|
||||
dcn_bw_sw_64_kb_s_x,
|
||||
dcn_bw_writeback,
|
||||
dcn_bw_444,
|
||||
dcn_bw_dp,
|
||||
dcn_bw_420,
|
||||
dcn_bw_hdmi,
|
||||
dcn_bw_sw_var_s,
|
||||
dcn_bw_sw_var_s_x,
|
||||
dcn_bw_yuv420_sub_10,
|
||||
dcn_bw_supported_in_v_active,
|
||||
dcn_bw_supported_in_v_blank,
|
||||
dcn_bw_not_supported,
|
||||
dcn_bw_na,
|
||||
};
|
||||
|
||||
/*bounding box parameters*/
|
||||
/*mode parameters*/
|
||||
/*system configuration*/
|
||||
/* display configuration*/
|
||||
struct dcn_bw_internal_vars {
|
||||
float voltage[number_of_states_plus_one + 1];
|
||||
float max_dispclk[number_of_states_plus_one + 1];
|
||||
float max_dppclk[number_of_states_plus_one + 1];
|
||||
float dcfclk_per_state[number_of_states_plus_one + 1];
|
||||
float phyclk_per_state[number_of_states_plus_one + 1];
|
||||
float fabric_and_dram_bandwidth_per_state[number_of_states_plus_one + 1];
|
||||
float sr_exit_time;
|
||||
float sr_enter_plus_exit_time;
|
||||
float dram_clock_change_latency;
|
||||
float urgent_latency;
|
||||
float write_back_latency;
|
||||
float percent_of_ideal_drambw_received_after_urg_latency;
|
||||
float dcfclkv_max0p9;
|
||||
float dcfclkv_nom0p8;
|
||||
float dcfclkv_mid0p72;
|
||||
float dcfclkv_min0p65;
|
||||
float max_dispclk_vmax0p9;
|
||||
float max_dppclk_vmax0p9;
|
||||
float max_dispclk_vnom0p8;
|
||||
float max_dppclk_vnom0p8;
|
||||
float max_dispclk_vmid0p72;
|
||||
float max_dppclk_vmid0p72;
|
||||
float max_dispclk_vmin0p65;
|
||||
float max_dppclk_vmin0p65;
|
||||
float socclk;
|
||||
float fabric_and_dram_bandwidth_vmax0p9;
|
||||
float fabric_and_dram_bandwidth_vnom0p8;
|
||||
float fabric_and_dram_bandwidth_vmid0p72;
|
||||
float fabric_and_dram_bandwidth_vmin0p65;
|
||||
float round_trip_ping_latency_cycles;
|
||||
float urgent_out_of_order_return_per_channel;
|
||||
float number_of_channels;
|
||||
float vmm_page_size;
|
||||
float return_bus_width;
|
||||
float rob_buffer_size_in_kbyte;
|
||||
float det_buffer_size_in_kbyte;
|
||||
float dpp_output_buffer_pixels;
|
||||
float opp_output_buffer_lines;
|
||||
float pixel_chunk_size_in_kbyte;
|
||||
float pte_chunk_size;
|
||||
float meta_chunk_size;
|
||||
float writeback_chunk_size;
|
||||
enum dcn_bw_defs odm_capability;
|
||||
enum dcn_bw_defs dsc_capability;
|
||||
float line_buffer_size;
|
||||
enum dcn_bw_defs is_line_buffer_bpp_fixed;
|
||||
float line_buffer_fixed_bpp;
|
||||
float max_line_buffer_lines;
|
||||
float writeback_luma_buffer_size;
|
||||
float writeback_chroma_buffer_size;
|
||||
float max_num_dpp;
|
||||
float max_num_writeback;
|
||||
float max_dchub_topscl_throughput;
|
||||
float max_pscl_tolb_throughput;
|
||||
float max_lb_tovscl_throughput;
|
||||
float max_vscl_tohscl_throughput;
|
||||
float max_hscl_ratio;
|
||||
float max_vscl_ratio;
|
||||
float max_hscl_taps;
|
||||
float max_vscl_taps;
|
||||
float under_scan_factor;
|
||||
float phyclkv_max0p9;
|
||||
float phyclkv_nom0p8;
|
||||
float phyclkv_mid0p72;
|
||||
float phyclkv_min0p65;
|
||||
float pte_buffer_size_in_requests;
|
||||
float dispclk_ramping_margin;
|
||||
float downspreading;
|
||||
float max_inter_dcn_tile_repeaters;
|
||||
enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
|
||||
enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed;
|
||||
int mode;
|
||||
float viewport_width[number_of_planes_minus_one + 1];
|
||||
float htotal[number_of_planes_minus_one + 1];
|
||||
float vtotal[number_of_planes_minus_one + 1];
|
||||
float v_sync_plus_back_porch[number_of_planes_minus_one + 1];
|
||||
float vactive[number_of_planes_minus_one + 1];
|
||||
float pixel_clock[number_of_planes_minus_one + 1]; /*MHz*/
|
||||
float viewport_height[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs dcc_enable[number_of_planes_minus_one + 1];
|
||||
float dcc_rate[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs source_scan[number_of_planes_minus_one + 1];
|
||||
float lb_bit_per_pixel[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs source_pixel_format[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs source_surface_mode[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs output_format[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs output[number_of_planes_minus_one + 1];
|
||||
float scaler_rec_out_width[number_of_planes_minus_one + 1];
|
||||
float scaler_recout_height[number_of_planes_minus_one + 1];
|
||||
float underscan_output[number_of_planes_minus_one + 1];
|
||||
float interlace_output[number_of_planes_minus_one + 1];
|
||||
float override_hta_ps[number_of_planes_minus_one + 1];
|
||||
float override_vta_ps[number_of_planes_minus_one + 1];
|
||||
float override_hta_pschroma[number_of_planes_minus_one + 1];
|
||||
float override_vta_pschroma[number_of_planes_minus_one + 1];
|
||||
float urgent_latency_support_us[number_of_planes_minus_one + 1];
|
||||
float h_ratio[number_of_planes_minus_one + 1];
|
||||
float v_ratio[number_of_planes_minus_one + 1];
|
||||
float htaps[number_of_planes_minus_one + 1];
|
||||
float vtaps[number_of_planes_minus_one + 1];
|
||||
float hta_pschroma[number_of_planes_minus_one + 1];
|
||||
float vta_pschroma[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs pte_enable;
|
||||
enum dcn_bw_defs synchronized_vblank;
|
||||
enum dcn_bw_defs ta_pscalculation;
|
||||
int voltage_override_level;
|
||||
int number_of_active_planes;
|
||||
int voltage_level;
|
||||
enum dcn_bw_defs immediate_flip_supported;
|
||||
float dcfclk;
|
||||
float max_phyclk;
|
||||
float fabric_and_dram_bandwidth;
|
||||
float dpp_per_plane_per_ratio[1 + 1][number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs dispclk_dppclk_support_per_ratio[1 + 1];
|
||||
float required_dispclk_per_ratio[1 + 1];
|
||||
enum dcn_bw_defs error_message[1 + 1];
|
||||
int dispclk_dppclk_ratio;
|
||||
float dpp_per_plane[number_of_planes_minus_one + 1];
|
||||
float det_buffer_size_y[number_of_planes_minus_one + 1];
|
||||
float det_buffer_size_c[number_of_planes_minus_one + 1];
|
||||
float swath_height_y[number_of_planes_minus_one + 1];
|
||||
float swath_height_c[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs final_error_message;
|
||||
float frequency;
|
||||
float header_line;
|
||||
float header;
|
||||
enum dcn_bw_defs voltage_override;
|
||||
enum dcn_bw_defs allow_different_hratio_vratio;
|
||||
float acceptable_quality_hta_ps;
|
||||
float acceptable_quality_vta_ps;
|
||||
float no_of_dpp[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float swath_width_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float swath_height_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float swath_height_cper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float urgent_latency_support_us_per_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float v_ratio_pre_ywith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float v_ratio_pre_cwith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float required_prefetch_pixel_data_bw_with_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float v_ratio_pre_ywithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float v_ratio_pre_cwithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
float required_prefetch_pixel_data_bw_without_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs v_ratio_in_prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs v_ratio_in_prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
|
||||
float required_dispclk[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs dispclk_dppclk_support[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs total_available_pipes_support[number_of_states_plus_one + 1][1 + 1];
|
||||
float total_number_of_active_dpp[number_of_states_plus_one + 1][1 + 1];
|
||||
float total_number_of_dcc_active_dpp[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs urgent_latency_support[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs mode_support_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
|
||||
enum dcn_bw_defs mode_support_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
|
||||
float return_bw_per_state[number_of_states_plus_one + 1];
|
||||
enum dcn_bw_defs dio_support[number_of_states_plus_one + 1];
|
||||
float urgent_round_trip_and_out_of_order_latency_per_state[number_of_states_plus_one + 1];
|
||||
enum dcn_bw_defs rob_support[number_of_states_plus_one + 1];
|
||||
enum dcn_bw_defs bandwidth_support[number_of_states_plus_one + 1];
|
||||
float prefetch_bw[number_of_planes_minus_one + 1];
|
||||
float meta_pte_bytes_per_frame[number_of_planes_minus_one + 1];
|
||||
float meta_row_bytes[number_of_planes_minus_one + 1];
|
||||
float dpte_bytes_per_row[number_of_planes_minus_one + 1];
|
||||
float prefetch_lines_y[number_of_planes_minus_one + 1];
|
||||
float prefetch_lines_c[number_of_planes_minus_one + 1];
|
||||
float max_num_sw_y[number_of_planes_minus_one + 1];
|
||||
float max_num_sw_c[number_of_planes_minus_one + 1];
|
||||
float line_times_for_prefetch[number_of_planes_minus_one + 1];
|
||||
float lines_for_meta_pte_with_immediate_flip[number_of_planes_minus_one + 1];
|
||||
float lines_for_meta_pte_without_immediate_flip[number_of_planes_minus_one + 1];
|
||||
float lines_for_meta_and_dpte_row_with_immediate_flip[number_of_planes_minus_one + 1];
|
||||
float lines_for_meta_and_dpte_row_without_immediate_flip[number_of_planes_minus_one + 1];
|
||||
float min_dppclk_using_single_dpp[number_of_planes_minus_one + 1];
|
||||
float swath_width_ysingle_dpp[number_of_planes_minus_one + 1];
|
||||
float byte_per_pixel_in_dety[number_of_planes_minus_one + 1];
|
||||
float byte_per_pixel_in_detc[number_of_planes_minus_one + 1];
|
||||
float number_of_dpp_required_for_det_and_lb_size[number_of_planes_minus_one + 1];
|
||||
float required_phyclk[number_of_planes_minus_one + 1];
|
||||
float read256_block_height_y[number_of_planes_minus_one + 1];
|
||||
float read256_block_width_y[number_of_planes_minus_one + 1];
|
||||
float read256_block_height_c[number_of_planes_minus_one + 1];
|
||||
float read256_block_width_c[number_of_planes_minus_one + 1];
|
||||
float max_swath_height_y[number_of_planes_minus_one + 1];
|
||||
float max_swath_height_c[number_of_planes_minus_one + 1];
|
||||
float min_swath_height_y[number_of_planes_minus_one + 1];
|
||||
float min_swath_height_c[number_of_planes_minus_one + 1];
|
||||
float read_bandwidth[number_of_planes_minus_one + 1];
|
||||
float write_bandwidth[number_of_planes_minus_one + 1];
|
||||
float pscl_factor[number_of_planes_minus_one + 1];
|
||||
float pscl_factor_chroma[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs scale_ratio_support;
|
||||
enum dcn_bw_defs source_format_pixel_and_scan_support;
|
||||
float total_read_bandwidth_consumed_gbyte_per_second;
|
||||
float total_write_bandwidth_consumed_gbyte_per_second;
|
||||
float total_bandwidth_consumed_gbyte_per_second;
|
||||
enum dcn_bw_defs dcc_enabled_in_any_plane;
|
||||
float return_bw_todcn_per_state;
|
||||
float critical_point;
|
||||
enum dcn_bw_defs writeback_latency_support;
|
||||
float required_output_bw;
|
||||
float total_number_of_active_writeback;
|
||||
enum dcn_bw_defs total_available_writeback_support;
|
||||
float maximum_swath_width;
|
||||
float number_of_dpp_required_for_det_size;
|
||||
float number_of_dpp_required_for_lb_size;
|
||||
float min_dispclk_using_single_dpp;
|
||||
float min_dispclk_using_dual_dpp;
|
||||
enum dcn_bw_defs viewport_size_support;
|
||||
float swath_width_granularity_y;
|
||||
float rounded_up_max_swath_size_bytes_y;
|
||||
float swath_width_granularity_c;
|
||||
float rounded_up_max_swath_size_bytes_c;
|
||||
float lines_in_det_luma;
|
||||
float lines_in_det_chroma;
|
||||
float effective_lb_latency_hiding_source_lines_luma;
|
||||
float effective_lb_latency_hiding_source_lines_chroma;
|
||||
float effective_detlb_lines_luma;
|
||||
float effective_detlb_lines_chroma;
|
||||
float projected_dcfclk_deep_sleep;
|
||||
float meta_req_height_y;
|
||||
float meta_req_width_y;
|
||||
float meta_surface_width_y;
|
||||
float meta_surface_height_y;
|
||||
float meta_pte_bytes_per_frame_y;
|
||||
float meta_row_bytes_y;
|
||||
float macro_tile_block_size_bytes_y;
|
||||
float macro_tile_block_height_y;
|
||||
float data_pte_req_height_y;
|
||||
float data_pte_req_width_y;
|
||||
float dpte_bytes_per_row_y;
|
||||
float meta_req_height_c;
|
||||
float meta_req_width_c;
|
||||
float meta_surface_width_c;
|
||||
float meta_surface_height_c;
|
||||
float meta_pte_bytes_per_frame_c;
|
||||
float meta_row_bytes_c;
|
||||
float macro_tile_block_size_bytes_c;
|
||||
float macro_tile_block_height_c;
|
||||
float macro_tile_block_width_c;
|
||||
float data_pte_req_height_c;
|
||||
float data_pte_req_width_c;
|
||||
float dpte_bytes_per_row_c;
|
||||
float v_init_y;
|
||||
float max_partial_sw_y;
|
||||
float v_init_c;
|
||||
float max_partial_sw_c;
|
||||
float dst_x_after_scaler;
|
||||
float dst_y_after_scaler;
|
||||
float time_calc;
|
||||
float v_update_offset[number_of_planes_minus_one + 1];
|
||||
float total_repeater_delay;
|
||||
float v_update_width[number_of_planes_minus_one + 1];
|
||||
float v_ready_offset[number_of_planes_minus_one + 1];
|
||||
float time_setup;
|
||||
float extra_latency;
|
||||
float maximum_vstartup;
|
||||
float bw_available_for_immediate_flip;
|
||||
float total_immediate_flip_bytes[number_of_planes_minus_one + 1];
|
||||
float time_for_meta_pte_with_immediate_flip;
|
||||
float time_for_meta_pte_without_immediate_flip;
|
||||
float time_for_meta_and_dpte_row_with_immediate_flip;
|
||||
float time_for_meta_and_dpte_row_without_immediate_flip;
|
||||
float line_times_to_request_prefetch_pixel_data_with_immediate_flip;
|
||||
float line_times_to_request_prefetch_pixel_data_without_immediate_flip;
|
||||
float maximum_read_bandwidth_with_prefetch_with_immediate_flip;
|
||||
float maximum_read_bandwidth_with_prefetch_without_immediate_flip;
|
||||
float voltage_level_with_immediate_flip;
|
||||
float voltage_level_without_immediate_flip;
|
||||
float total_number_of_active_dpp_per_ratio[1 + 1];
|
||||
float byte_per_pix_dety;
|
||||
float byte_per_pix_detc;
|
||||
float read256_bytes_block_height_y;
|
||||
float read256_bytes_block_width_y;
|
||||
float read256_bytes_block_height_c;
|
||||
float read256_bytes_block_width_c;
|
||||
float maximum_swath_height_y;
|
||||
float maximum_swath_height_c;
|
||||
float minimum_swath_height_y;
|
||||
float minimum_swath_height_c;
|
||||
float swath_width;
|
||||
float prefetch_bandwidth[number_of_planes_minus_one + 1];
|
||||
float v_init_pre_fill_y[number_of_planes_minus_one + 1];
|
||||
float v_init_pre_fill_c[number_of_planes_minus_one + 1];
|
||||
float max_num_swath_y[number_of_planes_minus_one + 1];
|
||||
float max_num_swath_c[number_of_planes_minus_one + 1];
|
||||
float prefill_y[number_of_planes_minus_one + 1];
|
||||
float prefill_c[number_of_planes_minus_one + 1];
|
||||
float v_startup[number_of_planes_minus_one + 1];
|
||||
enum dcn_bw_defs allow_dram_clock_change_during_vblank[number_of_planes_minus_one + 1];
|
||||
float allow_dram_self_refresh_during_vblank[number_of_planes_minus_one + 1];
|
||||
float v_ratio_prefetch_y[number_of_planes_minus_one + 1];
|
||||
float v_ratio_prefetch_c[number_of_planes_minus_one + 1];
|
||||
float destination_lines_for_prefetch[number_of_planes_minus_one + 1];
|
||||
float destination_lines_to_request_vm_inv_blank[number_of_planes_minus_one + 1];
|
||||
float destination_lines_to_request_row_in_vblank[number_of_planes_minus_one + 1];
|
||||
float min_ttuv_blank[number_of_planes_minus_one + 1];
|
||||
float byte_per_pixel_dety[number_of_planes_minus_one + 1];
|
||||
float byte_per_pixel_detc[number_of_planes_minus_one + 1];
|
||||
float swath_width_y[number_of_planes_minus_one + 1];
|
||||
float lines_in_dety[number_of_planes_minus_one + 1];
|
||||
float lines_in_dety_rounded_down_to_swath[number_of_planes_minus_one + 1];
|
||||
float lines_in_detc[number_of_planes_minus_one + 1];
|
||||
float lines_in_detc_rounded_down_to_swath[number_of_planes_minus_one + 1];
|
||||
float full_det_buffering_time_y[number_of_planes_minus_one + 1];
|
||||
float full_det_buffering_time_c[number_of_planes_minus_one + 1];
|
||||
float active_dram_clock_change_latency_margin[number_of_planes_minus_one + 1];
|
||||
float v_blank_dram_clock_change_latency_margin[number_of_planes_minus_one + 1];
|
||||
float dcfclk_deep_sleep_per_plane[number_of_planes_minus_one + 1];
|
||||
float read_bandwidth_plane_luma[number_of_planes_minus_one + 1];
|
||||
float read_bandwidth_plane_chroma[number_of_planes_minus_one + 1];
|
||||
float display_pipe_line_delivery_time_luma[number_of_planes_minus_one + 1];
|
||||
float display_pipe_line_delivery_time_chroma[number_of_planes_minus_one + 1];
|
||||
float display_pipe_line_delivery_time_luma_prefetch[number_of_planes_minus_one + 1];
|
||||
float display_pipe_line_delivery_time_chroma_prefetch[number_of_planes_minus_one + 1];
|
||||
float pixel_pte_bytes_per_row[number_of_planes_minus_one + 1];
|
||||
float meta_pte_bytes_frame[number_of_planes_minus_one + 1];
|
||||
float meta_row_byte[number_of_planes_minus_one + 1];
|
||||
float prefetch_source_lines_y[number_of_planes_minus_one + 1];
|
||||
float prefetch_source_lines_c[number_of_planes_minus_one + 1];
|
||||
float pscl_throughput[number_of_planes_minus_one + 1];
|
||||
float pscl_throughput_chroma[number_of_planes_minus_one + 1];
|
||||
float output_bpphdmi[number_of_planes_minus_one + 1];
|
||||
float output_bppdp4_lane_hbr[number_of_planes_minus_one + 1];
|
||||
float output_bppdp4_lane_hbr2[number_of_planes_minus_one + 1];
|
||||
float output_bppdp4_lane_hbr3[number_of_planes_minus_one + 1];
|
||||
float max_vstartup_lines[number_of_planes_minus_one + 1];
|
||||
float dispclk_with_ramping;
|
||||
float dispclk_without_ramping;
|
||||
float dppclk_using_single_dpp_luma;
|
||||
float dppclk_using_single_dpp;
|
||||
float dppclk_using_single_dpp_chroma;
|
||||
enum dcn_bw_defs odm_capable;
|
||||
float dispclk;
|
||||
float dppclk;
|
||||
float return_bandwidth_to_dcn;
|
||||
enum dcn_bw_defs dcc_enabled_any_plane;
|
||||
float return_bw;
|
||||
float critical_compression;
|
||||
float total_data_read_bandwidth;
|
||||
float total_active_dpp;
|
||||
float total_dcc_active_dpp;
|
||||
float urgent_round_trip_and_out_of_order_latency;
|
||||
float last_pixel_of_line_extra_watermark;
|
||||
float data_fabric_line_delivery_time_luma;
|
||||
float data_fabric_line_delivery_time_chroma;
|
||||
float urgent_extra_latency;
|
||||
float urgent_watermark;
|
||||
float ptemeta_urgent_watermark;
|
||||
float dram_clock_change_watermark;
|
||||
float total_active_writeback;
|
||||
float writeback_dram_clock_change_watermark;
|
||||
float min_full_det_buffering_time;
|
||||
float frame_time_for_min_full_det_buffering_time;
|
||||
float average_read_bandwidth_gbyte_per_second;
|
||||
float part_of_burst_that_fits_in_rob;
|
||||
float stutter_burst_time;
|
||||
float stutter_efficiency_not_including_vblank;
|
||||
float smallest_vblank;
|
||||
float v_blank_time;
|
||||
float stutter_efficiency;
|
||||
float dcf_clk_deep_sleep;
|
||||
float stutter_exit_watermark;
|
||||
float stutter_enter_plus_exit_watermark;
|
||||
float effective_det_plus_lb_lines_luma;
|
||||
float urgent_latency_support_us_luma;
|
||||
float effective_det_plus_lb_lines_chroma;
|
||||
float urgent_latency_support_us_chroma;
|
||||
float min_urgent_latency_support_us;
|
||||
float non_urgent_latency_tolerance;
|
||||
float block_height256_bytes_y;
|
||||
float block_height256_bytes_c;
|
||||
float meta_request_width_y;
|
||||
float meta_surf_width_y;
|
||||
float meta_surf_height_y;
|
||||
float meta_pte_bytes_frame_y;
|
||||
float meta_row_byte_y;
|
||||
float macro_tile_size_byte_y;
|
||||
float macro_tile_height_y;
|
||||
float pixel_pte_req_height_y;
|
||||
float pixel_pte_req_width_y;
|
||||
float pixel_pte_bytes_per_row_y;
|
||||
float meta_request_width_c;
|
||||
float meta_surf_width_c;
|
||||
float meta_surf_height_c;
|
||||
float meta_pte_bytes_frame_c;
|
||||
float meta_row_byte_c;
|
||||
float macro_tile_size_bytes_c;
|
||||
float macro_tile_height_c;
|
||||
float pixel_pte_req_height_c;
|
||||
float pixel_pte_req_width_c;
|
||||
float pixel_pte_bytes_per_row_c;
|
||||
float max_partial_swath_y;
|
||||
float max_partial_swath_c;
|
||||
float t_calc;
|
||||
float next_prefetch_mode;
|
||||
float v_startup_lines;
|
||||
enum dcn_bw_defs planes_with_room_to_increase_vstartup_prefetch_bw_less_than_active_bw;
|
||||
enum dcn_bw_defs planes_with_room_to_increase_vstartup_vratio_prefetch_more_than4;
|
||||
enum dcn_bw_defs planes_with_room_to_increase_vstartup_destination_line_times_for_prefetch_less_than2;
|
||||
enum dcn_bw_defs v_ratio_prefetch_more_than4;
|
||||
enum dcn_bw_defs destination_line_times_for_prefetch_less_than2;
|
||||
float prefetch_mode;
|
||||
float dstx_after_scaler;
|
||||
float dsty_after_scaler;
|
||||
float v_update_offset_pix;
|
||||
float total_repeater_delay_time;
|
||||
float v_update_width_pix;
|
||||
float v_ready_offset_pix;
|
||||
float t_setup;
|
||||
float t_wait;
|
||||
float bandwidth_available_for_immediate_flip;
|
||||
float tot_immediate_flip_bytes;
|
||||
float max_rd_bandwidth;
|
||||
float time_for_fetching_meta_pte;
|
||||
float time_for_fetching_row_in_vblank;
|
||||
float lines_to_request_prefetch_pixel_data;
|
||||
float required_prefetch_pix_data_bw;
|
||||
enum dcn_bw_defs prefetch_mode_supported;
|
||||
float active_dp_ps;
|
||||
float lb_latency_hiding_source_lines_y;
|
||||
float lb_latency_hiding_source_lines_c;
|
||||
float effective_lb_latency_hiding_y;
|
||||
float effective_lb_latency_hiding_c;
|
||||
float dpp_output_buffer_lines_y;
|
||||
float dpp_output_buffer_lines_c;
|
||||
float dppopp_buffering_y;
|
||||
float max_det_buffering_time_y;
|
||||
float active_dram_clock_change_latency_margin_y;
|
||||
float dppopp_buffering_c;
|
||||
float max_det_buffering_time_c;
|
||||
float active_dram_clock_change_latency_margin_c;
|
||||
float writeback_dram_clock_change_latency_margin;
|
||||
float min_active_dram_clock_change_margin;
|
||||
float v_blank_of_min_active_dram_clock_change_margin;
|
||||
float second_min_active_dram_clock_change_margin;
|
||||
float min_vblank_dram_clock_change_margin;
|
||||
float dram_clock_change_margin;
|
||||
float dram_clock_change_support;
|
||||
float wr_bandwidth;
|
||||
float max_used_bw;
|
||||
};
|
||||
|
||||
struct dcn_soc_bounding_box {
|
||||
float sr_exit_time; /*us*/
|
||||
float sr_enter_plus_exit_time; /*us*/
|
||||
float urgent_latency; /*us*/
|
||||
float write_back_latency; /*us*/
|
||||
float percent_of_ideal_drambw_received_after_urg_latency; /*%*/
|
||||
int max_request_size; /*bytes*/
|
||||
float dcfclkv_max0p9; /*MHz*/
|
||||
float dcfclkv_nom0p8; /*MHz*/
|
||||
float dcfclkv_mid0p72; /*MHz*/
|
||||
float dcfclkv_min0p65; /*MHz*/
|
||||
float max_dispclk_vmax0p9; /*MHz*/
|
||||
float max_dispclk_vmid0p72; /*MHz*/
|
||||
float max_dispclk_vnom0p8; /*MHz*/
|
||||
float max_dispclk_vmin0p65; /*MHz*/
|
||||
float max_dppclk_vmax0p9; /*MHz*/
|
||||
float max_dppclk_vnom0p8; /*MHz*/
|
||||
float max_dppclk_vmid0p72; /*MHz*/
|
||||
float max_dppclk_vmin0p65; /*MHz*/
|
||||
float socclk; /*MHz*/
|
||||
float fabric_and_dram_bandwidth_vmax0p9; /*GB/s*/
|
||||
float fabric_and_dram_bandwidth_vnom0p8; /*GB/s*/
|
||||
float fabric_and_dram_bandwidth_vmid0p72; /*GB/s*/
|
||||
float fabric_and_dram_bandwidth_vmin0p65; /*GB/s*/
|
||||
float phyclkv_max0p9; /*MHz*/
|
||||
float phyclkv_nom0p8; /*MHz*/
|
||||
float phyclkv_mid0p72; /*MHz*/
|
||||
float phyclkv_min0p65; /*MHz*/
|
||||
float downspreading; /*%*/
|
||||
int round_trip_ping_latency_cycles; /*DCFCLK Cycles*/
|
||||
int urgent_out_of_order_return_per_channel; /*bytes*/
|
||||
int number_of_channels;
|
||||
int vmm_page_size; /*bytes*/
|
||||
float dram_clock_change_latency; /*us*/
|
||||
int return_bus_width; /*bytes*/
|
||||
};
|
||||
extern const struct dcn_soc_bounding_box dcn10_soc_defaults;
|
||||
|
||||
struct dcn_ip_params {
|
||||
float rob_buffer_size_in_kbyte;
|
||||
float det_buffer_size_in_kbyte;
|
||||
float dpp_output_buffer_pixels;
|
||||
float opp_output_buffer_lines;
|
||||
float pixel_chunk_size_in_kbyte;
|
||||
enum dcn_bw_defs pte_enable;
|
||||
int pte_chunk_size; /*kbytes*/
|
||||
int meta_chunk_size; /*kbytes*/
|
||||
int writeback_chunk_size; /*kbytes*/
|
||||
enum dcn_bw_defs odm_capability;
|
||||
enum dcn_bw_defs dsc_capability;
|
||||
int line_buffer_size; /*bit*/
|
||||
int max_line_buffer_lines;
|
||||
enum dcn_bw_defs is_line_buffer_bpp_fixed;
|
||||
int line_buffer_fixed_bpp;
|
||||
int writeback_luma_buffer_size; /*kbytes*/
|
||||
int writeback_chroma_buffer_size; /*kbytes*/
|
||||
int max_num_dpp;
|
||||
int max_num_writeback;
|
||||
int max_dchub_topscl_throughput; /*pixels/dppclk*/
|
||||
int max_pscl_tolb_throughput; /*pixels/dppclk*/
|
||||
int max_lb_tovscl_throughput; /*pixels/dppclk*/
|
||||
int max_vscl_tohscl_throughput; /*pixels/dppclk*/
|
||||
float max_hscl_ratio;
|
||||
float max_vscl_ratio;
|
||||
int max_hscl_taps;
|
||||
int max_vscl_taps;
|
||||
int pte_buffer_size_in_requests;
|
||||
float dispclk_ramping_margin; /*%*/
|
||||
float under_scan_factor;
|
||||
int max_inter_dcn_tile_repeaters;
|
||||
enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
|
||||
enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed;
|
||||
int dcfclk_cstate_latency;
|
||||
};
|
||||
extern const struct dcn_ip_params dcn10_ip_defaults;
|
||||
|
||||
bool dcn_validate_bandwidth(
|
||||
const struct core_dc *dc,
|
||||
struct validate_context *context);
|
||||
|
||||
unsigned int dcn_find_dcfclk_suits_all(
|
||||
const struct core_dc *dc,
|
||||
struct clocks_value *clocks);
|
||||
|
||||
void dcn_bw_update_from_pplib(struct core_dc *dc);
|
||||
void dcn_bw_notify_pplib_of_wm_ranges(struct core_dc *dc);
|
||||
void dcn_bw_sync_calcs_and_dml(struct core_dc *dc);
|
||||
|
||||
#endif /* __DCN_CALCS_H__ */
|
||||
|
Loading…
Reference in New Issue