[Encode] Resource driven MOCS refactor for HEVC

Modify HCP MOCS programming to resource driven style.
diff --git a/media_softlet/agnostic/common/hw/vdbox/mhw_vdbox_hcp_impl.h b/media_softlet/agnostic/common/hw/vdbox/mhw_vdbox_hcp_impl.h
index 3f99ece..dd66c74 100644
--- a/media_softlet/agnostic/common/hw/vdbox/mhw_vdbox_hcp_impl.h
+++ b/media_softlet/agnostic/common/hw/vdbox/mhw_vdbox_hcp_impl.h
@@ -56,6 +56,7 @@
 static constexpr uint32_t HCP_DEC_STATUS_REG_OFFSET_INIT                                   = 0x1C2800;
 static constexpr uint32_t HCP_CABAC_STATUS_REG_OFFSET_INIT                                 = 0x1C2804;
 static constexpr uint32_t HCP_FRAME_CRC_REG_OFFSET_INIT                                    = 0x1C2920;
+static constexpr uint32_t MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK                        = 0xFFFFFF81;
 
 template <typename cmd_t>
 class Impl : public Itf, public mhw::Impl
@@ -792,9 +793,6 @@
 
         if (params.presMvObjectBuffer)
         {
-            cmd.HcpIndirectCuObjectObjectMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC].Value;
-
             resourceParams.presResource                      = params.presMvObjectBuffer;
             resourceParams.dwOffset                          = params.dwMvObjectOffset;
             resourceParams.pdwCmd                            = (cmd.DW6_7.Value);
@@ -803,17 +801,20 @@
             resourceParams.bIsWritable                       = false;
             resourceParams.dwUpperBoundLocationOffsetFromCmd = 0;
 
+            InitMocsParams(resourceParams, &cmd.HcpIndirectCuObjectObjectMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpIndirectCuObjectObjectMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpIndirectCuObjectObjectMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_MFX_INDIRECT_MV_OBJECT_CODEC].Value;
         }
 
         if (params.presPakBaseObjectBuffer)
         {
-            cmd.HcpPakBseObjectAddressMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC].Value;
-
             resourceParams.presResource                      = params.presPakBaseObjectBuffer;
             resourceParams.dwOffset                          = params.presPakBaseObjectBuffer->dwResourceOffset;
             resourceParams.pdwCmd                            = (cmd.DW9_10.Value);
@@ -822,19 +823,22 @@
             resourceParams.bIsWritable                       = true;
             resourceParams.dwUpperBoundLocationOffsetFromCmd = 3;
 
+            InitMocsParams(resourceParams, &cmd.HcpPakBseObjectAddressMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
 
+            cmd.HcpPakBseObjectAddressMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpPakBseObjectAddressMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_MFC_INDIRECT_PAKBASE_OBJECT_CODEC].Value;
+
             resourceParams.dwUpperBoundLocationOffsetFromCmd = 0;
         }
 
         if (params.presCompressedHeaderBuffer)
         {
-            cmd.HcpVp9PakCompressedHeaderSyntaxStreaminMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presCompressedHeaderBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DW14_15.Value);
@@ -842,17 +846,20 @@
             resourceParams.dwSize          = params.dwCompressedHeaderSize;
             resourceParams.bIsWritable     = false;
 
+            InitMocsParams(resourceParams, &cmd.HcpVp9PakCompressedHeaderSyntaxStreaminMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpVp9PakCompressedHeaderSyntaxStreaminMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpVp9PakCompressedHeaderSyntaxStreaminMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC].Value;
         }
 
         if (params.presProbabilityCounterBuffer)
         {
-            cmd.HcpVp9PakProbabilityCounterStreamoutMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presProbabilityCounterBuffer;
             resourceParams.dwOffset        = params.dwProbabilityCounterOffset;
             resourceParams.pdwCmd          = (cmd.DW17_18.Value);
@@ -860,17 +867,20 @@
             resourceParams.dwSize          = params.dwProbabilityCounterSize;
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.HcpVp9PakProbabilityCounterStreamoutMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpVp9PakProbabilityCounterStreamoutMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpVp9PakProbabilityCounterStreamoutMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_PROBABILITY_COUNTER_BUFFER_CODEC].Value;
         }
 
         if (params.presProbabilityDeltaBuffer)
         {
-            cmd.HcpVp9PakProbabilityDeltasStreaminMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presProbabilityDeltaBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DW20_21.Value);
@@ -878,17 +888,20 @@
             resourceParams.dwSize          = params.dwProbabilityDeltaSize;
             resourceParams.bIsWritable     = false;
 
