All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/1] package/intel-mediadriver: backport upstream patch
@ 2021-12-26 16:45 Bernd Kuhls
  0 siblings, 0 replies; only message in thread
From: Bernd Kuhls @ 2021-12-26 16:45 UTC (permalink / raw)
  To: buildroot; +Cc: Louis-Paul Cordier

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 <bernd.kuhls@t-online.de>
---
 ...-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 <kankan.zheng@intel.com>
+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 <bernd.kuhls@t-online.de>
+---
+ .../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<OsContextSpecific *>(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 <unistd.h>
+ #include <dlfcn.h>
+ #include "hwinfo_linux.h"
++#include "mos_interface.h"
+ #include <stdlib.h>
+ 
+ #include <sys/ipc.h>
+@@ -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);
+     }
-- 
2.30.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-26 16:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-26 16:45 [Buildroot] [PATCH 1/1] package/intel-mediadriver: backport upstream patch Bernd Kuhls

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.