diff --git a/media_driver/agnostic/common/renderhal/hal_oca_interface.h b/media_driver/agnostic/common/renderhal/hal_oca_interface.h
index d888e20..7a60750 100644
--- a/media_driver/agnostic/common/renderhal/hal_oca_interface.h
+++ b/media_driver/agnostic/common/renderhal/hal_oca_interface.h
@@ -197,19 +197,6 @@
     //!
     static void DumpVphalParam(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext, void *pVphalDumper);
 
-    //!
-    //! \brief  Add cp parameters to oca log section.
-    //! \param  [in] cmdBuffer
-    //!         Command buffer for current BB.
-    //! \param  [in] mosContext
-    //!         Reference to MOS_CONTEXT.
-    //! \param  [in] pCpDumper
-    //!         Pointer to cp dumper object.
-    //! \return void
-    //!         No return value. Handle all exception inside the function.
-    //!
-    static void DumpCpParam(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext, void *pCpDumper);
-
 private:
     //!
     //! \brief  Error handle function.
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_decode_vp9_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_decode_vp9_g12.cpp
index fd4a308..f792bec 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_decode_vp9_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_decode_vp9_g12.cpp
@@ -1049,19 +1049,11 @@
     bool submitCommand = true;
     if (MOS_VE_SUPPORTED(m_osInterface) && CodecHalDecodeScalabilityIsScalableMode(m_scalabilityState))
     {
-        if (m_osInterface->osCpInterface->IsHMEnabled())
-        {
-            HalOcaInterface::DumpCpParam(scdryCmdBuffer, *m_osInterface->pOsContext, m_osInterface->osCpInterface->GetOcaDumper());
-        }
         submitCommand = CodecHalDecodeScalabilityIsToSubmitCmdBuffer_G12(m_scalabilityState);
         HalOcaInterface::On1stLevelBBEnd(scdryCmdBuffer, *m_osInterface->pOsContext);
     }
     else
     {
-        if (m_osInterface->osCpInterface->IsHMEnabled())
-        {
-            HalOcaInterface::DumpCpParam(primCmdBuffer, *m_osInterface->pOsContext, m_osInterface->osCpInterface->GetOcaDumper());
-        }
         HalOcaInterface::On1stLevelBBEnd(primCmdBuffer, *m_osInterface->pOsContext);
     }
 
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_vdenc_avc_g12.cpp b/media_driver/agnostic/gen12/codec/hal/codechal_vdenc_avc_g12.cpp
index 2920bb4..83811cf 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_vdenc_avc_g12.cpp
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_vdenc_avc_g12.cpp
@@ -737,11 +737,6 @@
 
     CODECHAL_ENCODE_CHK_NULL_RETURN(cmdBuffer);
 
-    if (m_osInterface->osCpInterface->IsHMEnabled())
-    {
-        HalOcaInterface::DumpCpParam(*cmdBuffer, *m_osInterface->pOsContext, m_osInterface->osCpInterface->GetOcaDumper());
-    }
-
     HalOcaInterface::On1stLevelBBEnd(*cmdBuffer, *m_osInterface->pOsContext);
     CODECHAL_ENCODE_CHK_STATUS_RETURN(SetAndPopulateVEHintParams(cmdBuffer));
     CODECHAL_ENCODE_CHK_STATUS_RETURN(m_osInterface->pfnSubmitCommandBuffer(m_osInterface, cmdBuffer, nullRendering));
diff --git a/media_driver/agnostic/gen12/vp/hal/vphal_render_vebox_memdecomp_g12.cpp b/media_driver/agnostic/gen12/vp/hal/vphal_render_vebox_memdecomp_g12.cpp
index 7abf8f1..be479e9 100644
--- a/media_driver/agnostic/gen12/vp/hal/vphal_render_vebox_memdecomp_g12.cpp
+++ b/media_driver/agnostic/gen12/vp/hal/vphal_render_vebox_memdecomp_g12.cpp
@@ -28,7 +28,6 @@
 #include "vphal_render_vebox_memdecomp_g12.h"
 #include "mhw_vebox_hwcmd_g12_X.h"
 #include "mhw_vebox_g12_X.h"