+            InitMocsParams(resourceParams, &cmd.HcpVp9PakProbabilityDeltasStreaminMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpVp9PakProbabilityDeltasStreaminMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpVp9PakProbabilityDeltasStreaminMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC].Value;
         }
 
         if (params.presTileRecordBuffer)
         {
-            cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_TILE_RECORD_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presTileRecordBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DW23_24.Value);
@@ -896,16 +909,19 @@
             resourceParams.dwSize          = params.dwTileRecordSize;
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_TILE_RECORD_BUFFER_CODEC].Value;
         }
         else if (params.presPakTileSizeStasBuffer)
         {
-            cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_TILE_SIZE_STAS_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presPakTileSizeStasBuffer;
             resourceParams.dwOffset        = params.dwPakTileSizeRecordOffset;
             resourceParams.pdwCmd          = (cmd.DW23_24.Value);
@@ -913,10 +929,16 @@
             resourceParams.dwSize          = params.dwPakTileSizeStasBufferSize;
             resourceParams.bIsWritable     = WRITE_WA;
 
+            InitMocsParams(resourceParams, &cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpVp9PakTileRecordStreamoutMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_TILE_SIZE_STAS_BUFFER_CODEC].Value;
         }
 
         return MOS_STATUS_SUCCESS;
@@ -1060,7 +1082,6 @@
         resourceParams.HwCommandType = MOS_MFX_PIPE_BUF_ADDR;
 
         //Decoded Picture
-        cmd.DecodedPictureMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC].Value;
         cmd.DecodedPictureMemoryAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = MmcEnabled(params.PreDeblockSurfMmcState) ? 1 : 0;
         cmd.DecodedPictureMemoryAddressAttributes.DW0.CompressionType                    = MmcRcEnabled(params.PreDeblockSurfMmcState) ? 1 : 0;
 
@@ -1072,11 +1093,16 @@
         resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DecodedPicture);
         resourceParams.bIsWritable     = true;
 
+        InitMocsParams(resourceParams, &cmd.DecodedPictureMemoryAddressAttributes.DW0.Value, 1, 6);
+
         MHW_MI_CHK_STATUS(AddResourceToCmd(
             this->m_osItf,
             this->m_currentCmdBuf,
             &resourceParams));
 
+        cmd.DecodedPictureMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+        cmd.DecodedPictureMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRE_DEBLOCKING_CODEC].Value;
+
         // Deblocking Filter Line Buffer
         if (m_hevcDfRowStoreCache.enabled)
         {
@@ -1090,52 +1116,59 @@
         }
         else if (params.presMfdDeblockingFilterRowStoreScratchBuffer != nullptr)
         {
-            cmd.DeblockingFilterLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presMfdDeblockingFilterRowStoreScratchBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DeblockingFilterLineBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockingFilterLineBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.DeblockingFilterLineBufferMemoryAddressAttributes.DW0.Value, 1, 6);
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+            cmd.DeblockingFilterLineBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.DeblockingFilterLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
         }
 
         // Deblocking Filter Tile Line Buffer
         if (params.presDeblockingFilterTileRowStoreScratchBuffer != nullptr)
         {
-            cmd.DeblockingFilterTileLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presDeblockingFilterTileRowStoreScratchBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DeblockingFilterTileLineBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockingFilterTileLineBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.DeblockingFilterTileLineBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.DeblockingFilterTileLineBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.DeblockingFilterTileLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
         }
 
         // Deblocking Filter Tile Column Buffer
         if (params.presDeblockingFilterColumnRowStoreScratchBuffer != nullptr)
         {
-            cmd.DeblockingFilterTileColumnBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presDeblockingFilterColumnRowStoreScratchBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DeblockingFilterTileColumnBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DeblockingFilterTileColumnBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.DeblockingFilterTileColumnBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.DeblockingFilterTileColumnBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.DeblockingFilterTileColumnBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_DEBLOCKINGFILTER_ROWSTORE_SCRATCH_BUFFER_CODEC].Value;
         }
 
         // Metadata Line Buffer
