/*===================== begin_copyright_notice ==================================

Copyright (c) 2017-2020, Intel Corporation

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

======================= end_copyright_notice ==================================*/
//!
//! \file     media_sysinfo_g12.cpp
//!

#include "igfxfmid.h"
#include "linux_system_info.h"
#include "skuwa_factory.h"
#include "linux_skuwa_debug.h"
#include "linux_media_skuwa.h"
#include "linux_shadow_skuwa.h"
#include "mos_utilities.h"

//extern template class DeviceInfoFactory<GfxDeviceInfo>;
typedef DeviceInfoFactory<GfxDeviceInfo> base_fact;

#define THREADS_NUMBER_PER_EU 7

static bool InitTglMediaSysInfo(struct GfxDeviceInfo *devInfo, MEDIA_GT_SYSTEM_INFO *sysInfo)
{
    if ((devInfo == nullptr) || (sysInfo == nullptr))
    {
        DEVINFO_ERROR("null ptr is passed\n");
        return false;
    }

    if (!sysInfo->SliceCount)
    {
        sysInfo->SliceCount    = devInfo->SliceCount;
    }

    if (!sysInfo->SubSliceCount)
    {
        sysInfo->SubSliceCount = devInfo->SubSliceCount;
    }

    if (!sysInfo->EUCount)
    {
        sysInfo->EUCount       = devInfo->EUCount;
    }

    sysInfo->L3BankCount                            = devInfo->L3BankCount;
    sysInfo->VEBoxInfo.Instances.Bits.VEBox0Enabled = 1;
    sysInfo->MaxEuPerSubSlice = devInfo->MaxEuPerSubSlice;
    sysInfo->MaxSlicesSupported = sysInfo->SliceCount;
    sysInfo->MaxSubSlicesSupported = sysInfo->SubSliceCount;

    sysInfo->VEBoxInfo.NumberOfVEBoxEnabled = 0; /*Query the VEBox engine info from KMD*/
    sysInfo->VDBoxInfo.NumberOfVDBoxEnabled = 0; /*Query the VDBox engine info from KMD*/

    sysInfo->ThreadCount = sysInfo->EUCount * THREADS_NUMBER_PER_EU;

    sysInfo->VEBoxInfo.IsValid = true;
    sysInfo->VDBoxInfo.IsValid = true;

    //Media driver does not set the other gtsysinfo fileds such as L3CacheSizeInKb, EdramSizeInKb and LLCCacheSizeInKb now.
    //If needed in the future, query them from KMD.

    return true;
}

static bool InitTglShadowSku(struct GfxDeviceInfo *devInfo,
                             SHADOW_MEDIA_FEATURE_TABLE *skuTable,
                             struct LinuxDriverInfo *drvInfo)
{
    if ((devInfo == nullptr) || (skuTable == nullptr) || (drvInfo == nullptr))
    {
        DEVINFO_ERROR("null ptr is passed\n");
        return false;
    }

    skuTable->FtrVERing = 0;
    if (drvInfo->hasVebox)
    {
       skuTable->FtrVERing = 1;
    }

    skuTable->FtrVcs2 = 0;

    skuTable->FtrULT = 0;

    skuTable->FtrPPGTT = 1;
    skuTable->FtrIA32eGfxPTEs = 1;

    skuTable->FtrDisplayYTiling = 1;
    skuTable->FtrEDram = devInfo->hasERAM;

    bool disableMMC     = false;
    skuTable->FtrE2ECompression = 1;
    // Disable MMC for all components if set reg key
    MOS_USER_FEATURE_VALUE_DATA userFeatureData;
    MOS_ZeroMemory(&userFeatureData, sizeof(userFeatureData));
    MOS_UserFeature_ReadValue_ID(
        nullptr,
        __MEDIA_USER_FEATURE_VALUE_DISABLE_MMC_ID,
        &userFeatureData,
        nullptr);
    if (userFeatureData.bData)
    {
        disableMMC = true;
    }

    if (disableMMC)
    {
        skuTable->FtrE2ECompression = 0;
    }

    skuTable->FtrLinearCCS = 1;
    skuTable->FtrTileY = 1;

    return true;
}

static bool InitTglShadowWa(struct GfxDeviceInfo *devInfo,
                             SHADOW_MEDIA_WA_TABLE *waTable,
                             struct LinuxDriverInfo *drvInfo)
{
    if ((devInfo == nullptr) || (waTable == nullptr) || (drvInfo == nullptr))
    {
        DEVINFO_ERROR("null ptr is passed\n");
        return false;
    }

    /* by default PPGTT is enabled */
    waTable->WaForceGlobalGTT = 0;
    if (drvInfo->hasPpgtt == 0)
    {
        waTable->WaForceGlobalGTT = 1;
    }

    waTable->WaDisregardPlatformChecks          = 1;
    waTable->Wa4kAlignUVOffsetNV12LinearSurface = 1;

