From 309918ee028bb62329df49e40f6c9ef0455c5fe5 Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Sun, 26 Dec 2021 17:45:56 +0100 Subject: [PATCH] package/intel-mediadriver: backport upstream patch This patch fixing the gmmlib-related build error was committed after the latest version bump. Backport it to really fix the build error. Fixes: http://autobuild.buildroot.net/results/3ac/3acb385c73d761be6964640e98759cd4f6871691/ Signed-off-by: Bernd Kuhls Signed-off-by: Thomas Petazzoni --- ...-GMM-Multi-Adapter-Interface-Changes.patch | 500 ++++++++++++++++++ 1 file changed, 500 insertions(+) create mode 100644 package/intel-mediadriver/0002-GMM-Multi-Adapter-Interface-Changes.patch diff --git a/package/intel-mediadriver/0002-GMM-Multi-Adapter-Interface-Changes.patch b/package/intel-mediadriver/0002-GMM-Multi-Adapter-Interface-Changes.patch new file mode 100644 index 0000000000..6544724a20 --- /dev/null +++ b/package/intel-mediadriver/0002-GMM-Multi-Adapter-Interface-Changes.patch @@ -0,0 +1,500 @@ +From 42ffd7983a32b75cf8403c235d8d0f727191390c Mon Sep 17 00:00:00 2001 +From: kankanzh +Date: Mon, 29 Nov 2021 14:16:42 +0800 +Subject: [PATCH] [Media Common] GMM Multi-Adapter Interface Changes + +* [Media Common] GMM Multi-Adapter Interface Changes + +Gmm change interface to support Multi-Adapter, media UMD need change the corresponding interface. + +Downloaded from upstream commit +https://github.com/intel/media-driver/commit/42ffd7983a32b75cf8403c235d8d0f727191390c + +Signed-off-by: Bernd Kuhls +--- + .../linux/common/os/media_skuwa_specific.h | 1 + + .../linux/common/os/mos_os_specific.h | 1 - + media_driver/linux/common/ddi/media_libva.cpp | 70 +++++++++++-------- + .../linux/common/ddi/media_libva_common.h | 2 - + .../linux/common/os/linux_shadow_skuwa.h | 1 + + .../linux/common/os/mos_auxtable_mgr.cpp | 21 ++---- + .../linux/common/os/mos_auxtable_mgr.h | 4 +- + .../linux/common/os/mos_interface.cpp | 31 +++++--- + .../linux/common/os/mos_os_specific.c | 14 +--- + media_driver/media_top_cmake.cmake | 2 +- + .../agnostic/common/os/mos_interface.h | 16 +++++ + .../common/os/mos_context_specific_next.cpp | 59 ++++++++-------- + 12 files changed, 118 insertions(+), 104 deletions(-) + +diff --git a/media_common/linux/common/os/media_skuwa_specific.h b/media_common/linux/common/os/media_skuwa_specific.h +index 7f8f4fe317..7c046bc44c 100644 +--- a/media_common/linux/common/os/media_skuwa_specific.h ++++ b/media_common/linux/common/os/media_skuwa_specific.h +@@ -40,5 +40,6 @@ using MEDIA_ENGINE_INFO = MEDIA_GT_SYSTEM_INFO; + using GMM_SKU_FEATURE_TABLE = SHADOW_MEDIA_FEATURE_TABLE; + using GMM_WA_TABLE = SHADOW_MEDIA_WA_TABLE; + using GMM_GT_SYSTEM_INFO = MEDIA_GT_SYSTEM_INFO; ++using GMM_ADAPTER_BDF = MEDIA_ADAPTER_BDF; + + #endif // __MEDIA_SKUWA_H__ +diff --git a/media_common/linux/common/os/mos_os_specific.h b/media_common/linux/common/os/mos_os_specific.h +index 3c33196447..ce881c0912 100644 +--- a/media_common/linux/common/os/mos_os_specific.h ++++ b/media_common/linux/common/os/mos_os_specific.h +@@ -582,7 +582,6 @@ struct _MOS_OS_CONTEXT + void *pLibdrmHandle; + + GMM_CLIENT_CONTEXT *pGmmClientContext; //UMD specific ClientContext object in GMM +- GmmExportEntries GmmFuncs; + AuxTableMgr *m_auxTableMgr; + + // GPU Status Buffer +diff --git a/media_driver/linux/common/ddi/media_libva.cpp b/media_driver/linux/common/ddi/media_libva.cpp +index 36f5f1889d..6202af5f2d 100755 +--- a/media_driver/linux/common/ddi/media_libva.cpp ++++ b/media_driver/linux/common/ddi/media_libva.cpp +@@ -1857,6 +1857,9 @@ VAStatus DdiMedia_InitMediaContext ( + GMM_GT_SYSTEM_INFO gmmGtInfo; + memset(&gmmGtInfo, 0, sizeof(gmmGtInfo)); + ++ GMM_ADAPTER_BDF gmmAdapterBDF; ++ memset(&gmmAdapterBDF, 0, sizeof(gmmAdapterBDF)); ++ + eStatus = HWInfo_GetGmmInfo(mediaCtx->fd, &gmmSkuTable, &gmmWaTable, &gmmGtInfo); + if (MOS_STATUS_SUCCESS != eStatus) + { +@@ -1881,32 +1884,50 @@ VAStatus DdiMedia_InitMediaContext ( + return VA_STATUS_ERROR_OPERATION_FAILED; + } + +- GMM_STATUS gmmStatus = OpenGmm(&mediaCtx->GmmFuncs); +- if (gmmStatus != GMM_SUCCESS) ++ // fill in the mos context struct as input to initialize m_osContext ++ MOS_CONTEXT mosCtx = {}; ++ mosCtx.bufmgr = mediaCtx->pDrmBufMgr; ++ mosCtx.fd = mediaCtx->fd; ++ mosCtx.iDeviceId = mediaCtx->iDeviceId; ++ mosCtx.SkuTable = mediaCtx->SkuTable; ++ mosCtx.WaTable = mediaCtx->WaTable; ++ mosCtx.gtSystemInfo = *mediaCtx->pGtSystemInfo; ++ mosCtx.platform = mediaCtx->platform; ++ mosCtx.ppMediaMemDecompState = &mediaCtx->pMediaMemDecompState; ++ mosCtx.pfnMemoryDecompress = mediaCtx->pfnMemoryDecompress; ++ mosCtx.pfnMediaMemoryCopy = mediaCtx->pfnMediaMemoryCopy; ++ mosCtx.pfnMediaMemoryCopy2D = mediaCtx->pfnMediaMemoryCopy2D; ++ mosCtx.ppMediaCopyState = &mediaCtx->pMediaCopyState; ++ ++ eStatus = MosInterface::GetAdapterBDF(&mosCtx, &gmmAdapterBDF); ++ if (MOS_STATUS_SUCCESS != eStatus) + { +- DDI_ASSERTMESSAGE("gmm init failed."); ++ DDI_ASSERTMESSAGE("Fatal error - unsuccesfull Gmm Adapter BDF initialization"); + FreeForMediaContext(mediaCtx); + return VA_STATUS_ERROR_OPERATION_FAILED; + } + +- // init GMM context +- gmmStatus = mediaCtx->GmmFuncs.pfnCreateSingletonContext(mediaCtx->platform, +- &gmmSkuTable, +- &gmmWaTable, +- &gmmGtInfo); +- +- if (gmmStatus != GMM_SUCCESS) ++ // Initialize Gmm context ++ GMM_INIT_IN_ARGS gmmInitAgrs = {}; ++ GMM_INIT_OUT_ARGS gmmOutArgs = {}; ++ gmmInitAgrs.Platform = mediaCtx->platform; ++ gmmInitAgrs.pSkuTable = &gmmSkuTable; ++ gmmInitAgrs.pWaTable = &gmmWaTable; ++ gmmInitAgrs.pGtSysInfo = &gmmGtInfo; ++ gmmInitAgrs.FileDescriptor = gmmAdapterBDF.Data; ++ gmmInitAgrs.ClientType = (GMM_CLIENT)GMM_LIBVA_LINUX; ++ ++ GMM_STATUS status = InitializeGmm(&gmmInitAgrs, &gmmOutArgs); ++ if (status != GMM_SUCCESS) + { +- DDI_ASSERTMESSAGE("gmm init failed."); ++ DDI_ASSERTMESSAGE("InitializeGmm fail."); + FreeForMediaContext(mediaCtx); + return VA_STATUS_ERROR_OPERATION_FAILED; + } +- +- // Create GMM Client Context +- mediaCtx->pGmmClientContext = mediaCtx->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); ++ mediaCtx->pGmmClientContext = gmmOutArgs.pGmmClientContext; + + // Create GMM page table manager +- mediaCtx->m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(mediaCtx->pDrmBufMgr, &mediaCtx->SkuTable); ++ mediaCtx->m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(mediaCtx->pDrmBufMgr, &mediaCtx->SkuTable, mediaCtx->pGmmClientContext); + + MOS_USER_FEATURE_VALUE_DATA UserFeatureData; + MOS_ZeroMemory(&UserFeatureData, sizeof(UserFeatureData)); +@@ -1929,19 +1950,6 @@ VAStatus DdiMedia_InitMediaContext ( + return VA_STATUS_ERROR_OPERATION_FAILED; + } + +- // fill in the mos context struct as input to initialize m_osContext +- mosCtx.bufmgr = mediaCtx->pDrmBufMgr; +- mosCtx.fd = mediaCtx->fd; +- mosCtx.iDeviceId = mediaCtx->iDeviceId; +- mosCtx.SkuTable = mediaCtx->SkuTable; +- mosCtx.WaTable = mediaCtx->WaTable; +- mosCtx.gtSystemInfo = *mediaCtx->pGtSystemInfo; +- mosCtx.platform = mediaCtx->platform; +- mosCtx.ppMediaMemDecompState = &mediaCtx->pMediaMemDecompState; +- mosCtx.pfnMemoryDecompress = mediaCtx->pfnMemoryDecompress; +- mosCtx.pfnMediaMemoryCopy = mediaCtx->pfnMediaMemoryCopy; +- mosCtx.pfnMediaMemoryCopy2D = mediaCtx->pfnMediaMemoryCopy2D; +- mosCtx.ppMediaCopyState = &mediaCtx->pMediaCopyState; + mosCtx.m_auxTableMgr = mediaCtx->m_auxTableMgr; + mosCtx.pGmmClientContext = mediaCtx->pGmmClientContext; + +@@ -2262,8 +2270,10 @@ VAStatus DdiMedia_Terminate ( + // Destroy memory allocated to store Media System Info + MOS_FreeMemory(mediaCtx->pGtSystemInfo); + // Free GMM memory. +- mediaCtx->GmmFuncs.pfnDeleteClientContext(mediaCtx->pGmmClientContext); +- mediaCtx->GmmFuncs.pfnDestroySingletonContext(); ++ GMM_INIT_OUT_ARGS gmmOutArgs = {}; ++ gmmOutArgs.pGmmClientContext = mediaCtx->pGmmClientContext; ++ GmmAdapterDestroy(&gmmOutArgs); ++ mediaCtx->pGmmClientContext = nullptr; + MosUtilities::MosUtilitiesClose(nullptr); + } + +diff --git a/media_driver/linux/common/ddi/media_libva_common.h b/media_driver/linux/common/ddi/media_libva_common.h +index e967d49f5a..74ce820346 100644 +--- a/media_driver/linux/common/ddi/media_libva_common.h ++++ b/media_driver/linux/common/ddi/media_libva_common.h +@@ -536,8 +536,6 @@ struct DDI_MEDIA_CONTEXT + + GMM_CLIENT_CONTEXT *pGmmClientContext; + +- GmmExportEntries GmmFuncs; +- + // Aux Table Manager + AuxTableMgr *m_auxTableMgr; + +diff --git a/media_driver/linux/common/os/linux_shadow_skuwa.h b/media_driver/linux/common/os/linux_shadow_skuwa.h +index 529fa05a1b..30321c9563 100644 +--- a/media_driver/linux/common/os/linux_shadow_skuwa.h ++++ b/media_driver/linux/common/os/linux_shadow_skuwa.h +@@ -33,5 +33,6 @@ + using SHADOW_MEDIA_FEATURE_TABLE = SKU_FEATURE_TABLE; + using SHADOW_MEDIA_WA_TABLE = WA_TABLE; + using MEDIA_GT_SYSTEM_INFO = GT_SYSTEM_INFO; ++using MEDIA_ADAPTER_BDF = ADAPTER_BDF; + + #endif //__SKU_WA_H__ +diff --git a/media_driver/linux/common/os/mos_auxtable_mgr.cpp b/media_driver/linux/common/os/mos_auxtable_mgr.cpp +index fdab2b4c07..292dde020a 100644 +--- a/media_driver/linux/common/os/mos_auxtable_mgr.cpp ++++ b/media_driver/linux/common/os/mos_auxtable_mgr.cpp +@@ -118,19 +118,13 @@ static void WaitFromCpuCb(void *bo) + } + } + +-AuxTableMgr::AuxTableMgr(MOS_BUFMGR *bufMgr) ++AuxTableMgr::AuxTableMgr(MOS_BUFMGR *bufMgr, GMM_CLIENT_CONTEXT *gmmClientContext) + { + if (bufMgr) + { + GMM_DEVICE_CALLBACKS_INT deviceCb = {0}; + +- GmmExportEntries GmmFuncs; +- GMM_STATUS gmmStatus = OpenGmm(&GmmFuncs); +- if(gmmStatus != GMM_SUCCESS) +- { +- MOS_OS_ASSERTMESSAGE("gmm init failed."); +- } +- m_gmmClientContext = GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); ++ m_gmmClientContext = gmmClientContext; + if (m_gmmClientContext == nullptr) + { + MOS_OS_ASSERTMESSAGE(" nullptr returned by GmmCreateClientContext"); +@@ -160,22 +154,15 @@ AuxTableMgr::~AuxTableMgr() + } + if (m_gmmClientContext != nullptr) + { +- GmmExportEntries GmmFuncs; +- GMM_STATUS gmmStatus = OpenGmm(&GmmFuncs); +- if(gmmStatus != GMM_SUCCESS) +- { +- MOS_OS_ASSERTMESSAGE("gmm init failed."); +- } +- GmmFuncs.pfnDeleteClientContext((GMM_CLIENT_CONTEXT *)m_gmmClientContext); + m_gmmClientContext = nullptr; + } + } + +-AuxTableMgr * AuxTableMgr::CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku) ++AuxTableMgr * AuxTableMgr::CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku, GMM_CLIENT_CONTEXT *gmmClientContext) + { + if (MEDIA_IS_SKU(sku, FtrE2ECompression) && !MEDIA_IS_SKU(sku, FtrFlatPhysCCS)) + { +- AuxTableMgr *auxTableMgr = MOS_New(AuxTableMgr, bufMgr); ++ AuxTableMgr *auxTableMgr = MOS_New(AuxTableMgr, bufMgr, gmmClientContext); + if (auxTableMgr == nullptr) + { + MOS_OS_ASSERTMESSAGE(" nullptr returned by creating AuxTableMgr"); +diff --git a/media_driver/linux/common/os/mos_auxtable_mgr.h b/media_driver/linux/common/os/mos_auxtable_mgr.h +index 8fbf59da91..421d2293d6 100644 +--- a/media_driver/linux/common/os/mos_auxtable_mgr.h ++++ b/media_driver/linux/common/os/mos_auxtable_mgr.h +@@ -43,7 +43,7 @@ class AuxTableMgr + //! + //! \brief Constructor + //! +- AuxTableMgr(MOS_BUFMGR *bufMgr); ++ AuxTableMgr(MOS_BUFMGR *bufMgr, GMM_CLIENT_CONTEXT *gmmClientContext); + + //! + //! \brief Destructor +@@ -62,7 +62,7 @@ class AuxTableMgr + //! \return Object pointer to AuxTableMgr + //! Return object pointer if success or return nullptr if failed + //! +- static AuxTableMgr * CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku); ++ static AuxTableMgr * CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku, GMM_CLIENT_CONTEXT *gmmClientContext); + + //! + //! \brief Map resource to aux table +diff --git a/media_driver/linux/common/os/mos_interface.cpp b/media_driver/linux/common/os/mos_interface.cpp +index 3b841bd586..caf4916ba9 100644 +--- a/media_driver/linux/common/os/mos_interface.cpp ++++ b/media_driver/linux/common/os/mos_interface.cpp +@@ -367,17 +367,9 @@ MOS_STATUS MosInterface::InitStreamParameters( + context->m_osDeviceContext = streamState->osDeviceContext; + context->bSimIsActive = streamState->simIsActive; + +- if (GMM_SUCCESS != OpenGmm(&context->GmmFuncs)) +- { +- MOS_FreeMemAndSetNull(context); +- +- MOS_OS_ASSERTMESSAGE("Unable to open gmm"); +- return MOS_STATUS_INVALID_PARAMETER; +- } +- + streamState->perStreamParameters = (OS_PER_STREAM_PARAMETERS)context; + +- context->pGmmClientContext = context->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); ++ context->pGmmClientContext = streamState->osDeviceContext->GetGmmClientContext();; + + context->bufmgr = bufMgr; + context->m_gpuContextMgr = osDeviceContext->GetGpuContextMgr(); +@@ -608,6 +600,27 @@ MOS_STATUS MosInterface::CreateGpuContext( + return MOS_STATUS_SUCCESS; + } + ++MOS_STATUS MosInterface::GetAdapterBDF(PMOS_CONTEXT mosCtx, ADAPTER_BDF *adapterBDF) ++{ ++ MOS_OS_FUNCTION_ENTER; ++ ++ drmDevicePtr device; ++ ++ MOS_OS_CHK_NULL_RETURN(mosCtx); ++ if (drmGetDevice(mosCtx->fd, &device) == 0) ++ { ++ adapterBDF->Bus = device->businfo.pci->bus; ++ adapterBDF->Device = device->businfo.pci->dev; ++ adapterBDF->Function = device->businfo.pci->func; ++ } ++ else ++ { ++ adapterBDF->Data = 0; ++ } ++ ++ return MOS_STATUS_SUCCESS; ++} ++ + MOS_STATUS MosInterface::DestroyGpuContext( + MOS_STREAM_HANDLE streamState, + GPU_CONTEXT_HANDLE gpuContext) +diff --git a/media_driver/linux/common/os/mos_os_specific.c b/media_driver/linux/common/os/mos_os_specific.c +index 7b7f57747b..e433c6fe61 100644 +--- a/media_driver/linux/common/os/mos_os_specific.c ++++ b/media_driver/linux/common/os/mos_os_specific.c +@@ -1190,8 +1190,6 @@ void Linux_Destroy( + mos_gem_context_destroy(pOsContext->intel_context); + } + +- pOsContext->GmmFuncs.pfnDeleteClientContext(pOsContext->pGmmClientContext); +- + MOS_FreeMemAndSetNull(pOsContext); + } + +@@ -1931,7 +1929,6 @@ MOS_STATUS Mos_DestroyInterface(PMOS_INTERFACE pOsInterface) + mos_gem_context_destroy(perStreamParameters->intel_context); + perStreamParameters->intel_context = nullptr; + } +- perStreamParameters->GmmFuncs.pfnDeleteClientContext(perStreamParameters->pGmmClientContext); + MOS_FreeMemAndSetNull(perStreamParameters); + streamState->perStreamParameters = nullptr; + } +@@ -7476,13 +7473,6 @@ MOS_STATUS Mos_Specific_InitInterface( + // Create Linux OS Context + pOsContext = (PMOS_OS_CONTEXT)MOS_AllocAndZeroMemory(sizeof(MOS_OS_CONTEXT)); + MOS_OS_CHK_NULL_RETURN(pOsContext); +- +- if (GMM_SUCCESS != OpenGmm(&pOsContext->GmmFuncs)) +- { +- MOS_OS_ASSERTMESSAGE("Unable to open gmm"); +- eStatus = MOS_STATUS_INVALID_PARAMETER; +- goto finish; +- } + } + + if (pOsInterface->modulizedMosEnabled && !Mos_Solo_IsEnabled(nullptr)) +@@ -7513,12 +7503,12 @@ MOS_STATUS Mos_Specific_InitInterface( + { + OsContextSpecific *pOsContextSpecific = static_cast(pOsInterface->osContextPtr); + pOsContext->intel_context = pOsContextSpecific->GetDrmContext(); +- pOsContext->pGmmClientContext = pOsContext->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); ++ pOsContext->pGmmClientContext = pOsDriverContext->pGmmClientContext; + } + } + else + { +- pOsContext->pGmmClientContext = pOsContext->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); ++ pOsContext->pGmmClientContext = pOsDriverContext->pGmmClientContext; + } + + MOS_ZeroMemory(&UserFeatureData, sizeof(UserFeatureData)); +diff --git a/media_driver/media_top_cmake.cmake b/media_driver/media_top_cmake.cmake +index d0d8cb5244..426728e16d 100755 +--- a/media_driver/media_top_cmake.cmake ++++ b/media_driver/media_top_cmake.cmake +@@ -142,7 +142,7 @@ if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "") + endif() + + target_compile_options( ${LIB_NAME} PUBLIC ${LIBGMM_CFLAGS_OTHER}) +- target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES}) ++ target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES} drm) + + include(${MEDIA_EXT_CMAKE}/ext/media_feature_include_ext.cmake OPTIONAL) + +diff --git a/media_softlet/agnostic/common/os/mos_interface.h b/media_softlet/agnostic/common/os/mos_interface.h +index 42e4acc6f6..6ae60d8e49 100644 +--- a/media_softlet/agnostic/common/os/mos_interface.h ++++ b/media_softlet/agnostic/common/os/mos_interface.h +@@ -1815,6 +1815,22 @@ class MosInterface + COMMAND_BUFFER_HANDLE cmdBuf, + MOS_SUBMISSION_TYPE type); + ++ //! ++ //! \brief Get Adapter BDF ++ //! \details [System info Interface] Get Adapter BDF ++ //! \details Caller: DDI & HAL ++ //! \details This func is called to differentiate the behavior according to Adapter BDF. ++ //! ++ //! \param [in] mosCtx ++ //! Pointer of Mos context ++ //! \param [out] adapterBDF ++ //! Adapter BDF info ++ //! ++ //! \return MOS_STATUS ++ //! MOS_STATUS_SUCCESS if success, else fail reason ++ //! ++ static MOS_STATUS GetAdapterBDF(PMOS_CONTEXT mosCtx, ADAPTER_BDF *adapterBDF); ++ + #if _DEBUG || _RELEASE_INTERNAL + //! + //! \brief Get engine count +diff --git a/media_softlet/linux/common/os/mos_context_specific_next.cpp b/media_softlet/linux/common/os/mos_context_specific_next.cpp +index bd331fba31..6842cc6872 100644 +--- a/media_softlet/linux/common/os/mos_context_specific_next.cpp ++++ b/media_softlet/linux/common/os/mos_context_specific_next.cpp +@@ -30,6 +30,7 @@ + #include + #include + #include "hwinfo_linux.h" ++#include "mos_interface.h" + #include + + #include +@@ -144,9 +145,10 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext) + m_platformInfo.eRenderCoreFamily, + (m_platformInfo.usRevId << 16) | m_platformInfo.usDeviceID); + +- GMM_SKU_FEATURE_TABLE gmmSkuTable = {}; +- GMM_WA_TABLE gmmWaTable = {}; +- GMM_GT_SYSTEM_INFO gmmGtInfo = {}; ++ GMM_SKU_FEATURE_TABLE gmmSkuTable = {}; ++ GMM_WA_TABLE gmmWaTable = {}; ++ GMM_GT_SYSTEM_INFO gmmGtInfo = {}; ++ GMM_ADAPTER_BDF gmmAdapterBDF = {}; + eStatus = HWInfo_GetGmmInfo(m_fd, &gmmSkuTable, &gmmWaTable, &gmmGtInfo); + if (MOS_STATUS_SUCCESS != eStatus) + { +@@ -154,28 +156,32 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext) + return eStatus; + } + +- GmmExportEntries gmmFuncs = {}; +- GMM_STATUS gmmStatus = OpenGmm(&gmmFuncs); +- if (gmmStatus != GMM_SUCCESS) ++ eStatus = MosInterface::GetAdapterBDF(osDriverContext, &gmmAdapterBDF); ++ if (MOS_STATUS_SUCCESS != eStatus) + { +- MOS_OS_ASSERTMESSAGE("Fatal error - gmm init failed."); +- return MOS_STATUS_INVALID_PARAMETER; ++ MOS_OS_ASSERTMESSAGE("Fatal error - unsuccesfull Gmm Adapter BDF initialization"); ++ return eStatus; + } + +- // init GMM context +- gmmStatus = gmmFuncs.pfnCreateSingletonContext(m_platformInfo, +- &gmmSkuTable, +- &gmmWaTable, +- &gmmGtInfo); +- +- if (gmmStatus != GMM_SUCCESS) ++ // Initialize Gmm context ++ GMM_INIT_IN_ARGS gmmInitAgrs = {}; ++ GMM_INIT_OUT_ARGS gmmOutArgs = {}; ++ gmmInitAgrs.Platform = m_platformInfo; ++ gmmInitAgrs.pSkuTable = &gmmSkuTable; ++ gmmInitAgrs.pWaTable = &gmmWaTable; ++ gmmInitAgrs.pGtSysInfo = &gmmGtInfo; ++ gmmInitAgrs.FileDescriptor = gmmAdapterBDF.Data; ++ gmmInitAgrs.ClientType = (GMM_CLIENT)GMM_LIBVA_LINUX; ++ ++ GMM_STATUS status = InitializeGmm(&gmmInitAgrs, &gmmOutArgs); ++ if (status != GMM_SUCCESS) + { +- MOS_OS_ASSERTMESSAGE("Fatal error - gmm CreateSingletonContext failed."); ++ MOS_OS_ASSERTMESSAGE("Fatal error - InitializeGmm fail."); + return MOS_STATUS_INVALID_PARAMETER; + } +- m_gmmClientContext = gmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); ++ m_gmmClientContext = gmmOutArgs.pGmmClientContext; + +- m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(m_bufmgr, &m_skuTable); ++ m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(m_bufmgr, &m_skuTable, m_gmmClientContext); + + MOS_ZeroMemory(&UserFeatureData, sizeof(UserFeatureData)); + #if (_DEBUG || _RELEASE_INTERNAL) +@@ -266,18 +272,11 @@ void OsContextSpecificNext::Destroy() + + mos_bufmgr_destroy(m_bufmgr); + +- GmmExportEntries GmmFuncs; +- GMM_STATUS gmmStatus = OpenGmm(&GmmFuncs); +- if (gmmStatus == GMM_SUCCESS) +- { +- GmmFuncs.pfnDeleteClientContext((GMM_CLIENT_CONTEXT *)m_gmmClientContext); +- m_gmmClientContext = nullptr; +- GmmFuncs.pfnDestroySingletonContext(); +- } +- else +- { +- MOS_OS_ASSERTMESSAGE("gmm init failed."); +- } ++ // Delete Gmm context ++ GMM_INIT_OUT_ARGS gmmOutArgs = {}; ++ gmmOutArgs.pGmmClientContext = m_gmmClientContext; ++ GmmAdapterDestroy(&gmmOutArgs); ++ m_gmmClientContext = nullptr; + + SetOsContextValid(false); + }