xref: /linux/drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_soc_parameter_types.h (revision 260f6f4fda93c8485c8037865c941b42b9cba5d2)
1 // SPDX-License-Identifier: MIT
2 //
3 // Copyright 2024 Advanced Micro Devices, Inc.
4 
5 #ifndef __DML_TOP_SOC_PARAMETER_TYPES_H__
6 #define __DML_TOP_SOC_PARAMETER_TYPES_H__
7 
8 #include "dml2_external_lib_deps.h"
9 
10 #define DML_MAX_CLK_TABLE_SIZE 20
11 
12 struct dml2_soc_derate_values {
13 	unsigned int dram_derate_percent_pixel;
14 	unsigned int dram_derate_percent_vm;
15 	unsigned int dram_derate_percent_pixel_and_vm;
16 
17 	unsigned int fclk_derate_percent;
18 	unsigned int dcfclk_derate_percent;
19 };
20 
21 struct dml2_soc_derates {
22 	struct dml2_soc_derate_values system_active_urgent;
23 	struct dml2_soc_derate_values system_active_average;
24 	struct dml2_soc_derate_values dcn_mall_prefetch_urgent;
25 	struct dml2_soc_derate_values dcn_mall_prefetch_average;
26 	struct dml2_soc_derate_values system_idle_average;
27 };
28 
29 struct dml2_dcn32x_soc_qos_params {
30 	struct {
31 		unsigned int base_latency_us;
32 		unsigned int base_latency_pixel_vm_us;
33 		unsigned int base_latency_vm_us;
34 		unsigned int scaling_factor_fclk_us;
35 		unsigned int scaling_factor_mhz;
36 	} urgent_latency_us;
37 
38 	unsigned int loaded_round_trip_latency_fclk_cycles;
39 	unsigned int urgent_out_of_order_return_per_channel_pixel_only_bytes;
40 	unsigned int urgent_out_of_order_return_per_channel_pixel_and_vm_bytes;
41 	unsigned int urgent_out_of_order_return_per_channel_vm_only_bytes;
42 };
43 
44 struct dml2_dcn4_uclk_dpm_dependent_qos_params {
45 	unsigned long minimum_uclk_khz;
46 	unsigned int urgent_ramp_uclk_cycles;
47 	unsigned int trip_to_memory_uclk_cycles;
48 	unsigned int meta_trip_to_memory_uclk_cycles;
49 	unsigned int maximum_latency_when_urgent_uclk_cycles;
50 	unsigned int average_latency_when_urgent_uclk_cycles;
51 	unsigned int maximum_latency_when_non_urgent_uclk_cycles;
52 	unsigned int average_latency_when_non_urgent_uclk_cycles;
53 };
54 
55 struct dml2_dcn4x_soc_qos_params {
56 	unsigned int df_qos_response_time_fclk_cycles;
57 	unsigned int max_round_trip_to_furthest_cs_fclk_cycles;
58 	unsigned int mall_overhead_fclk_cycles;
59 	unsigned int meta_trip_adder_fclk_cycles;
60 	unsigned int average_transport_distance_fclk_cycles;
61 	double umc_urgent_ramp_latency_margin;
62 	double umc_max_latency_margin;
63 	double umc_average_latency_margin;
64 	double fabric_max_transport_latency_margin;
65 	double fabric_average_transport_latency_margin;
66 	struct dml2_dcn4_uclk_dpm_dependent_qos_params per_uclk_dpm_params[DML_MAX_CLK_TABLE_SIZE];
67 };
68 
69 enum dml2_qos_param_type {
70 	dml2_qos_param_type_dcn3,
71 	dml2_qos_param_type_dcn4x
72 };
73 
74 struct dml2_soc_qos_parameters {
75 	struct dml2_soc_derates derate_table;
76 	struct {
77 		unsigned int base_latency_us;
78 		unsigned int scaling_factor_us;
79 		unsigned int scaling_factor_mhz;
80 	} writeback;
81 
82 	union {
83 		struct dml2_dcn32x_soc_qos_params dcn32x;
84 		struct dml2_dcn4x_soc_qos_params dcn4x;
85 	} qos_params;
86 
87 	enum dml2_qos_param_type qos_type;
88 };
89 
90 struct dml2_soc_power_management_parameters {
91 	double dram_clk_change_blackout_us;
92 	double dram_clk_change_read_only_us;
93 	double dram_clk_change_write_only_us;
94 	double fclk_change_blackout_us;
95 	double g7_ppt_blackout_us;
96 	double g7_temperature_read_blackout_us;
97 	double stutter_enter_plus_exit_latency_us;
98 	double stutter_exit_latency_us;
99 	double z8_stutter_enter_plus_exit_latency_us;
100 	double z8_stutter_exit_latency_us;
101 	double z8_min_idle_time;
102 	double g6_temp_read_blackout_us[DML_MAX_CLK_TABLE_SIZE];
103 	double type_b_dram_clk_change_blackout_us;
104 	double type_b_ppt_blackout_us;
105 };
106 
107 struct dml2_clk_table {
108 	unsigned long clk_values_khz[DML_MAX_CLK_TABLE_SIZE];
109 	unsigned char num_clk_values;
110 };
111 
112 struct dml2_dram_params {
113 	unsigned int channel_width_bytes;
114 	unsigned int channel_count;
115 	unsigned int transactions_per_clock;
116 };
117 
118 struct dml2_soc_state_table {
119 	struct dml2_clk_table uclk;
120 	struct dml2_clk_table fclk;
121 	struct dml2_clk_table dcfclk;
122 	struct dml2_clk_table dispclk;
123 	struct dml2_clk_table dppclk;
124 	struct dml2_clk_table dtbclk;
125 	struct dml2_clk_table phyclk;
126 	struct dml2_clk_table socclk;
127 	struct dml2_clk_table dscclk;
128 	struct dml2_clk_table phyclk_d18;
129 	struct dml2_clk_table phyclk_d32;
130 
131 	struct dml2_dram_params dram_config;
132 };
133 
134 struct dml2_soc_vmin_clock_limits {
135 	unsigned long dispclk_khz;
136 	unsigned long dcfclk_khz;
137 };
138 
139 struct dml2_soc_bb {
140 	struct dml2_soc_state_table clk_table;
141 	struct dml2_soc_qos_parameters qos_parameters;
142 	struct dml2_soc_power_management_parameters power_management_parameters;
143 	struct dml2_soc_vmin_clock_limits vmin_limit;
144 
145 	double lower_bound_bandwidth_dchub;
146 	unsigned int dprefclk_mhz;
147 	unsigned int xtalclk_mhz;
148 	unsigned int pcie_refclk_mhz;
149 	unsigned int dchub_refclk_mhz;
150 	unsigned int mall_allocated_for_dcn_mbytes;
151 	unsigned int max_outstanding_reqs;
152 	unsigned long fabric_datapath_to_dcn_data_return_bytes;
153 	unsigned long return_bus_width_bytes;
154 	unsigned long hostvm_min_page_size_kbytes;
155 	unsigned long gpuvm_min_page_size_kbytes;
156 	double phy_downspread_percent;
157 	double dcn_downspread_percent;
158 	double dispclk_dppclk_vco_speed_mhz;
159 	bool no_dfs;
160 	bool do_urgent_latency_adjustment;
161 	unsigned int mem_word_bytes;
162 	unsigned int num_dcc_mcaches;
163 	unsigned int mcache_size_bytes;
164 	unsigned int mcache_line_size_bytes;
165 	unsigned long max_fclk_for_uclk_dpm_khz;
166 };
167 
168 struct dml2_ip_capabilities {
169 	unsigned int pipe_count;
170 	unsigned int otg_count;
171 	unsigned int num_dsc;
172 	unsigned int max_num_dp2p0_streams;
173 	unsigned int max_num_hdmi_frl_outputs;
174 	unsigned int max_num_dp2p0_outputs;
175 	unsigned int max_num_wb;
176 	unsigned int rob_buffer_size_kbytes;
177 	unsigned int config_return_buffer_size_in_kbytes;
178 	unsigned int config_return_buffer_segment_size_in_kbytes;
179 	unsigned int meta_fifo_size_in_kentries;
180 	unsigned int compressed_buffer_segment_size_in_kbytes;
181 	unsigned int cursor_buffer_size;
182 	unsigned int max_flip_time_us;
183 	unsigned int max_flip_time_lines;
184 	unsigned int hostvm_mode;
185 	unsigned int subvp_drr_scheduling_margin_us;
186 	unsigned int subvp_prefetch_end_to_mall_start_us;
187 	unsigned int subvp_fw_processing_delay;
188 	unsigned int max_vactive_det_fill_delay_us;
189 
190 	/* FAMS2 delays */
191 	struct {
192 		unsigned int max_allow_delay_us;
193 		unsigned int scheduling_delay_us;
194 		unsigned int vertical_interrupt_ack_delay_us; // delay to acknowledge vline int
195 		unsigned int allow_programming_delay_us; // time requires to program allow
196 		unsigned int min_allow_width_us;
197 		unsigned int subvp_df_throttle_delay_us;
198 		unsigned int subvp_programming_delay_us;
199 		unsigned int subvp_prefetch_to_mall_delay_us;
200 		unsigned int drr_programming_delay_us;
201 
202 		unsigned int lock_timeout_us;
203 		unsigned int recovery_timeout_us;
204 		unsigned int flip_programming_delay_us;
205 	} fams2;
206 };
207 
208 #endif
209