-#include "hal_oca_interface.h"
 
 MediaVeboxDecompStateG12::MediaVeboxDecompStateG12() :
     MediaVeboxDecompState()
@@ -45,8 +44,6 @@
     MHW_MI_FLUSH_DW_PARAMS              flushDwParams;
     uint32_t                            streamID = 0;
     const MHW_VEBOX_HEAP                *veboxHeap = nullptr;
-    MOS_CONTEXT *                       pOsContext     = nullptr;
-    PMHW_MI_MMIOREGISTERS               pMmioRegisters = nullptr;
 
     VPHAL_MEMORY_DECOMP_CHK_NULL_RETURN(surface);
 
@@ -66,9 +63,6 @@
 
     veboxInterface = m_veboxInterface;
 
-    pOsContext     = m_osInterface->pOsContext;
-    pMmioRegisters = m_mhwMiInterface->GetMmioRegisters();
-
     m_osInterface->pfnSetGpuContext(m_osInterface, MOS_GPU_CONTEXT_VEBOX);
 
     // Reset allocation list and house keeping
@@ -92,9 +86,6 @@
     MOS_ZeroMemory(&cmdBuffer, sizeof(MOS_COMMAND_BUFFER));
 
     VPHAL_MEMORY_DECOMP_CHK_STATUS_RETURN(m_osInterface->pfnGetCommandBuffer(m_osInterface, &cmdBuffer, 0));
-
-    HalOcaInterface::On1stLevelBBStart(cmdBuffer, *pOsContext, m_osInterface->CurrentGpuContextHandle, *m_mhwMiInterface, *pMmioRegisters);
-
     VPHAL_MEMORY_DECOMP_CHK_STATUS_RETURN(InitCommandBuffer(&cmdBuffer));
 
     // Prepare Vebox_Surface_State, surface input/and output are the same but the compressed status.
@@ -139,13 +130,6 @@
             &flushDwParams));
     }
 
-    if (m_osInterface->osCpInterface->IsHMEnabled())
-    {
-        HalOcaInterface::DumpCpParam(cmdBuffer, *pOsContext, m_osInterface->osCpInterface->GetOcaDumper());
-    }
-
-    HalOcaInterface::On1stLevelBBEnd(cmdBuffer, *pOsContext);
-
     VPHAL_MEMORY_DECOMP_CHK_STATUS_RETURN(m_mhwMiInterface->AddMiBatchBufferEnd(
         &cmdBuffer,
         nullptr));
diff --git a/media_driver/linux/common/cp/os/mos_os_cp_interface_specific.h b/media_driver/linux/common/cp/os/mos_os_cp_interface_specific.h
index da5f4ab..d9c37c2 100644
--- a/media_driver/linux/common/cp/os/mos_os_cp_interface_specific.h
+++ b/media_driver/linux/common/cp/os/mos_os_cp_interface_specific.h
@@ -194,18 +194,6 @@
         OsStubMessage();
         return MOS_STATUS_UNIMPLEMENTED;
     }
-
-    void *GetOcaDumper()
-    {
-        OsStubMessage();
-        return nullptr;
-    }
-
-    MOS_STATUS CreateOcaDumper()
-    {
-        OsStubMessage();
-        return MOS_STATUS_SUCCESS;
-    }
 };
 
 //!
diff --git a/media_driver/linux/common/renderhal/hal_oca_interface.cpp b/media_driver/linux/common/renderhal/hal_oca_interface.cpp
index d9e6b8c..90e9ec7 100644
--- a/media_driver/linux/common/renderhal/hal_oca_interface.cpp
+++ b/media_driver/linux/common/renderhal/hal_oca_interface.cpp
@@ -213,10 +213,6 @@
 {
 }
 
-void HalOcaInterface::DumpCpParam(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext, void *pCpDumper)
-{
-}
-
 void HalOcaInterface::OnOcaError(MOS_STATUS status, const char *functionName, uint32_t lineNumber)
 {
 }
