Line data Source code
1 : // SPDX-License-Identifier: MIT
2 : /*
3 : * KUnit tests for dml/dcn20/display_mode_vba_20.c
4 : *
5 : * Copyright (C) 2022, MaĆra Canal <mairacanal@riseup.net>
6 : */
7 :
8 : #include <kunit/test.h>
9 : #include "dml/display_mode_enums.h"
10 :
11 : struct calculate_write_back_delay_test_case {
12 : const char *desc;
13 : const enum source_format_class writeback_pixel_format;
14 : const double writeback_HRatio;
15 : const double writeback_VRatio;
16 : const unsigned int writeback_luma_HTaps;
17 : const unsigned int writeback_luma_VTaps;
18 : const unsigned int writeback_chroma_HTaps;
19 : const unsigned int writeback_chroma_VTaps;
20 : const unsigned int writeback_destination_width;
21 : const double calculate_write_back_delay;
22 : };
23 :
24 : struct calculate_active_row_bandwidth_test_case {
25 : const char *desc;
26 : const bool GPUVM_enable;
27 : const enum source_format_class source_pixel_format;
28 : const double VRatio;
29 : const bool DCC_enable;
30 : const double line_time;
31 : const unsigned int meta_row_byte_luma;
32 : const unsigned int meta_row_byte_chroma;
33 : const unsigned int meta_row_height_luma;
34 : const unsigned int meta_row_height_chroma;
35 : const unsigned int pixel_PTE_bytes_per_row_luma;
36 : const unsigned int pixel_PTE_bytes_per_row_chroma;
37 : const unsigned int dpte_row_height_luma;
38 : const unsigned int dpte_row_height_chroma;
39 : const double meta_row_bw;
40 : const double dpte_row_bw;
41 : const double qual_row_bw;
42 : };
43 :
44 : /**
45 : * dscce_compute_delay_test - KUnit test for dscceComputeDelay
46 : * @test: represents a running instance of a test.
47 : */
48 1 : static void dscce_compute_delay_test(struct kunit *test)
49 : {
50 : /* Testing all the valid values for bits per color (bpc): {8, 10, 12} */
51 : /* Testing all the valid values for number of slices: {1, 2, 3, 4} */
52 :
53 : /*
54 : * For 4:4:4 encoding, the minimum bpp value is 8 and is incremented by
55 : * 1/16 of a bit. Moreover, the sliceWidth must be less than or equal to
56 : * 5184/numSlices.
57 : */
58 :
59 : /* Minimum sliceWidth value on 4:4:4 encoding */
60 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 8.0, 1, 1, dm_444), 2004);
61 :
62 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 8.0625, 5184, 1, dm_444), 885);
63 :
64 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 8.125, 2592, 2, dm_444), 3495);
65 :
66 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 8.1875, 1728, 3, dm_444), 4356);
67 :
68 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 8.25, 864, 3, dm_444), 4425);
69 :
70 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 8.3125, 1296, 4, dm_444), 4854);
71 :
72 : /*
73 : * For 4:2:0 encoding, the minimum bpp value is 6 and is incremented by
74 : * 1/16 of a bit. Moreover, the sliceWidth must be less than or equal to
75 : * 4096/numSlices.
76 : */
77 :
78 : /* Minimum sliceWidth value on 4:2:0 encoding */
79 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 6.0, 2, 1, dm_420), 2982);
80 :
81 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 6.0625, 4096, 1, dm_420), 1428);
82 :
83 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 6.125, 2048, 2, dm_420), 3522);
84 :
85 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 6.1875, 1365, 3, dm_420), 4200);
86 :
87 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 6.25, 682, 3, dm_420), 5706);
88 :
89 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 6.3125, 1024, 4, dm_420), 7746);
90 :
91 : /*
92 : * For 4:2:2 encoding, the minimum bpp value is 7 and is incremented by
93 : * 1/16 of a bit. Moreover, the sliceWidth must be less than or equal to
94 : * 5184/numSlices.
95 : */
96 :
97 : /* Minimum sliceWidth value on n-4:2:2 encoding */
98 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 7.0, 2, 1, dm_n422), 2694);
99 :
100 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 7.0625, 5184, 1, dm_n422), 1332);
101 :
102 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 7.125, 2592, 2, dm_n422), 3966);
103 :
104 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 7.1875, 1728, 3, dm_n422), 4824);
105 :
106 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 7.25, 864, 3, dm_n422), 4962);
107 :
108 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 7.3125, 1296, 4, dm_n422), 9282);
109 :
110 : /* Minimum sliceWidth value on s-4:2:2 encoding */
111 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 7.0, 1, 1, dm_s422), 2226);
112 :
113 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(8, 7.0625, 5184, 1, dm_s422), 960);
114 :
115 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 7.125, 2592, 2, dm_s422), 3570);
116 :
117 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(10, 7.1875, 1728, 3, dm_s422), 4428);
118 :
119 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 7.25, 864, 3, dm_s422), 4497);
120 :
121 1 : KUNIT_EXPECT_EQ(test, dscceComputeDelay(12, 7.3125, 1296, 4, dm_s422), 4923);
122 1 : }
123 :
124 : /**
125 : * DSC_compute_delay_test - KUnit test for dscComputeDelay
126 : * @test: represents a running instance of a test.
127 : */
128 1 : static void DSC_compute_delay_test(struct kunit *test)
129 : {
130 : /* 4:4:4 encoding */
131 1 : KUNIT_EXPECT_EQ(test, dscComputeDelay(dm_444), 30);
132 :
133 : /* 4:2:0 encoding */
134 1 : KUNIT_EXPECT_EQ(test, dscComputeDelay(dm_420), 48);
135 :
136 : /* 4:2:2 n-encoding */
137 1 : KUNIT_EXPECT_EQ(test, dscComputeDelay(dm_n422), 49);
138 :
139 : /* 4:2:2 s-encoding */
140 1 : KUNIT_EXPECT_EQ(test, dscComputeDelay(dm_s422), 30);
141 1 : }
142 :
143 : /**
144 : * calculate_TWait_test - KUnit test for CalculateTWait
145 : * @test: represents a running instance of a test.
146 : */
147 1 : static void calculate_TWait_test(struct kunit *test)
148 : {
149 : /* Zeroed Prefetch Mode */
150 :
151 : /* DRAMClockChangeLatency > UrgentLatencyPixelDataOnly > SREnterPlusExitTime*/
152 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(0, 1300000, 1200000, 1000000), 2500000);
153 :
154 : /* DRAMClockChangeLatency > SREnterPlusExitTime > UrgentLatencyPixelDataOnly */
155 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(0, 1300000, 900000, 1200000), 2200000);
156 :
157 : /* UrgentLatencyPixelDataOnly > DRAMClockChangeLatency > SREnterPlusExitTime */
158 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(0, 1000000, 2000000, 900000), 3000000);
159 :
160 : /* UrgentLatencyPixelDataOnly > SREnterPlusExitTime > DRAMClockChangeLatency */
161 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(0, 1000000, 1200000, 1100000), 2200000);
162 :
163 : /* SREnterPlusExitTime > DRAMClockChangeLatency > UrgentLatencyPixelDataOnly */
164 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(0, 1000000, 900000, 2000000), 2000000);
165 :
166 : /* SREnterPlusExitTime > UrgentLatencyPixelDataOnly > DRAMClockChangeLatency */
167 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(0, 1000000, 1200000, 1300000), 2200000);
168 :
169 : /* Prefetch Mode equals 1 */
170 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 2500000, 2000000, 900000), 2000000);
171 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 1300000, 900000, 1200000), 1200000);
172 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 1100000, 1200000, 1000000), 1200000);
173 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 1000000, 1200000, 1100000), 1200000);
174 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 1000000, 900000, 2000000), 2000000);
175 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 1000000, 1200000, 1300000), 1300000);
176 :
177 : /* Prefetch Mode greater than 1 */
178 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(1, 2500000, 2000000, 900000), 2000000);
179 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(2, 2500000, 900000, 2000000), 900000);
180 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(5, 1100000, 1200000, 1000000), 1200000);
181 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(4, 1000000, 1300000, 1200000), 1300000);
182 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(6, 1000000, 900000, 2000000), 900000);
183 1 : KUNIT_EXPECT_EQ(test, CalculateTWait(3, 1000000, 1200000, 1300000), 1200000);
184 1 : }
185 :
186 : /**
187 : * calculate_write_back_delay_test - KUnit test for CalculateWriteBackDelay
188 : * @test: represents a running instance of a test.
189 : */
190 14 : static void calculate_write_back_delay_test(struct kunit *test)
191 : {
192 14 : const struct calculate_write_back_delay_test_case *test_param = test->param_value;
193 : double calculate_write_back_delay;
194 :
195 14 : DC_FP_START();
196 14 : calculate_write_back_delay = CalculateWriteBackDelay
197 : (test_param->writeback_pixel_format,
198 : test_param->writeback_HRatio,
199 : test_param->writeback_VRatio,
200 : test_param->writeback_luma_HTaps,
201 : test_param->writeback_luma_VTaps,
202 : test_param->writeback_chroma_HTaps,
203 : test_param->writeback_chroma_VTaps,
204 : test_param->writeback_destination_width);
205 14 : DC_FP_END();
206 :
207 14 : KUNIT_EXPECT_EQ(test, test_param->calculate_write_back_delay,
208 : calculate_write_back_delay);
209 14 : }
210 :
211 : /**
212 : * calculate_active_row_bandwidth_test - KUnit test for CalculateActiveRowBandwidth
213 : * @test: represents a running instance of a test.
214 : */
215 14 : static void calculate_active_row_bandwidth_test(struct kunit *test)
216 : {
217 14 : const struct calculate_active_row_bandwidth_test_case *test_param = test->param_value;
218 : double *meta_row_bw, *dpte_row_bw, *qual_row_bw;
219 :
220 14 : meta_row_bw = kunit_kzalloc(test, sizeof(double), GFP_KERNEL);
221 28 : KUNIT_ASSERT_NOT_ERR_OR_NULL(test, meta_row_bw);
222 :
223 14 : dpte_row_bw = kunit_kzalloc(test, sizeof(double), GFP_KERNEL);
224 28 : KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dpte_row_bw);
225 :
226 14 : qual_row_bw = kunit_kzalloc(test, sizeof(double), GFP_KERNEL);
227 28 : KUNIT_ASSERT_NOT_ERR_OR_NULL(test, qual_row_bw);
228 :
229 14 : DC_FP_START();
230 28 : CalculateActiveRowBandwidth(test_param->GPUVM_enable,
231 : test_param->source_pixel_format,
232 : test_param->VRatio,
233 14 : test_param->DCC_enable,
234 : test_param->line_time,
235 : test_param->meta_row_byte_luma,
236 : test_param->meta_row_byte_chroma,
237 : test_param->meta_row_height_luma,
238 : test_param->meta_row_height_chroma,
239 : test_param->pixel_PTE_bytes_per_row_luma,
240 : test_param->pixel_PTE_bytes_per_row_chroma,
241 : test_param->dpte_row_height_luma,
242 : test_param->dpte_row_height_chroma,
243 : meta_row_bw,
244 : dpte_row_bw,
245 : qual_row_bw);
246 14 : DC_FP_END();
247 :
248 14 : KUNIT_EXPECT_EQ(test, test_param->meta_row_bw, *meta_row_bw);
249 14 : KUNIT_EXPECT_EQ(test, test_param->dpte_row_bw, *dpte_row_bw);
250 14 : KUNIT_EXPECT_EQ(test, test_param->qual_row_bw, *qual_row_bw);
251 14 : }
252 :
253 : /**
254 : * trunc_to_valid_BPP_test - KUnit test for TruncToValidBPP
255 : * @test: represents a running instance of a test.
256 : */
257 1 : static void trunc_to_valid_BPP_test(struct kunit *test)
258 : {
259 : /* HDMI output for 4:2:0 encoding */
260 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18.01, true, dm_hdmi, dm_420, 0), 18);
261 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18, true, dm_hdmi, dm_420, 10), 18);
262 :
263 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(15.01, false, dm_hdmi, dm_420, 0), 15);
264 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(15, false, dm_hdmi, dm_420, 8), 15);
265 :
266 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(12.01, true, dm_hdmi, dm_420, 0), 12);
267 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(12, true, dm_hdmi, dm_420, 5), 12);
268 :
269 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11.99, false, dm_hdmi, dm_420, 5), BPP_INVALID);
270 :
271 : /* HDMI output for 4:2:0 encoding */
272 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(36.01, true, dm_hdmi, dm_444, 0), 36);
273 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(36, true, dm_hdmi, dm_444, 10), 36);
274 :
275 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(30.01, false, dm_hdmi, dm_444, 0), 30);
276 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(30, false, dm_hdmi, dm_444, 8), 30);
277 :
278 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24.01, true, dm_hdmi, dm_444, 0), 24);
279 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24, true, dm_hdmi, dm_444, 5), 24);
280 :
281 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18.01, true, dm_hdmi, dm_444, 0), 18);
282 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18, true, dm_hdmi, dm_444, 5), 18);
283 :
284 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.99, false, dm_hdmi, dm_444, 5), BPP_INVALID);
285 :
286 : /* HDMI output for different encoding types */
287 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(36.01, true, dm_hdmi, dm_n422, 0), 24);
288 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(36, true, dm_hdmi, dm_s422, 10), 24);
289 :
290 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(30.01, false, dm_hdmi, dm_n422, 0), 20);
291 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(30, false, dm_hdmi, dm_s422, 8), 20);
292 :
293 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24.01, true, dm_hdmi, dm_n422, 0), 16);
294 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24, true, dm_hdmi, dm_s422, 5), 16);
295 :
296 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(15.99, false, dm_hdmi, dm_n422, 5), BPP_INVALID);
297 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(-1, true, dm_hdmi, dm_s422, 0), BPP_INVALID);
298 :
299 : /* Display Port output with DSC enabled and 4:2:0 encoding */
300 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(5.99, true, dm_dp, dm_420, 0), BPP_INVALID);
301 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(-1, true, dm_dp, dm_420, 0), BPP_INVALID);
302 :
303 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(12, true, dm_dp, dm_420, 8), 12);
304 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(1.5 * 8 - 1 / (double)16, true, dm_dp,
305 : dm_420, 8), 11);
306 :
307 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(7, true, dm_dp, dm_420, 3), 4);
308 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(1.5 * 9 - 1 / (double)16, true, dm_dp,
309 : dm_420, 9), 13);
310 :
311 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(6, true, dm_dp, dm_420, 8), 6);
312 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(6.25, true, dm_dp, dm_420, 8), 6);
313 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(6 + 1 / (double)3, true, dm_dp, dm_420, 8), 6);
314 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(6.50, true, dm_dp, dm_420, 8), 6);
315 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(6.75, true, dm_dp, dm_420, 8), 6);
316 :
317 : /* Embedded Display Port output with DSC enabled and n-4:2:2 encoding */
318 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(6.99, true, dm_edp, dm_n422, 0), BPP_INVALID);
319 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(-1, true, dm_edp, dm_n422, 0), BPP_INVALID);
320 :
321 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(16, true, dm_edp, dm_n422, 7), 14);
322 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(2 * 7 - 1 / (double)16, true, dm_edp,
323 : dm_n422, 7), 13);
324 :
325 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(7, true, dm_edp, dm_n422, 3), 6);
326 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(2 * 9 - 1 / (double)16, true, dm_edp,
327 : dm_n422, 9), 17);
328 :
329 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11, true, dm_edp, dm_n422, 8), 11);
330 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11 + 1 / (double)3, true, dm_edp,
331 : dm_n422, 8), 11);
332 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11.40, true, dm_edp, dm_n422, 8), 11);
333 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11.50, true, dm_edp, dm_n422, 8), 11);
334 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11.75, true, dm_edp, dm_n422, 8), 11);
335 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11.95, true, dm_edp, dm_n422, 8), 11);
336 :
337 : /* Display Port 2.0 output with DSC enabled and 4:4:4 encoding */
338 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(7.99, true, dm_dp2p0, dm_444, 0), BPP_INVALID);
339 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(-1, true, dm_dp2p0, dm_444, 0), BPP_INVALID);
340 :
341 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(22, true, dm_dp2p0, dm_444, 11), 22);
342 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(3 * 7 - 1 / (double)16, true, dm_dp2p0,
343 : dm_444, 7), 20);
344 :
345 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(14, true, dm_dp2p0, dm_444, 3), 9);
346 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(3 * 9 - 1 / (double)16, true, dm_dp2p0,
347 : dm_444, 9), 26);
348 :
349 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17, true, dm_dp2p0, dm_444, 7), 17);
350 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17 + 1 / (double)3, true, dm_dp2p0, dm_444, 7), 17);
351 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.40, true, dm_dp2p0, dm_444, 7), 17);
352 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.50, true, dm_dp2p0, dm_444, 7), 17);
353 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.75, true, dm_dp2p0, dm_444, 7), 17);
354 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.95, true, dm_dp2p0, dm_444, 7), 17);
355 :
356 : /* WB output with DSC enabled and 4:2:2 s-encoding */
357 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(7.99, true, dm_wb, dm_s422, 0), BPP_INVALID);
358 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(-1, true, dm_wb, dm_s422, 0), BPP_INVALID);
359 :
360 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(22, true, dm_wb, dm_s422, 11), 22);
361 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(3 * 7 - 1 / (double)16, true, dm_wb, dm_s422, 7), 20);
362 :
363 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18, true, dm_wb, dm_s422, 3), 9);
364 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(3 * 9 - 1 / (double)16, true, dm_wb, dm_s422, 9), 26);
365 :
366 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17, true, dm_wb, dm_s422, 7), 17);
367 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17 + 1 / (double)3, true, dm_wb, dm_s422, 7), 17);
368 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.40, true, dm_wb, dm_s422, 7), 17);
369 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.50, true, dm_wb, dm_s422, 7), 17);
370 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.75, true, dm_wb, dm_s422, 7), 17);
371 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.95, true, dm_wb, dm_s422, 7), 17);
372 :
373 : /* Display Port output with DSC disabled for 4:2:0 encoding */
374 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18.01, false, dm_dp, dm_420, 0), 18);
375 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18, false, dm_dp, dm_420, 10), 18);
376 :
377 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(15.01, false, dm_dp, dm_420, 0), 15);
378 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(15, false, dm_dp, dm_420, 8), 15);
379 :
380 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(12.01, false, dm_dp, dm_420, 0), 12);
381 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(12, false, dm_dp, dm_420, 5), 12);
382 :
383 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(11.99, false, dm_dp, dm_420, 5), BPP_INVALID);
384 :
385 : /* Embedded Display Port output with DSC disabled for 4:2:2 encoding */
386 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24.01, false, dm_edp, dm_s422, 0), 24);
387 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24, false, dm_edp, dm_n422, 10), 24);
388 :
389 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(20.01, false, dm_edp, dm_s422, 0), 20);
390 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(20, false, dm_edp, dm_n422, 8), 20);
391 :
392 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(16.01, false, dm_edp, dm_s422, 0), 16);
393 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(16, false, dm_edp, dm_n422, 5), 16);
394 :
395 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(15.99, false, dm_edp, dm_s422, 5), BPP_INVALID);
396 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(-1, false, dm_edp, dm_n422, 5), BPP_INVALID);
397 :
398 : /* WB output with DSC disabled for 4:4:4 encoding */
399 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(36.01, false, dm_wb, dm_444, 0), 36);
400 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(36, false, dm_wb, dm_444, 10), 36);
401 :
402 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(30.01, false, dm_wb, dm_444, 0), 30);
403 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(30, false, dm_wb, dm_444, 8), 30);
404 :
405 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24.01, false, dm_wb, dm_444, 0), 24);
406 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(24, false, dm_wb, dm_444, 5), 24);
407 :
408 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18.01, false, dm_wb, dm_444, 0), 18);
409 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(18, false, dm_wb, dm_444, 5), 18);
410 :
411 1 : KUNIT_EXPECT_EQ(test, TruncToValidBPP(17.99, false, dm_wb, dm_444, 5), BPP_INVALID);
412 1 : }
413 :
414 : static const struct calculate_write_back_delay_test_case calculate_write_back_delay_cases[] = {
415 : {
416 : .desc = "Trivial test",
417 : .writeback_pixel_format = dm_444_32,
418 : .writeback_HRatio = 1.0,
419 : .writeback_VRatio = 1.0,
420 : .writeback_luma_HTaps = 0,
421 : .writeback_luma_VTaps = 0,
422 : .writeback_chroma_HTaps = 0,
423 : .writeback_chroma_VTaps = 0,
424 : .writeback_destination_width = 0,
425 : .calculate_write_back_delay = 0x1p+2,
426 : },
427 : {
428 : .desc = "High Writeback HRatio and VRatio and zeroed taps",
429 : .writeback_pixel_format = dm_444_32,
430 : .writeback_HRatio = 2400.0,
431 : .writeback_VRatio = 2500.0,
432 : .writeback_luma_HTaps = 0,
433 : .writeback_luma_VTaps = 0,
434 : .writeback_chroma_HTaps = 0,
435 : .writeback_chroma_VTaps = 0,
436 : .writeback_destination_width = 0,
437 : .calculate_write_back_delay = 0x1p+2,
438 : },
439 : {
440 : .desc = "Simple Writeback Ratio",
441 : .writeback_pixel_format = dm_444_32,
442 : .writeback_HRatio = 1.0,
443 : .writeback_VRatio = 1.0,
444 : .writeback_luma_HTaps = 4,
445 : .writeback_luma_VTaps = 4,
446 : .writeback_chroma_HTaps = 5,
447 : .writeback_chroma_VTaps = 5,
448 : .writeback_destination_width = 2400,
449 : .calculate_write_back_delay = 0x1.2cap+11,
450 : },
451 : {
452 : .desc = "Non-integer WritebackVRatio with same number of Luma and Chroma taps",
453 : .writeback_pixel_format = dm_444_32,
454 : .writeback_HRatio = 1.0,
455 : .writeback_VRatio = 2567.56,
456 : .writeback_luma_HTaps = 7,
457 : .writeback_luma_VTaps = 7,
458 : .writeback_chroma_HTaps = 7,
459 : .writeback_chroma_VTaps = 7,
460 : .writeback_destination_width = 400,
461 : .calculate_write_back_delay = 0x1.61p+9,
462 : },
463 : {
464 : .desc = "No Writeback to Chroma Taps",
465 : .writeback_pixel_format = dm_444_32,
466 : .writeback_HRatio = 1.0,
467 : .writeback_VRatio = 1.5,
468 : .writeback_luma_HTaps = 5,
469 : .writeback_luma_VTaps = 5,
470 : .writeback_chroma_HTaps = 0,
471 : .writeback_chroma_VTaps = 0,
472 : .writeback_destination_width = 2400,
473 : .calculate_write_back_delay = 0x1.77cp+11,
474 : },
475 : {
476 : .desc = "No Writeback to Luma Taps",
477 : .writeback_pixel_format = dm_444_32,
478 : .writeback_HRatio = 2.0,
479 : .writeback_VRatio = 1.5,
480 : .writeback_luma_HTaps = 0,
481 : .writeback_luma_VTaps = 0,
482 : .writeback_chroma_HTaps = 3,
483 : .writeback_chroma_VTaps = 3,
484 : .writeback_destination_width = 3700,
485 : .calculate_write_back_delay = 0x1p+2,
486 : },
487 : {
488 : .desc = "High Writeback HRatio and VRatio",
489 : .writeback_pixel_format = dm_444_32,
490 : .writeback_HRatio = 2500000.0,
491 : .writeback_VRatio = 2000000.0,
492 : .writeback_luma_HTaps = 4,
493 : .writeback_luma_VTaps = 4,
494 : .writeback_chroma_HTaps = 5,
495 : .writeback_chroma_VTaps = 5,
496 : .writeback_destination_width = 3400,
497 : .calculate_write_back_delay = 0x1.be4cd8p-10,
498 : },
499 : {
500 : .desc = "Increase numeric error by increasing taps' Writeback",
501 : .writeback_pixel_format = dm_444_32,
502 : .writeback_HRatio = 3000.0,
503 : .writeback_VRatio = 2450.0,
504 : .writeback_luma_HTaps = 100,
505 : .writeback_luma_VTaps = 100,
506 : .writeback_chroma_HTaps = 200,
507 : .writeback_chroma_VTaps = 200,
508 : .writeback_destination_width = 1687,
509 : .calculate_write_back_delay = 0x1.49eap+15,
510 : },
511 : {
512 : .desc = "Turning point of the Writeback HRatio and VRatio",
513 : .writeback_pixel_format = dm_444_32,
514 : .writeback_HRatio = 100000.0,
515 : .writeback_VRatio = 100000.0,
516 : .writeback_luma_HTaps = 100,
517 : .writeback_luma_VTaps = 100,
518 : .writeback_chroma_HTaps = 200,
519 : .writeback_chroma_VTaps = 200,
520 : .writeback_destination_width = 1687,
521 : .calculate_write_back_delay = 0x1.b06ccap-2,
522 : },
523 : {
524 : .desc = "Simple Writeback Ratio for 4:4:4 8-bit encoding",
525 : .writeback_pixel_format = dm_444_8,
526 : .writeback_HRatio = 1.0,
527 : .writeback_VRatio = 1.0,
528 : .writeback_luma_HTaps = 4,
529 : .writeback_luma_VTaps = 4,
530 : .writeback_chroma_HTaps = 5,
531 : .writeback_chroma_VTaps = 5,
532 : .writeback_destination_width = 2400,
533 : .calculate_write_back_delay = 0x1.77cp+11,
534 : },
535 : {
536 : .desc = "Non-integer WritebackVRatio with same number of Luma and Chroma taps for 4:4:4 64-bit encoding",
537 : .writeback_pixel_format = dm_444_64,
538 : .writeback_HRatio = 100000.0,
539 : .writeback_VRatio = 100000.56,
540 : .writeback_luma_HTaps = 7,
541 : .writeback_luma_VTaps = 7,
542 : .writeback_chroma_HTaps = 7,
543 : .writeback_chroma_VTaps = 7,
544 : .writeback_destination_width = 400,
545 : .calculate_write_back_delay = 0x1.ceae7cp-8,
546 : },
547 : {
548 : .desc = "No Writeback to Chroma Taps for 4:2:0 8-bit encoding",
549 : .writeback_pixel_format = dm_420_8,
550 : .writeback_HRatio = 100000.00,
551 : .writeback_VRatio = 100000.56,
552 : .writeback_luma_HTaps = 8,
553 : .writeback_luma_VTaps = 8,
554 : .writeback_chroma_HTaps = 0,
555 : .writeback_chroma_VTaps = 0,
556 : .writeback_destination_width = 1333,
557 : .calculate_write_back_delay = 0x1.b6c2d6p-6,
558 : },
559 : {
560 : .desc = "No Writeback to Luma Taps for 4:2:0 10-bit encoding",
561 : .writeback_pixel_format = dm_420_10,
562 : .writeback_HRatio = 200000.0,
563 : .writeback_VRatio = 100000.56,
564 : .writeback_luma_HTaps = 0,
565 : .writeback_luma_VTaps = 0,
566 : .writeback_chroma_HTaps = 3,
567 : .writeback_chroma_VTaps = 3,
568 : .writeback_destination_width = 996,
569 : .calculate_write_back_delay = 0x1.ecd3f6p-9,
570 : },
571 : {
572 : .desc = "Reduce numeric error by decreasing Writeback HRatio and VRatio for 4:4:4 16-bit encoding",
573 : .writeback_pixel_format = dm_444_16,
574 : .writeback_HRatio = 2.0,
575 : .writeback_VRatio = 1.0,
576 : .writeback_luma_HTaps = 5,
577 : .writeback_luma_VTaps = 5,
578 : .writeback_chroma_HTaps = 5,
579 : .writeback_chroma_VTaps = 5,
580 : .writeback_destination_width = 2400.0,
581 : .calculate_write_back_delay = 0x1.77cp+11,
582 : },
583 : };
584 :
585 : static const struct calculate_active_row_bandwidth_test_case calculate_active_row_bandwidth_cases[] = {
586 : {
587 : .desc = "Trivial Test",
588 : .GPUVM_enable = false,
589 : .source_pixel_format = -1,
590 : .VRatio = 0.00,
591 : .DCC_enable = false,
592 : .line_time = 0.00,
593 : .meta_row_byte_luma = 0,
594 : .meta_row_byte_chroma = 0,
595 : .meta_row_height_luma = 0,
596 : .meta_row_height_chroma = 0,
597 : .pixel_PTE_bytes_per_row_luma = 0,
598 : .pixel_PTE_bytes_per_row_chroma = 0,
599 : .dpte_row_height_luma = 0,
600 : .dpte_row_height_chroma = 0,
601 : .meta_row_bw = 0.00,
602 : .dpte_row_bw = 0.00,
603 : .qual_row_bw = 0.00,
604 : },
605 : {
606 : .desc = "Zeroed Bandwidth with non-zeroed values",
607 : .GPUVM_enable = false,
608 : .source_pixel_format = dm_420_8,
609 : .VRatio = 1000.00,
610 : .DCC_enable = false,
611 : .line_time = 1000.00,
612 : .meta_row_byte_luma = 120,
613 : .meta_row_byte_chroma = 150,
614 : .meta_row_height_luma = 200,
615 : .meta_row_height_chroma = 200,
616 : .pixel_PTE_bytes_per_row_luma = 8,
617 : .pixel_PTE_bytes_per_row_chroma = 8,
618 : .dpte_row_height_luma = 100,
619 : .dpte_row_height_chroma = 100,
620 : .meta_row_bw = 0.00,
621 : .dpte_row_bw = 0.00,
622 : .qual_row_bw = 0.00,
623 : },
624 : {
625 : .desc = "GPUVM enabled and DCC not enabled with 4:2:0 8-bit encoding",
626 : .GPUVM_enable = true,
627 : .source_pixel_format = dm_420_8,
628 : .VRatio = 1000.00,
629 : .DCC_enable = false,
630 : .line_time = 1000.00,
631 : .meta_row_byte_luma = 120,
632 : .meta_row_byte_chroma = 150,
633 : .meta_row_height_luma = 200,
634 : .meta_row_height_chroma = 200,
635 : .pixel_PTE_bytes_per_row_luma = 8,
636 : .pixel_PTE_bytes_per_row_chroma = 8,
637 : .dpte_row_height_luma = 100,
638 : .dpte_row_height_chroma = 100,
639 : .meta_row_bw = 0x0p+0,
640 : .dpte_row_bw = 0x1.eb851eb851eb8p-4,
641 : .qual_row_bw = 0x1.eb851eb851eb8p-4,
642 : },
643 : {
644 : .desc = "GPUVM enabled and DCC not enabled with 4:2:0 10-bit encoding",
645 : .GPUVM_enable = true,
646 : .source_pixel_format = dm_420_10,
647 : .VRatio = 1000.00,
648 : .DCC_enable = false,
649 : .line_time = 1000.00,
650 : .meta_row_byte_luma = 120,
651 : .meta_row_byte_chroma = 150,
652 : .meta_row_height_luma = 200,
653 : .meta_row_height_chroma = 200,
654 : .pixel_PTE_bytes_per_row_luma = 9,
655 : .pixel_PTE_bytes_per_row_chroma = 9,
656 : .dpte_row_height_luma = 230,
657 : .dpte_row_height_chroma = 170,
658 : .meta_row_bw = 0x0p+0,
659 : .dpte_row_bw = 0x1.0cb3a88722f67p-4,
660 : .qual_row_bw = 0x1.0cb3a88722f67p-4,
661 : },
662 : {
663 : .desc = "GPUVM enabled and DCC not enabled with 4:2:0 12-bit encoding",
664 : .GPUVM_enable = true,
665 : .source_pixel_format = dm_420_12,
666 : .VRatio = 100.00,
667 : .DCC_enable = false,
668 : .line_time = 100.00,
669 : .meta_row_byte_luma = 120,
670 : .meta_row_byte_chroma = 150,
671 : .meta_row_height_luma = 200,
672 : .meta_row_height_chroma = 200,
673 : .pixel_PTE_bytes_per_row_luma = 2,
674 : .pixel_PTE_bytes_per_row_chroma = 2,
675 : .dpte_row_height_luma = 10,
676 : .dpte_row_height_chroma = 10,
677 : .meta_row_bw = 0x0p+0,
678 : .dpte_row_bw = 0x1.999999999999ap-3,
679 : .qual_row_bw = 0x0p+0,
680 : },
681 : {
682 : .desc = "GPUVM enabled and DCC not enabled with 4:4:4 16-bit encoding",
683 : .GPUVM_enable = true,
684 : .source_pixel_format = dm_444_16,
685 : .VRatio = 1000.00,
686 : .DCC_enable = false,
687 : .line_time = 1000.00,
688 : .meta_row_byte_luma = 120,
689 : .meta_row_byte_chroma = 150,
690 : .meta_row_height_luma = 200,
691 : .meta_row_height_chroma = 200,
692 : .pixel_PTE_bytes_per_row_luma = 9,
693 : .pixel_PTE_bytes_per_row_chroma = 9,
694 : .dpte_row_height_luma = 230,
695 : .dpte_row_height_chroma = 170,
696 : .meta_row_bw = 0x0p+0,
697 : .dpte_row_bw = 0x1.408e78356d141p-5,
698 : .qual_row_bw = 0x0p+0,
699 : },
700 : {
701 : .desc = "GPUVM not enabled and DCC enabled with 4:2:0 8-bit encoding",
702 : .GPUVM_enable = false,
703 : .source_pixel_format = dm_420_8,
704 : .VRatio = 1000.00,
705 : .DCC_enable = true,
706 : .line_time = 1000.00,
707 : .meta_row_byte_luma = 120,
708 : .meta_row_byte_chroma = 150,
709 : .meta_row_height_luma = 200,
710 : .meta_row_height_chroma = 200,
711 : .pixel_PTE_bytes_per_row_luma = 8,
712 : .pixel_PTE_bytes_per_row_chroma = 8,
713 : .dpte_row_height_luma = 100,
714 : .dpte_row_height_chroma = 100,
715 : .meta_row_bw = 0x1.f333333333333p-1,
716 : .dpte_row_bw = 0x0p+0,
717 : .qual_row_bw = 0x1.f333333333333p-1,
718 : },
719 : {
720 : .desc = "GPUVM not enabled and DCC enabled with 4:2:0 10-bit encoding",
721 : .GPUVM_enable = false,
722 : .source_pixel_format = dm_420_10,
723 : .VRatio = 700.00,
724 : .DCC_enable = true,
725 : .line_time = 1300.00,
726 : .meta_row_byte_luma = 170,
727 : .meta_row_byte_chroma = 350,
728 : .meta_row_height_luma = 300,
729 : .meta_row_height_chroma = 280,
730 : .pixel_PTE_bytes_per_row_luma = 8,
731 : .pixel_PTE_bytes_per_row_chroma = 8,
732 : .dpte_row_height_luma = 100,
733 : .dpte_row_height_chroma = 100,
734 : .meta_row_bw = 0x1.4888888888889p-1,
735 : .dpte_row_bw = 0x0p+0,
736 : .qual_row_bw = 0x1.4888888888889p-1,
737 : },
738 : {
739 : .desc = "GPUVM not enabled and DCC enabled with 4:2:2 8-bit encoding",
740 : .GPUVM_enable = false,
741 : .source_pixel_format = dm_422_8,
742 : .VRatio = 700.00,
743 : .DCC_enable = true,
744 : .line_time = 1300.00,
745 : .meta_row_byte_luma = 170,
746 : .meta_row_byte_chroma = 350,
747 : .meta_row_height_luma = 300,
748 : .meta_row_height_chroma = 280,
749 : .pixel_PTE_bytes_per_row_luma = 8,
750 : .pixel_PTE_bytes_per_row_chroma = 8,
751 : .dpte_row_height_luma = 100,
752 : .dpte_row_height_chroma = 100,
753 : .meta_row_bw = 0x1.3873873873874p-2,
754 : .dpte_row_bw = 0x0p+0,
755 : .qual_row_bw = 0x0p+0,
756 : },
757 : {
758 : .desc = "GPUVM not enabled and DCC enabled with 4:4:4 8-bit encoding",
759 : .GPUVM_enable = false,
760 : .source_pixel_format = dm_444_8,
761 : .VRatio = 1000.00,
762 : .DCC_enable = true,
763 : .line_time = 2000.00,
764 : .meta_row_byte_luma = 190,
765 : .meta_row_byte_chroma = 333,
766 : .meta_row_height_luma = 200,
767 : .meta_row_height_chroma = 210,
768 : .pixel_PTE_bytes_per_row_luma = 9,
769 : .pixel_PTE_bytes_per_row_chroma = 9,
770 : .dpte_row_height_luma = 230,
771 : .dpte_row_height_chroma = 170,
772 : .meta_row_bw = 0x1.e666666666666p-2,
773 : .dpte_row_bw = 0x0p+0,
774 : .qual_row_bw = 0x0p+0,
775 : },
776 : {
777 : .desc = "GPUVM enabled and DCC enabled with 4:2:0 8-bit encoding",
778 : .GPUVM_enable = true,
779 : .source_pixel_format = dm_420_8,
780 : .VRatio = 1000.00,
781 : .DCC_enable = true,
782 : .line_time = 2000.00,
783 : .meta_row_byte_luma = 120,
784 : .meta_row_byte_chroma = 150,
785 : .meta_row_height_luma = 200,
786 : .meta_row_height_chroma = 200,
787 : .pixel_PTE_bytes_per_row_luma = 8,
788 : .pixel_PTE_bytes_per_row_chroma = 8,
789 : .dpte_row_height_luma = 100,
790 : .dpte_row_height_chroma = 100,
791 : .meta_row_bw = 0x1.f333333333333p-2,
792 : .dpte_row_bw = 0x1.eb851eb851eb8p-5,
793 : .qual_row_bw = 0x1.1851eb851eb85p-1,
794 : },
795 : {
796 : .desc = "GPUVM enabled and DCC enabled with 4:2:0 10-bit encoding",
797 : .GPUVM_enable = true,
798 : .source_pixel_format = dm_420_10,
799 : .VRatio = 7000.00,
800 : .DCC_enable = true,
801 : .line_time = 1300.00,
802 : .meta_row_byte_luma = 170,
803 : .meta_row_byte_chroma = 350,
804 : .meta_row_height_luma = 300,
805 : .meta_row_height_chroma = 280,
806 : .pixel_PTE_bytes_per_row_luma = 8,
807 : .pixel_PTE_bytes_per_row_chroma = 8,
808 : .dpte_row_height_luma = 100,
809 : .dpte_row_height_chroma = 100,
810 : .meta_row_bw = 0x1.9aaaaaaaaaaaap+2,
811 : .dpte_row_bw = 0x1.4ad4ad4ad4ad5p-1,
812 : .qual_row_bw = 0x1.c405405405405p+2,
813 : },
814 : {
815 : .desc = "GPUVM enabled and DCC enabled with 4:4:4 16-bit encoding",
816 : .GPUVM_enable = true,
817 : .source_pixel_format = dm_444_16,
818 : .VRatio = 700.00,
819 : .DCC_enable = true,
820 : .line_time = 1300.00,
821 : .meta_row_byte_luma = 70,
822 : .meta_row_byte_chroma = 550,
823 : .meta_row_height_luma = 310,
824 : .meta_row_height_chroma = 280,
825 : .pixel_PTE_bytes_per_row_luma = 7,
826 : .pixel_PTE_bytes_per_row_chroma = 7,
827 : .dpte_row_height_luma = 190,
828 : .dpte_row_height_chroma = 340,
829 : .meta_row_bw = 0x1.f2065a3416de5p-4,
830 : .dpte_row_bw = 0x1.4506d72a14507p-6,
831 : .qual_row_bw = 0x0p+0,
832 : },
833 : {
834 : .desc = "GPUVM enabled and DCC enabled with 4:4:4 32-bit encoding",
835 : .GPUVM_enable = true,
836 : .source_pixel_format = dm_444_32,
837 : .VRatio = 700.00,
838 : .DCC_enable = true,
839 : .line_time = 1300.00,
840 : .meta_row_byte_luma = 170,
841 : .meta_row_byte_chroma = 350,
842 : .meta_row_height_luma = 300,
843 : .meta_row_height_chroma = 280,
844 : .pixel_PTE_bytes_per_row_luma = 8,
845 : .pixel_PTE_bytes_per_row_chroma = 8,
846 : .dpte_row_height_luma = 100,
847 : .dpte_row_height_chroma = 100,
848 : .meta_row_bw = 0x1.3873873873874p-2,
849 : .dpte_row_bw = 0x1.60e2dafa7c749p-5,
850 : .qual_row_bw = 0x0p+0,
851 : },
852 : };
853 :
854 14 : static void calculate_write_back_delay_test_to_desc(const struct
855 : calculate_write_back_delay_test_case * t, char *desc)
856 : {
857 14 : strcpy(desc, t->desc);
858 14 : }
859 :
860 15 : KUNIT_ARRAY_PARAM(calculate_write_back_delay, calculate_write_back_delay_cases,
861 : calculate_write_back_delay_test_to_desc);
862 :
863 14 : static void calculate_active_row_bandwidth_test_to_desc(const struct
864 : calculate_active_row_bandwidth_test_case * t, char *desc)
865 : {
866 14 : strcpy(desc, t->desc);
867 14 : }
868 :
869 15 : KUNIT_ARRAY_PARAM(calculate_active_row_bandwidth, calculate_active_row_bandwidth_cases,
870 : calculate_active_row_bandwidth_test_to_desc);
871 :
872 : static struct kunit_case display_mode_vba_20_cases[] = {
873 : KUNIT_CASE(dscce_compute_delay_test),
874 : KUNIT_CASE(DSC_compute_delay_test),
875 : KUNIT_CASE(calculate_TWait_test),
876 : KUNIT_CASE_PARAM(calculate_write_back_delay_test, calculate_write_back_delay_gen_params),
877 : KUNIT_CASE_PARAM(calculate_active_row_bandwidth_test,
878 : calculate_active_row_bandwidth_gen_params),
879 : KUNIT_CASE(trunc_to_valid_BPP_test),
880 : { }
881 : };
882 :
883 : static struct kunit_suite display_mode_vba_20_suite = {
884 : .name = "display_mode_vba_20",
885 : .test_cases = display_mode_vba_20_cases,
886 : };
887 :
888 : kunit_test_suite(display_mode_vba_20_suite);
|