@@ -1151,52 +1184,61 @@
         }
         else if (params.presMetadataLineBuffer != nullptr)
         {
-            cmd.MetadataLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC].Value;
-
             resourceParams.presResource    = params.presMetadataLineBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.MetadataLineBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(MetadataLineBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.MetadataLineBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.MetadataLineBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.MetadataLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC].Value;
         }
 
         // Metadata Tile Line Buffer
         if (params.presMetadataTileLineBuffer != nullptr)
         {
-            cmd.MetadataTileLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC].Value;
-
             resourceParams.presResource    = params.presMetadataTileLineBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.MetadataTileLineBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(MetadataTileLineBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.MetadataTileLineBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.MetadataTileLineBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.MetadataTileLineBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC].Value;
         }
 
         // Metadata Tile Column Buffer
         if (params.presMetadataTileColumnBuffer != nullptr)
         {
-            cmd.MetadataTileColumnBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC].Value;
-
             resourceParams.presResource    = params.presMetadataTileColumnBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.MetadataTileColumnBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(MetadataTileColumnBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.MetadataTileColumnBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.MetadataTileColumnBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.MetadataTileColumnBufferMemoryAddressAttributes.DW0.Value |= m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MD_CODEC].Value;
         }
 
         // SAO Line Buffer
@@ -1207,78 +1249,86 @@
         }
         else if (params.presSaoLineBuffer != nullptr)
         {
-            cmd.SaoLineBufferMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC].Value;
-
             resourceParams.presResource    = params.presSaoLineBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.SaoLineBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SaoLineBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.SaoLineBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.SaoLineBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.SaoLineBufferMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC].Value;
         }
 
         // SAO Tile Line Buffer
         if (params.presSaoTileLineBuffer != nullptr)
         {
-            cmd.SaoTileLineBufferMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC].Value;
-
             resourceParams.presResource    = params.presSaoTileLineBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.SaoTileLineBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SaoTileLineBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.SaoTileLineBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.SaoTileLineBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.SaoTileLineBufferMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC].Value;
         }
 
         // SAO Tile Column Buffer
         if (params.presSaoTileColumnBuffer != nullptr)
         {
-            cmd.SaoTileColumnBufferMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC].Value;
-
             resourceParams.presResource    = params.presSaoTileColumnBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.SaoTileColumnBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SaoTileColumnBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.SaoTileColumnBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.SaoTileColumnBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.SaoTileColumnBufferMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_SAO_CODEC].Value;
         }
 
         // Current Motion Vector Temporal Buffer
         if (params.presCurMvTempBuffer != nullptr)
         {
-            cmd.CurrentMotionVectorTemporalBufferMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MV_CODEC].Value;
-
             resourceParams.presResource    = params.presCurMvTempBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.CurrentMotionVectorTemporalBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(CurrentMotionVectorTemporalBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.CurrentMotionVectorTemporalBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
-        }
 
-        // Only one control DW53 for all references
-        cmd.ReferencePictureBaseAddressMemoryAddressAttributes.DW0.Value |=
-            m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
+            cmd.CurrentMotionVectorTemporalBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.CurrentMotionVectorTemporalBufferMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MV_CODEC].Value;
+        }
 
         bool              firstRefPic = true;
         MOS_MEMCOMP_STATE mmcMode     = MOS_MEMCOMP_DISABLED;
@@ -1322,12 +1372,18 @@
                     gpuContext,
                     false);
 
+                InitMocsParams(resourceParams, &cmd.ReferencePictureBaseAddressMemoryAddressAttributes.DW0.Value, 1, 6);
+
                 MHW_MI_CHK_STATUS(AddResourceToCmd(
                     this->m_osItf,
                     this->m_currentCmdBuf,
                     &resourceParams));
             }
         }
