PVC Umembargo (#60)
diff --git a/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp b/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp
index 4b9acce..3cc9f48 100644
--- a/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp
+++ b/Source/GmmLib/CachePolicy/GmmGen12dGPUCachePolicy.cpp
@@ -134,6 +134,7 @@
{
case IGFX_DG1:
case IGFX_XE_HP_SDV:
+ case IGFX_PVC:
StartMocsIdx = 1; // Index 0 is reserved for Error
break;
default:
@@ -147,7 +148,7 @@
CPTblIdx = IsSpecialMOCSUsage((GMM_RESOURCE_USAGE_TYPE)Usage, SpecialMOCS);
}
- // Applicable upto only
+ // Applicable upto Xe_HP only
if(pCachePolicy[Usage].HDCL1 &&
(GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) <= IGFX_XE_HP_SDV))
{
@@ -166,12 +167,18 @@
UsageEle.L3.SCC = (uint16_t)pCachePolicy[Usage].L3_SCC;
}
+ if(GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) == IGFX_PVC)
+ {
+ pCachePolicy[Usage].GlbGo = 0;
+ pCachePolicy[Usage].UcLookup = 0;
+ }
// Go/Lookup
// N/A for SpecialMOCS
- // N/A for DG1, RKL
+ // N/A for DG1, RKL, PVC
// Applicable for IGFX_XE_HP_SDV only
if(!SpecialMOCS &&
- (FROMPRODUCT(XE_HP_SDV)))
+ (FROMPRODUCT(XE_HP_SDV)) &&
+ (GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) != IGFX_PVC))
{
if(pCachePolicy[Usage].L3 == 0)
{
@@ -369,7 +376,20 @@
CurrentMaxSpecialMocsIndex = 63;
}
+ else if (GFX_GET_CURRENT_PRODUCT(pGmmGlobalContext->GetPlatformInfo().Platform) == IGFX_PVC)
+ {
+ //Default MOCS Table
+ for(int index = 0; index < GMM_MAX_NUMBER_MOCS_INDEXES; index++)
+ { // Index ESC SCC L3CC Go LookUp HDCL1
+ GMM_DEFINE_MOCS( index , 0 , 0 , 3 , 0 , 0 , 0 )
+ }
+ // Fixed MOCS Table
+ // Index ESC SCC L3CC Go LookUp HDCL1
+ GMM_DEFINE_MOCS( 1 , 0 , 0 , 1 , 0 , 0 , 0 )
+ GMM_DEFINE_MOCS( 2 , 0 , 0 , 3 , 0 , 0 , 0 )
+ CurrentMaxMocsIndex = 2;
+ }
// clang-format on
diff --git a/Source/GmmLib/GlobalInfo/GmmInfo.cpp b/Source/GmmLib/GlobalInfo/GmmInfo.cpp
index fa4cacf..456a2bd 100644
--- a/Source/GmmLib/GlobalInfo/GmmInfo.cpp
+++ b/Source/GmmLib/GlobalInfo/GmmInfo.cpp
@@ -501,6 +501,11 @@
{
SkuTable.FtrTileY = true;
}
+
+ if(GFX_GET_CURRENT_PRODUCT(this->GetPlatformInfo().Platform) == IGFX_PVC)
+ {
+ SkuTable.Ftr57bGPUAddressing = true;
+ }
}
#ifdef __GMM_KMD__ /*LINK CONTEXT TO GLOBAL*/
diff --git a/Source/GmmLib/Platform/GmmGen12Platform.cpp b/Source/GmmLib/Platform/GmmGen12Platform.cpp
index 419f8b5..c649899 100644
--- a/Source/GmmLib/Platform/GmmGen12Platform.cpp
+++ b/Source/GmmLib/Platform/GmmGen12Platform.cpp
@@ -313,6 +313,11 @@
Data.NoOfBitsSupported = 46;
Data.HighestAcceptablePhysicalAddress = GFX_MASK_LARGE(0, 45);
}
+ else if(GFX_GET_CURRENT_PRODUCT(Data.Platform) == IGFX_PVC)
+ {
+ Data.NoOfBitsSupported = 52;
+ Data.HighestAcceptablePhysicalAddress = GFX_MASK_LARGE(0, 51);
+ }
}
void GmmLib::PlatformInfoGen12::ApplyExtendedTexAlign(uint32_t CCSMode, ALIGNMENT &UnitAlign)
diff --git a/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp b/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp
index 9b2729b..fbafc02 100644
--- a/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.cpp
@@ -176,3 +176,36 @@
}
}
}
+
+void CTestXe_HP_CachePolicy::SetUpPlatformVariant(PRODUCT_FAMILY platform)
+{
+ printf("%s\n", __FUNCTION__);
+ CTestGen12dGPUCachePolicy::SetUpGen12dGPUVariant(platform);
+}
+
+void CTestXe_HP_CachePolicy::TearDownPlatformVariant()
+{
+ printf("%s\n", __FUNCTION__);
+ CTestGen12dGPUCachePolicy::TearDownGen12dGPUVariant();
+}
+
+void CTestXe_HP_CachePolicy::CheckL3CachePolicy()
+{
+ printf("%s\n", __FUNCTION__);
+ CTestGen12dGPUCachePolicy::CheckL3Gen12dGPUCachePolicy();
+}
+
+void CTestXe_HP_CachePolicy::SetUpTestCase()
+{
+}
+
+void CTestXe_HP_CachePolicy::TearDownTestCase()
+{
+}
+
+TEST_F(CTestXe_HP_CachePolicy, Test_PVC_CachePolicy)
+{
+ SetUpPlatformVariant(IGFX_PVC);
+ CheckL3CachePolicy();
+ TearDownPlatformVariant();
+}
diff --git a/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.h b/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.h
index 8d0776e..a26a195 100644
--- a/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.h
+++ b/Source/GmmLib/ULT/GmmGen12dGPUCachePolicyULT.h
@@ -42,4 +42,16 @@
static void SetUpTestCase();
static void TearDownTestCase();
};
+
+class CTestXe_HP_CachePolicy : public CTestGen12dGPUCachePolicy
+{
+protected:
+ virtual void SetUpPlatformVariant(PRODUCT_FAMILY);
+ virtual void TearDownPlatformVariant();
+ virtual void CheckL3CachePolicy();
+
+public:
+ static void SetUpTestCase();
+ static void TearDownTestCase();
+};
#pragma once
diff --git a/Source/GmmLib/inc/External/Common/GmmCommonExt.h b/Source/GmmLib/inc/External/Common/GmmCommonExt.h
index 6c57195..ab38a99 100644
--- a/Source/GmmLib/inc/External/Common/GmmCommonExt.h
+++ b/Source/GmmLib/inc/External/Common/GmmCommonExt.h
@@ -117,6 +117,9 @@
#define GMM_GFX_ADDRESS_CANONIZE(a) (((int64_t)(a) << (64 - 48)) >> (64 - 48)) // TODO(Minor): When GMM adds platform-dependent VA size caps, change from 48.
#define GMM_GFX_ADDRESS_DECANONIZE(a) ((uint64_t)(a) & (((uint64_t) 1 << 48) - 1)) // "
+#define GMM_GFX_PLATFORM_VA_SIZE(pClientContext) (((pClientContext)->GetLibContext()->GetSkuTable().Ftr57bGPUAddressing) ? 57 : 48)
+#define VASize(pCC) GMM_GFX_PLATFORM_VA_SIZE(pCC)
+
#define GMM_BIT_RANGE(endbit, startbit) ((endbit)-(startbit)+1)
#define GMM_BIT(bit) (1)
diff --git a/Source/inc/common/igfxfmid.h b/Source/inc/common/igfxfmid.h
index 603e814..f283caf 100644
--- a/Source/inc/common/igfxfmid.h
+++ b/Source/inc/common/igfxfmid.h
@@ -73,6 +73,7 @@
IGFX_DG1 = 1210,
IGFX_XE_HP_SDV = 1250,
+ IGFX_PVC = 1271,
IGFX_MAX_PRODUCT,
IGFX_GENNEXT = 0x7ffffffe,
@@ -1603,6 +1604,13 @@
#define PCH_DEV_ID_519E 0x519E
#define PCH_DEV_ID_519F 0x519F
+//PVC Device ID
+#define DEV_ID_0BD0 0x0BD0
+#define DEV_ID_0BD5 0x0BD5
+
+// Macro to identify PVC device ID
+#define GFX_IS_XT_CONFIG(d) (d == DEV_ID_0BD5)
+
#define MGM_HAS 0
//#define SDG_HAS 1 //Reserve place for Springdale-G HAS
diff --git a/Source/inc/common/sku_wa.h b/Source/inc/common/sku_wa.h
index c358a43..7db2935 100644
--- a/Source/inc/common/sku_wa.h
+++ b/Source/inc/common/sku_wa.h
@@ -105,7 +105,8 @@
unsigned int FtrDisplayXTiling : 1; // Fallback to Legacy TileX Display, used for Pre-SI platforms.
unsigned int FtrMultiTileArch : 1;
unsigned int FtrDisplayPageTables : 1; // Display Page Tables: 2-Level Page walk for Displayable Frame buffers in GGTT.
- };
+ unsigned int Ftr57bGPUAddressing : 1; // 57b GPUVA support eg: PVC
+ };
struct //_sku_3d