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