+        // Only one control DW53 for all references
+        cmd.ReferencePictureBaseAddressMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+        cmd.ReferencePictureBaseAddressMemoryAddressAttributes.DW0.Value |=
+            m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_REFERENCE_PICTURE_CODEC].Value;
 
         // Same MMC status for deblock and ref surfaces
         cmd.ReferencePictureBaseAddressMemoryAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = cmd.DecodedPictureMemoryAddressAttributes.DW0.BaseAddressMemoryCompressionEnable;
@@ -1339,8 +1395,6 @@
         // Original Uncompressed Picture Source, Encoder only
         if (params.psRawSurface != nullptr)
         {
-            cmd.OriginalUncompressedPictureSourceMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE].Value;
             cmd.OriginalUncompressedPictureSourceMemoryAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = MmcEnabled(params.RawSurfMmcState) ? 1 : 0;
             cmd.OriginalUncompressedPictureSourceMemoryAddressAttributes.DW0.CompressionType                    = MmcRcEnabled(params.RawSurfMmcState) ? 1 : 0;
 
@@ -1352,85 +1406,101 @@
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(OriginalUncompressedPictureSource);
             resourceParams.bIsWritable     = false;
 
+            InitMocsParams(resourceParams, &cmd.OriginalUncompressedPictureSourceMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.OriginalUncompressedPictureSourceMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.OriginalUncompressedPictureSourceMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_ORIGINAL_UNCOMPRESSED_PICTURE_ENCODE].Value;
         }
 
         // StreamOut Data Destination, Decoder only
         if (params.presStreamOutBuffer != nullptr)
         {
-            cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
-
             resourceParams.presResource    = params.presStreamOutBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.StreamoutDataDestination.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(StreamoutDataDestination);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
         }
 
         // Pak Cu Level Streamout Data
         if (params.presPakCuLevelStreamoutBuffer != nullptr)
         {
-            cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
             resourceParams.presResource    = params.presPakCuLevelStreamoutBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.StreamoutDataDestination.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(StreamoutDataDestination);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.StreamoutDataDestinationMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
         }
 
         // Decoded Picture Status / Error Buffer Base Address
         if (params.presLcuBaseAddressBuffer != nullptr)
         {
-            cmd.DecodedPictureStatusErrorBufferBaseAddressMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC].Value;
-
             resourceParams.presResource    = params.presLcuBaseAddressBuffer;
             resourceParams.dwOffset        = params.dwLcuStreamOutOffset;
             resourceParams.pdwCmd          = (cmd.DecodedPictureStatusErrorBufferBaseAddressOrEncodedSliceSizeStreamoutBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DecodedPictureStatusErrorBufferBaseAddressOrEncodedSliceSizeStreamoutBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.DecodedPictureStatusErrorBufferBaseAddressMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.DecodedPictureStatusErrorBufferBaseAddressMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.DecodedPictureStatusErrorBufferBaseAddressMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_STATUS_ERROR_CODEC].Value;
         }
 
         // LCU ILDB StreamOut Buffer
         if (params.presLcuILDBStreamOutBuffer != nullptr)
         {
-            cmd.LcuIldbStreamoutBufferMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC].Value;
-
             resourceParams.presResource    = params.presLcuILDBStreamOutBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.LcuIldbStreamoutBuffer.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LcuIldbStreamoutBuffer);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.LcuIldbStreamoutBufferMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
-        }
 
