LCOV - code coverage report
Current view: top level - drivers/gpu/drm/amd/display/tests/dc/dml/dcn20 - display_mode_vba_20_test.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 180 180 100.0 %
Date: 2022-12-09 01:23:36 Functions: 10 10 100.0 %

          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);

Generated by: LCOV version 1.14