xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/ULT/GmmXe_LPGCachePolicyULT.cpp (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2022 Intel Corporation
3*35ffd701SAndroid Build Coastguard Worker 
4*35ffd701SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
5*35ffd701SAndroid Build Coastguard Worker copy of this software and associated documentation files(the "Software"),
6*35ffd701SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation
7*35ffd701SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*35ffd701SAndroid Build Coastguard Worker and / or sell copies of the Software, and to permit persons to whom the
9*35ffd701SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions:
10*35ffd701SAndroid Build Coastguard Worker 
11*35ffd701SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included
12*35ffd701SAndroid Build Coastguard Worker in all copies or substantial portions of the Software.
13*35ffd701SAndroid Build Coastguard Worker 
14*35ffd701SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*35ffd701SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*35ffd701SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*35ffd701SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*35ffd701SAndroid Build Coastguard Worker OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*35ffd701SAndroid Build Coastguard Worker ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*35ffd701SAndroid Build Coastguard Worker OTHER DEALINGS IN THE SOFTWARE.
21*35ffd701SAndroid Build Coastguard Worker ============================================================================*/
22*35ffd701SAndroid Build Coastguard Worker #include "GmmXe_LPGCachePolicyULT.h"
23*35ffd701SAndroid Build Coastguard Worker 
24*35ffd701SAndroid Build Coastguard Worker using namespace std;
25*35ffd701SAndroid Build Coastguard Worker 
26*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
27*35ffd701SAndroid Build Coastguard Worker /// Sets up common environment for Cache Policy fixture tests. this is called once per
28*35ffd701SAndroid Build Coastguard Worker /// test case before executing all tests under resource fixture test case.
29*35ffd701SAndroid Build Coastguard Worker /// It also calls SetupTestCase from CommonULT to initialize global context and others.
30*35ffd701SAndroid Build Coastguard Worker ///
31*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
SetUpTestCase()32*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::SetUpTestCase()
33*35ffd701SAndroid Build Coastguard Worker {
34*35ffd701SAndroid Build Coastguard Worker }
35*35ffd701SAndroid Build Coastguard Worker 
36*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
37*35ffd701SAndroid Build Coastguard Worker /// cleans up once all the tests finish execution.  It also calls TearDownTestCase
38*35ffd701SAndroid Build Coastguard Worker /// from CommonULT to destroy global context and others.
39*35ffd701SAndroid Build Coastguard Worker ///
40*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
TearDownTestCase()41*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::TearDownTestCase()
42*35ffd701SAndroid Build Coastguard Worker {
43*35ffd701SAndroid Build Coastguard Worker }
44*35ffd701SAndroid Build Coastguard Worker 
SetUpXe_LPGVariant(PRODUCT_FAMILY platform)45*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::SetUpXe_LPGVariant(PRODUCT_FAMILY platform)
46*35ffd701SAndroid Build Coastguard Worker {
47*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
48*35ffd701SAndroid Build Coastguard Worker 
49*35ffd701SAndroid Build Coastguard Worker     GfxPlatform.eProductFamily = platform;
50*35ffd701SAndroid Build Coastguard Worker 
51*35ffd701SAndroid Build Coastguard Worker     if (platform == IGFX_LUNARLAKE)
52*35ffd701SAndroid Build Coastguard Worker     {
53*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eRenderCoreFamily = IGFX_XE2_LPG_CORE;
54*35ffd701SAndroid Build Coastguard Worker     }
55*35ffd701SAndroid Build Coastguard Worker     else if (platform >= IGFX_BMG)
56*35ffd701SAndroid Build Coastguard Worker     {
57*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eRenderCoreFamily = IGFX_XE2_HPG_CORE;
58*35ffd701SAndroid Build Coastguard Worker     }
59*35ffd701SAndroid Build Coastguard Worker     else
60*35ffd701SAndroid Build Coastguard Worker     {
61*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eRenderCoreFamily = IGFX_XE_HPG_CORE;
62*35ffd701SAndroid Build Coastguard Worker     }
63*35ffd701SAndroid Build Coastguard Worker 
64*35ffd701SAndroid Build Coastguard Worker     pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO));
65*35ffd701SAndroid Build Coastguard Worker     if(pGfxAdapterInfo)
66*35ffd701SAndroid Build Coastguard Worker     {
67*35ffd701SAndroid Build Coastguard Worker         memset(pGfxAdapterInfo, 0, sizeof(ADAPTER_INFO));
68*35ffd701SAndroid Build Coastguard Worker 
69*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrLinearCCS             = 1; //legacy y =>0 - test both
70*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrStandardMipTailFormat = 1;
71*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrTileY                 = 0;
72*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrLocalMemory           = 0;
73*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrDiscrete              = 0;
74*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrIA32eGfxPTEs          = 1;
75*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrL4Cache               = 1;
76*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrL3TransientDataFlush  = 0;
77*35ffd701SAndroid Build Coastguard Worker 
78*35ffd701SAndroid Build Coastguard Worker         if (platform == IGFX_BMG)
79*35ffd701SAndroid Build Coastguard Worker         {
80*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->SkuTable.FtrLocalMemory = 1;
81*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->SkuTable.FtrDiscrete    = 1;
82*35ffd701SAndroid Build Coastguard Worker         }
83*35ffd701SAndroid Build Coastguard Worker 
84*35ffd701SAndroid Build Coastguard Worker         if (platform >= IGFX_BMG)
85*35ffd701SAndroid Build Coastguard Worker         {
86*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->SkuTable.FtrL3TransientDataFlush = 1;
87*35ffd701SAndroid Build Coastguard Worker 	    pGfxAdapterInfo->WaTable.Wa_14018976079           = 1;
88*35ffd701SAndroid Build Coastguard Worker 	    pGfxAdapterInfo->WaTable.Wa_14018984349           = 1;
89*35ffd701SAndroid Build Coastguard Worker 	}
90*35ffd701SAndroid Build Coastguard Worker 
91*35ffd701SAndroid Build Coastguard Worker         CommonULT::SetUpTestCase();
92*35ffd701SAndroid Build Coastguard Worker     }
93*35ffd701SAndroid Build Coastguard Worker }
94*35ffd701SAndroid Build Coastguard Worker 
TearDownXe_LPGVariant()95*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::TearDownXe_LPGVariant()
96*35ffd701SAndroid Build Coastguard Worker {
97*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
98*35ffd701SAndroid Build Coastguard Worker 
99*35ffd701SAndroid Build Coastguard Worker     CommonULT::TearDownTestCase();
100*35ffd701SAndroid Build Coastguard Worker }
101*35ffd701SAndroid Build Coastguard Worker 
102*35ffd701SAndroid Build Coastguard Worker /***********************XeLPG***********************************/
TEST_F(CTestXe_LPGCachePolicy,TestXe_LPGCachePolicy_FtrL4CacheEnabled)103*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestXe_LPGCachePolicy, TestXe_LPGCachePolicy_FtrL4CacheEnabled)
104*35ffd701SAndroid Build Coastguard Worker {
105*35ffd701SAndroid Build Coastguard Worker     SetUpXe_LPGVariant(IGFX_METEORLAKE);
106*35ffd701SAndroid Build Coastguard Worker     CheckVirtualL3CachePolicy();
107*35ffd701SAndroid Build Coastguard Worker     CheckPAT();
108*35ffd701SAndroid Build Coastguard Worker     TearDownXe_LPGVariant();
109*35ffd701SAndroid Build Coastguard Worker }
110*35ffd701SAndroid Build Coastguard Worker 
111*35ffd701SAndroid Build Coastguard Worker /***********************Xe2_HPG***********************************/
TEST_F(CTestXe_LPGCachePolicy,TestXe2_HPGCachePolicy_FtrL4CacheEnabled)112*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestXe_LPGCachePolicy, TestXe2_HPGCachePolicy_FtrL4CacheEnabled)
113*35ffd701SAndroid Build Coastguard Worker {
114*35ffd701SAndroid Build Coastguard Worker     SetUpXe_LPGVariant(IGFX_BMG);
115*35ffd701SAndroid Build Coastguard Worker     CheckXe2_HPGVirtualL3CachePolicy();
116*35ffd701SAndroid Build Coastguard Worker     CheckPAT(); // Has both L3 and PAT within
117*35ffd701SAndroid Build Coastguard Worker     Check_Xe2_HPG_PATCompressed();
118*35ffd701SAndroid Build Coastguard Worker 
119*35ffd701SAndroid Build Coastguard Worker     TearDownXe_LPGVariant();
120*35ffd701SAndroid Build Coastguard Worker }
TEST_F(CTestXe_LPGCachePolicy,TestXe2_LPGCachePolicy_FtrL4CacheEnabled)121*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestXe_LPGCachePolicy, TestXe2_LPGCachePolicy_FtrL4CacheEnabled)
122*35ffd701SAndroid Build Coastguard Worker {
123*35ffd701SAndroid Build Coastguard Worker     SetUpXe_LPGVariant(IGFX_LUNARLAKE);
124*35ffd701SAndroid Build Coastguard Worker 
125*35ffd701SAndroid Build Coastguard Worker     CheckXe2_HPGVirtualL3CachePolicy();
126*35ffd701SAndroid Build Coastguard Worker     CheckPAT(); // Has both L3 and PAT within
127*35ffd701SAndroid Build Coastguard Worker     Check_Xe2_HPG_PATCompressed();
128*35ffd701SAndroid Build Coastguard Worker 
129*35ffd701SAndroid Build Coastguard Worker     TearDownXe_LPGVariant();
130*35ffd701SAndroid Build Coastguard Worker }
CheckVirtualL3CachePolicy()131*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::CheckVirtualL3CachePolicy()
132*35ffd701SAndroid Build Coastguard Worker {
133*35ffd701SAndroid Build Coastguard Worker     const uint32_t L4_WB_CACHEABLE = 0x0;
134*35ffd701SAndroid Build Coastguard Worker     const uint32_t L4_WT_CACHEABLE = 0x1;
135*35ffd701SAndroid Build Coastguard Worker     const uint32_t L4_UNCACHEABLE  = 0x3;
136*35ffd701SAndroid Build Coastguard Worker 
137*35ffd701SAndroid Build Coastguard Worker     const uint32_t L3_WB_CACHEABLE = 0x3;
138*35ffd701SAndroid Build Coastguard Worker     const uint32_t L3_UNCACHEABLE  = 0x1;
139*35ffd701SAndroid Build Coastguard Worker 
140*35ffd701SAndroid Build Coastguard Worker     for(uint32_t MocsIndex = 0; MocsIndex < GMM_XE_NUM_MOCS_ENTRIES; MocsIndex++)
141*35ffd701SAndroid Build Coastguard Worker     {
142*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_TBL_ELEMENT Mocs = pGmmULTClientContext->GetCachePolicyTlbElement(MocsIndex);
143*35ffd701SAndroid Build Coastguard Worker         //printf("Xe LPG: MocsIndex: %d --> Global Index: [0x%x]\n", MocsIndex, Mocs.LeCC.Xe_LPG.DwordValue);
144*35ffd701SAndroid Build Coastguard Worker         //printf("Xe LPG: MocsIndex: %d --> L3 Index: [0x%x]\n", MocsIndex, Mocs.L3.UshortValue);
145*35ffd701SAndroid Build Coastguard Worker     }
146*35ffd701SAndroid Build Coastguard Worker 
147*35ffd701SAndroid Build Coastguard Worker     // Check Usage MOCS index against MOCS settings
148*35ffd701SAndroid Build Coastguard Worker     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
149*35ffd701SAndroid Build Coastguard Worker     {
150*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
151*35ffd701SAndroid Build Coastguard Worker         uint32_t                AssignedMocsIdx = ClientRequest.MemoryObjectOverride.XE_LPG.Index;
152*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmULTClientContext->GetCachePolicyTlbElement(AssignedMocsIdx);
153*35ffd701SAndroid Build Coastguard Worker         uint32_t                     StartMocsIdx    = 0;
154*35ffd701SAndroid Build Coastguard Worker 
155*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.L3.ESC) << "Usage# " << Usage << ": ESC is non-zero";
156*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.L3.SCC) << "Usage# " << Usage << ": SCC is non-zero";
157*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.L3.Reserved) << "Usage# " << Usage << ": Reserved field is non-zero";
158*35ffd701SAndroid Build Coastguard Worker         // Check if Mocs Index is not greater than GMM_MAX_NUMBER_MOCS_INDEXES
159*35ffd701SAndroid Build Coastguard Worker         EXPECT_GT(GMM_XE_NUM_MOCS_ENTRIES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (16)";
160*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.LeCC.Xe_LPG.Reserved0) << "Usage# " << Usage << ": : Reserved field is non-zero";
161*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.LeCC.Xe_LPG.Reserved1) << "Usage# " << Usage << ": : Reserved field is non-zero";
162*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.LeCC.Xe_LPG.Reserved2) << "Usage# " << Usage << ": : Reserved field is non-zero";
163*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.LeCC.Xe_LPG.Reserved3) << "Usage# " << Usage << ": : Reserved field is non-zero";
164*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(1, Mocs.LeCC.Xe_LPG.igPAT) << "Usage# " << Usage << ": Incorrect igPAT cachebility setting";
165*35ffd701SAndroid Build Coastguard Worker 
166*35ffd701SAndroid Build Coastguard Worker         //printf("Xe LPG: Usage: %d --> Index: [%d]\n", Usage, AssignedMocsIdx);
167*35ffd701SAndroid Build Coastguard Worker 
168*35ffd701SAndroid Build Coastguard Worker         //L3
169*35ffd701SAndroid Build Coastguard Worker         if (ClientRequest.L3CC)
170*35ffd701SAndroid Build Coastguard Worker         {
171*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(L3_WB_CACHEABLE, Mocs.L3.Cacheability) << "Usage# " << Usage << ": Incorrect L3 cachebility setting";
172*35ffd701SAndroid Build Coastguard Worker         }
173*35ffd701SAndroid Build Coastguard Worker         else
174*35ffd701SAndroid Build Coastguard Worker         {
175*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(L3_UNCACHEABLE, Mocs.L3.Cacheability) << "Usage# " << Usage << ": Incorrect L3 cachebility setting";
176*35ffd701SAndroid Build Coastguard Worker         }
177*35ffd701SAndroid Build Coastguard Worker 
178*35ffd701SAndroid Build Coastguard Worker         // L4 cache memory- 0: UC, 1:WB, 2: WT
179*35ffd701SAndroid Build Coastguard Worker         switch(ClientRequest.L4CC)
180*35ffd701SAndroid Build Coastguard Worker         {
181*35ffd701SAndroid Build Coastguard Worker             case 0x1:
182*35ffd701SAndroid Build Coastguard Worker             {
183*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(L4_WB_CACHEABLE, Mocs.LeCC.Xe_LPG.L4CC) << "Usage# " << Usage << ": Incorrect L4CC cachebility setting";
184*35ffd701SAndroid Build Coastguard Worker                 break;
185*35ffd701SAndroid Build Coastguard Worker             }
186*35ffd701SAndroid Build Coastguard Worker             case 0x2:
187*35ffd701SAndroid Build Coastguard Worker             {
188*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(L4_WT_CACHEABLE, Mocs.LeCC.Xe_LPG.L4CC) << "Usage# " << Usage << ": Incorrect L4CC cachebility setting";
189*35ffd701SAndroid Build Coastguard Worker                 break;
190*35ffd701SAndroid Build Coastguard Worker             }
191*35ffd701SAndroid Build Coastguard Worker             default:
192*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(L4_UNCACHEABLE, Mocs.LeCC.Xe_LPG.L4CC) << "Usage# " << Usage << ": Incorrect L4CC cachebility setting";
193*35ffd701SAndroid Build Coastguard Worker         }
194*35ffd701SAndroid Build Coastguard Worker     }
195*35ffd701SAndroid Build Coastguard Worker }
196*35ffd701SAndroid Build Coastguard Worker 
CheckPAT()197*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::CheckPAT()
198*35ffd701SAndroid Build Coastguard Worker {
199*35ffd701SAndroid Build Coastguard Worker 
200*35ffd701SAndroid Build Coastguard Worker     // Check Usage PAT index against PAT settings
201*35ffd701SAndroid Build Coastguard Worker     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
202*35ffd701SAndroid Build Coastguard Worker     {
203*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_ELEMENT ClientRequest = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
204*35ffd701SAndroid Build Coastguard Worker         if(ClientRequest.Initialized == false) // undefined resource in platform
205*35ffd701SAndroid Build Coastguard Worker         {
206*35ffd701SAndroid Build Coastguard Worker             continue;
207*35ffd701SAndroid Build Coastguard Worker         }
208*35ffd701SAndroid Build Coastguard Worker         uint32_t PATIndex = pGmmULTClientContext->CachePolicyGetPATIndex(NULL, (GMM_RESOURCE_USAGE_TYPE)Usage, NULL, false);
209*35ffd701SAndroid Build Coastguard Worker         EXPECT_NE(PATIndex, GMM_PAT_ERROR) << "Usage# " << Usage << ": No matching PAT Index";
210*35ffd701SAndroid Build Coastguard Worker     }
211*35ffd701SAndroid Build Coastguard Worker }
212*35ffd701SAndroid Build Coastguard Worker 
Check_Xe2_HPG_PATCompressed()213*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::Check_Xe2_HPG_PATCompressed()
214*35ffd701SAndroid Build Coastguard Worker {
215*35ffd701SAndroid Build Coastguard Worker     bool CompressionEnReq = true;
216*35ffd701SAndroid Build Coastguard Worker 
217*35ffd701SAndroid Build Coastguard Worker     // Check Usage PAT index against PAT settings
218*35ffd701SAndroid Build Coastguard Worker     for (uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
219*35ffd701SAndroid Build Coastguard Worker     {
220*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_ELEMENT ClientRequest = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
221*35ffd701SAndroid Build Coastguard Worker         CompressionEnReq                       = true;
222*35ffd701SAndroid Build Coastguard Worker         if (ClientRequest.Initialized == false) // undefined resource in platform
223*35ffd701SAndroid Build Coastguard Worker         {
224*35ffd701SAndroid Build Coastguard Worker             continue;
225*35ffd701SAndroid Build Coastguard Worker         }
226*35ffd701SAndroid Build Coastguard Worker         uint32_t PATIndex = pGmmULTClientContext->CachePolicyGetPATIndex(NULL, (GMM_RESOURCE_USAGE_TYPE)Usage, &CompressionEnReq, false);
227*35ffd701SAndroid Build Coastguard Worker         //printf("Xe HPG: Usage: %d --> Compressed PAT Index: [%d], ComEn: [%d]\n", Usage, PATIndex, CompressionEnReq);
228*35ffd701SAndroid Build Coastguard Worker         EXPECT_NE(PATIndex, GMM_PAT_ERROR) << "Usage# " << Usage << ": No matching PAT Index";
229*35ffd701SAndroid Build Coastguard Worker     }
230*35ffd701SAndroid Build Coastguard Worker }
231*35ffd701SAndroid Build Coastguard Worker 
CheckXe2_HPGVirtualL3CachePolicy()232*35ffd701SAndroid Build Coastguard Worker void CTestXe_LPGCachePolicy::CheckXe2_HPGVirtualL3CachePolicy()
233*35ffd701SAndroid Build Coastguard Worker {
234*35ffd701SAndroid Build Coastguard Worker     const uint32_t L4_WB_CACHEABLE = 0x0;
235*35ffd701SAndroid Build Coastguard Worker     const uint32_t L4_WT_CACHEABLE = 0x1;
236*35ffd701SAndroid Build Coastguard Worker     const uint32_t L4_UNCACHEABLE  = 0x3;
237*35ffd701SAndroid Build Coastguard Worker 
238*35ffd701SAndroid Build Coastguard Worker     const uint32_t L3_WB_CACHEABLE = 0x0;
239*35ffd701SAndroid Build Coastguard Worker     const uint32_t L3_XD_CACHEABLE = pGmmULTClientContext->GetSkuTable().FtrL3TransientDataFlush ? 0x1 : 0x0;
240*35ffd701SAndroid Build Coastguard Worker     const uint32_t L3_UNCACHEABLE  = 0x3;
241*35ffd701SAndroid Build Coastguard Worker 
242*35ffd701SAndroid Build Coastguard Worker     // Check Usage MOCS index against MOCS settings
243*35ffd701SAndroid Build Coastguard Worker     for (uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
244*35ffd701SAndroid Build Coastguard Worker     {
245*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
246*35ffd701SAndroid Build Coastguard Worker         uint32_t                     AssignedMocsIdx = ClientRequest.MemoryObjectOverride.XE_HP.Index;
247*35ffd701SAndroid Build Coastguard Worker         GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmULTClientContext->GetCachePolicyTlbElement(AssignedMocsIdx);
248*35ffd701SAndroid Build Coastguard Worker         uint32_t                     StartMocsIdx    = 0;
249*35ffd701SAndroid Build Coastguard Worker 
250*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.L3.PhysicalL3.Reserved) << "Usage# " << Usage << ": Reserved field is non-zero";
251*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.L3.PhysicalL3.Reserved0) << "Usage# " << Usage << ": Reserved field is non-zero";
252*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, Mocs.L3.PhysicalL3.L3CLOS) << "Usage# " << Usage << ": L3CLOS field is non-zero";
253*35ffd701SAndroid Build Coastguard Worker         // Check if Mocs Index is not greater than GMM_MAX_NUMBER_MOCS_INDEXES
254*35ffd701SAndroid Build Coastguard Worker         EXPECT_GT(GMM_XE2_NUM_MOCS_ENTRIES, AssignedMocsIdx) << "Usage# " << Usage << ": MOCS Index greater than MAX allowed (16)";
255*35ffd701SAndroid Build Coastguard Worker 
256*35ffd701SAndroid Build Coastguard Worker         //printf("Xe HPG: Usage: %d --> Index: [%d]\n", Usage, AssignedMocsIdx);
257*35ffd701SAndroid Build Coastguard Worker 
258*35ffd701SAndroid Build Coastguard Worker         if (ClientRequest.IgnorePAT == true)
259*35ffd701SAndroid Build Coastguard Worker         {
260*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(1, Mocs.L3.PhysicalL3.igPAT) << "Usage# " << Usage << ": Incorrect igPAT cachebility setting";
261*35ffd701SAndroid Build Coastguard Worker 
262*35ffd701SAndroid Build Coastguard Worker             // L4  memory cache 0: UC, 1:WB, 2: WT
263*35ffd701SAndroid Build Coastguard Worker             switch (ClientRequest.L4CC)
264*35ffd701SAndroid Build Coastguard Worker             {
265*35ffd701SAndroid Build Coastguard Worker             case 0x1:
266*35ffd701SAndroid Build Coastguard Worker                 {
267*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(L4_WB_CACHEABLE, Mocs.L3.PhysicalL3.L4CC) << "Usage# " << Usage << ": Incorrect L4CC cachebility setting";
268*35ffd701SAndroid Build Coastguard Worker                     break;
269*35ffd701SAndroid Build Coastguard Worker                 }
270*35ffd701SAndroid Build Coastguard Worker             case 0x2:
271*35ffd701SAndroid Build Coastguard Worker                 {
272*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(L4_WT_CACHEABLE, Mocs.L3.PhysicalL3.L4CC) << "Usage# " << Usage << ": Incorrect L4CC cachebility setting";
273*35ffd701SAndroid Build Coastguard Worker                     break;
274*35ffd701SAndroid Build Coastguard Worker                 }
275*35ffd701SAndroid Build Coastguard Worker             default:
276*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(L4_UNCACHEABLE, Mocs.L3.PhysicalL3.L4CC) << "Usage# " << Usage << ": Incorrect L4CC cachebility setting";
277*35ffd701SAndroid Build Coastguard Worker             }
278*35ffd701SAndroid Build Coastguard Worker 
279*35ffd701SAndroid Build Coastguard Worker             // 0:UC, 1:WB  2:WB_T_Display, 3:WB_T_App
280*35ffd701SAndroid Build Coastguard Worker             switch (ClientRequest.L3CC)
281*35ffd701SAndroid Build Coastguard Worker             {
282*35ffd701SAndroid Build Coastguard Worker 
283*35ffd701SAndroid Build Coastguard Worker             case 0x1:
284*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(L3_WB_CACHEABLE, Mocs.L3.PhysicalL3.L3CC) << "Usage# " << Usage << ": Incorrect L3CC cachebility setting";
285*35ffd701SAndroid Build Coastguard Worker                 break;
286*35ffd701SAndroid Build Coastguard Worker             case 0x3:
287*35ffd701SAndroid Build Coastguard Worker                 {
288*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(L3_XD_CACHEABLE, Mocs.L3.PhysicalL3.L3CC) << "Usage# " << Usage << ": Incorrect L3CC cachebility setting";
289*35ffd701SAndroid Build Coastguard Worker                     break;
290*35ffd701SAndroid Build Coastguard Worker                 }
291*35ffd701SAndroid Build Coastguard Worker             default:
292*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(L3_UNCACHEABLE, Mocs.L3.PhysicalL3.L3CC) << "Usage# " << Usage << ": Incorrect L3CC cachebility setting";
293*35ffd701SAndroid Build Coastguard Worker             }
294*35ffd701SAndroid Build Coastguard Worker         }
295*35ffd701SAndroid Build Coastguard Worker         else
296*35ffd701SAndroid Build Coastguard Worker         {
297*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, Mocs.L3.PhysicalL3.igPAT) << "Usage# " << Usage << ": Incorrect igPAT cachebility setting";
298*35ffd701SAndroid Build Coastguard Worker         }
299*35ffd701SAndroid Build Coastguard Worker     }
300*35ffd701SAndroid Build Coastguard Worker }
301