-        cmd.CollocatedMotionVectorTemporalBuffer07MemoryAddressAttributes.DW0.Value |=
-            m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MV_CODEC].Value;
+            cmd.LcuIldbStreamoutBufferMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.LcuIldbStreamoutBufferMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_LCU_ILDB_STREAMOUT_CODEC].Value;
+        }
 
         for (uint32_t i = 0; i < CODECHAL_MAX_CUR_NUM_REF_FRAME_HEVC; i++)
         {
@@ -1445,6 +1515,8 @@
 
                 resourceParams.dwSharedMocsOffset = 82 - resourceParams.dwLocationInCmd;  // Common Prodected Data bit is in DW82
 
+                InitMocsParams(resourceParams, &cmd.CollocatedMotionVectorTemporalBuffer07MemoryAddressAttributes.DW0.Value, 1, 6);
+
                 MHW_MI_CHK_STATUS(AddResourceToCmd(
                     this->m_osItf,
                     this->m_currentCmdBuf,
@@ -1452,15 +1524,16 @@
             }
         }
 
+        cmd.CollocatedMotionVectorTemporalBuffer07MemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+        cmd.CollocatedMotionVectorTemporalBuffer07MemoryAddressAttributes.DW0.Value |=
+            m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_HCP_MV_CODEC].Value;
+
         // Reset dwSharedMocsOffset
         resourceParams.dwSharedMocsOffset = 0;
 
         // VP9 Probability Buffer
         if (params.presVp9ProbBuffer != nullptr)
         {
-            cmd.Vp9ProbabilityBufferReadWriteMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presVp9ProbBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.Vp9ProbabilityBufferReadWrite.DW0_1.Value);
@@ -1469,10 +1542,16 @@
 
             resourceParams.dwSharedMocsOffset = 85 - resourceParams.dwLocationInCmd;  // Common Prodected Data bit is in DW88
 
+            InitMocsParams(resourceParams, &cmd.Vp9ProbabilityBufferReadWriteMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.Vp9ProbabilityBufferReadWriteMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.Vp9ProbabilityBufferReadWriteMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_PROBABILITY_BUFFER_CODEC].Value;
         }
 
         // Reset dwSharedMocsOffset
@@ -1481,9 +1560,6 @@
         // VP9 Segment Id Buffer
         if (params.presVp9SegmentIdBuffer != nullptr)
         {
-            cmd.Vp9SegmentIdBufferReadWriteMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presVp9SegmentIdBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DW86_87.Value);
@@ -1492,10 +1568,16 @@
 
             resourceParams.dwSharedMocsOffset = 88 - resourceParams.dwLocationInCmd;  // Common Prodected Data bit is in DW88
 
+            InitMocsParams(resourceParams, &cmd.Vp9SegmentIdBufferReadWriteMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.Vp9SegmentIdBufferReadWriteMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.Vp9SegmentIdBufferReadWriteMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_SEGMENT_ID_BUFFER_CODEC].Value;
         }
 
         // Reset dwSharedMocsOffset
@@ -1509,37 +1591,43 @@
         }
         else if (params.presHvdLineRowStoreBuffer != nullptr)
         {
-            cmd.Vp9HvdLineRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presHvdLineRowStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.Vp9HvdLineRowstoreBufferReadWrite.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(Vp9HvdLineRowstoreBufferReadWrite);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.Vp9HvdLineRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.Vp9HvdLineRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.Vp9HvdLineRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC].Value;
         }
 
         // HVC Tile Row Store Buffer
         if (params.presHvdTileRowStoreBuffer != nullptr)
         {
-            cmd.Vp9HvdTileRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presHvdTileRowStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.Vp9HvdTileRowstoreBufferReadWrite.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(Vp9HvdTileRowstoreBufferReadWrite);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.Vp9HvdTileRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.Vp9HvdTileRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.Vp9HvdTileRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_VP9_HVD_ROWSTORE_BUFFER_CODEC].Value;
         }
 
         // HEVC SAO row store buffer, HSAO
