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