    // Set it to 0 if need to support 256B compress mode
    waTable->WaLimit128BMediaCompr = 0;

    //source and recon surfaces need to be aligned to the LCU size
    waTable->WaAlignYUVResourceToLCU = 1;

    return true;
}

#ifdef IGFX_GEN12_DG1_SUPPORTED
static bool InitDG1ShadowSku(struct GfxDeviceInfo *devInfo,
                             SHADOW_MEDIA_FEATURE_TABLE *skuTable,
                             struct LinuxDriverInfo *drvInfo)
{
    if(!InitTglShadowSku(devInfo, skuTable, drvInfo))
    {
        return false;
    }
    skuTable->FtrLocalMemory = 1;

    return true;
}
#endif

static struct GfxDeviceInfo tgllpGt1Info = {
    .platformType  = PLATFORM_MOBILE,
    .productFamily = IGFX_TIGERLAKE_LP,
    .displayFamily = IGFX_GEN12_CORE,
    .renderFamily  = IGFX_GEN12_CORE,
    .eGTType       = GTTYPE_GT1,
    .L3CacheSizeInKb = 0,
    .L3BankCount   = 0,
    .EUCount       = 0,
    .SliceCount    = 0,
    .SubSliceCount = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA        = 0,
    .hasLLC        = 0,
    .hasERAM       = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};

static struct GfxDeviceInfo tgllpGt2Info = {
    .platformType  = PLATFORM_MOBILE,
    .productFamily = IGFX_TIGERLAKE_LP,
    .displayFamily = IGFX_GEN12_CORE,
    .renderFamily  = IGFX_GEN12_CORE,
    .eGTType       = GTTYPE_GT2,
    .L3CacheSizeInKb = 0,
    .L3BankCount   = 0,
    .EUCount       = 0,
    .SliceCount    = 0,
    .SubSliceCount = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA        = 0,
    .hasLLC        = 0,
    .hasERAM       = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};

#ifdef IGFX_GEN12_DG1_SUPPORTED
static struct GfxDeviceInfo dg1Gt2Info = {
    .platformType  = PLATFORM_MOBILE,
    .productFamily = IGFX_DG1,
    .displayFamily = IGFX_GEN12_CORE,
    .renderFamily  = IGFX_GEN12_CORE,
    .eGTType       = GTTYPE_GT2,
    .L3CacheSizeInKb = 0,
    .L3BankCount   = 0,
    .EUCount       = 0,
    .SliceCount    = 0,
    .SubSliceCount = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA        = 0,
    .hasLLC        = 0,
    .hasERAM       = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitDG1ShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};
static bool dg1Gt2Device4905 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4905, &dg1Gt2Info);

static bool dg1Gt2Device4906 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4906, &dg1Gt2Info);


static bool dg1Gt2Device4907 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4907, &dg1Gt2Info);

static bool dg1Gt2Device4908 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4908, &dg1Gt2Info);
#endif

#ifdef IGFX_GEN12_RKL_SUPPORTED
static struct GfxDeviceInfo rklGt1Info = {
    .platformType     = PLATFORM_MOBILE,
    .productFamily    = IGFX_ROCKETLAKE,
    .displayFamily    = IGFX_GEN12_CORE,
    .renderFamily     = IGFX_GEN12_CORE,
    .eGTType          = GTTYPE_GT1,
    .L3CacheSizeInKb  = 0,
    .L3BankCount      = 0,
    .EUCount          = 0,
    .SliceCount       = 0,
    .SubSliceCount    = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA           = 0,
    .hasLLC           = 0,
    .hasERAM          = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};

static struct GfxDeviceInfo rklGt1fInfo = {
    .platformType     = PLATFORM_MOBILE,
    .productFamily    = IGFX_ROCKETLAKE,
    .displayFamily    = IGFX_GEN12_CORE,
    .renderFamily     = IGFX_GEN12_CORE,
    .eGTType          = GTTYPE_GT0_5,
    .L3CacheSizeInKb  = 0,
    .L3BankCount      = 0,
    .EUCount          = 0,
    .SliceCount       = 0,
    .SubSliceCount    = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA           = 0,
    .hasLLC           = 0,
    .hasERAM          = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};

static bool rklGt1Device4C80 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4C80, &rklGt1Info);

static bool rklGt1Device4C8A = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4C8A, &rklGt1Info);

static bool rklGt1fDevice4C8B = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4C8B, &rklGt1Info);

static bool rklGt1fDevice4C8C = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4C8C, &rklGt1fInfo);

static bool rklGt1fDevice4C90 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4C90, &rklGt1Info);

static bool rklGt1fDevice4C9A = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4C9A, &rklGt1Info);
#endif