@@ -1550,146 +1638,169 @@
         }
         else if (params.presSaoRowStoreBuffer != nullptr)
         {
-            cmd.SaoRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
-
             resourceParams.presResource    = params.presSaoRowStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.DW95_96.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(DW95_96);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.SaoRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.SaoRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.SaoRowstoreBufferReadWriteMemoryAddressAttributes.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
         }
 
         // Frame Statistics Streamout Data Destination Buffer
         if (params.presFrameStatStreamOutBuffer != nullptr)
         {
-            cmd.FrameStatisticsStreamoutDataDestinationBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
-
             resourceParams.presResource = params.presFrameStatStreamOutBuffer;
             resourceParams.dwOffset     = params.dwFrameStatStreamOutOffset;
-            ;
             resourceParams.pdwCmd          = (cmd.FrameStatisticsStreamoutDataDestinationBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(FrameStatisticsStreamoutDataDestinationBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.FrameStatisticsStreamoutDataDestinationBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.FrameStatisticsStreamoutDataDestinationBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.FrameStatisticsStreamoutDataDestinationBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_STREAMOUT_DATA_CODEC].Value;
         }
 
         // SSE Source Pixel Row Store Buffer
         if (params.presSseSrcPixelRowStoreBuffer != nullptr)
         {
-            cmd.SseSourcePixelRowstoreBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presSseSrcPixelRowStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.SseSourcePixelRowstoreBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(SseSourcePixelRowstoreBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.SseSourcePixelRowstoreBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.SseSourcePixelRowstoreBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.SseSourcePixelRowstoreBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_SSE_SRC_PIXEL_ROW_STORE_BUFFER_CODEC].Value;
         }
 
         // Slice state stream out buffer
         if (params.presSliceStateStreamOutBuffer != nullptr)
         {
-            cmd.HcpScalabilitySliceStateBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presSliceStateStreamOutBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.HcpScalabilitySliceStateBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(HcpScalabilitySliceStateBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.HcpScalabilitySliceStateBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpScalabilitySliceStateBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpScalabilitySliceStateBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_SLICE_STATE_STREAM_OUT_BUFFER_CODEC].Value;
         }
 
         // CABAC Syntax stream out buffer
         if (params.presCABACSyntaxStreamOutBuffer != nullptr)
         {
-            cmd.HcpScalabilityCabacDecodedSyntaxElementsBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presCABACSyntaxStreamOutBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.HcpScalabilityCabacDecodedSyntaxElementsBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(HcpScalabilityCabacDecodedSyntaxElementsBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.HcpScalabilityCabacDecodedSyntaxElementsBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.HcpScalabilityCabacDecodedSyntaxElementsBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.HcpScalabilityCabacDecodedSyntaxElementsBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_CABAC_SYNTAX_STREAM_OUT_BUFFER_CODEC].Value;
         }
 
         // MV Upper Right Col Store
         if (params.presMvUpRightColStoreBuffer != nullptr)
         {
-            cmd.MotionVectorUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presMvUpRightColStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.MotionVectorUpperRightColumnStoreBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(MotionVectorUpperRightColumnStoreBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.MotionVectorUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.MotionVectorUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.MotionVectorUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC].Value;
         }
 
         // IntraPred Upper Right Col Store
         if (params.presIntraPredUpRightColStoreBuffer != nullptr)
         {
-            cmd.IntraPredictionUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presIntraPredUpRightColStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.IntraPredictionUpperRightColumnStoreBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(IntraPredictionUpperRightColumnStoreBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.IntraPredictionUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.IntraPredictionUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.IntraPredictionUpperRightColumnStoreBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC].Value;
         }
 
         // IntraPred Left Recon Col Store
         if (params.presIntraPredLeftReconColStoreBuffer != nullptr)
         {
-            cmd.IntraPredictionLeftReconColumnStoreBufferAttributesReadWrite.DW0.Value |=
-                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC].Value;
-
             resourceParams.presResource    = params.presIntraPredLeftReconColStoreBuffer;
             resourceParams.dwOffset        = 0;
             resourceParams.pdwCmd          = (cmd.IntraPredictionLeftReconColumnStoreBufferBaseAddress.DW0_1.Value);
             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(IntraPredictionLeftReconColumnStoreBufferBaseAddress);
             resourceParams.bIsWritable     = true;
 
+            InitMocsParams(resourceParams, &cmd.IntraPredictionLeftReconColumnStoreBufferAttributesReadWrite.DW0.Value, 1, 6);
+
             MHW_MI_CHK_STATUS(AddResourceToCmd(
                 this->m_osItf,
                 this->m_currentCmdBuf,
                 &resourceParams));
+
+            cmd.IntraPredictionLeftReconColumnStoreBufferAttributesReadWrite.DW0.Value &= MEMORY_ADDRESS_ATTRIBUTES_MOCS_CLEAN_MASK;
+            cmd.IntraPredictionLeftReconColumnStoreBufferAttributesReadWrite.DW0.Value |=
+                m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_PRED_COL_STORE_BUFFER_CODEC].Value;
         }
 
         // CABAC Syntax Stream Out Buffer Max Address