#ifdef IGFX_GEN12_ADLS_SUPPORTED
static struct GfxDeviceInfo adlsGt1Info = {
    .platformType     = PLATFORM_DESKTOP,
    .productFamily    = IGFX_ALDERLAKE_S,
    .displayFamily    = IGFX_GEN12_CORE,
    .renderFamily     = IGFX_GEN12_CORE,
    .eGTType          = GTTYPE_GT1,
    .L3CacheSizeInKb  = 0,
    .L3BankCount      = 0,
    .EUCount          = 0,
    .SliceCount       = 0,
    .SubSliceCount    = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA           = 0,
    .hasLLC           = 0,
    .hasERAM          = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};


static struct GfxDeviceInfo adlsGt1fInfo = {
    .platformType     = PLATFORM_DESKTOP,
    .productFamily    = IGFX_ALDERLAKE_S,
    .displayFamily    = IGFX_GEN12_CORE,
    .renderFamily     = IGFX_GEN12_CORE,
    .eGTType          = GTTYPE_GT0_5,
    .L3CacheSizeInKb  = 0,
    .L3BankCount      = 0,
    .EUCount          = 0,
    .SliceCount       = 0,
    .SubSliceCount    = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA           = 0,
    .hasLLC           = 0,
    .hasERAM          = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};


static bool adlsGt1Device4680 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4680, &adlsGt1Info);

static bool adlsGt1Device4681 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4681, &adlsGt1Info);

static bool adlsGt1Device4682 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4682, &adlsGt1Info);

static bool adlsGt1Device4683 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4683, &adlsGt1fInfo);

static bool adlsGt1Device4690 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4690, &adlsGt1Info);

static bool adlsGt1Device4691 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4691, &adlsGt1Info);

static bool adlsGt1Device4692 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4692, &adlsGt1Info);

static bool adlsGt1Device4693 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4693, &adlsGt1Info);

#endif


#ifdef IGFX_GEN12_ADLP_SUPPORTED
static struct GfxDeviceInfo adlpGt2Info = {
    .platformType     = PLATFORM_MOBILE,
    .productFamily    = IGFX_ALDERLAKE_P,
    .displayFamily    = IGFX_GEN12_CORE,
    .renderFamily     = IGFX_GEN12_CORE,
    .eGTType          = GTTYPE_GT2,
    .L3CacheSizeInKb  = 0,
    .L3BankCount      = 0,
    .EUCount          = 0,
    .SliceCount       = 0,
    .SubSliceCount    = 0,
    .MaxEuPerSubSlice = 0,
    .isLCIA           = 0,
    .hasLLC           = 0,
    .hasERAM          = 0,
    .InitMediaSysInfo = InitTglMediaSysInfo,
    .InitShadowSku    = InitTglShadowSku,
    .InitShadowWa     = InitTglShadowWa,
};

static bool adlpGt2Device46A0 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46A0, &adlpGt2Info);

static bool adlpGt2Device46A1 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46A1, &adlpGt2Info);

static bool adlpGt2Device46A2 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46A2, &adlpGt2Info);

static bool adlpGt2Device46A3 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46A3, &adlpGt2Info);
    
static bool adlpGt2Device46A6 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46A6, &adlpGt2Info);
    
static bool adlpGt2Device46A8 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46A8, &adlpGt2Info);
    
static bool adlpGt2Device4628 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x4628, &adlpGt2Info);
    
    
static bool adlpGt2Device46B0 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46B0, &adlpGt2Info);

static bool adlpGt2Device46B1 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46B1, &adlpGt2Info);

static bool adlpGt2Device46B2 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46B2, &adlpGt2Info);

static bool adlpGt2Device46B3 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46B3, &adlpGt2Info);
    

static bool adlpGt2Device46C0 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46C0, &adlpGt2Info);

static bool adlpGt2Device46C1 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46C1, &adlpGt2Info);

static bool adlpGt2Device46C2 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46C2, &adlpGt2Info);

static bool adlpGt2Device46C3 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46C3, &adlpGt2Info);
    
static bool adlpGt2Device46AA = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x46AA, &adlpGt2Info);
    
static bool adlpGt2Device462A = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x462A, &adlpGt2Info);

#endif

static bool tgllpGt2Device9a40 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A40, &tgllpGt2Info);

static bool tgllpGt2Device9a49 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A49, &tgllpGt2Info);

static bool tgllpGt2Device9a59 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A59, &tgllpGt2Info);

static bool tgllpGt2Device9a60 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A60, &tgllpGt2Info);

static bool tgllpGt2Device9a68 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A68, &tgllpGt2Info);

static bool tgllpGt2Device9a70 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A70, &tgllpGt2Info);

static bool tgllpGt1Device9a78 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9A78, &tgllpGt1Info);

static bool tgllpGt2Device9ac9 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9AC9, &tgllpGt2Info);

static bool tgllpGt2Device9af8 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9AF8, &tgllpGt2Info);

static bool tgllpGt2Device9ac0 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9AC0, &tgllpGt2Info);

static bool tgllpGt2Device9ad9 = DeviceInfoFactory<GfxDeviceInfo>::
    RegisterDevice(0x9AD9, &tgllpGt2Info);

