From c8faeced0359872cfb694d63751ced9c17f50612 Mon Sep 17 00:00:00 2001 From: yan Date: Tue, 22 Sep 2020 13:49:05 +0800 Subject: [PATCH] update npu drivers version to 6.4.2.1 Signed-off-by: yan --- drivers/amlogic/npu/Kbuild | 3 +- .../npu/inc/drvi/gc_vsc_drvi_interface.h | 29 +- .../npu/inc/drvi/gc_vsc_drvi_kernel_profile.h | 2 +- .../npu/inc/drvi/gc_vsc_drvi_lib_link.h | 40 +- .../inc/drvi/gc_vsc_drvi_program_profile.h | 74 +- .../drvi/gc_vsc_drvi_shader_priv_mapping.h | 21 +- .../npu/inc/drvi/gc_vsc_drvi_shader_profile.h | 13 +- drivers/amlogic/npu/inc/gc_feature_database.h | 1746 +- drivers/amlogic/npu/inc/gc_hal.h | 164 +- drivers/amlogic/npu/inc/gc_hal_base.h | 357 +- drivers/amlogic/npu/inc/gc_hal_cl.h | 21 +- drivers/amlogic/npu/inc/gc_hal_debug_zones.h | 2 +- drivers/amlogic/npu/inc/gc_hal_dump.h | 2 +- drivers/amlogic/npu/inc/gc_hal_eglplatform.h | 4 +- .../amlogic/npu/inc/gc_hal_eglplatform_type.h | 144 +- drivers/amlogic/npu/inc/gc_hal_engine.h | 220 +- drivers/amlogic/npu/inc/gc_hal_engine_vg.h | 314 +- drivers/amlogic/npu/inc/gc_hal_enum.h | 2431 ++- drivers/amlogic/npu/inc/gc_hal_mem.h | 2 +- drivers/amlogic/npu/inc/gc_hal_metadata.h | 29 +- drivers/amlogic/npu/inc/gc_hal_options.h | 64 +- drivers/amlogic/npu/inc/gc_hal_priv.h | 6 +- drivers/amlogic/npu/inc/gc_hal_profiler.h | 275 +- drivers/amlogic/npu/inc/gc_hal_raster.h | 18 +- .../npu/inc/gc_hal_security_interface.h | 29 +- drivers/amlogic/npu/inc/gc_hal_statistics.h | 9 +- drivers/amlogic/npu/inc/gc_hal_version.h | 8 +- drivers/amlogic/npu/inc/gc_hal_vg.h | 5 +- drivers/amlogic/npu/inc/gc_hal_vx.h | 17 +- drivers/amlogic/npu/inc/gc_vsc_precomp.h | 2 +- .../inc/old_impl/gc_vsc_old_drvi_interface.h | 93 +- .../npu/inc/old_impl/gc_vsc_old_gcsl.h | 104 +- drivers/amlogic/npu/inc/shared/gc_hal_base.h | 63 + .../amlogic/npu/inc/shared/gc_hal_driver.h | 1183 ++ .../amlogic/npu/inc/shared/gc_hal_driver_vg.h | 222 + drivers/amlogic/npu/inc/shared/gc_hal_enum.h | 1837 ++ .../amlogic/npu/inc/shared/gc_hal_profiler.h | 239 + drivers/amlogic/npu/inc/shared/gc_hal_types.h | 945 + drivers/amlogic/npu/inc/shared/gc_hal_vg.h | 178 + drivers/amlogic/npu/kernel/Android.mk | 2 +- .../amlogic/npu/kernel/arch/cebuild/makefile | 4 +- .../amlogic/npu/kernel/arch/cebuild/sources | 5 +- .../npu/kernel/arch/gc_hal_kernel_context.c | 59 +- .../npu/kernel/arch/gc_hal_kernel_context.h | 8 +- .../npu/kernel/arch/gc_hal_kernel_hardware.c | 2700 +-- .../npu/kernel/arch/gc_hal_kernel_hardware.h | 41 +- .../arch/gc_hal_kernel_hardware_async_fe.c | 4 +- .../kernel/arch/gc_hal_kernel_hardware_fe.h | 10 +- .../kernel/arch/gc_hal_kernel_hardware_func.c | 15164 ++++++++++++++++ .../kernel/arch/gc_hal_kernel_hardware_func.h | 158 + .../arch/gc_hal_kernel_hardware_mc_fe.c | 56 +- .../arch/gc_hal_kernel_hardware_waitlink_fe.c | 4 +- .../npu/kernel/arch/gc_hal_kernel_recorder.c | 4 +- .../amlogic/npu/kernel/arch/makefile.linux | 5 +- drivers/amlogic/npu/kernel/cebuild/makefile | 4 +- drivers/amlogic/npu/kernel/cebuild/sources | 4 +- drivers/amlogic/npu/kernel/gc_hal_kernel.c | 269 +- drivers/amlogic/npu/kernel/gc_hal_kernel.h | 44 +- .../npu/kernel/gc_hal_kernel_command.c | 48 +- drivers/amlogic/npu/kernel/gc_hal_kernel_db.c | 48 +- .../amlogic/npu/kernel/gc_hal_kernel_debug.c | 4 +- .../amlogic/npu/kernel/gc_hal_kernel_event.c | 6 +- .../amlogic/npu/kernel/gc_hal_kernel_heap.c | 4 +- .../amlogic/npu/kernel/gc_hal_kernel_mmu.c | 103 +- .../amlogic/npu/kernel/gc_hal_kernel_power.c | 4 +- .../npu/kernel/gc_hal_kernel_precomp.h | 6 +- .../npu/kernel/gc_hal_kernel_security.c | 4 +- .../npu/kernel/gc_hal_kernel_security_v1.c | 4 +- .../npu/kernel/gc_hal_kernel_video_memory.c | 294 +- .../npu/kernel/inc/gc_feature_database.h | 1748 +- drivers/amlogic/npu/kernel/inc/gc_hal.h | 166 +- drivers/amlogic/npu/kernel/inc/gc_hal_base.h | 359 +- .../npu/kernel/inc/gc_hal_debug_zones.h | 4 +- drivers/amlogic/npu/kernel/inc/gc_hal_drm.h | 9 +- drivers/amlogic/npu/kernel/inc/gc_hal_dump.h | 4 +- .../npu/kernel/inc/gc_hal_eglplatform.h | 6 +- .../npu/kernel/inc/gc_hal_eglplatform_type.h | 146 +- .../amlogic/npu/kernel/inc/gc_hal_engine.h | 222 +- .../amlogic/npu/kernel/inc/gc_hal_engine_vg.h | 316 +- drivers/amlogic/npu/kernel/inc/gc_hal_enum.h | 2433 ++- .../npu/kernel/inc/gc_hal_kernel_buffer.h | 8 +- drivers/amlogic/npu/kernel/inc/gc_hal_mem.h | 4 +- .../amlogic/npu/kernel/inc/gc_hal_metadata.h | 31 +- .../amlogic/npu/kernel/inc/gc_hal_options.h | 66 +- .../amlogic/npu/kernel/inc/gc_hal_profiler.h | 277 +- .../amlogic/npu/kernel/inc/gc_hal_raster.h | 20 +- .../kernel/inc/gc_hal_security_interface.h | 31 +- .../npu/kernel/inc/gc_hal_statistics.h | 11 +- .../amlogic/npu/kernel/inc/gc_hal_version.h | 10 +- drivers/amlogic/npu/kernel/inc/gc_hal_vg.h | 7 +- .../npu/kernel/inc/shared/gc_hal_base.h | 105 + .../npu/kernel/inc/shared/gc_hal_driver.h | 1225 ++ .../npu/kernel/inc/shared/gc_hal_driver_vg.h | 264 + .../npu/kernel/inc/shared/gc_hal_enum.h | 1879 ++ .../npu/kernel/inc/shared/gc_hal_profiler.h | 281 + .../npu/kernel/inc/shared/gc_hal_types.h | 987 + .../amlogic/npu/kernel/inc/shared/gc_hal_vg.h | 220 + drivers/amlogic/npu/kernel/makefile.linux | 4 +- drivers/amlogic/npu/os/libGAL.def.mak | 9 +- .../default/gc_hal_kernel_allocator_array.h | 4 +- .../default/gc_hal_kernel_allocator_dma.c | 28 +- .../default/gc_hal_kernel_allocator_dmabuf.c | 13 +- .../default/gc_hal_kernel_allocator_gfp.c | 70 +- .../gc_hal_kernel_allocator_reserved_mem.c | 16 +- .../gc_hal_kernel_allocator_user_memory.c | 4 +- .../os/linux/kernel/gc_hal_kernel_allocator.c | 4 +- .../os/linux/kernel/gc_hal_kernel_allocator.h | 38 +- .../npu/os/linux/kernel/gc_hal_kernel_debug.h | 4 +- .../os/linux/kernel/gc_hal_kernel_debugfs.c | 4 +- .../os/linux/kernel/gc_hal_kernel_debugfs.h | 4 +- .../os/linux/kernel/gc_hal_kernel_device.c | 877 +- .../os/linux/kernel/gc_hal_kernel_device.h | 6 +- .../os/linux/kernel/gc_hal_kernel_driver.c | 192 +- .../npu/os/linux/kernel/gc_hal_kernel_drm.c | 17 +- .../npu/os/linux/kernel/gc_hal_kernel_iommu.c | 4 +- .../npu/os/linux/kernel/gc_hal_kernel_linux.c | 314 +- .../npu/os/linux/kernel/gc_hal_kernel_linux.h | 9 +- .../npu/os/linux/kernel/gc_hal_kernel_math.c | 4 +- .../npu/os/linux/kernel/gc_hal_kernel_mutex.h | 4 +- .../npu/os/linux/kernel/gc_hal_kernel_os.c | 130 +- .../npu/os/linux/kernel/gc_hal_kernel_os.h | 4 +- .../os/linux/kernel/gc_hal_kernel_platform.h | 12 +- .../kernel/gc_hal_kernel_security_channel.c | 4 +- .../gc_hal_kernel_security_channel_emulator.c | 4 +- .../npu/os/linux/kernel/gc_hal_kernel_sync.c | 4 +- .../npu/os/linux/kernel/gc_hal_kernel_sync.h | 4 +- .../amlogic/gc_hal_kernel_platform_amlogic.c | 227 +- .../amlogic/gc_hal_kernel_platform_c308x.c | 468 + .../gc_hal_kernel_platform_c308x.config | 4 + .../amlogic/gc_hal_kernel_platform_pico.c | 453 + .../gc_hal_kernel_platform_pico.config | 4 + .../default/gc_hal_kernel_platform_default.c | 6 +- drivers/amlogic/npu/security_v1/gc_hal_ta.c | 6 +- drivers/amlogic/npu/security_v1/gc_hal_ta.h | 6 +- .../npu/security_v1/gc_hal_ta_hardware.c | 6 +- .../npu/security_v1/gc_hal_ta_hardware.h | 6 +- .../amlogic/npu/security_v1/gc_hal_ta_mmu.c | 6 +- .../os/emulator/gc_hal_ta_emulator.c | 4 +- 138 files changed, 35054 insertions(+), 8757 deletions(-) create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_base.h create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_driver.h create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_driver_vg.h create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_enum.h create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_profiler.h create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_types.h create mode 100644 drivers/amlogic/npu/inc/shared/gc_hal_vg.h create mode 100644 drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.c create mode 100644 drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_base.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver_vg.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_enum.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_profiler.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_types.h create mode 100644 drivers/amlogic/npu/kernel/inc/shared/gc_hal_vg.h create mode 100644 drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.c create mode 100755 drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.config create mode 100644 drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.c create mode 100755 drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.config diff --git a/drivers/amlogic/npu/Kbuild b/drivers/amlogic/npu/Kbuild index 7ed601c130c255..74b8c786c47b51 100755 --- a/drivers/amlogic/npu/Kbuild +++ b/drivers/amlogic/npu/Kbuild @@ -134,7 +134,8 @@ OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_context.o \ $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \ $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_async_fe.o \ $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_mc_fe.o \ - $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_waitlink_fe.o + $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_waitlink_fe.o \ + $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_func.o ifeq ($(VIVANTE_ENABLE_3D),1) OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_recorder.o diff --git a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_interface.h b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_interface.h index 01b29f85993581..b86e3e9105011f 100644 --- a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_interface.h +++ b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_interface.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -55,8 +55,11 @@ /* 0.0.1.32 Add extension flag in VIR_Symbol 05/27/2019 */ /* 0.0.1.33 Add a new opcode LOGICAL_RSHIFT 05/28/2019 */ /* 0.0.1.34 Add WorkGroupSizeFactor in VIR_ComputeLayout on 07/18/2019 */ -#define gcdVIR_SHADER_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 34) -#define gcdVIR_PROGRAM_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 34) +/* 0.0.1.35 Add skhp flag in VIR_Instruction */ +/* 0.0.1.36 Add a function to patch clipDistance in GL VIR lib shader */ +/* 0.0.1.37 Add the sampled image information on 03/11/2020 */ +#define gcdVIR_SHADER_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 37) +#define gcdVIR_PROGRAM_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 37) #if !defined(gcdTARGETHOST_BIGENDIAN) #define gcdTARGETHOST_BIGENDIAN 0 /* default host little endian, to change the @@ -491,8 +494,8 @@ typedef VSC_TyQualifier VIR_TyQualifier; * to achieve best performance */ typedef enum { VSC_OCLImgLibKind_UseLoadStore = 0, /* for v54x GC chips, use LOAD/STORE/TEXLD */ - VSC_OCLImgLibKind_UseImgLoadTexldU = 1, /* for v55 GC chips, use IMG_LOAD/IMG_STORE/TEXLD_U */ - VSC_OCLImgLibKind_UseImgLoadTexldUXY = 2, /* for v60 GC and v620 GC chips */ + VSC_OCLImgLibKind_UseImgLoadTexldU = 1, /* for v55 GC chips, use IMG_LOAD/IMG_STORE/TEXLD_U -- unused now */ + VSC_OCLImgLibKind_UseImgLoadTexldUXY = 2, /* for v60 GC and v620 GC chips -- unused now*/ VSC_OCLImgLibKind_UseImgLoadVIP = 3, /* v60 VIP chip, use IMG_LOAD/IMG_STORE */ VSC_OCLImgLibKind_Counts, /* count of img libs */ VSC_OCLImgLibKind_BasedOnHWFeature /* select library based on HW feature */ @@ -732,7 +735,10 @@ typedef struct _VSC_HW_CONFIG /* word 3 */ gctUINT hasPointSizeFix : 1; gctUINT supportVectorB0 : 1; - gctUINT reserved1 : 30; + gctUINT hasAtomTimingFix : 1; + gctUINT hasUSCAtomicFix2 : 1; + gctUINT hasFloatingMadFix : 1; + gctUINT reserved1 : 27; /* Last word */ /* Followings will be removed after shader programming is removed out of VSC */ @@ -750,9 +756,7 @@ typedef struct _VSC_HW_CONFIG gctUINT robustAtomic : 1; gctUINT newGPIPE : 1; gctUINT FEDrawDirect : 1; - - gctUINT hasUSCAtomicFix2 : 1; - gctUINT reserved2 : 18; + gctUINT reserved2 : 19; } hwFeatureFlags; gctUINT chipModel; @@ -760,6 +764,7 @@ typedef struct _VSC_HW_CONFIG gctUINT productID; gctUINT customerID; gctUINT maxCoreCount; + gctUINT maxClusterCount; gctUINT maxThreadCountPerCore; gctUINT maxVaryingCount; gctUINT maxAttributeCount; @@ -841,8 +846,9 @@ typedef gcsGLSLCaps VSC_GL_API_CONFIG, *PVSC_GL_API_CONFIG; #define VSC_COMPILER_OPT_FULL_ACTIVE_IO 0x0000000000008000ULL #define VSC_COMPILER_OPT_DUAL16 0x0000000000010000ULL #define VSC_COMPILER_OPT_ILF_LINK 0x0000000000020000ULL +#define VSC_COMPILER_OPT_LOOP 0x0000000000040000ULL -#define VSC_COMPILER_OPT_FULL 0x000000000003FFFFULL +#define VSC_COMPILER_OPT_FULL 0x000000000007FFFFULL #define VSC_COMPILER_OPT_NO_ALGE_SIMP 0x0000000100000000ULL #define VSC_COMPILER_OPT_NO_GCP 0x0000000200000000ULL @@ -862,8 +868,9 @@ typedef gcsGLSLCaps VSC_GL_API_CONFIG, *PVSC_GL_API_CONFIG; #define VSC_COMPILER_OPT_NO_FULL_ACTIVE_IO 0x0000800000000000ULL #define VSC_COMPILER_OPT_NO_DUAL16 0x0001000000000000ULL #define VSC_COMPILER_OPT_NO_ILF_LINK 0x0002000000000000ULL +#define VSC_COMPILER_OPT_NO_LOOP 0x0004000000000000ULL -#define VSC_COMPILER_OPT_NO_OPT 0x0003FFFF00000000ULL +#define VSC_COMPILER_OPT_NO_OPT 0x0007FFFF00000000ULL /* Compiler flag for special purpose */ #define VSC_COMPILER_FLAG_COMPILE_TO_HL 0x00000001 /* Compile IR to HL, including doing all opts in HL */ diff --git a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_kernel_profile.h b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_kernel_profile.h index 5ec89dbd505c08..9d69e60789e6f4 100644 --- a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_kernel_profile.h +++ b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_kernel_profile.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by diff --git a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_lib_link.h b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_lib_link.h index 49b873ebebc223..43ce36126ea459 100644 --- a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_lib_link.h +++ b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_lib_link.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -25,6 +25,10 @@ typedef union _SPECIALIZATION_CONSTANT_VALUE typedef struct _VSC_LIB_SPECIALIZATION_CONSTANT { + /* + ** Some specialized variables for a function parameter, note that a name of the function parameter may be padding with "#dup%d", + ** so we need to use gcoOS_StrNCmp to compare with the function parameter. + */ gctCONST_STRING varName; SPECIALIZATION_CONSTANT_VALUE value; VSC_SHADER_DATA_TYPE type; @@ -114,12 +118,14 @@ typedef enum _VSC_RES_ACT_BIT typedef enum _VSC_LINK_POINT_RESOURCE_SUBTYPE { - VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXLD_EXTRA_LATYER = 1, - VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGRAD_EXTRA_LATYER = 2, - VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXFETCH_REPLACE_WITH_IMGLD = 3, - VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGATHER_EXTRA_LAYTER = 4, - VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGATHERPCF_D32F = 5, - VSC_LINK_POINT_RESOURCE_SUBTYPE_NORMALIZE_TEXCOORD = 6, + VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXLD_EXTRA_LAYER = 1, + VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXLD_EXTRA_LAYER_SPECIFIED_OP = 2, + VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGRAD_EXTRA_LAYER = 3, + VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXFETCH_REPLACE_WITH_IMGLD = 4, + VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGATHER_EXTRA_LAYTER = 5, + VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGATHERPCF_D32F = 6, + VSC_LINK_POINT_RESOURCE_SUBTYPE_NORMALIZE_TEXCOORD = 7, + VSC_LINK_POINT_RESOURCE_SUBTYPE_YCBCR_TEXTURE = 8, } VSC_LINK_POINT_RESOURCE_SUBTYPE; typedef struct _VSC_LIB_LINK_POINT_FUNC_NAME @@ -140,6 +146,7 @@ typedef struct _VSC_LIB_LINK_POINT_RESOURCE gctUINT arrayIndex; VSC_RES_OP_BIT opTypeBits; VSC_RES_ACT_BIT actBits; + void* pPrivData; VSC_LINK_POINT_RESOURCE_SUBTYPE subType; } VSC_LIB_LINK_POINT_RESOURCE; @@ -165,12 +172,21 @@ typedef struct _VSC_LIB_LINK_IMAGE_READ_WRITE VSC_SAMPLER_INFO * samplerInfo; } VSC_LIB_LINK_IMAGE_READ_WRITE; +/* Same value with VIR_IMAGE_ACCESS_STRATEGY. */ +typedef enum _VSC_LIB_LINK_IMAGE_ACCESS_STRATEGY +{ + VSC_LIB_LINK_IMAGE_ACCESS_STRATEGY_USE_FORMAT = 0, + VSC_LIB_LINK_IMAGE_ACCESS_STRATEGY_LOAD_ZERO_STORE_NOP = 1, + VSC_LIB_LINK_IMAGE_ACCESS_STRATEGY_LOAD_ZERO_STORE_ZERO = 2, +} VSC_LIB_LINK_IMAGE_ACCESS_STRATEGY; + typedef struct _VSC_LIB_LINK_IMAGE_FORMAT { - gctUINT set; - gctUINT binding; - gctUINT arrayIndex; - VSC_IMAGE_FORMAT imageFormat; + gctUINT set; + gctUINT binding; + gctUINT arrayIndex; + VSC_IMAGE_FORMAT imageFormat; + VSC_LIB_LINK_IMAGE_ACCESS_STRATEGY replaceStrategy; } VSC_LIB_LINK_IMAGE_FORMAT; typedef struct _VSC_LIB_LINK_POINT @@ -194,6 +210,7 @@ typedef struct _VSC_LIB_LINK_POINT } u; }VSC_LIB_LINK_POINT; +#define LIB_NUM 2 typedef struct _VSC_SHADER_LIB_LINK_ENTRY { /* Which level this link entry should be applied. */ @@ -201,6 +218,7 @@ typedef struct _VSC_SHADER_LIB_LINK_ENTRY /* Lib shader */ SHADER_HANDLE hShaderLib; + SHADER_HANDLE hShaderLibs[LIB_NUM]; /* vreg map from libShader to the current shader */ void* pTempHashTable; diff --git a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_program_profile.h b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_program_profile.h index 7e1d7b146a0861..cb5415143bcf72 100644 --- a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_program_profile.h +++ b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_program_profile.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -469,6 +469,30 @@ PROG_GL_XFB_OUT_TABLE; ********************************** VK program mapping table definitions ********************************* **********************************************************************************************************************/ +typedef struct PROG_VK_IMAGE_FORMAT_INFO +{ + VSC_IMAGE_FORMAT imageFormat; + gctBOOL bSetInSpriv; +} +PROG_VK_IMAGE_FORMAT_INFO; + +typedef struct PROG_VK_IMAGE_DERIVED_INFO +{ + /* For a image, it might need a image-size attached. As each image in + Binding::arraySize array has image-size, so this is the first entry + of image-size array. */ + SHADER_PRIV_CONSTANT_ENTRY* pImageSize; + + /* Extra layer HW mapping. As currently, for images in in tBinding::arraySize + array, if one image has extra image, all other images must have extra image, so + this is the first entry of extra-image */ + SHADER_PRIV_UAV_ENTRY* pExtraLayer; + + /* ImageFormat, can be NONE. */ + PROG_VK_IMAGE_FORMAT_INFO imageFormatInfo; +} +PROG_VK_IMAGE_DERIVED_INFO; + typedef struct PROG_VK_SUB_RESOURCE_BINDING { /* Pointer to original API resource binding */ @@ -528,6 +552,7 @@ typedef struct PROG_VK_PRIV_COMB_TEX_SAMP_HW_MAPPING_LIST VSC_SHADER_RESOURCE_TYPE_COMBINED_IMAGE_SAMPLER */ +#define __YCBCR_PLANE_COUNT__ 3 typedef struct PROG_VK_COMBINED_TEXTURE_SAMPLER_HW_MAPPING { /* For the case @@ -541,6 +566,9 @@ typedef struct PROG_VK_COMBINED_TEXTURE_SAMPLER_HW_MAPPING combTsBinding::arraySize */ SHADER_PRIV_SAMPLER_ENTRY** ppExtraSamplerArray; + /* For the ycbcr texture recompilation. */ + SHADER_PRIV_UAV_ENTRY* pYcbcrPlanes[__YCBCR_PLANE_COUNT__]; + /* For the case that HW natively supports separated texture, so texture part of API combined texture sampler will be directly mapped to HW separated texture */ SHADER_RESOURCE_SLOT_MAPPING texMapping; @@ -663,15 +691,7 @@ typedef union PROG_VK_SEPARATED_TEXTURE_HW_MAPPING /* For HW does not natively supports separated texture */ struct { - /* For a separated image, it might need a image-size attached. As each image in - storageBinding::arraySize array has image-size, so this is the first entry - of image-size array. */ - SHADER_PRIV_CONSTANT_ENTRY* pImageSize; - - /* Extra layer HW mapping. As currently, for images in in texBinding::arraySize - array, if one image has extra image, all other images must have extra image, so - this is the first entry of extra-image */ - SHADER_PRIV_UAV_ENTRY* pExtraLayer; + PROG_VK_IMAGE_DERIVED_INFO imageDerivedInfo; /* We still need to allocate a constant image for this separated texture for the imageFetch operation.*/ SHADER_UAV_SLOT_MAPPING hwMapping; @@ -749,6 +769,13 @@ typedef struct PROG_VK_UNIFORM_TEXEL_BUFFER_HW_MAPPING } PROG_VK_UNIFORM_TEXEL_BUFFER_HW_MAPPING; +typedef enum PROG_VK_UNIFORM_TEXEL_BUFFER_ENTRY_FLAG +{ + PROG_VK_UTB_ENTRY_FLAG_NONE = 0x0000, + /* Treat a texelBuffer as an image, now from a recompilation only. */ + PROG_VK_UTB_ENTRY_FLAG_TREAT_TEXELBUFFER_AS_IMAGE = 0x0002, +} PROG_VK_UNIFORM_TEXEL_BUFFER_ENTRY_FLAG; + typedef struct PROG_VK_UNIFORM_TEXEL_BUFFER_TABLE_ENTRY { /* API resource binding */ @@ -763,6 +790,8 @@ typedef struct PROG_VK_UNIFORM_TEXEL_BUFFER_TABLE_ENTRY /* Is this entry really used by shader */ gctUINT activeStageMask; + PROG_VK_UNIFORM_TEXEL_BUFFER_ENTRY_FLAG utbEntryFlag; + /*----------------------------------Sampler-related----------------------------------*/ /* For texel buffer, it might need a texture-size attached. As each texel buffer in utbBinding::arraySize array has texture-size, so this is the first entry @@ -770,7 +799,7 @@ typedef struct PROG_VK_UNIFORM_TEXEL_BUFFER_TABLE_ENTRY SHADER_PRIV_CONSTANT_ENTRY* pTextureSize[VSC_MAX_SHADER_STAGE_COUNT][2]; /*----------------------------------Image-related----------------------------------*/ - VSC_IMAGE_FORMAT imageFormat; + PROG_VK_IMAGE_DERIVED_INFO imageDerivedInfo[VSC_MAX_SHADER_STAGE_COUNT]; /* Which kinds of inst operation acting on texture. The count of this resOpBit is same as utbBinding::arraySize */ @@ -826,15 +855,7 @@ typedef struct PROG_VK_INPUT_ATTACHMENT_TABLE_ENTRY ** it is treated as a sampler, otherwise it is treated as an image. */ /*----------------------------------Image-related----------------------------------*/ - /* For image storage, it might need a image-size attached. As each image in - iaBinding::arraySize array has image-size, so this is the first entry - of image-size array. */ - SHADER_PRIV_CONSTANT_ENTRY* pImageSize[VSC_MAX_SHADER_STAGE_COUNT]; - - /* Extra layer HW mapping. As currently, for images in in iaBinding::arraySize - array, if one image has extra image, all other images must have extra image, so - this is the first entry of extra-image */ - SHADER_PRIV_UAV_ENTRY* pExtraLayer[VSC_MAX_SHADER_STAGE_COUNT]; + PROG_VK_IMAGE_DERIVED_INFO imageDerivedInfo[VSC_MAX_SHADER_STAGE_COUNT]; /*----------------------------------Sampler-related----------------------------------*/ /* For texel buffer, it might need a texture-size attached. As each texel buffer in @@ -888,15 +909,12 @@ typedef struct PROG_VK_STORAGE_TABLE_ENTRY /* Is this entry really used by shader */ gctUINT activeStageMask; - /* For image storage, it might need a image-size attached. As each image in - storageBinding::arraySize array has image-size, so this is the first entry - of image-size array. */ - SHADER_PRIV_CONSTANT_ENTRY* pImageSize[VSC_MAX_SHADER_STAGE_COUNT]; + /*----------------------------------Image-related----------------------------------*/ + PROG_VK_IMAGE_DERIVED_INFO imageDerivedInfo[VSC_MAX_SHADER_STAGE_COUNT]; - /* Extra layer HW mapping. As currently, for images in in storageBinding::arraySize - array, if one image has extra image, all other images must have extra image, so - this is the first entry of extra-image */ - SHADER_PRIV_UAV_ENTRY* pExtraLayer[VSC_MAX_SHADER_STAGE_COUNT]; + /* Which kinds of inst operation acting on texture. The count of this + resOpBit is same as storageBinding::arraySize */ + VSC_RES_OP_BIT* pResOpBits; /* Different shader stage may have different HW mappings. */ SHADER_UAV_SLOT_MAPPING hwMappings[VSC_MAX_SHADER_STAGE_COUNT]; diff --git a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_priv_mapping.h b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_priv_mapping.h index 77de12b9cd14a9..8cf95c6454cf9a 100644 --- a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_priv_mapping.h +++ b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_priv_mapping.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -61,13 +61,16 @@ typedef enum SHS_PRIV_CONSTANT_KIND /* Shader mem static priv-mapping kind */ typedef enum SHS_PRIV_MEM_KIND { - SHS_PRIV_MEM_KIND_GPR_SPILLED_MEMORY = 0, /* For gpr register spillage */ - SHS_PRIV_MEM_KIND_CONSTANT_SPILLED_MEMORY = 1, /* For constant register spillage */ - SHS_PRIV_MEM_KIND_STREAMOUT_BY_STORE = 2, /* Stream buffer for SO */ - SHS_PRIV_MEM_KIND_CL_PRIVATE_MEMORY = 3, /* For CL private mem */ - SHS_PRIV_MEM_KIND_SHARED_MEMORY = 4, /* For CL local memory or DirectCompute shared mem */ - SHS_PRIV_MEM_KIND_EXTRA_UAV_LAYER = 5, - SHS_PRIV_MEM_KIND_COUNT = 6, + SHS_PRIV_MEM_KIND_NONE = 0, + SHS_PRIV_MEM_KIND_GPR_SPILLED_MEMORY = 1, /* For gpr register spillage */ + SHS_PRIV_MEM_KIND_CONSTANT_SPILLED_MEMORY = 2, /* For constant register spillage */ + SHS_PRIV_MEM_KIND_STREAMOUT_BY_STORE = 3, /* Stream buffer for SO */ + SHS_PRIV_MEM_KIND_CL_PRIVATE_MEMORY = 4, /* For CL private mem */ + SHS_PRIV_MEM_KIND_SHARED_MEMORY = 5, /* For CL local memory or DirectCompute shared mem */ + SHS_PRIV_MEM_KIND_EXTRA_UAV_LAYER = 6, + SHS_PRIV_MEM_KIND_THREAD_ID_MEM_ADDR = 7, /* The global memory to save the consecutive thread ID. */ + SHS_PRIV_MEM_KIND_YCBCR_PLANE = 8, /* The YCBCR plane. */ + SHS_PRIV_MEM_KIND_COUNT = 9, }SHS_PRIV_MEM_KIND; /* !!!!!NOTE: For dynamic (lib-link) patch, the priv-mapping flag will directly use VSC_LIB_LINK_TYPE!!!!! */ @@ -154,6 +157,8 @@ typedef struct SHADER_PRIV_MEM_DATA_MAPPING typedef struct SHADER_PRIV_UAV_ENTRY { + gctUINT uavEntryIndex; + SHADER_PRIV_MAPPING_COMMON_ENTRY commonPrivm; /* The data which will be set to this memory */ diff --git a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_profile.h b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_profile.h index 2b40dc983b91ac..a27831615c10c5 100644 --- a/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_profile.h +++ b/drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_shader_profile.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -1033,6 +1033,9 @@ typedef struct SHADER_EXECUTABLE_NATIVE_HINTS /* It is retrieved from inputPrim. Standalone providing this is just for convenience only */ gctUINT inputVtxCount; + + /* Whether the shader has any stream out other than stream 0. */ + gctBOOL bHasStreamOut; } gs; /* States acted on PS */ @@ -1287,7 +1290,13 @@ typedef struct SHADER_EXECUTABLE_DERIVED_HINTS /* Whether use Local memory. */ gctUINT bUseLocalMemory : 1; - gctUINT reserved : 30; + /* Whether use Private memory. */ + gctUINT bUsePrivateMemory : 1; + + /* Whether use Evis instruction. */ + gctUINT bUseEvisInst : 1; + + gctUINT reserved : 28; gctUINT16 workGroupSizeFactor[3]; } gps; diff --git a/drivers/amlogic/npu/inc/gc_feature_database.h b/drivers/amlogic/npu/inc/gc_feature_database.h index fe0ad19a01da5a..107ca4f79d3269 100644 --- a/drivers/amlogic/npu/inc/gc_feature_database.h +++ b/drivers/amlogic/npu/inc/gc_feature_database.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -11,7 +11,7 @@ *****************************************************************************/ -/*Auto created on 2019-09-26 14:56*/ +/*Auto created on 2020-03-26 14:34*/ #ifndef _gc_feature_database_h_ #define _gc_feature_database_h_ @@ -69,8 +69,17 @@ typedef struct gctUINT32 NNFP16_ZDP; gctUINT32 NN_LANES_PER_OUT_CYCLE; gctUINT32 MAX_OT_NUMBER; + gctUINT32 PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE; gctUINT32 EQUIVALENT_VIP_SRAM_WIDTH_INBYTE; gctUINT32 TP_ZRL_BITS; + gctUINT32 LATENCY_HIDING_AT_FULL_AXI_BW; + gctUINT32 AXI_BUS_WIDTH; + gctUINT32 NN_KERNEL_X_SIZE; + gctUINT32 NN_KERNEL_Y_SIZE; + gctUINT32 NN_KERNEL_Z_SIZE; + gctUINT32 NN_X_OFFSET; + gctUINT32 NN_Y_OFFSET; + gctUINT32 DDR_KERNEL_BURST_SIZE; gctUINT32 REG_FastClear:1; gctUINT32 REG_SpecialAntiAliasing:1; gctUINT32 REG_Pipe3D:1; @@ -300,6 +309,7 @@ typedef struct gctUINT32 REG_DEC:1; gctUINT32 REG_VSTileNV12:1; gctUINT32 REG_VSTileNV12_10BIT:1; + gctUINT32 REG_DisableVIP:1; gctUINT32 RenderTarget8:1; gctUINT32 TxLodFlowCorrection:1; gctUINT32 FaceLod:1; @@ -445,6 +455,14 @@ typedef struct gctUINT32 DE_2D_FAST_CLEAR:1; gctUINT32 TX_CLEAR_PENDING_FIX:1; gctUINT32 NO_HI1_L2:1; + gctUINT32 USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX:1; + gctUINT32 FORMAT_10BIT_CROSS_4K:1; + gctUINT32 FORMAT_P010LSB_I010:1; + gctUINT32 ENDIAN_CONTROL:1; + gctUINT32 G2D_DEC400EX:1; + gctUINT32 SH_VX2_FLOATING_MAD_FIX:1; + gctUINT32 TS_FC_VULKAN_SUPPORT:1; + gctUINT32 MSAA_FLOAT_64BIT:1; gctUINT32 VG_TS_CULLING:1; gctUINT32 VG_FP25:1; gctUINT32 VG_AYUV_INPUT_OUTPUT:1; @@ -471,6 +489,7 @@ typedef struct gctUINT32 DC_MMU:1; gctUINT32 DC_COMPRESSION:1; gctUINT32 DC_QOS:1; + gctUINT32 AI_GPU:1; gctUINT32 EVIS_NO_ABSDIFF:1; gctUINT32 EVIS_NO_BITREPLACE:1; gctUINT32 EVIS_NO_BOXFILTER:1; @@ -502,6 +521,7 @@ typedef struct gctUINT32 TF_QUANTIZATION:1; gctUINT32 TP_SIMPLE_INT16:1; gctUINT32 TP_REAL_INT16:1; + gctUINT32 TP_BFLOAT16:1; gctUINT32 NN_FIRST_PIXEL_POOLING:1; gctUINT32 SWTILING_PHASE2:1; gctUINT32 NN_STRIDE_SUPPORT:1; @@ -527,6 +547,7 @@ typedef struct gctUINT32 NN_SMALLBATCH_PHASE1:1; gctUINT32 TP_SMALLBATCH_PHASE1:1; gctUINT32 SCALER:1; + gctUINT32 SCALER_4K:1; gctUINT32 NN_REQ_SLOWARBITRATION_FIX:1; gctUINT32 IMAGE_PARTIAL_CACHE:1; gctUINT32 FULLCACHE_KERNELHEAD_FIX:1; @@ -557,10 +578,19 @@ typedef struct gctUINT32 IMG_POP_PIPELINE_PAUSE_FIX:1; gctUINT32 DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX:1; gctUINT32 OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX:1; - gctUINT32 NN_PER_CHANNEL_POST_MULTIPLY:1; + gctUINT32 SMALL_BATCH_FLOPS_RESET_FIX:1; + gctUINT32 SMALL_BATCH_DISBLE_FIX:1; + gctUINT32 NEGATIVE_POST_SHIFT_FIX:1; + gctUINT32 NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX:1; + gctUINT32 OCB_REMAP_PHYSICAL_ADDRESS:1; gctUINT32 NN_NO_Z_LOCATION_OFFSET:1; + gctUINT32 NN_LEAKY_RELU:1; gctUINT32 NN_PRELU:1; - gctUINT32 OCB_REMAP_PHYSICAL_ADDRESS:1; + gctUINT32 NN_PER_CHANNEL_QUANT:1; + gctUINT32 NN_PER_CHANNEL_QUANT_ASYM:1; + gctUINT32 NN_NATIVE_STRIDE_TWO:1; + gctUINT32 NN_TENSOR_ADD:1; + gctUINT32 NN_FLOAT_POST_MULT:1; gctUINT32 NN_SLICE_PADDING_TO_64BYTE_ALIGN:1; gctUINT32 NN_DW_1x1_CONV_MERGE:1; gctUINT32 NN_SLOW_OUTPUT:1; @@ -568,8 +598,35 @@ typedef struct gctUINT32 TP_NN_PROBE:1; gctUINT32 TP_23BITS_POST_MULTIPLIER:1; gctUINT32 NN_TRANSPOSE:1; + gctUINT32 EVIS2_FLOP_RESET_FIX:1; + gctUINT32 USC_ASYNC_CP_RTN_FLOP_RESET_FIX:1; + gctUINT32 DDR_BURST_LEN_256B:1; + gctUINT32 IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX:1; + gctUINT32 USE_SINGLE_PORT_VIPSRAM:1; + gctUINT32 NN_ASYMMETRIC_INT8:1; + gctUINT32 DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX:1; + gctUINT32 PRELU_LEAKLY_RELU_CLAMP:1; + gctUINT32 TP_FLOAT32_IO:1; + gctUINT32 NN_FLOAT32_IO:1; + gctUINT32 NN_SMALL_BATCH_PHASE2:1; + gctUINT32 TILE_ACCESS_CAPABILITY:1; + gctUINT32 FAST_DP3_PREPROCESSOR:1; + gctUINT32 NN_COMPRESSION_BYPASSS:1; + gctUINT32 BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX:1; + gctUINT32 TP_3_USC:1; + gctUINT32 TP_KERNEL_1BYTE_ALGIN:1; + gctUINT32 TPLITE_BFLOAT16:1; + gctUINT32 PREPROCESS_IMG_BUF_640BYTE_LIMIT:1; + gctUINT32 V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX:1; + gctUINT32 V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX:1; + gctUINT32 BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX:1; + gctUINT32 INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX:1; + gctUINT32 TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX:1; + gctUINT32 VIP_HW_FINAL_RELEASE:1; } gcsFEATURE_DATABASE; +#define FEATURE_BIT_START 63 +#define FEATURE_BIT_END 605 static gcsFEATURE_DATABASE gChipInfo[] = { /* vipnano-qi */ { @@ -624,8 +681,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x20, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x7, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x7, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -855,6 +921,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -1000,6 +1067,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -1026,6 +1101,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -1057,6 +1133,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x1, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x0, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x0, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x0, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ @@ -1082,6 +1159,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -1112,17 +1190,51 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x0, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ 0x0, /* gcFEATURE_BIT_NN_PRELU */ - 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x1, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x0, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, /* vipnano-qi */ { @@ -1177,8 +1289,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x20, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x7, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x7, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -1408,6 +1529,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -1553,6 +1675,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -1579,6 +1709,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -1610,6 +1741,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x1, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x0, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x0, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x0, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ @@ -1635,6 +1767,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -1665,17 +1798,51 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x0, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ 0x0, /* gcFEATURE_BIT_NN_PRELU */ - 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x1, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x0, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, /* vipnano-qi */ { @@ -1730,8 +1897,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x20, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0xf, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -1961,6 +2137,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -2106,6 +2283,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -2132,6 +2317,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -2163,6 +2349,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ @@ -2188,6 +2375,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -2218,25 +2406,59 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x0, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ 0x0, /* gcFEATURE_BIT_NN_PRELU */ - 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x1, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x0, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, - /* vipnano-qi */ + /* vip9000nano-si */ { - 0x8000, /* ChipID */ - 0x7131, /* ChipRevision */ - 0x5000009, /* ProductID */ - 0x8000000, /* EcoID */ - 0xa1, /* CustomerID */ + 0x9000, /* ChipID */ + 0x8101, /* ChipRevision */ + 0x5090009, /* ProductID */ + 0x4000000, /* EcoID */ + 0xb9, /* CustomerID */ 0x0, /* PatchVersion */ "", /* ProductName */ 0x0, /* FormalRelease */ @@ -2252,7 +2474,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x1, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ 0x2, /* gcFEATURE_VALUE_USC_BANKS */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ @@ -2263,28 +2485,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x4, /* gcFEATURE_VALUE_NNCoreCount */ + 0x4, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x4, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ - 0xc, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x9, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x20, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x100000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x6, /* gcFEATURE_VALUE_TPEngine_CoreCount */ - 0x43f000, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ - 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ - 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ - 0x0, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x80000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x0, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ + 0x5, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x200, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x7, /* gcFEATURE_VALUE_TPLite_CoreCount */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ - 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ - 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ - 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x10, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x40, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x1f, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x1f, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x100, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2514,6 +2745,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -2659,6 +2891,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -2685,6 +2925,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -2716,14 +2957,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ - 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP6 */ 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ 0x1, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ @@ -2735,12 +2977,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ - 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x1, /* gcFEATURE_BIT_NN_XYDP0 */ 0x0, /* gcFEATURE_BIT_ZRL_7BIT */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -2748,48 +2991,82 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ - 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ - 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ - 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x1, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ - 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x1, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ - 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ - 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x1, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ 0x1, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ - 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ - 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ - 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ - 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ - 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ - 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ - 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ + 0x1, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ + 0x1, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ - 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ - 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ + 0x1, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ - 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x1, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x1, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x1, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, - /* vippico_v3 */ + /* vip9000nano-di */ { - 0x8000, /* ChipID */ - 0x7131, /* ChipRevision */ - 0x8000001, /* ProductID */ - 0x2000000, /* EcoID */ - 0x99, /* CustomerID */ + 0x9000, /* ChipID */ + 0x8102, /* ChipRevision */ + 0x5090009, /* ProductID */ + 0x8000000, /* EcoID */ + 0xbe, /* CustomerID */ 0x0, /* PatchVersion */ "", /* ProductName */ 0x0, /* FormalRelease */ @@ -2805,7 +3082,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x1, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ 0x2, /* gcFEATURE_VALUE_USC_BANKS */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ @@ -2816,28 +3093,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x2, /* gcFEATURE_VALUE_NNCoreCount */ - 0x2, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ - 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x9, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x20, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x80000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x100000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x3, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ - 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ - 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ - 0x7, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x5, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x200, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPLite_CoreCount */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ - 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ - 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ - 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x10, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x40, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x1f, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x1f, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x100, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -3067,6 +3353,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -3212,6 +3499,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -3238,6 +3533,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -3258,7 +3554,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TP_LRN */ 0x1, /* gcFEATURE_BIT_TP_MAX_POOLING_STRIDE1 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ - 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ + 0x1, /* gcFEATURE_BIT_NN_INT16_ALU */ 0x1, /* gcFEATURE_BIT_TP_ROI_POOLING */ 0x1, /* gcFEATURE_BIT_NN_ZDP3 */ 0x0, /* gcFEATURE_BIT_NN_ZDP6 */ @@ -3269,31 +3565,33 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ - 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP6 */ 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ - 0x0, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ - 0x0, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ - 0x0, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ + 0x1, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ + 0x1, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ 0x0, /* gcFEATURE_BIT_INPUT_4BIT */ 0x1, /* gcFEATURE_BIT_COEF_COMPRESSION_ENHANCEMENT */ - 0x0, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ - 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ - 0x1, /* gcFEATURE_BIT_ZRL_7BIT */ + 0x1, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x0, /* gcFEATURE_BIT_ZRL_7BIT */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -3301,40 +3599,1290 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ - 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ - 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ - 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x1, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ - 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x1, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ - 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ - 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x1, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ - 0x0, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ - 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ + 0x1, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ - 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ - 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ - 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ - 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ - 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x1, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ + 0x1, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ + 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ + 0x1, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_TP_NN_PROBE */ + 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ + 0x1, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x1, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x1, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x0, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ + }, + /* vipnano-qi */ + { + 0x8000, /* ChipID */ + 0x7131, /* ChipRevision */ + 0x5000009, /* ProductID */ + 0x8000000, /* EcoID */ + 0xa1, /* CustomerID */ + 0x0, /* PatchVersion */ + "", /* ProductName */ + 0x0, /* FormalRelease */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x1, /* gcFEATURE_VALUE_CoreCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ + 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x2, /* gcFEATURE_VALUE_USC_BANKS */ + 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x0, /* gcFEATURE_VALUE_BufferSize */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ + 0xc, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x100000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x6, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x43f000, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ + 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ + 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ + 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0xf, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ + 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_DebugMode */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 0x0, /* gcFEATURE_BIT_REG_DC */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_NoEZ */ + 0x0, /* gcFEATURE_BIT_REG_No422Texture */ + 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ + 0x0, /* gcFEATURE_BIT_REG_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ + 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ + 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ + 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */ + 0x0, /* gcFEATURE_BIT_REG_PipeVG */ + 0x0, /* gcFEATURE_BIT_REG_VGTS */ + 0x0, /* gcFEATURE_BIT_REG_FE20 */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ + 0x1, /* gcFEATURE_BIT_REG_FlipY */ + 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_Texture8K */ + 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ + 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ + 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ + 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x1, /* gcFEATURE_BIT_REG_Render8K */ + 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ + 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 0x0, /* gcFEATURE_BIT_REG_VG20 */ + 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_VGFilter */ + 0x0, /* gcFEATURE_BIT_REG_VG21 */ + 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x0, /* gcFEATURE_BIT_REG_VAA */ + 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_NewTexture */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ + 0x0, /* gcFEATURE_BIT_REG_TextureStride */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ + 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_New2D */ + 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ + 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ + 0x1, /* gcFEATURE_BIT_REG_Halti0 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ + 0x1, /* gcFEATURE_BIT_REG_MMU */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ + 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x1, /* gcFEATURE_BIT_REG_LineLoop */ + 0x1, /* gcFEATURE_BIT_REG_LogicOp */ + 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x0, /* gcFEATURE_BIT_REG_Composition */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ + 0x0, /* gcFEATURE_BIT_REG_RGB888 */ + 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x0, /* gcFEATURE_BIT_REG_TXFilter */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_Interleaver */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_OclOnly */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x1, /* gcFEATURE_BIT_REG_Generics */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ + 0x0, /* gcFEATURE_BIT_REG_WClip */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x1, /* gcFEATURE_BIT_REG_NewHZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ + 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ + 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ + 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ + 0x1, /* gcFEATURE_BIT_REG_EEZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ + 0x1, /* gcFEATURE_BIT_REG_Halti3 */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_Halti5 */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ + 0x0, /* gcFEATURE_BIT_REG_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ + 0x0, /* gcFEATURE_BIT_RenderTarget8 */ + 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ + 0x0, /* gcFEATURE_BIT_FaceLod */ + 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ + 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* gcFEATURE_BIT_ChipEnableLink */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ + 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ + 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ + 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ + 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ + 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_DXT */ + 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ + 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */ + 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ + 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */ + 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */ + 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ + 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */ + 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ + 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ + 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ + 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ + 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY */ + 0x1, /* gcFEATURE_BIT_ROBUSTNESS */ + 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ + 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ + 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ + 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */ + 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 0x1, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ + 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ + 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ + 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ + 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ + 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */ + 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ + 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ + 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ + 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ + 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ + 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + 0x0, /* gcFEATURE_BIT_TX_SEAMLESS_CUBE */ + 0x0, /* gcFEATURE_BIT_TX_SNORM_SUPPORT */ + 0x0, /* gcFEATURE_BIT_SH_SCATTER_GATHER */ + 0x0, /* gcFEATURE_BIT_HWMANAGED_LS */ + 0x0, /* gcFEATURE_BIT_SH_IMAGE_ENABLE_FIX */ + 0x1, /* gcFEATURE_BIT_MSAA_FRAGMENT_OPERATION */ + 0x0, /* gcFEATURE_BIT_PE_TILE_CACHE_FLUSH_FIX */ + 0x0, /* gcFEATURE_BIT_BLT_YUV_OUTPUT */ + 0x1, /* gcFEATURE_BIT_SH_IO_CG_FIX */ + 0x0, /* gcFEATURE_BIT_PE_SWIZZLE */ + 0x0, /* gcFEATURE_BIT_SH_ROBUSTNESS_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX2 */ + 0x0, /* gcFEATURE_BIT_PE_A8B8G8R8 */ + 0x0, /* gcFEATURE_BIT_MULTIVIEW_RENDER */ + 0x0, /* gcFEATURE_BIT_FE_DRAW_DIRECT */ + 0x0, /* gcFEATURE_BIT_TX_VKBORDER_MODE */ + 0x0, /* gcFEATURE_BIT_TX_UNNORMALIZED_COORD */ + 0x0, /* gcFEATURE_BIT_PA_LINECLIP_FIX */ + 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac_ROUNDING_FIX */ + 0x0, /* gcFEATURE_BIT_MP_ARCH */ + 0x0, /* gcFEATURE_BIT_TX_NO_FIXED_FILTER */ + 0x0, /* gcFEATURE_BIT_SHARE_Z */ + 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ + 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ + 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ + 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ + 0x0, /* gcFEATURE_BIT_VG_FP25 */ + 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ + 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ + 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */ + 0x0, /* gcFEATURE_BIT_VG_MMU */ + 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */ + 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ + 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ + 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_VG_IMAGE_16K */ + 0x0, /* gcFEATURE_BIT_VG_FORMAT_ARGB2222 */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ + 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ + 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_TP_LRN */ + 0x1, /* gcFEATURE_BIT_TP_MAX_POOLING_STRIDE1 */ + 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ + 0x1, /* gcFEATURE_BIT_NN_INT16_ALU */ + 0x1, /* gcFEATURE_BIT_TP_ROI_POOLING */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3 */ + 0x0, /* gcFEATURE_BIT_NN_ZDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP9 */ + 0x1, /* gcFEATURE_BIT_NN_INT8_SCALE */ + 0x1, /* gcFEATURE_BIT_NN_POWER_ISOLATION */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ + 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ + 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ + 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ + 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ + 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ + 0x1, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ + 0x1, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ + 0x0, /* gcFEATURE_BIT_INPUT_4BIT */ + 0x1, /* gcFEATURE_BIT_COEF_COMPRESSION_ENHANCEMENT */ + 0x1, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ + 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x0, /* gcFEATURE_BIT_ZRL_7BIT */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ + 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ + 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ + 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SINGLEPORT_ACCUMBUFFER */ + 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ + 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ + 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ + 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ + 0x1, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ + 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ + 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ + 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ + 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ + 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ + 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ + 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ + 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ + 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ + }, + /* vippico_v3 */ + { + 0x8000, /* ChipID */ + 0x7131, /* ChipRevision */ + 0x8000001, /* ProductID */ + 0x2000000, /* EcoID */ + 0x99, /* CustomerID */ + 0x0, /* PatchVersion */ + "", /* ProductName */ + 0x0, /* FormalRelease */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x1, /* gcFEATURE_VALUE_CoreCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ + 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x2, /* gcFEATURE_VALUE_USC_BANKS */ + 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x0, /* gcFEATURE_VALUE_BufferSize */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x2, /* gcFEATURE_VALUE_NNCoreCount */ + 0x2, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x80000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x0, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ + 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x7, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ + 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ + 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0xf, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ + 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_DebugMode */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 0x0, /* gcFEATURE_BIT_REG_DC */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_NoEZ */ + 0x0, /* gcFEATURE_BIT_REG_No422Texture */ + 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ + 0x0, /* gcFEATURE_BIT_REG_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ + 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ + 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ + 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */ + 0x0, /* gcFEATURE_BIT_REG_PipeVG */ + 0x0, /* gcFEATURE_BIT_REG_VGTS */ + 0x0, /* gcFEATURE_BIT_REG_FE20 */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ + 0x1, /* gcFEATURE_BIT_REG_FlipY */ + 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_Texture8K */ + 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ + 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ + 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ + 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x1, /* gcFEATURE_BIT_REG_Render8K */ + 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ + 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 0x0, /* gcFEATURE_BIT_REG_VG20 */ + 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_VGFilter */ + 0x0, /* gcFEATURE_BIT_REG_VG21 */ + 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x0, /* gcFEATURE_BIT_REG_VAA */ + 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_NewTexture */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ + 0x0, /* gcFEATURE_BIT_REG_TextureStride */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ + 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_New2D */ + 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ + 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ + 0x1, /* gcFEATURE_BIT_REG_Halti0 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ + 0x1, /* gcFEATURE_BIT_REG_MMU */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ + 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x1, /* gcFEATURE_BIT_REG_LineLoop */ + 0x1, /* gcFEATURE_BIT_REG_LogicOp */ + 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x0, /* gcFEATURE_BIT_REG_Composition */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ + 0x0, /* gcFEATURE_BIT_REG_RGB888 */ + 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x0, /* gcFEATURE_BIT_REG_TXFilter */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_Interleaver */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_OclOnly */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x1, /* gcFEATURE_BIT_REG_Generics */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ + 0x0, /* gcFEATURE_BIT_REG_WClip */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x1, /* gcFEATURE_BIT_REG_NewHZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ + 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ + 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ + 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ + 0x1, /* gcFEATURE_BIT_REG_EEZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ + 0x1, /* gcFEATURE_BIT_REG_Halti3 */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_Halti5 */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ + 0x0, /* gcFEATURE_BIT_REG_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ + 0x0, /* gcFEATURE_BIT_RenderTarget8 */ + 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ + 0x0, /* gcFEATURE_BIT_FaceLod */ + 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ + 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* gcFEATURE_BIT_ChipEnableLink */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ + 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ + 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ + 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ + 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ + 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_DXT */ + 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ + 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */ + 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ + 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */ + 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */ + 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ + 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */ + 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ + 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ + 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ + 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ + 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY */ + 0x1, /* gcFEATURE_BIT_ROBUSTNESS */ + 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ + 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ + 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ + 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */ + 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 0x1, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ + 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ + 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ + 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ + 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ + 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */ + 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ + 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ + 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ + 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ + 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ + 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + 0x0, /* gcFEATURE_BIT_TX_SEAMLESS_CUBE */ + 0x0, /* gcFEATURE_BIT_TX_SNORM_SUPPORT */ + 0x0, /* gcFEATURE_BIT_SH_SCATTER_GATHER */ + 0x0, /* gcFEATURE_BIT_HWMANAGED_LS */ + 0x0, /* gcFEATURE_BIT_SH_IMAGE_ENABLE_FIX */ + 0x1, /* gcFEATURE_BIT_MSAA_FRAGMENT_OPERATION */ + 0x0, /* gcFEATURE_BIT_PE_TILE_CACHE_FLUSH_FIX */ + 0x0, /* gcFEATURE_BIT_BLT_YUV_OUTPUT */ + 0x1, /* gcFEATURE_BIT_SH_IO_CG_FIX */ + 0x0, /* gcFEATURE_BIT_PE_SWIZZLE */ + 0x0, /* gcFEATURE_BIT_SH_ROBUSTNESS_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX2 */ + 0x0, /* gcFEATURE_BIT_PE_A8B8G8R8 */ + 0x0, /* gcFEATURE_BIT_MULTIVIEW_RENDER */ + 0x0, /* gcFEATURE_BIT_FE_DRAW_DIRECT */ + 0x0, /* gcFEATURE_BIT_TX_VKBORDER_MODE */ + 0x0, /* gcFEATURE_BIT_TX_UNNORMALIZED_COORD */ + 0x0, /* gcFEATURE_BIT_PA_LINECLIP_FIX */ + 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac_ROUNDING_FIX */ + 0x0, /* gcFEATURE_BIT_MP_ARCH */ + 0x0, /* gcFEATURE_BIT_TX_NO_FIXED_FILTER */ + 0x0, /* gcFEATURE_BIT_SHARE_Z */ + 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ + 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ + 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ + 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ + 0x0, /* gcFEATURE_BIT_VG_FP25 */ + 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ + 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ + 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */ + 0x0, /* gcFEATURE_BIT_VG_MMU */ + 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */ + 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ + 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ + 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_VG_IMAGE_16K */ + 0x0, /* gcFEATURE_BIT_VG_FORMAT_ARGB2222 */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ + 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ + 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_TP_LRN */ + 0x1, /* gcFEATURE_BIT_TP_MAX_POOLING_STRIDE1 */ + 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ + 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ + 0x1, /* gcFEATURE_BIT_TP_ROI_POOLING */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3 */ + 0x0, /* gcFEATURE_BIT_NN_ZDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP9 */ + 0x1, /* gcFEATURE_BIT_NN_INT8_SCALE */ + 0x1, /* gcFEATURE_BIT_NN_POWER_ISOLATION */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ + 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ + 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ + 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ + 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ + 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ + 0x0, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ + 0x0, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ + 0x0, /* gcFEATURE_BIT_INPUT_4BIT */ + 0x1, /* gcFEATURE_BIT_COEF_COMPRESSION_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ + 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x1, /* gcFEATURE_BIT_ZRL_7BIT */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ + 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ + 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ + 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SINGLEPORT_ACCUMBUFFER */ + 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ + 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ + 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ + 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ + 0x0, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ + 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ + 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ + 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ + 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, }; diff --git a/drivers/amlogic/npu/inc/gc_hal.h b/drivers/amlogic/npu/inc/gc_hal.h index 6b98a546c81fa4..a510def244d2b8 100644 --- a/drivers/amlogic/npu/inc/gc_hal.h +++ b/drivers/amlogic/npu/inc/gc_hal.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -14,11 +14,11 @@ #ifndef __gc_hal_h_ #define __gc_hal_h_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_enum.h" #include "gc_hal_base.h" #include "gc_hal_profiler.h" -#include "gc_hal_driver.h" +#include "shared/gc_hal_driver.h" #if gcdENABLE_3D #include "gc_hal_statistics.h" #endif @@ -115,73 +115,8 @@ extern "C" { #define gcmGET_POST_ROTATION(rotate) \ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)) -/******************************************************************************\ -******************************** gcsOBJECT Object ******************************* -\******************************************************************************/ - -/* Type of objects. */ -typedef enum _gceOBJECT_TYPE -{ - gcvOBJ_UNKNOWN = 0, - gcvOBJ_2D = gcmCC('2','D',' ',' '), - gcvOBJ_3D = gcmCC('3','D',' ',' '), - gcvOBJ_ATTRIBUTE = gcmCC('A','T','T','R'), - gcvOBJ_BRUSHCACHE = gcmCC('B','R','U','$'), - gcvOBJ_BRUSHNODE = gcmCC('B','R','U','n'), - gcvOBJ_BRUSH = gcmCC('B','R','U','o'), - gcvOBJ_BUFFER = gcmCC('B','U','F','R'), - gcvOBJ_COMMAND = gcmCC('C','M','D',' '), - gcvOBJ_COMMANDBUFFER = gcmCC('C','M','D','B'), - gcvOBJ_CONTEXT = gcmCC('C','T','X','T'), - gcvOBJ_DEVICE = gcmCC('D','E','V',' '), - gcvOBJ_DUMP = gcmCC('D','U','M','P'), - gcvOBJ_EVENT = gcmCC('E','V','N','T'), - gcvOBJ_FUNCTION = gcmCC('F','U','N','C'), - gcvOBJ_HAL = gcmCC('H','A','L',' '), - gcvOBJ_HARDWARE = gcmCC('H','A','R','D'), - gcvOBJ_HEAP = gcmCC('H','E','A','P'), - gcvOBJ_INDEX = gcmCC('I','N','D','X'), - gcvOBJ_INTERRUPT = gcmCC('I','N','T','R'), - gcvOBJ_KERNEL = gcmCC('K','E','R','N'), - gcvOBJ_KERNEL_FUNCTION = gcmCC('K','F','C','N'), - gcvOBJ_MEMORYBUFFER = gcmCC('M','E','M','B'), - gcvOBJ_MMU = gcmCC('M','M','U',' '), - gcvOBJ_OS = gcmCC('O','S',' ',' '), - gcvOBJ_OUTPUT = gcmCC('O','U','T','P'), - gcvOBJ_PAINT = gcmCC('P','N','T',' '), - gcvOBJ_PATH = gcmCC('P','A','T','H'), - gcvOBJ_QUEUE = gcmCC('Q','U','E',' '), - gcvOBJ_SAMPLER = gcmCC('S','A','M','P'), - gcvOBJ_SHADER = gcmCC('S','H','D','R'), - gcvOBJ_VIR_SHADER = gcmCC('V','S','D','R'), - gcvOBJ_STREAM = gcmCC('S','T','R','M'), - gcvOBJ_SURF = gcmCC('S','U','R','F'), - gcvOBJ_TEXTURE = gcmCC('T','X','T','R'), - gcvOBJ_UNIFORM = gcmCC('U','N','I','F'), - gcvOBJ_VARIABLE = gcmCC('V','A','R','I'), - gcvOBJ_VERTEX = gcmCC('V','R','T','X'), - gcvOBJ_VIDMEM = gcmCC('V','M','E','M'), - gcvOBJ_VIDMEM_BLOCK = gcmCC('V','M','B','K'), - gcvOBJ_VG = gcmCC('V','G',' ',' '), - gcvOBJ_BUFOBJ = gcmCC('B','U','F','O'), - gcvOBJ_UNIFORM_BLOCK = gcmCC('U','B','L','K'), - gcvOBJ_CL = gcmCC('C','L',' ',' '), - gcvOBJ_STORAGE_BLOCK = gcmCC('S','B','L','K'), - gcvOBJ_IO_BLOCK = gcmCC('I','O','B','K'), -} -gceOBJECT_TYPE; - -/* gcsOBJECT object defintinon. */ -typedef struct _gcsOBJECT -{ - /* Type of an object. */ - gceOBJECT_TYPE type; -} -gcsOBJECT; - typedef struct _gckHARDWARE * gckHARDWARE; - #define gcdMAX_GPU_COUNT gcvCORE_COUNT #define gcdMAX_SURF_LAYERS 4 @@ -189,6 +124,10 @@ typedef struct _gckHARDWARE * gckHARDWARE; #define gcdMAX_DRAW_BUFFERS 16 #define gcdMAX_3DGPU_COUNT 8 + +#define gcdMAX_MAJOR_CORE_COUNT 8 + +#define gcdMAX_VERTEX_STREAM_COUNT 4 /******************************************************************************* ** ** gcmVERIFY_OBJECT @@ -1307,35 +1246,6 @@ gckOS_SetDebugFile( IN gctCONST_STRING FileName ); -/******************************************************************************* -** Broadcast interface. -*/ - -typedef enum _gceBROADCAST -{ - /* GPU might be idle. */ - gcvBROADCAST_GPU_IDLE, - - /* A commit is going to happen. */ - gcvBROADCAST_GPU_COMMIT, - - /* GPU seems to be stuck. */ - gcvBROADCAST_GPU_STUCK, - - /* First process gets attached. */ - gcvBROADCAST_FIRST_PROCESS, - - /* Last process gets detached. */ - gcvBROADCAST_LAST_PROCESS, - - /* AXI bus error. */ - gcvBROADCAST_AXI_BUS_ERROR, - - /* Out of memory. */ - gcvBROADCAST_OUT_OF_MEMORY, -} -gceBROADCAST; - gceSTATUS gckOS_Broadcast( IN gckOS Os, @@ -1560,42 +1470,6 @@ typedef struct _gcsDEVICE * gckDEVICE; struct _gcsHAL_INTERFACE; -/* Notifications. */ -typedef enum _gceNOTIFY -{ - gcvNOTIFY_INTERRUPT, - gcvNOTIFY_COMMAND_QUEUE, -} -gceNOTIFY; - -/* Flush flags. */ -typedef enum _gceKERNEL_FLUSH -{ - gcvFLUSH_COLOR = 0x01, - gcvFLUSH_DEPTH = 0x02, - gcvFLUSH_TEXTURE = 0x04, - gcvFLUSH_2D = 0x08, - gcvFLUSH_L2 = 0x10, - gcvFLUSH_TILE_STATUS = 0x20, - gcvFLUSH_ICACHE = 0x40, - gcvFLUSH_TXDESC = 0x80, - gcvFLUSH_FENCE = 0x100, - gcvFLUSH_VERTEX = 0x200, - gcvFLUSH_TFBHEADER = 0x400, - gcvFLUSH_ALL = gcvFLUSH_COLOR - | gcvFLUSH_DEPTH - | gcvFLUSH_TEXTURE - | gcvFLUSH_2D - | gcvFLUSH_L2 - | gcvFLUSH_TILE_STATUS - | gcvFLUSH_ICACHE - | gcvFLUSH_TXDESC - | gcvFLUSH_FENCE - | gcvFLUSH_VERTEX - | gcvFLUSH_TFBHEADER -} -gceKERNEL_FLUSH; - /* Construct a new gckKERNEL object. */ gceSTATUS gckKERNEL_Construct( @@ -1651,21 +1525,22 @@ gckKERNEL_MapVideoMemory( IN gckKERNEL Kernel, IN gctBOOL InUserSpace, IN gcePOOL Pool, + IN gctPHYS_ADDR Physical, IN gctUINT32 Offset, IN gctUINT32 Bytes, OUT gctPOINTER * Logical ); -#ifdef __QNXNTO__ /* Unmap dedicated video memory. */ gceSTATUS gckKERNEL_UnmapVideoMemory( IN gckKERNEL Kernel, + IN gcePOOL Pool, + IN gctPHYS_ADDR Physical, IN gctPOINTER Logical, IN gctUINT32 Pid, - IN gctUINT32 Bytes + IN gctSIZE_T Bytes ); -#endif /* Map memory. */ gceSTATUS @@ -1685,6 +1560,12 @@ gckKERNEL_UnmapMemory( IN gctPOINTER Logical, IN gctUINT32 ProcessID ); +/* Destroy reserved mem when destroy process*/ +gceSTATUS +gckKERNEL_DestroyProcessReservedUserMap( + IN gckKERNEL Kernel, + IN gctUINT32 Pid + ); /* Notification of events. */ gceSTATUS @@ -1948,6 +1829,14 @@ gckHARDWARE_ReadInterrupt( OUT gctUINT32_PTR IDs ); +/* +* State timer helper. +*/ +gceSTATUS +gckHARDWARE_StartTimerReset( + IN gckHARDWARE Hardware + ); + /* Power management. */ gceSTATUS gckHARDWARE_SetPowerState( @@ -1977,7 +1866,8 @@ gckHARDWARE_SetGpuProfiler( gceSTATUS gckHARDWARE_SetFscaleValue( IN gckHARDWARE Hardware, - IN gctUINT32 FscaleValue + IN gctUINT32 FscaleValue, + IN gctUINT32 ShaderFscaleValue ); gceSTATUS diff --git a/drivers/amlogic/npu/inc/gc_hal_base.h b/drivers/amlogic/npu/inc/gc_hal_base.h index f40c9d7f8cd418..6e18e95dabfcc1 100644 --- a/drivers/amlogic/npu/inc/gc_hal_base.h +++ b/drivers/amlogic/npu/inc/gc_hal_base.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -15,8 +15,9 @@ #define __gc_hal_base_h_ #include "gc_hal_enum.h" -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_debug_zones.h" +#include "shared/gc_hal_base.h" #ifdef __cplusplus @@ -55,14 +56,6 @@ typedef void * gcoVG; typedef struct _gcoFENCE * gcoFENCE; typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR; -typedef enum { - gcvFENCE_TYPE_READ = 0x1, - gcvFENCE_TYPE_WRITE = 0x2, - gcvFENCE_TYPE_ALL = gcvFENCE_TYPE_READ | gcvFENCE_TYPE_WRITE, - gcvFNECE_TYPE_INVALID = 0x10000, -} -gceFENCE_TYPE; - typedef struct _gcsUSER_MEMORY_DESC * gcsUSER_MEMORY_DESC_PTR; /* Immuatable features from database */ @@ -94,8 +87,14 @@ typedef struct _gcsNN_FIXED_FEATURE gctUINT uscBanks; gctUINT nnLanesPerOutCycle; gctUINT maxOTNumber; + gctUINT physicalVipSramWidthInByte; gctUINT equivalentVipsramWidthInByte; gctUINT shaderCoreCount; + gctUINT latencyHidingAtFullAxiBw; + gctUINT axiBusWidth; + gctUINT nnMaxKXSize; + gctUINT nnMaxKYSize; + gctUINT nnMaxKZSize; } gcsNN_FIXED_FEATURE; /* Features can be customized from outside */ @@ -103,6 +102,9 @@ typedef struct _gcsNN_CUSTOMIZED_FEATURE { gctUINT vipSRAMSize; gctUINT axiSRAMSize; + gctUINT vipSRAMRemapStartAddr; + gctUINT axiSRAMRemapStartAddr; + gctUINT axiSRAMRemapEndAddr; gctFLOAT ddrReadBWLimit; gctFLOAT ddrWriteBWLimit; gctFLOAT ddrTotalBWLimit; @@ -120,6 +122,7 @@ typedef struct _gcsNN_CUSTOMIZED_FEATURE gctUINT nnWriteWithoutUSC; gctUINT depthWiseSupport; gctUINT vipVectorPrune; + gctUINT ddrKernelBurstSize; } gcsNN_CUSTOMIZED_FEATURE; /* Features are unified (hardcoded) for hardwares */ @@ -227,6 +230,7 @@ gcsSystemInfo; gcvNULL, /* VX context lock */ \ gcvPATCH_NOTINIT,/* global patchID */ \ gcvNULL, /* global fenceID*/ \ + gcvNULL, /* mainThreadHandle */ \ gcvFALSE, /* memory profile flag */ \ gcvNULL, /* profileLock; */ \ 0, /* allocCount; */ \ @@ -255,24 +259,12 @@ typedef struct _gcsDRIVER_TLS } gcsDRIVER_TLS; -typedef enum _gceTLS_KEY -{ - gcvTLS_KEY_EGL, - gcvTLS_KEY_OPENGL_ES, - gcvTLS_KEY_OPENVG, - gcvTLS_KEY_OPENGL, - gcvTLS_KEY_OPENCL, - gcvTLS_KEY_OPENVX, - - gcvTLS_KEY_COUNT -} -gceTLS_KEY; - typedef struct _gcsTLS * gcsTLS_PTR; typedef struct _gcsTLS { gceHARDWARE_TYPE currentType; + gceHARDWARE_TYPE targetType; /* To which core device control is called, * it is index in a hardware type. @@ -305,139 +297,6 @@ typedef struct _gcsTLS } gcsTLS; -/******************************************************************************\ -********************************* Enumerations ********************************* -\******************************************************************************/ - -typedef enum _gcePLS_VALUE -{ - gcePLS_VALUE_EGL_DISPLAY_INFO, - gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO, - gcePLS_VALUE_EGL_DESTRUCTOR_INFO, -} -gcePLS_VALUE; - -/* Video memory pool type. */ -typedef enum _gcePOOL -{ - gcvPOOL_UNKNOWN = 0, - gcvPOOL_DEFAULT, - gcvPOOL_LOCAL, - gcvPOOL_LOCAL_INTERNAL, - gcvPOOL_LOCAL_EXTERNAL, - gcvPOOL_UNIFIED, - gcvPOOL_SYSTEM, - gcvPOOL_SRAM, - gcvPOOL_VIRTUAL, - gcvPOOL_USER, - gcvPOOL_INTERNAL_SRAM, - gcvPOOL_EXTERNAL_SRAM, - - gcvPOOL_NUMBER_OF_POOLS -} -gcePOOL; - -#if gcdENABLE_3D -/* Blending functions. */ -typedef enum _gceBLEND_FUNCTION -{ - gcvBLEND_ZERO, - gcvBLEND_ONE, - gcvBLEND_SOURCE_COLOR, - gcvBLEND_INV_SOURCE_COLOR, - gcvBLEND_SOURCE_ALPHA, - gcvBLEND_INV_SOURCE_ALPHA, - gcvBLEND_TARGET_COLOR, - gcvBLEND_INV_TARGET_COLOR, - gcvBLEND_TARGET_ALPHA, - gcvBLEND_INV_TARGET_ALPHA, - gcvBLEND_SOURCE_ALPHA_SATURATE, - gcvBLEND_CONST_COLOR, - gcvBLEND_INV_CONST_COLOR, - gcvBLEND_CONST_ALPHA, - gcvBLEND_INV_CONST_ALPHA, -} -gceBLEND_FUNCTION; - -/* Blending modes. */ -typedef enum _gceBLEND_MODE -{ - gcvBLEND_ADD = 0, - gcvBLEND_SUBTRACT, - gcvBLEND_REVERSE_SUBTRACT, - gcvBLEND_MIN, - gcvBLEND_MAX, - gcvBLEND_MULTIPLY, - gcvBLEND_SCREEN, - gcvBLEND_OVERLAY, - gcvBLEND_DARKEN, - gcvBLEND_LIGHTEN, - gcvBLEND_COLORDODGE, - gcvBLEND_COLORBURN, - gcvBLEND_HARDLIGHT, - gcvBLEND_SOFTLIGHT, - gcvBLEND_DIFFERENCE, - gcvBLEND_EXCLUSION, - gcvBLEND_HSL_HUE, - gcvBLEND_HSL_SATURATION, - gcvBLEND_HSL_COLOR, - gcvBLEND_HSL_LUMINOSITY, - - gcvBLEND_TOTAL -} -gceBLEND_MODE; - -/* Depth modes. */ -typedef enum _gceDEPTH_MODE -{ - gcvDEPTH_NONE, - gcvDEPTH_Z, - gcvDEPTH_W, -} -gceDEPTH_MODE; -#endif /* gcdENABLE_3D */ - - -/* API flags. */ -typedef enum _gceAPI -{ - gcvAPI_D3D = 1, - gcvAPI_OPENGL_ES11, - gcvAPI_OPENGL_ES20, - gcvAPI_OPENGL_ES30, - gcvAPI_OPENGL_ES31, - gcvAPI_OPENGL_ES32, - gcvAPI_OPENGL, - gcvAPI_OPENVG, - gcvAPI_OPENCL, - gcvAPI_OPENVK, -} -gceAPI; - -typedef enum _gceWHERE -{ - gcvWHERE_COMMAND_PREFETCH = 0, - gcvWHERE_COMMAND, - gcvWHERE_RASTER, - gcvWHERE_PIXEL, - gcvWHERE_BLT, -} -gceWHERE; - -typedef enum _gceHOW -{ - gcvHOW_SEMAPHORE = 0x1, - gcvHOW_STALL = 0x2, - gcvHOW_SEMAPHORE_STALL = 0x3, -} -gceHOW; - -typedef enum _gceSignalHandlerType -{ - gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1, -} -gceSignalHandlerType; - typedef struct _gcsSURF_VIEW { gcoSURF surf; @@ -475,20 +334,6 @@ typedef struct _gcsHAL_CHIPIDENTITY } gcsHAL_CHIPIDENTITY; - -#define gcdEXTERNAL_MEMORY_NAME_MAX 32 -#define gcdEXTERNAL_MEMORY_DATA_MAX 8 - -typedef struct _gcsEXTERNAL_MEMORY_INFO -{ - /* Name of allocator used to attach this memory. */ - gctCHAR allocatorName[gcdEXTERNAL_MEMORY_NAME_MAX]; - - /* User defined data which will be passed to allocator. */ - gctUINT32 userData[gcdEXTERNAL_MEMORY_DATA_MAX]; -} -gcsEXTERNAL_MEMORY_INFO; - /******************************************************************************\ ********************************* gcoHAL Object ********************************* \******************************************************************************/ @@ -577,7 +422,10 @@ gcoHAL_GetProductName( gceSTATUS gcoHAL_SetFscaleValue( - IN gctUINT FscaleValue + IN gcoHAL Hal, + IN gctUINT CoreIndex, + IN gctUINT FscaleValue, + IN gctUINT ShaderFscaleValue ); gceSTATUS @@ -940,6 +788,24 @@ gcoHAL_GetCurrentCoreIndex( OUT gctUINT32 *Core ); +gceSTATUS +gcoHAL_ConvertCoreIndexGlobal( + IN gcoHAL Hal, + IN gceHARDWARE_TYPE Type, + IN gctUINT32 CoreCount, + IN gctUINT32 *LocalCoreIndexs, + OUT gctUINT32 *GlobalCoreIndexs + ); + +gceSTATUS +gcoHAL_ConvertCoreIndexLocal( + IN gcoHAL Hal, + IN gceHARDWARE_TYPE Type, + IN gctUINT32 CoreCount, + IN gctUINT32 *GlobalCoreIndexs, + OUT gctUINT32 *LocalCoreIndexs + ); + gceSTATUS gcoHAL_SelectChannel( IN gcoHAL Hal, @@ -1034,6 +900,14 @@ gcoHAL_UnlockVideoMemory( IN gceENGINE engine ); +gceSTATUS +gcoHAL_UnlockVideoMemoryEX( + IN gctUINT32 Node, + IN gceVIDMEM_TYPE Type, + IN gceENGINE Engine, + IN gctBOOL Sync + ); + gceSTATUS gcoHAL_ReleaseVideoMemory( IN gctUINT32 Node @@ -1289,17 +1163,6 @@ gcoOS_DeviceControl( #define gcdMAX_PATH 512 -typedef enum _gceFILE_MODE -{ - gcvFILE_CREATE = 0, - gcvFILE_APPEND, - gcvFILE_READ, - gcvFILE_CREATETEXT, - gcvFILE_APPENDTEXT, - gcvFILE_READTEXT, -} -gceFILE_MODE; - /* Open a file. */ gceSTATUS gcoOS_Open( @@ -1472,14 +1335,6 @@ gcoOS_Stat( OUT gctPOINTER Buffer ); -typedef enum _gceFILE_WHENCE -{ - gcvFILE_SEEK_SET, - gcvFILE_SEEK_CUR, - gcvFILE_SEEK_END -} -gceFILE_WHENCE; - /* Set the current position of a file. */ gceSTATUS gcoOS_Seek( @@ -2180,48 +2035,6 @@ typedef struct _gcsPIXEL /*----------------------------------------------------------------------------*/ /*------------------------------- gcoSURF Common ------------------------------*/ -/* Color format classes. */ -typedef enum _gceFORMAT_CLASS -{ - gcvFORMAT_CLASS_RGBA = 4500, - gcvFORMAT_CLASS_YUV, - gcvFORMAT_CLASS_INDEX, - gcvFORMAT_CLASS_LUMINANCE, - gcvFORMAT_CLASS_BUMP, - gcvFORMAT_CLASS_DEPTH, - gcvFORMAT_CLASS_ASTC, - gcvFORMAT_CLASS_COMPRESSED, - gcvFORMAT_CLASS_OTHER -} -gceFORMAT_CLASS; - -/* Color format data type */ -typedef enum _gceFORMAT_DATATYPE -{ - gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED, - gcvFORMAT_DATATYPE_SIGNED_NORMALIZED, - gcvFORMAT_DATATYPE_UNSIGNED_INTEGER, - gcvFORMAT_DATATYPE_SIGNED_INTEGER, - gcvFORMAT_DATATYPE_FLOAT16, - gcvFORMAT_DATATYPE_FLOAT32, - gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9, - gcvFORMAT_DATATYPE_FLOAT_B10G11R11F, - gcvFORMAT_DATATYPE_INDEX, - gcvFORMAT_DATATYPE_SRGB, - gcvFORMAT_DATATYPE_FLOAT32_UINT, -} -gceFORMAT_DATATYPE; - -/* Special enums for width field in gcsFORMAT_COMPONENT. */ -typedef enum _gceCOMPONENT_CONTROL -{ - gcvCOMPONENT_NOTPRESENT = 0x00, - gcvCOMPONENT_DONTCARE = 0x80, - gcvCOMPONENT_WIDTHMASK = 0x7F, - gcvCOMPONENT_ODD = 0x80 -} -gceCOMPONENT_CONTROL; - /* Color format component parameters. */ typedef struct _gcsFORMAT_COMPONENT { @@ -2374,14 +2187,6 @@ extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XX8X; extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_X8XX; extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_8XXX; -typedef enum _gceORIENTATION -{ - gcvORIENTATION_TOP_BOTTOM, - gcvORIENTATION_BOTTOM_TOP, -} -gceORIENTATION; - - /* Construct a new gcoSURF object. */ gceSTATUS gcoSURF_Construct( @@ -3448,18 +3253,6 @@ gcoOS_StackRemove( ** Text Optional text ** ... Optional arguments for text. */ -typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR; -typedef struct _gcsBINARY_TRACE_MESSAGE -{ - gctUINT32 signature; - gctUINT32 pid; - gctUINT32 tid; - gctUINT32 line; - gctUINT32 numArguments; - gctUINT8 payload; -} -gcsBINARY_TRACE_MESSAGE; - void gcoOS_BinaryTrace( IN gctCONST_STRING Function, @@ -3476,8 +3269,6 @@ gckOS_BinaryTrace( ... ); -#define gcdBINARY_TRACE_MESSAGE_SIZE 240 - #if gcdBINARY_TRACE # define gcmBINARY_TRACE gcoOS_BinaryTrace # define gcmkBINARY_TRACE gckOS_BinaryTrace @@ -3863,41 +3654,13 @@ gcoOS_Print( # define gcmkPRINT_VERSION() _gcmPRINT_VERSION(gcmk) # define _gcmPRINT_VERSION(prefix) \ prefix##TRACE(gcvLEVEL_ERROR, \ - "Vivante HAL version %d.%d.%d build %d", \ - gcvVERSION_MAJOR, gcvVERSION_MINOR, \ - gcvVERSION_PATCH, gcvVERSION_BUILD) + "Vivante HAL version %s", \ + gcvVERSION_STRING) #else # define gcmPRINT_VERSION() do { gcmSTACK_DUMP(); } while (gcvFALSE) # define gcmkPRINT_VERSION() do { } while (gcvFALSE) #endif -typedef enum _gceDUMP_BUFFER_TYPE -{ - gcvDUMP_BUFFER_USER_STRING, - gcvDUMP_BUFFER_VERIFY, - - gcvDUMP_BUFFER_MEMORY, - gcvDUMP_BUFFER_TEXTURE, - gcvDUMP_BUFFER_STREAM, - gcvDUMP_BUFFER_INDEX, - gcvDUMP_BUFFER_BUFOBJ, - gcvDUMP_BUFFER_IMAGE, - /* A type of command, but should not execute directly. */ - gcvDUMP_BUFFER_INSTRUCTION, - gcvDUMP_BUFFER_CONTEXT, - gcvDUMP_BUFFER_COMMAND, - gcvDUMP_BUFFER_ASYNC_COMMAND, - gcvDUMP_BUFFER_USER_TYPE_LAST = gcvDUMP_BUFFER_ASYNC_COMMAND, - - gcvDUMP_BUFFER_KERNEL_CONTEXT, - gcvDUMP_BUFFER_KERNEL_COMMAND, - - gcvDUMP_BUFFER_PHYSICAL_MEMORY, - - gcvDUMP_BUFFER_TYPE_COUNT, -} -gceDUMP_BUFFER_TYPE; - void gckOS_Dump( IN gckOS Os, @@ -4820,15 +4583,6 @@ gckOS_DebugStatus2Name( ****************************** User Debug Option ****************************** \******************************************************************************/ -/* User option. */ -typedef enum _gceDEBUG_MSG -{ - gcvDEBUG_MSG_NONE, - gcvDEBUG_MSG_ERROR, - gcvDEBUG_MSG_WARNING -} -gceDEBUG_MSG; - typedef struct _gcsUSER_DEBUG_OPTION { gceDEBUG_MSG debugMsg; @@ -5260,6 +5014,18 @@ gcoHAL_GetUserDebugOption( /*----------------------------------------------------------------------------*/ +#define gcmSETSINGLESTATE_DUMMY(StateDelta, CommandBuffer, Memory, FixedPoint, \ + Address, Data) \ + { \ + gctUINT32 __temp_data32__; \ + __temp_data32__ = Data ; \ + gcmVERIFYLOADSTATEALIGNED(CommandBuffer, Memory); \ + *Memory++ = \ + (gctUINT32)(0) | (0xFFFF & Address); \ + *Memory++ = __temp_data32__; \ + gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \ +} + #define gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \ Address, Data) \ { \ @@ -5876,8 +5642,8 @@ gcoHAL_GetUserDebugOption( } \ else \ { \ - attribBufSizeInKB -= 4; \ - L1cacheSize = 4; \ + attribBufSizeInKB -= 2; \ + L1cacheSize = 2; \ } \ } \ prefix##ASSERT(L1cacheSize); \ @@ -5934,7 +5700,6 @@ typedef struct _memory_profile_info } system_memory, gpu_memory; } memory_profile_info; - gceSTATUS gcoOS_GetMemoryProfileInfo( size_t size, diff --git a/drivers/amlogic/npu/inc/gc_hal_cl.h b/drivers/amlogic/npu/inc/gc_hal_cl.h index 278c55864b27ed..60de746fc1c264 100644 --- a/drivers/amlogic/npu/inc/gc_hal_cl.h +++ b/drivers/amlogic/npu/inc/gc_hal_cl.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -97,6 +97,25 @@ typedef struct _gcoCL_DEVICE_INFO typedef gcoCL_DEVICE_INFO * gcoCL_DEVICE_INFO_PTR; +/******************************************************************************* +** +** gcoCL_SetHardwareType +** +** Set hardware type in CL. If the specific type is not available, +** it will query the first available type and set it. +** +** INPUT: +** +** The hardware type to be set. +** +** OUTPUT: +** +** Nothing +*/ +gceSTATUS +gcoCL_SetHardwareType( + IN gceHARDWARE_TYPE Type + ); /******************************************************************************* ** diff --git a/drivers/amlogic/npu/inc/gc_hal_debug_zones.h b/drivers/amlogic/npu/inc/gc_hal_debug_zones.h index b098c1cd776d7e..bf23c8a246513a 100644 --- a/drivers/amlogic/npu/inc/gc_hal_debug_zones.h +++ b/drivers/amlogic/npu/inc/gc_hal_debug_zones.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by diff --git a/drivers/amlogic/npu/inc/gc_hal_dump.h b/drivers/amlogic/npu/inc/gc_hal_dump.h index 1d7d4abc7f6000..3348073aa91538 100644 --- a/drivers/amlogic/npu/inc/gc_hal_dump.h +++ b/drivers/amlogic/npu/inc/gc_hal_dump.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by diff --git a/drivers/amlogic/npu/inc/gc_hal_eglplatform.h b/drivers/amlogic/npu/inc/gc_hal_eglplatform.h index e7b2823f11b79a..9f144c59f2a2ff 100644 --- a/drivers/amlogic/npu/inc/gc_hal_eglplatform.h +++ b/drivers/amlogic/npu/inc/gc_hal_eglplatform.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -14,7 +14,7 @@ #ifndef __gc_hal_eglplatform_h_ #define __gc_hal_eglplatform_h_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_base.h" #ifdef __cplusplus diff --git a/drivers/amlogic/npu/inc/gc_hal_eglplatform_type.h b/drivers/amlogic/npu/inc/gc_hal_eglplatform_type.h index 25a55e0c199624..e6969d86641ba4 100644 --- a/drivers/amlogic/npu/inc/gc_hal_eglplatform_type.h +++ b/drivers/amlogic/npu/inc/gc_hal_eglplatform_type.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright 2012 - 2019 Vivante Corporation, Santa Clara, California. +* Copyright 2012 - 2020 Vivante Corporation, Santa Clara, California. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining @@ -33,148 +33,6 @@ extern "C" { #endif -/******************************************************************************* -** Events. ********************************************************************* -*/ - -typedef enum _halEventType -{ - /* Keyboard event. */ - HAL_KEYBOARD, - - /* Mouse move event. */ - HAL_POINTER, - - /* Mouse button event. */ - HAL_BUTTON, - - /* Application close event. */ - HAL_CLOSE, - - /* Application window has been updated. */ - HAL_WINDOW_UPDATE -} -halEventType; - -/* Scancodes for keyboard. */ -typedef enum _halKeys -{ - HAL_UNKNOWN = -1, - - HAL_BACKSPACE = 0x08, - HAL_TAB, - HAL_ENTER = 0x0D, - HAL_ESCAPE = 0x1B, - - HAL_SPACE = 0x20, - HAL_SINGLEQUOTE = 0x27, - HAL_PAD_ASTERISK = 0x2A, - HAL_COMMA = 0x2C, - HAL_HYPHEN, - HAL_PERIOD, - HAL_SLASH, - HAL_0, - HAL_1, - HAL_2, - HAL_3, - HAL_4, - HAL_5, - HAL_6, - HAL_7, - HAL_8, - HAL_9, - HAL_SEMICOLON = 0x3B, - HAL_EQUAL = 0x3D, - HAL_A = 0x41, - HAL_B, - HAL_C, - HAL_D, - HAL_E, - HAL_F, - HAL_G, - HAL_H, - HAL_I, - HAL_J, - HAL_K, - HAL_L, - HAL_M, - HAL_N, - HAL_O, - HAL_P, - HAL_Q, - HAL_R, - HAL_S, - HAL_T, - HAL_U, - HAL_V, - HAL_W, - HAL_X, - HAL_Y, - HAL_Z, - HAL_LBRACKET, - HAL_BACKSLASH, - HAL_RBRACKET, - HAL_BACKQUOTE = 0x60, - - HAL_F1 = 0x80, - HAL_F2, - HAL_F3, - HAL_F4, - HAL_F5, - HAL_F6, - HAL_F7, - HAL_F8, - HAL_F9, - HAL_F10, - HAL_F11, - HAL_F12, - - HAL_LCTRL, - HAL_RCTRL, - HAL_LSHIFT, - HAL_RSHIFT, - HAL_LALT, - HAL_RALT, - HAL_CAPSLOCK, - HAL_NUMLOCK, - HAL_SCROLLLOCK, - HAL_PAD_0, - HAL_PAD_1, - HAL_PAD_2, - HAL_PAD_3, - HAL_PAD_4, - HAL_PAD_5, - HAL_PAD_6, - HAL_PAD_7, - HAL_PAD_8, - HAL_PAD_9, - HAL_PAD_HYPHEN, - HAL_PAD_PLUS, - HAL_PAD_SLASH, - HAL_PAD_PERIOD, - HAL_PAD_ENTER, - HAL_SYSRQ, - HAL_PRNTSCRN, - HAL_BREAK, - HAL_UP, - HAL_LEFT, - HAL_RIGHT, - HAL_DOWN, - HAL_HOME, - HAL_END, - HAL_PGUP, - HAL_PGDN, - HAL_INSERT, - HAL_DELETE, - HAL_LWINDOW, - HAL_RWINDOW, - HAL_MENU, - HAL_POWER, - HAL_SLEEP, - HAL_WAKE -} -halKeys; - /* Structure that defined keyboard mapping. */ typedef struct _halKeyMap { diff --git a/drivers/amlogic/npu/inc/gc_hal_engine.h b/drivers/amlogic/npu/inc/gc_hal_engine.h index 2d08723ce7e681..a6a6afbbb2c258 100644 --- a/drivers/amlogic/npu/inc/gc_hal_engine.h +++ b/drivers/amlogic/npu/inc/gc_hal_engine.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -14,7 +14,7 @@ #ifndef __gc_hal_engine_h_ #define __gc_hal_engine_h_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_enum.h" @@ -80,33 +80,6 @@ typedef struct _gcoBUFOBJ * gcoBUFOBJ; #define gcdATTRIBUTE_COUNT 32 #define gcdVERTEXARRAY_POOL_CAPACITY 32 -typedef enum _gcePROGRAM_STAGE -{ - gcvPROGRAM_STAGE_VERTEX = 0x0, - gcvPROGRAM_STAGE_TCS = 0x1, - gcvPROGRAM_STAGE_TES = 0x2, - gcvPROGRAM_STAGE_GEOMETRY = 0x3, - gcvPROGRAM_STAGE_FRAGMENT = 0x4, - gcvPROGRAM_STAGE_GRAPHICS_COUNT = 0x5, - gcvPROGRAM_STAGE_COMPUTE = 0x5, - gcvPROGRAM_STAGE_OPENCL = 0x6, - gcvPROGRAM_STAGE_LAST -} -gcePROGRAM_STAGE; - -typedef enum _gcePROGRAM_STAGE_BIT -{ - gcvPROGRAM_STAGE_VERTEX_BIT = 1 << gcvPROGRAM_STAGE_VERTEX, - gcvPROGRAM_STAGE_TCS_BIT = 1 << gcvPROGRAM_STAGE_TCS, - gcvPROGRAM_STAGE_TES_BIT = 1 << gcvPROGRAM_STAGE_TES, - gcvPROGRAM_STAGE_GEOMETRY_BIT = 1 << gcvPROGRAM_STAGE_GEOMETRY, - gcvPROGRAM_STAGE_FRAGMENT_BIT = 1 << gcvPROGRAM_STAGE_FRAGMENT, - gcvPROGRAM_STAGE_COMPUTE_BIT = 1 << gcvPROGRAM_STAGE_COMPUTE, - gcvPROGRAM_STAGE_OPENCL_BIT = 1 << gcvPROGRAM_STAGE_OPENCL, -} -gcePROGRAM_STAGE_BIT; - - #define gcvPORGRAM_STAGE_GPIPE (gcvPROGRAM_STAGE_VERTEX_BIT | \ gcvPROGRAM_STAGE_TCS_BIT | \ gcvPROGRAM_STAGE_TES_BIT | \ @@ -179,12 +152,6 @@ gcoHAL_QueryStreamCaps( /*----------------------------------------------------------------------------*/ /*--------------------------------- gcoSURF 3D --------------------------------*/ -typedef enum _gceBLIT_FLAG -{ - gcvBLIT_FLAG_SKIP_DEPTH_WRITE = 1 << 0, - gcvBLIT_FLAG_SKIP_STENCIL_WRITE = 1 << 1, -} gceBLIT_FLAG; - typedef struct _gcsSURF_BLIT_ARGS { gcoSURF srcSurface; @@ -203,22 +170,6 @@ typedef struct _gcsSURF_BLIT_ARGS } gcsSURF_BLIT_ARGS; - - - -/* Clear flags. */ -typedef enum _gceCLEAR -{ - gcvCLEAR_COLOR = 0x1, - gcvCLEAR_DEPTH = 0x2, - gcvCLEAR_STENCIL = 0x4, - gcvCLEAR_HZ = 0x8, - gcvCLEAR_WITH_GPU_ONLY = 0x100, - gcvCLEAR_WITH_CPU_ONLY = 0x200, - gcvCLEAR_MULTI_SLICES = 0x400, -} -gceCLEAR; - typedef struct _gcsSURF_CLEAR_ARGS { /* @@ -261,33 +212,6 @@ typedef struct _gscSURF_BLITDRAW_BLIT gcsRECT scissor; }gscSURF_BLITDRAW_BLIT; - -typedef enum _gceBLITDRAW_TYPE -{ - gcvBLITDRAW_CLEAR = 0, - gcvBLITDRAW_BLIT = 1, - - /* last number, not a real type */ - gcvBLITDRAW_NUM_TYPE - } -gceBLITDRAW_TYPE; - -typedef enum _gceSPLIT_DRAW_TYPE -{ - gcvSPLIT_DRAW_UNKNOWN = 0x0, - gcvSPLIT_DRAW_1, - gcvSPLIT_DRAW_2, - gcvSPLIT_DRAW_3, - gcvSPLIT_DRAW_4, - gcvSPLIT_DRAW_XFB, - gcvSPLIT_DRAW_INDEX_FETCH, - gcvSPLIT_DRAW_TCS, - gcvSPLIT_DRAW_STIPPLE, - gcvSPLIT_DRAW_WIDE_LINE, - gcvSPLIT_DRAW_LAST -} -gceSPLIT_DRAW_TYPE; - typedef gceSTATUS (* gctSPLIT_DRAW_FUNC_PTR)( IN gctPOINTER gc, IN gctPOINTER instantDraw, @@ -427,7 +351,8 @@ depr_gcoSURF_ResolveRect( gceSTATUS gcoSURF_Resample( IN gcoSURF SrcSurf, - IN gcoSURF DstSurf + IN gcoSURF DstSurf, + IN gctBOOL sRGBDecode ); /* Resolve rectangular area of a surface. */ @@ -658,14 +583,6 @@ gcoCLHardware_Construct(void); ********************************** gco3D Object ********************************* \******************************************************************************/ -/* Blending targets. */ -typedef enum _gceBLEND_UNIT -{ - gcvBLEND_SOURCE, - gcvBLEND_TARGET, -} -gceBLEND_UNIT; - /* Construct a new gco3D object. */ gceSTATUS gco3D_Construct( @@ -1443,59 +1360,13 @@ gco3D_SetLogicOp( IN gctUINT8 Rop ); -typedef enum _gceXfbCmd -{ - gcvXFBCMD_BEGIN = 0, - gcvXFBCMD_PAUSE = 1, - gcvXFBCMD_RESUME = 2, - gcvXFBCMD_END = 3, - gcvXFBCMD_PAUSE_INCOMMIT = 4, - gcvXFBCMD_RESUME_INCOMMIT = 5, - gcvXFBCMD_INVALID = 6, -} -gceXfbCmd; - -typedef enum _gceXfbStatus -{ - gcvXFB_Disabled = 0, - gcvXFB_Paused, - gcvXFB_Enabled, -} -gceXfbStatus; - -typedef enum _gceQueryStatus -{ - gcvQUERY_Disabled = 0, - gcvQUERY_Paused = 1, - gcvQUERY_Enabled = 2, -} -gceQueryStatus; - -typedef enum _gceQueryCmd -{ - gcvQUERYCMD_BEGIN = 0, - gcvQUERYCMD_PAUSE = 1, - gcvQUERYCMD_RESUME = 2, - gcvQUERYCMD_END = 3, - gcvQUERYCMD_INVALID = 4, -} -gceQueryCmd; - -typedef enum _gceQueryType -{ - gcvQUERY_OCCLUSION = 0, - gcvQUERY_XFB_WRITTEN = 1, - gcvQUERY_PRIM_GENERATED = 2, - gcvQUERY_MAX_NUM = 3, -} -gceQueryType; - gceSTATUS gco3D_SetQuery( IN gco3D Engine, IN gctUINT32 QueryHeader, IN gceQueryType Type, - IN gctBOOL Enable + IN gctBOOL Enable, + IN gctUINT32 Index ); gceSTATUS @@ -1505,6 +1376,7 @@ gco3D_GetQuery( IN gcsSURF_NODE_PTR Node, IN gctUINT32 Size, IN gctPOINTER Locked, + IN gctUINT32 IndexedId, OUT gctINT32 * Index ); @@ -1939,19 +1811,6 @@ gco3D_SetAlphaTextureFunction( ******************************* gcoTEXTURE Object ******************************* \******************************************************************************/ -/* Cube faces. */ -typedef enum _gceTEXTURE_FACE -{ - gcvFACE_NONE = 0, - gcvFACE_POSITIVE_X, - gcvFACE_NEGATIVE_X, - gcvFACE_POSITIVE_Y, - gcvFACE_NEGATIVE_Y, - gcvFACE_POSITIVE_Z, - gcvFACE_NEGATIVE_Z, -} -gceTEXTURE_FACE; - typedef struct _gcsTEXTURE { /* Addressing modes. */ @@ -1983,6 +1842,8 @@ typedef struct _gcsTEXTURE gceTEXTURE_COMPARE_MODE compareMode; gceCOMPARE compareFunc; + gceTEXTURE_DS_TEX_MODE dsTextureMode; + gceTEXTURE_DS_MODE dsMode; /* sRGB decode */ @@ -2349,43 +2210,6 @@ gcoTEXTURE_GenerateMipMap( ******************************* gcoSTREAM Object ****************************** \******************************************************************************/ -typedef enum _gceVERTEX_FORMAT -{ - gcvVERTEX_BYTE, - gcvVERTEX_UNSIGNED_BYTE, - gcvVERTEX_SHORT, - gcvVERTEX_UNSIGNED_SHORT, - gcvVERTEX_INT, - gcvVERTEX_UNSIGNED_INT, - gcvVERTEX_FIXED, - gcvVERTEX_HALF, - gcvVERTEX_FLOAT, - gcvVERTEX_DOUBLE, - gcvVERTEX_UNSIGNED_INT_10_10_10_2, - gcvVERTEX_INT_10_10_10_2, - gcvVERTEX_UNSIGNED_INT_2_10_10_10_REV, - gcvVERTEX_INT_2_10_10_10_REV, - /* integer format */ - gcvVERTEX_INT8, - gcvVERTEX_INT16, - gcvVERTEX_INT32, -} -gceVERTEX_FORMAT; - -/* What the SW converting scheme to create temp attrib */ -typedef enum _gceATTRIB_SCHEME -{ - gcvATTRIB_SCHEME_KEEP = 0, - gcvATTRIB_SCHEME_2_10_10_10_REV_TO_FLOAT, - gcvATTRIB_SCHEME_BYTE_TO_IVEC4, - gcvATTRIB_SCHEME_SHORT_TO_IVEC4, - gcvATTRIB_SCHEME_INT_TO_IVEC4, - gcvATTRIB_SCHEME_UBYTE_TO_UVEC4, - gcvATTRIB_SCHEME_USHORT_TO_UVEC4, - gcvATTRIB_SCHEME_UINT_TO_UVEC4, - gcvATTRIB_SCHEME_DOUBLE_TO_FLOAT, -} gceATTRIB_SCHEME; - gceSTATUS gcoSTREAM_Construct( IN gcoHAL Hal, @@ -2768,32 +2592,6 @@ gcoHAL_DumpGPUProfile( /****************************************************************************** **********************gcoBUFOBJ object***************************************** *******************************************************************************/ -typedef enum _gceBUFOBJ_TYPE -{ - gcvBUFOBJ_TYPE_ARRAY_BUFFER = 1, - gcvBUFOBJ_TYPE_ELEMENT_ARRAY_BUFFER = 2, - gcvBUFOBJ_TYPE_GENERIC_BUFFER = 100 - -} gceBUFOBJ_TYPE; - -typedef enum _gceBUFOBJ_USAGE -{ - gcvBUFOBJ_USAGE_STREAM_DRAW = 1, - gcvBUFOBJ_USAGE_STREAM_READ, - gcvBUFOBJ_USAGE_STREAM_COPY, - gcvBUFOBJ_USAGE_STATIC_DRAW, - gcvBUFOBJ_USAGE_STATIC_READ, - gcvBUFOBJ_USAGE_STATIC_COPY, - gcvBUFOBJ_USAGE_DYNAMIC_DRAW, - gcvBUFOBJ_USAGE_DYNAMIC_READ, - gcvBUFOBJ_USAGE_DYNAMIC_COPY, - - /* special patch for optimaize performance, - ** no fence and duplicate stream to ensure data correct - */ - gcvBUFOBJ_USAGE_DISABLE_FENCE_DYNAMIC_STREAM = 256 -} gceBUFOBJ_USAGE; - /* Construct a new gcoBUFOBJ object. */ gceSTATUS gcoBUFOBJ_Construct( diff --git a/drivers/amlogic/npu/inc/gc_hal_engine_vg.h b/drivers/amlogic/npu/inc/gc_hal_engine_vg.h index 7c05560685d059..fe1e41248d12d9 100644 --- a/drivers/amlogic/npu/inc/gc_hal_engine_vg.h +++ b/drivers/amlogic/npu/inc/gc_hal_engine_vg.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -18,317 +18,7 @@ extern "C" { #endif -#include "gc_hal_types.h" - -/******************************************************************************\ -******************************** VG Enumerations ******************************* -\******************************************************************************/ - -/** -** @ingroup gcoVG -** -** @brief Tiling mode for painting and imagig. -** -** This enumeration defines the tiling modes supported by the HAL. This is -** in fact a one-to-one mapping of the OpenVG 1.1 tile modes. -*/ -typedef enum _gceTILE_MODE -{ - gcvTILE_FILL, - gcvTILE_PAD, - gcvTILE_REPEAT, - gcvTILE_REFLECT -} -gceTILE_MODE; - -/******************************************************************************/ -/** @ingroup gcoVG -** -** @brief The different paint modes. -** -** This enumeration lists the available paint modes. -*/ -typedef enum _gcePAINT_TYPE -{ - /** Solid color. */ - gcvPAINT_MODE_SOLID, - - /** Linear gradient. */ - gcvPAINT_MODE_LINEAR, - - /** Radial gradient. */ - gcvPAINT_MODE_RADIAL, - - /** Pattern. */ - gcvPAINT_MODE_PATTERN, - - /** Mode count. */ - gcvPAINT_MODE_COUNT -} -gcePAINT_TYPE; - -/** -** @ingroup gcoVG -** -** @brief Types of path data supported by HAL. -** -** This enumeration defines the types of path data supported by the HAL. -** This is in fact a one-to-one mapping of the OpenVG 1.1 path types. -*/ -typedef enum _gcePATHTYPE -{ - gcePATHTYPE_UNKNOWN = -1, - gcePATHTYPE_INT8, - gcePATHTYPE_INT16, - gcePATHTYPE_INT32, - gcePATHTYPE_FLOAT -} -gcePATHTYPE; - -/** -** @ingroup gcoVG -** -** @brief Supported path segment commands. -** -** This enumeration defines the path segment commands supported by the HAL. -*/ -typedef enum _gceVGCMD -{ - gcvVGCMD_END, /* 0: 0x00 */ - gcvVGCMD_CLOSE, /* 1: 0x01 */ - gcvVGCMD_MOVE, /* 2: 0x02 */ - gcvVGCMD_MOVE_REL, /* 3: 0x03 */ - gcvVGCMD_LINE, /* 4: 0x04 */ - gcvVGCMD_LINE_REL, /* 5: 0x05 */ - gcvVGCMD_QUAD, /* 6: 0x06 */ - gcvVGCMD_QUAD_REL, /* 7: 0x07 */ - gcvVGCMD_CUBIC, /* 8: 0x08 */ - gcvVGCMD_CUBIC_REL, /* 9: 0x09 */ - gcvVGCMD_BREAK, /* 10: 0x0A */ - gcvVGCMD_HLINE, /* 11: ******* R E S E R V E D *******/ - gcvVGCMD_HLINE_REL, /* 12: ******* R E S E R V E D *******/ - gcvVGCMD_VLINE, /* 13: ******* R E S E R V E D *******/ - gcvVGCMD_VLINE_REL, /* 14: ******* R E S E R V E D *******/ - gcvVGCMD_SQUAD, /* 15: ******* R E S E R V E D *******/ - gcvVGCMD_SQUAD_REL, /* 16: ******* R E S E R V E D *******/ - gcvVGCMD_SCUBIC, /* 17: ******* R E S E R V E D *******/ - gcvVGCMD_SCUBIC_REL, /* 18: ******* R E S E R V E D *******/ - gcvVGCMD_SCCWARC, /* 19: ******* R E S E R V E D *******/ - gcvVGCMD_SCCWARC_REL, /* 20: ******* R E S E R V E D *******/ - gcvVGCMD_SCWARC, /* 21: ******* R E S E R V E D *******/ - gcvVGCMD_SCWARC_REL, /* 22: ******* R E S E R V E D *******/ - gcvVGCMD_LCCWARC, /* 23: ******* R E S E R V E D *******/ - gcvVGCMD_LCCWARC_REL, /* 24: ******* R E S E R V E D *******/ - gcvVGCMD_LCWARC, /* 25: ******* R E S E R V E D *******/ - gcvVGCMD_LCWARC_REL, /* 26: ******* R E S E R V E D *******/ - - /* The width of the command recognized by the hardware on bits. */ - gcvVGCMD_WIDTH = 5, - - /* Hardware command mask. */ - gcvVGCMD_MASK = (1 << gcvVGCMD_WIDTH) - 1, - - /* Command modifiers. */ - gcvVGCMD_H_MOD = 1 << gcvVGCMD_WIDTH, /* = 32 */ - gcvVGCMD_V_MOD = 2 << gcvVGCMD_WIDTH, /* = 64 */ - gcvVGCMD_S_MOD = 3 << gcvVGCMD_WIDTH, /* = 96 */ - gcvVGCMD_ARC_MOD = 4 << gcvVGCMD_WIDTH, /* = 128 */ - - /* Emulated LINE commands. */ - gcvVGCMD_HLINE_EMUL = gcvVGCMD_H_MOD | gcvVGCMD_LINE, /* = 36 */ - gcvVGCMD_HLINE_EMUL_REL = gcvVGCMD_H_MOD | gcvVGCMD_LINE_REL, /* = 37 */ - gcvVGCMD_VLINE_EMUL = gcvVGCMD_V_MOD | gcvVGCMD_LINE, /* = 68 */ - gcvVGCMD_VLINE_EMUL_REL = gcvVGCMD_V_MOD | gcvVGCMD_LINE_REL, /* = 69 */ - - /* Emulated SMOOTH commands. */ - gcvVGCMD_SQUAD_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD, /* = 102 */ - gcvVGCMD_SQUAD_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD_REL, /* = 103 */ - gcvVGCMD_SCUBIC_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC, /* = 104 */ - gcvVGCMD_SCUBIC_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC_REL, /* = 105 */ - - /* Emulation ARC commands. */ - gcvVGCMD_ARC_LINE = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE, /* = 132 */ - gcvVGCMD_ARC_LINE_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE_REL, /* = 133 */ - gcvVGCMD_ARC_QUAD = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD, /* = 134 */ - gcvVGCMD_ARC_QUAD_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD_REL /* = 135 */ -} -gceVGCMD; -typedef enum _gceVGCMD * gceVGCMD_PTR; - -/** -** @ingroup gcoVG -** -** @brief Blending modes supported by the HAL. -** -** This enumeration defines the blending modes supported by the HAL. This is -** in fact a one-to-one mapping of the OpenVG 1.1 blending modes. -*/ -typedef enum _gceVG_BLEND -{ - gcvVG_BLEND_SRC, - gcvVG_BLEND_SRC_OVER, - gcvVG_BLEND_DST_OVER, - gcvVG_BLEND_SRC_IN, - gcvVG_BLEND_DST_IN, - gcvVG_BLEND_MULTIPLY, - gcvVG_BLEND_SCREEN, - gcvVG_BLEND_DARKEN, - gcvVG_BLEND_LIGHTEN, - gcvVG_BLEND_ADDITIVE, - gcvVG_BLEND_SUBTRACT, - gcvVG_BLEND_FILTER -} -gceVG_BLEND; - -/** -** @ingroup gcoVG -** -** @brief Image modes supported by the HAL. -** -** This enumeration defines the image modes supported by the HAL. This is -** in fact a one-to-one mapping of the OpenVG 1.1 image modes with the addition -** of NO IMAGE. -*/ -typedef enum _gceVG_IMAGE -{ - gcvVG_IMAGE_NONE, - gcvVG_IMAGE_NORMAL, - gcvVG_IMAGE_MULTIPLY, - gcvVG_IMAGE_STENCIL, - gcvVG_IMAGE_FILTER -} -gceVG_IMAGE; - -/** -** @ingroup gcoVG -** -** @brief Filter mode patterns and imaging. -** -** This enumeration defines the filter modes supported by the HAL. -*/ -typedef enum _gceIMAGE_FILTER -{ - gcvFILTER_POINT, - gcvFILTER_LINEAR, - gcvFILTER_BI_LINEAR -} -gceIMAGE_FILTER; - -/** -** @ingroup gcoVG -** -** @brief Primitive modes supported by the HAL. -** -** This enumeration defines the primitive modes supported by the HAL. -*/ -typedef enum _gceVG_PRIMITIVE -{ - gcvVG_SCANLINE, - gcvVG_RECTANGLE, - gcvVG_TESSELLATED, - gcvVG_TESSELLATED_TILED -} -gceVG_PRIMITIVE; - -/** -** @ingroup gcoVG -** -** @brief Rendering quality modes supported by the HAL. -** -** This enumeration defines the rendering quality modes supported by the HAL. -*/ -typedef enum _gceRENDER_QUALITY -{ - gcvVG_NONANTIALIASED, - gcvVG_2X2_MSAA, - gcvVG_2X4_MSAA, - gcvVG_4X4_MSAA -} -gceRENDER_QUALITY; - -/** -** @ingroup gcoVG -** -** @brief Fill rules supported by the HAL. -** -** This enumeration defines the fill rules supported by the HAL. -*/ -typedef enum _gceFILL_RULE -{ - gcvVG_EVEN_ODD, - gcvVG_NON_ZERO -} -gceFILL_RULE; - -/** -** @ingroup gcoVG -** -** @brief Cap styles supported by the HAL. -** -** This enumeration defines the cap styles supported by the HAL. -*/ -typedef enum _gceCAP_STYLE -{ - gcvCAP_BUTT, - gcvCAP_ROUND, - gcvCAP_SQUARE -} -gceCAP_STYLE; - -/** -** @ingroup gcoVG -** -** @brief Join styles supported by the HAL. -** -** This enumeration defines the join styles supported by the HAL. -*/ -typedef enum _gceJOIN_STYLE -{ - gcvJOIN_MITER, - gcvJOIN_ROUND, - gcvJOIN_BEVEL -} -gceJOIN_STYLE; - -/** -** @ingroup gcoVG -** -** @brief Channel mask values. -** -** This enumeration defines the values for channel mask used in image -** filtering. -*/ - -/* Base values for channel mask definitions. */ -#define gcvCHANNEL_X (0) -#define gcvCHANNEL_R (1 << 0) -#define gcvCHANNEL_G (1 << 1) -#define gcvCHANNEL_B (1 << 2) -#define gcvCHANNEL_A (1 << 3) - -typedef enum _gceCHANNEL -{ - gcvCHANNEL_XXXX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_XXXA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_XXBX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_XXBA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), - - gcvCHANNEL_XGXX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_XGXA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_XGBX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_XGBA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), - - gcvCHANNEL_RXXX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_RXXA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_RXBX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_RXBA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), - - gcvCHANNEL_RGXX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_RGXA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_RGBX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_RGBA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), -} -gceCHANNEL; +#include "shared/gc_hal_types.h" /******************************************************************************\ ******************************** VG Structures ******************************* diff --git a/drivers/amlogic/npu/inc/gc_hal_enum.h b/drivers/amlogic/npu/inc/gc_hal_enum.h index 790b4d47515f80..a8e182a96fd0b3 100644 --- a/drivers/amlogic/npu/inc/gc_hal_enum.h +++ b/drivers/amlogic/npu/inc/gc_hal_enum.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -15,582 +15,12 @@ #define __gc_hal_enum_h_ #include "gc_hal_options.h" +#include "shared/gc_hal_enum.h" #ifdef __cplusplus extern "C" { #endif -/* Chip models. */ -typedef enum _gceCHIPMODEL -{ - gcv200 = 0x0200, - gcv300 = 0x0300, - gcv320 = 0x0320, - gcv328 = 0x0328, - gcv350 = 0x0350, - gcv355 = 0x0355, - gcv400 = 0x0400, - gcv410 = 0x0410, - gcv420 = 0x0420, - gcv428 = 0x0428, - gcv450 = 0x0450, - gcv500 = 0x0500, - gcv520 = 0x0520, - gcv530 = 0x0530, - gcv600 = 0x0600, - gcv620 = 0x0620, - gcv700 = 0x0700, - gcv800 = 0x0800, - gcv860 = 0x0860, - gcv880 = 0x0880, - gcv900 = 0x0900, - gcv1000 = 0x1000, - gcv1500 = 0x1500, - gcv2000 = 0x2000, - gcv2100 = 0x2100, - gcv2200 = 0x2200, - gcv2500 = 0x2500, - gcv3000 = 0x3000, - gcv4000 = 0x4000, - gcv5000 = 0x5000, - gcv5200 = 0x5200, - gcv6400 = 0x6400, - gcv7000 = 0x7000, - gcv7400 = 0x7400, - gcv8000 = 0x8000, -} -gceCHIPMODEL; - -/* Chip features. */ -typedef enum _gceFEATURE -{ - gcvFEATURE_PIPE_2D = 0, - gcvFEATURE_PIPE_3D, - gcvFEATURE_PIPE_VG, - gcvFEATURE_DC, - gcvFEATURE_HIGH_DYNAMIC_RANGE, - gcvFEATURE_MODULE_CG, - gcvFEATURE_MIN_AREA, - gcvFEATURE_BUFFER_INTERLEAVING, - gcvFEATURE_BYTE_WRITE_2D, - gcvFEATURE_ENDIANNESS_CONFIG, - gcvFEATURE_DUAL_RETURN_BUS, - gcvFEATURE_DEBUG_MODE, - gcvFEATURE_YUY2_RENDER_TARGET, - gcvFEATURE_FRAGMENT_PROCESSOR, - gcvFEATURE_2DPE20, - gcvFEATURE_FAST_CLEAR, - gcvFEATURE_YUV420_TILER, - gcvFEATURE_YUY2_AVERAGING, - gcvFEATURE_FLIP_Y, - gcvFEATURE_EARLY_Z, - gcvFEATURE_COMPRESSION, - gcvFEATURE_MSAA, - gcvFEATURE_SPECIAL_ANTI_ALIASING, - gcvFEATURE_SPECIAL_MSAA_LOD, - gcvFEATURE_422_TEXTURE_COMPRESSION, - gcvFEATURE_DXT_TEXTURE_COMPRESSION, - gcvFEATURE_ETC1_TEXTURE_COMPRESSION, - gcvFEATURE_CORRECT_TEXTURE_CONVERTER, - gcvFEATURE_TEXTURE_8K, - gcvFEATURE_SCALER, - gcvFEATURE_YUV420_SCALER, - gcvFEATURE_SHADER_HAS_W, - gcvFEATURE_SHADER_HAS_SIGN, - gcvFEATURE_SHADER_HAS_FLOOR, - gcvFEATURE_SHADER_HAS_CEIL, - gcvFEATURE_SHADER_HAS_SQRT, - gcvFEATURE_SHADER_HAS_TRIG, - gcvFEATURE_HZ, - gcvFEATURE_CORRECT_STENCIL, - gcvFEATURE_VG20, - gcvFEATURE_VG_FILTER, - gcvFEATURE_VG21, - gcvFEATURE_VG_DOUBLE_BUFFER, - gcvFEATURE_VG_RESOLUTION_8K, - gcvFEATURE_MC20, - gcvFEATURE_SUPER_TILED, - gcvFEATURE_FAST_CLEAR_FLUSH, - gcvFEATURE_2D_FILTERBLIT_PLUS_ALPHABLEND, - gcvFEATURE_2D_DITHER, - gcvFEATURE_2D_A8_TARGET, - gcvFEATURE_2D_A8_NO_ALPHA, - gcvFEATURE_2D_FILTERBLIT_FULLROTATION, - gcvFEATURE_2D_BITBLIT_FULLROTATION, - gcvFEATURE_WIDE_LINE, - gcvFEATURE_FC_FLUSH_STALL, - gcvFEATURE_FULL_DIRECTFB, - gcvFEATURE_HALF_FLOAT_PIPE, - gcvFEATURE_LINE_LOOP, - gcvFEATURE_2D_YUV_BLIT, - gcvFEATURE_2D_TILING, - gcvFEATURE_NON_POWER_OF_TWO, - gcvFEATURE_3D_TEXTURE, - gcvFEATURE_TEXTURE_ARRAY, - gcvFEATURE_TILE_FILLER, - gcvFEATURE_LOGIC_OP, - gcvFEATURE_MIXED_STREAMS, - gcvFEATURE_2D_MULTI_SOURCE_BLT, - gcvFEATURE_END_EVENT, - gcvFEATURE_VERTEX_10_10_10_2, - gcvFEATURE_TEXTURE_10_10_10_2, - gcvFEATURE_TEXTURE_ANISOTROPIC_FILTERING, - gcvFEATURE_TEXTURE_FLOAT_HALF_FLOAT, - gcvFEATURE_2D_ROTATION_STALL_FIX, - gcvFEATURE_2D_MULTI_SOURCE_BLT_EX, - gcvFEATURE_BUG_FIXES10, - gcvFEATURE_2D_MINOR_TILING, - gcvFEATURE_TEX_COMPRRESSION_SUPERTILED, /* Supertiled compressed textures are supported. */ - gcvFEATURE_FAST_MSAA, - gcvFEATURE_BUG_FIXED_INDEXED_TRIANGLE_STRIP, - gcvFEATURE_TEXTURE_TILE_STATUS_READ, - gcvFEATURE_DEPTH_BIAS_FIX, - gcvFEATURE_RECT_PRIMITIVE, - gcvFEATURE_BUG_FIXES11, - gcvFEATURE_SUPERTILED_TEXTURE, - gcvFEATURE_2D_NO_COLORBRUSH_INDEX8, - gcvFEATURE_RS_YUV_TARGET, - gcvFEATURE_2D_FC_SOURCE, /* For tilestatus compression feature*/ - gcvFEATURE_2D_CC_NOAA_SOURCE, - gcvFEATURE_PE_DITHER_FIX, - gcvFEATURE_2D_YUV_SEPARATE_STRIDE, - gcvFEATURE_FRUSTUM_CLIP_FIX, - gcvFEATURE_TEXTURE_SWIZZLE, - gcvFEATURE_PRIMITIVE_RESTART, - gcvFEATURE_TEXTURE_LINEAR, - gcvFEATURE_TEXTURE_YUV_ASSEMBLER, - gcvFEATURE_LINEAR_RENDER_TARGET, - gcvFEATURE_SHADER_HAS_ATOMIC, - gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE, - gcvFEATURE_SHADER_ENHANCEMENTS2, - gcvFEATURE_BUG_FIXES7, - gcvFEATURE_SHADER_HAS_RTNE, - gcvFEATURE_SHADER_HAS_EXTRA_INSTRUCTIONS2, - gcvFEATURE_SHADER_ENHANCEMENTS3, - gcvFEATURE_DYNAMIC_FREQUENCY_SCALING, - gcvFEATURE_SINGLE_BUFFER, - gcvFEATURE_OCCLUSION_QUERY, - gcvFEATURE_2D_GAMMA, - gcvFEATURE_2D_COLOR_SPACE_CONVERSION, - gcvFEATURE_2D_SUPER_TILE_VERSION, - gcvFEATURE_HALTI0, - gcvFEATURE_HALTI1, - gcvFEATURE_HALTI2, - gcvFEATURE_SUPPORT_GCREGTX, - gcvFEATURE_2D_MIRROR_EXTENSION, - gcvFEATURE_TEXTURE_ASTC, - gcvFEATURE_TEXTURE_ASTC_DECODE_FIX, - gcvFEATURE_TEXTURE_ASTC_BASE_LOD_FIX, - gcvFEATURE_2D_SUPER_TILE_V1, - gcvFEATURE_2D_SUPER_TILE_V2, - gcvFEATURE_2D_SUPER_TILE_V3, - gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2, - gcvFEATURE_NEW_RA, - gcvFEATURE_BUG_FIXED_IMPLICIT_PRIMITIVE_RESTART, - gcvFEATURE_PE_MULTI_RT_BLEND_ENABLE_CONTROL, - gcvFEATURE_SMALL_MSAA, /* An upgraded version of Fast MSAA */ - gcvFEATURE_VERTEX_INST_ID_AS_ATTRIBUTE, - gcvFEATURE_DUAL_16, - gcvFEATURE_BRANCH_ON_IMMEDIATE_REG, - gcvFEATURE_2D_COMPRESSION, - gcvFEATURE_TPC_COMPRESSION, - gcvFEATURE_TPCV11_COMPRESSION, - gcvFEATURE_DEC_COMPRESSION, - gcvFEATURE_DEC300_COMPRESSION, - gcvFEATURE_DEC400_COMPRESSION, - gcvFEATURE_DEC_TPC_COMPRESSION, - gcvFEATURE_DEC_COMPRESSION_TILE_NV12_8BIT, - gcvFEATURE_DEC_COMPRESSION_TILE_NV12_10BIT, - gcvFEATURE_2D_OPF_YUV_OUTPUT, - gcvFEATURE_2D_FILTERBLIT_A8_ALPHA, - gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT, - gcvFEATURE_2D_MULTI_SRC_BLT_BILINEAR_FILTER, - gcvFEATURE_2D_MULTI_SRC_BLT_1_5_ENHANCEMENT, - gcvFEATURE_V2_COMPRESSION_Z16_FIX, - gcvFEATURE_VERTEX_INST_ID_AS_INTEGER, - gcvFEATURE_2D_YUV_MODE, - gcvFEATURE_2D_CACHE_128B256BPERLINE, - gcvFEATURE_2D_SEPARATE_CACHE, - gcvFEATURE_2D_MAJOR_SUPER_TILE, - gcvFEATURE_2D_V4COMPRESSION, - gcvFEATURE_2D_VMSAA, - gcvFEATURE_2D_10BIT_OUTPUT_LINEAR, - gcvFEATURE_2D_YUV420_OUTPUT_LINEAR, - gcvFEATURE_ACE, - gcvFEATURE_COLOR_COMPRESSION, - gcvFEATURE_32BPP_COMPONENT_TEXTURE_CHANNEL_SWIZZLE, - gcvFEATURE_64BPP_HW_CLEAR_SUPPORT, - gcvFEATURE_TX_LERP_PRECISION_FIX, - gcvFEATURE_COMPRESSION_V2, - gcvFEATURE_MMU, - gcvFEATURE_COMPRESSION_V3, - gcvFEATURE_TX_DECOMPRESSOR, - gcvFEATURE_MRT_TILE_STATUS_BUFFER, - gcvFEATURE_COMPRESSION_V1, - gcvFEATURE_V1_COMPRESSION_Z16_DECOMPRESS_FIX, - gcvFEATURE_RTT, - gcvFEATURE_GENERIC_ATTRIB, - gcvFEATURE_2D_ONE_PASS_FILTER, - gcvFEATURE_2D_ONE_PASS_FILTER_TAP, - gcvFEATURE_2D_POST_FLIP, - gcvFEATURE_2D_PIXEL_ALIGNMENT, - gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT, - gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT_WIDTH, - gcvFEATURE_8K_RT, - gcvFEATURE_HALTI3, - gcvFEATURE_EEZ, - gcvFEATURE_INTEGER_SIGNEXT_FIX, - gcvFEATURE_PSOUTPUT_MAPPING, - gcvFEATURE_8K_RT_FIX, - gcvFEATURE_TX_TILE_STATUS_MAPPING, - gcvFEATURE_SRGB_RT_SUPPORT, - gcvFEATURE_TEXTURE_16K, - gcvFEATURE_PA_FARZCLIPPING_FIX, - gcvFEATURE_PE_DITHER_COLORMASK_FIX, - gcvFEATURE_ZSCALE_FIX, - gcvFEATURE_MULTI_PIXELPIPES, - gcvFEATURE_PIPE_CL, - gcvFEATURE_BUG_FIXES18, - gcvFEATURE_UNIFIED_SAMPLERS, - gcvFEATURE_CL_PS_WALKER, - gcvFEATURE_NEW_HZ, - gcvFEATURE_TX_FRAC_PRECISION_6BIT, - gcvFEATURE_SH_INSTRUCTION_PREFETCH, - gcvFEATURE_PROBE, - gcvFEATURE_SINGLE_PIPE_HALTI1, - gcvFEATURE_BUG_FIXES8, /* This HW feature is wrong, we can't use this to check integer branch!!!*/ - gcvFEATURE_2D_ALL_QUAD, - gcvFEATURE_SEPARATE_SRC_DST, - gcvFEATURE_TX_HOR_ALIGN_SEL, - gcvFEATURE_HALTI4, - gcvFEATURE_MRT_FC_FIX, - gcvFEATURE_TESSELLATION, - gcvFEATURE_DRAW_INDIRECT, - gcvFEATURE_COMPUTE_INDIRECT, - gcvFEATURE_MSAA_TEXTURE, - gcvFEATURE_STENCIL_TEXTURE, - gcvFEATURE_S8_ONLY_RENDERING, - gcvFEATURE_D24S8_SAMPLE_STENCIL, - gcvFEATURE_ADVANCED_BLEND_MODE_PART0, - gcvFEATURE_RA_DEPTH_WRITE, - gcvFEATURE_RS_DS_DOWNSAMPLE_NATIVE_SUPPORT, - gcvFEATURE_S8_MSAA_COMPRESSION, - gcvFEATURE_MSAA_FRAGMENT_OPERATION, - gcvFEATURE_FE_START_VERTEX_SUPPORT, - gcvFEATURE_DIVISOR_STREAM_ADDR_FIX, - gcvFEATURE_ZERO_ATTRIB_SUPPORT, - gcvFEATURE_DANGLING_VERTEX_FIX, - gcvFEATURE_PE_DISABLE_COLOR_PIPE, - gcvFEATURE_FE_12bit_stride, - gcvFEATURE_TX_LOD_GUARDBAND, - gcvFEATURE_HAS_PRODUCTID, - gcvFEATURE_INTEGER32_FIX, - gcvFEATURE_TEXTURE_GATHER, - gcvFEATURE_IMG_INSTRUCTION, - gcvFEATURE_HELPER_INVOCATION, - gcvFEATURE_NO_USER_CSC, - gcvFEATURE_ANDROID_ONLY, - gcvFEATURE_V2_MSAA_COHERENCY_FIX, - gcvFEATURE_BLOCK_SIZE_16x16, - gcvFEATURE_TX_SUPPORT_DEC, - gcvFEATURE_RSBLT_MSAA_DECOMPRESSION, - gcvFEATURE_TILEFILLER_32TILE_ALIGNED, - gcvFEATURE_GEOMETRY_SHADER, - gcvFEATURE_HALTI5, - gcvFEATURE_PIPELINE_32_ATTRIBUTES, - gcvFEATURE_USC, - gcvFEATURE_CUBEMAP_ARRAY, - gcvFEATURE_TX_DESCRIPTOR, - gcvFEATURE_SEPARATE_RT_CTRL, - gcvFEATURE_RENDER_ARRAY, - gcvFEATURE_BLT_ENGINE, - gcvFEATURE_TEXTURE_BUFFER, - gcvFEATURE_GS_SUPPORT_EMIT, - gcvFEATURE_SAMPLER_BASE_OFFSET, - gcvFEATURE_IMAGE_OUT_BOUNDARY_FIX, - gcvFEATURE_TX_BORDER_CLAMP, - gcvFEATURE_MSAA_SHADING, - gcvFEATURE_ADVANCED_SH_INST, - gcvFEATURE_LOD_FIX_FOR_BASELEVEL, - gcvFEATURE_MULTIDRAW_INDIRECT, - gcvFEATURE_DRAW_ELEMENTS_BASE_VERTEX, - gcvFEATURE_NEW_STEERING_AND_ICACHE_FLUSH, /* Steering base on register base. Trigger-style Icache flush state. */ - gcvFEATURE_PE_DITHER_FIX2, - gcvFEATURE_INDEX_FETCH_FIX, - gcvFEATURE_TEX_BASELOD, - gcvFEATURE_TEX_SEAMLESS_CUBE, - gcvFEATURE_TEX_ETC2, - gcvFEATURE_TEX_CUBE_BORDER_LOD, - gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG, - gcvFEATURE_TX_8BPP_TS_FIX, - gcvFEATURE_HW_TFB, - gcvFEATURE_COMPRESSION_V4, - gcvFEATURE_FENCE_32BIT, - gcvFEATURE_FENCE_64BIT, - gcvFEATURE_R8_UNORM, - gcvFEATURE_TX_DEFAULT_VALUE_FIX, - gcvFEATURE_TX_8bit_UVFrac, - gcvFEATURE_TX_MIPFILTER_NONE_FIX, - gcvFEATURE_MC_STENCIL_CTRL, - gcvFEATURE_DEPTH_MATH_FIX, - gcvFEATURE_PE_B2B_PIXEL_FIX, - gcvFEATURE_TEXTURE_GATHER_OFFSETS, - gcvFEATURE_TEX_CACHE_FLUSH_FIX, - gcvFEATURE_WIDELINE_HELPER_FIX, - gcvFEATURE_LINE_DIAMOND_RULE_FIX, - gcvFEATURE_MULTIGPU_SYNC_V2, - gcvFEATURE_DRAW_ID, - gcvFEATURE_SNAPPAGE_CMD, - gcvFEATURE_COMMAND_PREFETCH, - gcvFEATURE_SAMPLEPOS_SWIZZLE_FIX, - gcvFEATURE_SELECTMAP_SRC0_SWIZZLE_FIX, - gcvFEATURE_LOADATTR_OOB_FIX, - gcvFEATURE_RA_DEPTH_WRITE_MSAA1X_FIX, - gcvFEATURE_MRT_8BIT_DUAL_PIPE_FIX, - gcvFEATURE_BUG_FIXES1, - gcvFEATURE_MULTI_SOURCE_BLT, - gcvFEATURE_ZCOMPRESSION, - gcvFEATURE_DITHER_AND_FILTER_PLUS_ALPHA_2D, - gcvFEATURE_ONE_PASS_2D_FILTER, - gcvFEATURE_TX_FILTER, - gcvFEATURE_CHIPENABLE_LINK, - gcvFEATURE_TEXTURE_BIAS_LOD_FIX, - gcvFEATURE_USE_GL_Z, - gcvFEATURE_SUPPORT_INTEGER, - /* PARTLY_SUPPORT_INTEGER_BRANCH: - ** chips can support all integer types for compare instructions, e.g, CMP, SELECT. - ** FULLLY_SUPPORT_INTEGER_BRANCH: - ** chips can support all integer types for JMP instruction. - ** If PARTLY_SUPPORT_INTEGER_BRANCH is TRUE but FULLLY_SUPPORT_INTEGER_BRANCH is FALSE, - ** then this chip can only support INT32/UINT32 JMP instruction. - */ - gcvFEATURE_PARTLY_SUPPORT_INTEGER_BRANCH, - gcvFEATURE_FULLLY_SUPPORT_INTEGER_BRANCH, - gcvFEATURE_SUPPORT_INTEGER_ATTRIBUTE, - gcvFEATURE_SUPPORT_MOVAI, - gcvFEATURE_NEED_FIX_FOR_CL_X, - gcvFEATURE_NEED_FIX_FOR_CL_XE, - gcvFEATURE_HAS_OUTPUT_COUNT_FIX, - gcvFEATURE_VARYING_PACKING_LIMITATION, - gcvFEATURE_HIGHP_VARYING_SHIFT, - gcvFEATURE_BUG_FIXES2, - gcvFEATURE_64K_L2_CACHE, - gcvFEATURE_128BTILE, - gcvFEATURE_ADVANCED_BLEND_OPT, - gcvFEATURE_SNAPPAGE_CMD_FIX, - gcvFEATURE_L2_CACHE_FOR_2D_420, - gcvFEATURE_TILE_STATUS_2BITS, - gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS0, - gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS1, - gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS2, - gcvFEATURE_MEDIUM_PRECISION, - gcvFEATURE_FE20_BIT_INDEX, - gcvFEATURE_BUG_FIXES4, - gcvFEATURE_BUG_FIXES12, - gcvFEATURE_VMSAA, - gcvFEATURE_ROBUST_ATOMIC, - gcvFEATURE_32F_COLORMASK_FIX, - gcvFEATURE_NEW_GPIPE, - gcvFEATURE_RS_NEW_BASEADDR, - gcvFEATURE_TX_DXT, - gcvFEATURE_SH_FLAT_INTERPOLATION_DUAL16_FIX, - gcvFEATURE_EVIS, - gcvFEATURE_SH_SUPPORT_V4, - gcvFEATURE_SH_SUPPORT_ALPHA_KILL, - gcvFEATURE_PE_NO_ALPHA_TEST, - gcvFEATURE_SH_SNAP2PAGE_MAXPAGES_FIX, - gcvFEATURE_USC_FULLCACHE_FIX, - gcvFEATURE_PE_64bit_FENCE_FIX, - gcvFEATURE_BLT_8bit_256TILE_FC_FIX, - gcvFEATURE_PE_RGBA16I_FIX, - gcvFEATURE_BLT_64bpp_MASKED_CLEAR_FIX, - gcvFEATURE_SH_PSO_MSAA1x_FIX, - gcvFEATURE_USC_ATOMIC_FIX, - gcvFEATURE_INDEX_CONST_ON_B0, - gcvFEATURE_SH_NO_ONECONST_LIMIT, - gcvFEATURE_EVIS_NO_ABSDIFF, - gcvFEATURE_EVIS_NO_BITREPLACE, - gcvFEATURE_EVIS_NO_BOXFILTER, - gcvFEATURE_EVIS_NO_CORDIAC, - gcvFEATURE_EVIS_NO_DP32, - gcvFEATURE_EVIS_NO_FILTER, - gcvFEATURE_EVIS_NO_IADD, - gcvFEATURE_EVIS_NO_SELECTADD, - gcvFEATURE_EVIS_LERP_7OUTPUT, - gcvFEATURE_EVIS_ACCSQ_8OUTPUT, - gcvFEATURE_ROBUSTNESS, - gcvFEATURE_SECURITY, - gcvFEATURE_TX_YUV_ASSEMBLER_10BIT, - gcvFEATURE_USC_GOS_ADDR_FIX, - gcvFEATURE_SUPPORT_MSAA2X, - gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX, - gcvFEATURE_TX_INTEGER_COORDINATE, - gcvFEATURE_PSIO_SAMPLEMASK_IN_R0ZW_FIX, - gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG, - gcvFEATURE_SH_IMG_LDST_ON_TEMP, - gcvFEATURE_TX_INTEGER_COORDINATE_V2, - gcvFEATURE_COMPUTE_ONLY, - gcvFEATURE_SH_IMG_LDST_CLAMP, - gcvFEATURE_SH_ICACHE_ALLOC_COUNT_FIX, - gcvFEATURE_MSAA_OQ_FIX, - gcvFEATURE_PE_ENHANCEMENTS2, - gcvFEATURE_PSIO_MSAA_CL_FIX, - gcvFEATURE_FE_NEED_DUMMYDRAW, - gcvFEATURE_MULTI_CLUSTER, - gcvFEATURE_PSIO_INTERLOCK, - gcvFEATURE_BLIT_COMPRESS_DEST, - gcvFEATURE_SH_MULTI_WG_PACK, - gcvFEATURE_FE_ROBUST_FIX, - gcvFEATURE_TX_ASTC_MULTISLICE_FIX, - gcvFEATURE_PSIO_DUAL16_32bpc_FIX, - gcvFEATURE_LS_SUPPORT_PER_COMP_DEPENDENCY, - gcvFEATURE_COMPRESSION_DEC400, - gcvFEATURE_SH_TEXLD_U_FIX, - gcvFEATURE_TX_FLUSH_L1CACHE, - gcvFEATURE_USC_DEFER_FILL_FIX, - gcvFEATURE_MC_FCCACHE_BYTEMASK, - gcvFEATURE_SH_MULTI_WG_PACK_FIX, - gcvFEATURE_FE_PATCHLIST_FETCH_FIX, - gcvFEATURE_RA_CG_FIX, - gcvFEATURE_EVIS_VX2, - gcvFEATURE_SH_HALF_DEPENDENCY_FIX, - gcvFEATURE_FE_BASEINSTANCE, - gcvFEATURE_FE_COMPUREINDIRECT_SKIP_UNIFORM, - gcvFEATURE_SH_CLOCK_GATE_FIX, - gcvFEATURE_GPIPE_CLOCK_GATE_FIX, - gcvFEATURE_TP_ENGINE, - gcvFEATURE_TX_BORDER_CLAMP_FIX, - gcvFEATURE_SH_IMAGE_LD_LAST_PIXEL_FIX, - gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG2, - gcvFEATURE_MULTIGPU_SYNC_V3, - gcvFEATURE_PE_VMSAA_COVERAGE_CACHE_FIX, - gcvFEATURE_SECURITY_AHB, - gcvFEATURE_TX_LERP_LESS_BIT, - gcvFEATURE_SMALL_BATCH, - gcvFEATURE_SH_IDIV0_SWZL_EHS, - gcvFEATURE_SH_CMPLX, - gcvFEATURE_VIP_V7, - gcvFEATURE_SH_GM_ENDIAN, - gcvFEATURE_SH_GM_USC_UNALLOC, - gcvFEATURE_SH_END_OF_BB, - gcvFEATURE_ASYNC_BLIT, - gcvFEATURE_ASYNC_FE_FENCE_FIX, - gcvFEATURE_PSCS_THROTTLE, - gcvFEATURE_SEPARATE_LS, - gcvFEATURE_PA_VARYING_COMPONENT_TOGGLE_FIX, - gcvFEATURE_TX_MULTISAMPLER_FC_FIX, - gcvFEATURE_WIDELINE_TRIANGLE_EMU, - gcvFEATURE_FENCE, - gcvFEATURE_MCFE, - gcvFEATURE_NN_INTERLEAVE8, - gcvFEATURE_TP_REORDER, - gcvFEATURE_TP_RTNE, - gcvFEATURE_TP_LRN, - gcvFEATURE_TP_ROI_POOLING, - gcvFEATURE_TP_MAX_POOLING_STRIDE1, - gcvFEATURE_NN_BRICK_MODE, - gcvFEATURE_NN_BORDER_MODE, - gcvFEATURE_NN_FP16_ALU, - gcvFEATURE_NN_BF16_ALU, - gcvFEATURE_NN_INT16_ALU, - gcvFEATURE_NN_ZDP3, - gcvFEATURE_NN_ZDP6, - gcvFEATURE_PE_DEPTH_ONLY_OQFIX, - gcvFEATURE_TX_SNORM_SUPPORT, - gcvFEATURE_HWMANAGED_LS, - gcvFEATURE_SH_SCATTER_GATHER, - gcvFEATURE_NN_POWER_ISOLATION, - gcvFEATURE_SWTILING_PHASE1, - gcvFEATURE_SWTILING_PHASE2, - gcvFEATURE_SWTILING_PHASE3, - gcvFEATURE_TF_QUANTIZATION, - gcvFEATURE_NN_XYDP9, - gcvFEATURE_TP_SIMPLE_INT16, - gcvFEATURE_TP_REAL_INT16, - gcvFEATURE_NN_FIRST_PIXEL_POOLING, - gcvFEATURE_NN_STRIDE_SUPPORT, - gcvFEATURE_NN_XYDP6, - gcvFEATURE_NN_XYDP0, - gcvFEATURE_TP_REORDER_FIX, - gcvFEATURE_NN_CONV1x1_PERF_FIX, - gcvFEATURE_NN_CACHELINE_MODE_PERF_FIX, - gcvFEATURE_NN_PER3DTILE_BUBBLE_FIX, - gcvFEATURE_SH_IO_CG_FIX, - gcvFEATURE_USC_STAY_LRU, - gcvFEATURE_NN_NONZERO_MIRROR_BORDER, - gcvFEATURE_NN_COEF_DECOMPRESS_PERF2X, - gcvFEATURE_4BIT_INPUT, - gcvFEATURE_COEF_COMPRESSION_ENHANCEMENT, - gcvFEATURE_NN_ZDP3_NO_COMPRESS_FIX, - gcvFEATURE_NN_ASYNC_COPY_PERF_FIX, - gcvFEATURE_OCB_COUNTER, - gcvFEATURE_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX, - gcvFEATURE_NN_FULLCACHE_KERNEL_INTERLEAVE_FIX, - gcvFEATURE_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX, - gcvFEATURE_USC_BOTTLENECK_FIX, - gcvFEATURE_OCB_REMAP_PHYSICAL_ADDRESS, - gcvFEATURE_NN_SLICE_PADDING_TO_64BYTE_ALIGN, - gcvFEATURE_NN_DW_1x1_CONV_MERGE, - gcvFEATURE_TP_REORDER_LAYER_SUSPEND_FIX, - gcvFEATURE_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX, - gcvFEATURE_IMG_POP_PIPELINE_PAUSE_FIX, - gcvFEATURE_NN_SLOW_OUTPUT, - gcvFEATURE_NO_NARROW_POST_PROCESS_PIPE, - gcvFEATURE_TP_NN_PROBE, - gcvFEATURE_TP_23BITS_POST_MULTIPLIER, - gcvFEATURE_NN_TRANSPOSE, - - gcvFEATURE_IMAGE_LS_NO_FULLMASK_FIX, - gcvFEATURE_BLT_YUV_OUTPUT, - gcvFEATURE_PE_TILE_CACHE_FLUSH_FIX, - gcvFEATURE_SH_ROBUSTNESS_FIX, - gcvFEATURE_USC_ATOMIC_FIX2, - gcvFEATURE_MULTIVIEW_RENDER, - gcvFEATURE_FE_DRAW_DIRECT, - gcvFEATURE_TX_VKBORDER_MODE, - gcvFEATURE_TX_UNNORMALIZED_COORD, - gcvFEATURE_VG_IMAGE_16K, - gcvFEATURE_MULTICORE_CONFIG, - gcvFEATURE_PA_LINECLIP_FIX, - gcvFEATURE_NN_ENGINE, - gcvFEATURE_NN_ASYNC_COPY_MERGE_FIX, - gcvFEATURE_NN_CONVOUT_FIFO_DEPTH_FIX, - gcvFEATURE_NN_SMALLBATCH_PHASE1, - gcvFEATURE_TP_SMALLBATCH_PHASE1, - gcvFEATURE_VIP_SCALER, - gcvFEATURE_TX_8bit_UVFrac_ROUNDING_FIX, - gcvFEATURE_NN_REQ_SLOWARBITRATION_FIX, - gcvFEATUER_IMAGE_PARTIAL_CACHE, - gcvFEATURE_FULLCACHE_KERNELHEAD_FIX, - gcvFEATURE_NN_SINGLEPORT_ACCUMBUFFER, - gcvFEATURE_NN_SMALLBATCH, - gcvFEATURE_TP_SMALLBATCH, - gcvFEATURE_NN_ZDP_INIMAGE_SIZE_FIX, - gcvFEATURE_HI_REORDER_FIX, - gcvFEATURE_TP_COEF_COMPRESSION_ENHANCEMENT, - gcvFEATURE_NN_DEPTHWISE_SUPPORT, - gcvFEATURE_IMAGE_NOT_PACKED_IN_SRAM_FIX, - gcvFEATURE_IDLE_BEFORE_FLUSH_COMPLETE_FIX, - gcvFEATURE_NO_FLUSH_USC_FIX, - gcvFEATURE_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX, - gcvFEATURE_XY_OFFSET_LIMITATION_FIX, - gcvFEATURE_USC_INVALIDATE_CACHE_LINE_FIX, - gcvFEATURE_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX, - gcvFEATURE_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX, - gcvFEATURE_NN_PER_CHANNEL_POST_MULTIPLY, - gcvFEATURE_NN_NO_Z_LOCATION_OFFSET, - gcvFEATURE_NN_PRELU, - gcvFEATURE_NN_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX, - gcvFEATURE_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX, - gcvFEATURE_VIP_DEC400, - gcvFEATURE_MAX_POINTSIZE_CLAMP, - gcvFEATURE_2D_FAST_CLEAR, /* For tilestatus Fast Clear feature*/ - - /* Insert features above this comment only. */ - gcvFEATURE_COUNT /* Not a feature. */ -} -gceFEATURE; - /* dummy draw type.*/ typedef enum _gceDUMMY_DRAW_TYPE { @@ -636,6 +66,7 @@ typedef enum _gceOPTION gcvOPTION_OVX_ENABLE_NN_STRIDE, gcvOPTION_OVX_USE_MULTI_DEVICES, gcvOPTION_OVX_ENABLE_NN_DDR_BURST_SIZE_256B, + gcvOPTION_OVX_ENABLE_NN_DDR_BURST_SIZE_64B, #endif /* Insert option above this comment only */ gcvOPTION_COUNT /* Not a OPTION*/ @@ -670,127 +101,6 @@ typedef enum _gceFRAMEINFO_OP } gceFRAMEINFO_OP; - -/* Chip Power Status. */ -typedef enum _gceCHIPPOWERSTATE -{ - gcvPOWER_INVALID = -1, - - /* Global/base states. */ - gcvPOWER_ON = 0, - gcvPOWER_IDLE, - gcvPOWER_SUSPEND, - gcvPOWER_OFF, - - /* Power on but not global or broadcast. */ - gcvPOWER_ON_AUTO, - - /* Broadcast states. */ - gcvPOWER_FLAG_BROADCAST = 0x10, - gcvPOWER_IDLE_BROADCAST = gcvPOWER_IDLE | gcvPOWER_FLAG_BROADCAST, - gcvPOWER_SUSPEND_BROADCAST = gcvPOWER_SUSPEND | gcvPOWER_FLAG_BROADCAST, - gcvPOWER_OFF_BROADCAST = gcvPOWER_OFF | gcvPOWER_FLAG_BROADCAST, - - - /* Timeout states. */ - gcvPOWER_FLAG_TIMEOUT = 0x20, - gcvPOWER_IDLE_TIMEOUT = gcvPOWER_IDLE | gcvPOWER_FLAG_TIMEOUT, - gcvPOWER_SUSPEND_TIMEOUT = gcvPOWER_SUSPEND | gcvPOWER_FLAG_TIMEOUT, - gcvPOWER_OFF_TIMEOUT = gcvPOWER_OFF | gcvPOWER_FLAG_TIMEOUT, - -} -gceCHIPPOWERSTATE; - -/* CPU cache operations */ -typedef enum _gceCACHEOPERATION -{ - gcvCACHE_CLEAN = 0x01, /* Flush CPU cache to mem */ - gcvCACHE_INVALIDATE = 0x02, /* Invalidte CPU cache */ - gcvCACHE_FLUSH = gcvCACHE_CLEAN | gcvCACHE_INVALIDATE, /* Both flush & invalidate */ - gcvCACHE_MEMORY_BARRIER = 0x04 -} -gceCACHEOPERATION; - -/* Surface types. */ -typedef enum _gceSURF_TYPE -{ - gcvSURF_TYPE_UNKNOWN = 0, - gcvSURF_INDEX, - gcvSURF_VERTEX, - gcvSURF_TEXTURE, - gcvSURF_RENDER_TARGET, - gcvSURF_DEPTH, - gcvSURF_BITMAP, - gcvSURF_TILE_STATUS, - gcvSURF_IMAGE, - gcvSURF_MASK, - gcvSURF_SCISSOR, - gcvSURF_HIERARCHICAL_DEPTH, - gcvSURF_ICACHE, - gcvSURF_TXDESC, - gcvSURF_FENCE, - gcvSURF_TFBHEADER, - gcvSURF_NUM_TYPES, /* Make sure this is the last one! */ - - /* Combinations. */ - gcvSURF_NO_TILE_STATUS = 0x100, - gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node. - In Android, vidmem node is allocated by another process. */ - gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */ - gcvSURF_TILE_RLV_FENCE = 0x800, /* create texture fence as tile */ - gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */ - gcvSURF_LINEAR = 0x2000, - gcvSURF_CREATE_AS_TEXTURE = 0x4000, /* create it as a texture */ - gcvSURF_PROTECTED_CONTENT = 0x8000, /* create it as content protected */ - gcvSURF_CREATE_AS_DISPLAYBUFFER = 0x10000, /*create it as a display buffer surface */ - gcvSURF_CONTIGUOUS = 0x20000, /*create it as contiguous */ - gcvSURF_NO_COMPRESSION = 0x40000, /* Create it as no compression, valid on when it has tile status. */ - gcvSURF_DEC = 0x80000, /* Surface is DEC compressed */ - gcvSURF_NO_HZ = 0x100000, - gcvSURF_3D = 0x200000, /* It's 3d surface */ - gcvSURF_DMABUF_EXPORTABLE = 0x400000, /* master node can be exported as dma-buf fd */ - gcvSURF_CACHE_MODE_128 = 0x800000, - - gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE - | gcvSURF_LINEAR, - - gcvSURF_RENDER_TARGET_LINEAR = gcvSURF_RENDER_TARGET - | gcvSURF_LINEAR, - - gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET - | gcvSURF_NO_TILE_STATUS, - - gcvSURF_RENDER_TARGET_NO_COMPRESSION = gcvSURF_RENDER_TARGET - | gcvSURF_NO_COMPRESSION, - - gcvSURF_RENDER_TARGET_TS_DIRTY = gcvSURF_RENDER_TARGET - | gcvSURF_TILE_STATUS_DIRTY, - - gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH - | gcvSURF_NO_TILE_STATUS, - - gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH - | gcvSURF_TILE_STATUS_DIRTY, - - /* Supported surface types with no vidmem node. */ - gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP - | gcvSURF_NO_VIDMEM, - - gcvSURF_TEXTURE_NO_VIDMEM = gcvSURF_TEXTURE - | gcvSURF_NO_VIDMEM, - - /* Cacheable surface types with no vidmem node. */ - gcvSURF_CACHEABLE_BITMAP_NO_VIDMEM = gcvSURF_BITMAP_NO_VIDMEM - | gcvSURF_CACHEABLE, - - gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP - | gcvSURF_CACHEABLE, - - gcvSURF_TEXTURE_3D = gcvSURF_TEXTURE - | gcvSURF_3D -} -gceSURF_TYPE; - typedef enum _gceSURF_USAGE { gcvSURF_USAGE_UNKNOWN, @@ -854,421 +164,6 @@ typedef enum _gceMIPMAP_IMAGE_FORMAT } gceMIPMAP_IMAGE_FORMAT; -/* Surface formats. -** Name rules is from MSB->LSB. -*/ -typedef enum _gceSURF_FORMAT -{ - /* Unknown format. */ - gcvSURF_UNKNOWN = 0, - - /* Palettized formats. */ - gcvSURF_INDEX1 = 100, - gcvSURF_INDEX4, - gcvSURF_INDEX8, -#if gcdVG_ONLY - gcvSURF_INDEX2, -#endif - - /* RGB formats. */ - gcvSURF_A2R2G2B2 = 200, - gcvSURF_R3G3B2, - gcvSURF_A8R3G3B2, - gcvSURF_X4R4G4B4, - gcvSURF_A4R4G4B4, - gcvSURF_R4G4B4A4, - gcvSURF_X1R5G5B5, - gcvSURF_A1R5G5B5, - gcvSURF_R5G5B5A1, - gcvSURF_R5G6B5, - gcvSURF_R8G8B8, - gcvSURF_X8R8G8B8, - gcvSURF_A8R8G8B8, - gcvSURF_R8G8B8A8, - gcvSURF_G8R8G8B8, - gcvSURF_R8G8B8G8, - gcvSURF_X2R10G10B10, - gcvSURF_A2R10G10B10, - gcvSURF_R10G10B10A2, - gcvSURF_X12R12G12B12, - gcvSURF_A12R12G12B12, - gcvSURF_X16R16G16B16, - gcvSURF_A16R16G16B16, - gcvSURF_A32R32G32B32, - gcvSURF_R8G8B8X8, - gcvSURF_R5G5B5X1, - gcvSURF_R4G4B4X4, - gcvSURF_X16R16G16B16_2_A8R8G8B8, - gcvSURF_A16R16G16B16_2_A8R8G8B8, - gcvSURF_A32R32G32B32_2_G32R32F, - gcvSURF_A32R32G32B32_4_A8R8G8B8, - /* BGR formats. */ - gcvSURF_A4B4G4R4 = 300, - gcvSURF_A1B5G5R5, - gcvSURF_B5G6R5, - gcvSURF_B8G8R8, - gcvSURF_B16G16R16, - gcvSURF_X8B8G8R8, - gcvSURF_A8B8G8R8, - gcvSURF_A2B10G10R10, - gcvSURF_X16B16G16R16, - gcvSURF_A16B16G16R16, - gcvSURF_B32G32R32, - gcvSURF_X32B32G32R32, - gcvSURF_A32B32G32R32, - gcvSURF_B4G4R4A4, - gcvSURF_B5G5R5A1, - gcvSURF_B8G8R8X8, - gcvSURF_B8G8R8A8, - gcvSURF_B10G10R10A2, - gcvSURF_X4B4G4R4, - gcvSURF_X1B5G5R5, - gcvSURF_B4G4R4X4, - gcvSURF_B5G5R5X1, - gcvSURF_X2B10G10R10, - gcvSURF_B8G8R8_SNORM, - gcvSURF_X8B8G8R8_SNORM, - gcvSURF_A8B8G8R8_SNORM, - gcvSURF_A8B12G12R12_2_A8R8G8B8, - - /* Compressed formats. */ - gcvSURF_DXT1 = 400, - gcvSURF_DXT2, - gcvSURF_DXT3, - gcvSURF_DXT4, - gcvSURF_DXT5, - gcvSURF_CXV8U8, - gcvSURF_ETC1, - gcvSURF_R11_EAC, - gcvSURF_SIGNED_R11_EAC, - gcvSURF_RG11_EAC, - gcvSURF_SIGNED_RG11_EAC, - gcvSURF_RGB8_ETC2, - gcvSURF_SRGB8_ETC2, - gcvSURF_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, - gcvSURF_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, - gcvSURF_RGBA8_ETC2_EAC, - gcvSURF_SRGB8_ALPHA8_ETC2_EAC, - - /* YUV formats. */ - gcvSURF_YUY2 = 500, - gcvSURF_UYVY, - gcvSURF_YV12, - gcvSURF_I420, - gcvSURF_NV12, - gcvSURF_NV21, - gcvSURF_NV16, - gcvSURF_NV61, - gcvSURF_YVYU, - gcvSURF_VYUY, - gcvSURF_AYUV, - gcvSURF_YUV420_10_ST, - gcvSURF_YUV420_TILE_ST, - gcvSURF_YUV420_TILE_10_ST, - gcvSURF_NV12_10BIT, - gcvSURF_NV21_10BIT, - gcvSURF_NV16_10BIT, - gcvSURF_NV61_10BIT, - gcvSURF_P010, -#if gcdVG_ONLY - gcvSURF_AYUY2, - gcvSURF_ANV12, - gcvSURF_ANV16, - gcvSURF_AUYVY, - gcvSURF_YV16, -#endif - - /* Depth formats. */ - gcvSURF_D16 = 600, - gcvSURF_D24S8, - gcvSURF_D32, - gcvSURF_D24X8, - gcvSURF_D32F, - gcvSURF_S8D32F, - gcvSURF_S8D32F_1_G32R32F, - gcvSURF_S8D32F_2_A8R8G8B8, - gcvSURF_D24S8_1_A8R8G8B8, - gcvSURF_S8, - gcvSURF_X24S8, - gcvSURF_X24S8_1_A8R8G8B8, - - /* Alpha formats. */ - gcvSURF_A4 = 700, - gcvSURF_A8, - gcvSURF_A12, - gcvSURF_A16, - gcvSURF_A32, - gcvSURF_A1, - - /* Luminance formats. */ - gcvSURF_L4 = 800, - gcvSURF_L8, - gcvSURF_L12, - gcvSURF_L16, - gcvSURF_L32, - gcvSURF_L1, - gcvSURF_L8_RAW, - - /* Alpha/Luminance formats. */ - gcvSURF_A4L4 = 900, - gcvSURF_A2L6, - gcvSURF_A8L8, - gcvSURF_A4L12, - gcvSURF_A12L12, - gcvSURF_A16L16, - - gcvSURF_A8L8_1_A8R8G8B8, - - gcvSURF_A8L8_RAW, - - /* Bump formats. */ - gcvSURF_L6V5U5 = 1000, - gcvSURF_V8U8, - gcvSURF_X8L8V8U8, - gcvSURF_Q8W8V8U8, - gcvSURF_A2W10V10U10, - gcvSURF_V16U16, - gcvSURF_Q16W16V16U16, - - /* R/RG/RA formats. */ - gcvSURF_R8 = 1100, - gcvSURF_X8R8, - gcvSURF_G8R8, - gcvSURF_X8G8R8, - gcvSURF_A8R8, - gcvSURF_R16, - gcvSURF_X16R16, - gcvSURF_G16R16, - gcvSURF_X16G16R16, - gcvSURF_A16R16, - gcvSURF_R32, - gcvSURF_X32R32, - gcvSURF_G32R32, - gcvSURF_X32G32R32, - gcvSURF_A32R32, - gcvSURF_RG16, - gcvSURF_R8_SNORM, - gcvSURF_G8R8_SNORM, - - gcvSURF_R8_1_X8R8G8B8, - gcvSURF_G8R8_1_X8R8G8B8, - - /* Floating point formats. */ - gcvSURF_R16F = 1200, - gcvSURF_X16R16F, - gcvSURF_G16R16F, - gcvSURF_X16G16R16F, - gcvSURF_B16G16R16F, - gcvSURF_X16B16G16R16F, - gcvSURF_A16B16G16R16F, - gcvSURF_R32F, - gcvSURF_X32R32F, - gcvSURF_G32R32F, - gcvSURF_X32G32R32F, - gcvSURF_B32G32R32F, - gcvSURF_X32B32G32R32F, - gcvSURF_A32B32G32R32F, - gcvSURF_A16F, - gcvSURF_L16F, - gcvSURF_A16L16F, - gcvSURF_A16R16F, - gcvSURF_A32F, - gcvSURF_L32F, - gcvSURF_A32L32F, - gcvSURF_A32R32F, - gcvSURF_E5B9G9R9, - gcvSURF_B10G11R11F, - - gcvSURF_X16B16G16R16F_2_A8R8G8B8, - gcvSURF_A16B16G16R16F_2_A8R8G8B8, - gcvSURF_A16B16G16R16F_2_G16R16F, - gcvSURF_G32R32F_2_A8R8G8B8, - gcvSURF_X32B32G32R32F_2_G32R32F, - gcvSURF_A32B32G32R32F_2_G32R32F, - gcvSURF_X32B32G32R32F_4_A8R8G8B8, - gcvSURF_A32B32G32R32F_4_A8R8G8B8, - - gcvSURF_R16F_1_A4R4G4B4, - gcvSURF_G16R16F_1_A8R8G8B8, - gcvSURF_B16G16R16F_2_A8R8G8B8, - - gcvSURF_R32F_1_A8R8G8B8, - gcvSURF_B32G32R32F_3_A8R8G8B8, - gcvSURF_B10G11R11F_1_A8R8G8B8, - - gcvSURF_A32F_1_R32F, - gcvSURF_L32F_1_R32F, - gcvSURF_A32L32F_1_G32R32F, - - - - /* sRGB format. */ - gcvSURF_SBGR8 = 1400, - gcvSURF_A8_SBGR8, - gcvSURF_X8_SBGR8, - gcvSURF_A8_SRGB8, - gcvSURF_X8_SRGB8, - - /* Integer formats. */ - gcvSURF_R8I = 1500, - gcvSURF_R8UI, - gcvSURF_R16I, - gcvSURF_R16UI, - gcvSURF_R32I, - gcvSURF_R32UI, - gcvSURF_X8R8I, - gcvSURF_G8R8I, - gcvSURF_X8R8UI, - gcvSURF_G8R8UI, - gcvSURF_X16R16I, - gcvSURF_G16R16I, - gcvSURF_X16R16UI, - gcvSURF_G16R16UI, - gcvSURF_X32R32I, - gcvSURF_G32R32I, - gcvSURF_X32R32UI, - gcvSURF_G32R32UI, - gcvSURF_X8G8R8I, - gcvSURF_B8G8R8I, - gcvSURF_X8G8R8UI, - gcvSURF_B8G8R8UI, - gcvSURF_X16G16R16I, - gcvSURF_B16G16R16I, - gcvSURF_X16G16R16UI, - gcvSURF_B16G16R16UI, - gcvSURF_X32G32R32I, - gcvSURF_B32G32R32I, - gcvSURF_X32G32R32UI, - gcvSURF_B32G32R32UI, - gcvSURF_X8B8G8R8I, - gcvSURF_A8B8G8R8I, - gcvSURF_X8B8G8R8UI, - gcvSURF_A8B8G8R8UI, - gcvSURF_X16B16G16R16I, - gcvSURF_A16B16G16R16I, - gcvSURF_X16B16G16R16UI, - gcvSURF_A16B16G16R16UI, - gcvSURF_X32B32G32R32I, - gcvSURF_A32B32G32R32I, - gcvSURF_X32B32G32R32UI, - gcvSURF_A32B32G32R32UI, - gcvSURF_A2B10G10R10UI, - gcvSURF_G32R32I_2_A8R8G8B8, - gcvSURF_G32R32I_1_G32R32F, - gcvSURF_G32R32UI_2_A8R8G8B8, - gcvSURF_G32R32UI_1_G32R32F, - gcvSURF_X16B16G16R16I_2_A8R8G8B8, - gcvSURF_X16B16G16R16I_1_G32R32F, - gcvSURF_A16B16G16R16I_2_A8R8G8B8, - gcvSURF_A16B16G16R16I_1_G32R32F, - gcvSURF_X16B16G16R16UI_2_A8R8G8B8, - gcvSURF_X16B16G16R16UI_1_G32R32F, - gcvSURF_A16B16G16R16UI_2_A8R8G8B8, - gcvSURF_A16B16G16R16UI_1_G32R32F, - gcvSURF_X32B32G32R32I_2_G32R32I, - gcvSURF_A32B32G32R32I_2_G32R32I, - gcvSURF_A32B32G32R32I_2_G32R32F, - gcvSURF_X32B32G32R32I_3_A8R8G8B8, - gcvSURF_A32B32G32R32I_4_A8R8G8B8, - gcvSURF_X32B32G32R32UI_2_G32R32UI, - gcvSURF_A32B32G32R32UI_2_G32R32UI, - gcvSURF_A32B32G32R32UI_2_G32R32F, - gcvSURF_X32B32G32R32UI_3_A8R8G8B8, - gcvSURF_A32B32G32R32UI_4_A8R8G8B8, - gcvSURF_A2B10G10R10UI_1_A8R8G8B8, - gcvSURF_A8B8G8R8I_1_A8R8G8B8, - gcvSURF_A8B8G8R8UI_1_A8R8G8B8, - gcvSURF_R8I_1_A4R4G4B4, - gcvSURF_R8UI_1_A4R4G4B4, - gcvSURF_R16I_1_A4R4G4B4, - gcvSURF_R16UI_1_A4R4G4B4, - gcvSURF_R32I_1_A8R8G8B8, - gcvSURF_R32UI_1_A8R8G8B8, - gcvSURF_X8R8I_1_A4R4G4B4, - gcvSURF_X8R8UI_1_A4R4G4B4, - gcvSURF_G8R8I_1_A4R4G4B4, - gcvSURF_G8R8UI_1_A4R4G4B4, - gcvSURF_X16R16I_1_A4R4G4B4, - gcvSURF_X16R16UI_1_A4R4G4B4, - gcvSURF_G16R16I_1_A8R8G8B8, - gcvSURF_G16R16UI_1_A8R8G8B8, - gcvSURF_X32R32I_1_A8R8G8B8, - gcvSURF_X32R32UI_1_A8R8G8B8, - gcvSURF_X8G8R8I_1_A4R4G4B4, - gcvSURF_X8G8R8UI_1_A4R4G4B4, - gcvSURF_B8G8R8I_1_A8R8G8B8, - gcvSURF_B8G8R8UI_1_A8R8G8B8, - gcvSURF_B16G16R16I_2_A8R8G8B8, - gcvSURF_B16G16R16I_1_G32R32F, - gcvSURF_B16G16R16UI_2_A8R8G8B8, - gcvSURF_B16G16R16UI_1_G32R32F, - gcvSURF_B32G32R32I_3_A8R8G8B8, - gcvSURF_B32G32R32UI_3_A8R8G8B8, - gcvSURF_A16B16G16R16_2_A8R8G8B8, - gcvSURF_R8G8B8_1_A8R8G8B8, - gcvSURF_G16R16_1_A8R8G8B8, - gcvSURF_A2B10G10R10_1_A8R8G8B8, - gcvSURF_A2R10G10B10_1_A8R8G8B8, - gcvSURF_A2W10V10U10_1_A8R8G8B8, - - /* ASTC formats. */ - gcvSURF_ASTC4x4 = 1600, - gcvSURF_ASTC5x4, - gcvSURF_ASTC5x5, - gcvSURF_ASTC6x5, - gcvSURF_ASTC6x6, - gcvSURF_ASTC8x5, - gcvSURF_ASTC8x6, - gcvSURF_ASTC8x8, - gcvSURF_ASTC10x5, - gcvSURF_ASTC10x6, - gcvSURF_ASTC10x8, - gcvSURF_ASTC10x10, - gcvSURF_ASTC12x10, - gcvSURF_ASTC12x12, - gcvSURF_ASTC4x4_SRGB, - gcvSURF_ASTC5x4_SRGB, - gcvSURF_ASTC5x5_SRGB, - gcvSURF_ASTC6x5_SRGB, - gcvSURF_ASTC6x6_SRGB, - gcvSURF_ASTC8x5_SRGB, - gcvSURF_ASTC8x6_SRGB, - gcvSURF_ASTC8x8_SRGB, - gcvSURF_ASTC10x5_SRGB, - gcvSURF_ASTC10x6_SRGB, - gcvSURF_ASTC10x8_SRGB, - gcvSURF_ASTC10x10_SRGB, - gcvSURF_ASTC12x10_SRGB, - gcvSURF_ASTC12x12_SRGB, - - /* Recompile format*/ - gcvSURF_L16_1_A4R4G4B4 = 1700, - gcvSURF_V16U16_1_A8R8G8B8, - gcvSURF_Q8W8V8U8_1_A8R8G8B8, - gcvSURF_X8L8V8U8_1_A8R8G8B8, - gcvSURF_R3G3B2_1_A8R8G8B8, - gcvSURF_A8R3G3B2_1_A8R8G8B8, - gcvSURF_W11V11U10_1_A8R8G8B8, - gcvSURF_Q16W16V16U16_2_A8R8G8B8, - gcvSURF_W11V11U10, - gcvSURF_V8U8_1_A4R4G4B4, - gcvSURF_A8B8G8R8_1_A8R8G8B8, - gcvSURF_A32R32G32B32_1_A8R8G8B8, - gcvSURF_X16B16G16R16F_1_A8R8G8B8, - gcvSURF_A16B16G16R16F_1_A8R8G8B8, - gcvSURF_G32R32F_1_A8R8G8B8, - gcvSURF_X32B32G32R32F_1_A8R8G8B8, - gcvSURF_A32B32G32R32F_1_A8R8G8B8, - gcvSURF_G32R32I_1_A8R8G8B8, - gcvSURF_G32R32UI_1_A8R8G8B8, - gcvSURF_A32B32G32R32I_1_A8R8G8B8, - gcvSURF_A32B32G32R32UI_1_A8R8G8B8, - gcvSURF_Q16W16V16U16_1_A8R8G8B8, - gcvSURF_A16B16G16R16_1_A8R8G8B8, - gcvSURF_FORMAT_COUNT -} -gceSURF_FORMAT; - typedef enum _gceIMAGE_MEM_TYPE { gcvIMAGE_MEM_DEFAULT, @@ -1747,71 +642,12 @@ typedef enum _gce2D_SOURCE } gce2D_SOURCE; -/* Pipes. */ -typedef enum _gcePIPE_SELECT -{ - gcvPIPE_INVALID = ~0, - gcvPIPE_3D = 0, - gcvPIPE_2D -} -gcePIPE_SELECT; - -/* Hardware type. */ -typedef enum _gceHARDWARE_TYPE -{ - gcvHARDWARE_INVALID, - gcvHARDWARE_3D, - gcvHARDWARE_2D, - gcvHARDWARE_VG, - gcvHARDWARE_3D2D, - gcvHARDWARE_NUM_TYPES, -} -gceHARDWARE_TYPE; - -#define gcdCHIP_COUNT gcvCORE_COUNT - typedef enum _gceMMU_MODE { gcvMMU_MODE_1K, gcvMMU_MODE_4K, } gceMMU_MODE; -/* User signal command codes. */ -typedef enum _gceUSER_SIGNAL_COMMAND_CODES -{ - gcvUSER_SIGNAL_CREATE, - gcvUSER_SIGNAL_DESTROY, - gcvUSER_SIGNAL_SIGNAL, - gcvUSER_SIGNAL_WAIT, - gcvUSER_SIGNAL_MAP, - gcvUSER_SIGNAL_UNMAP, -} -gceUSER_SIGNAL_COMMAND_CODES; - -/* Shared buffer command codes. */ -typedef enum _gceSHBUF_COMMAND_CODES -{ - gcvSHBUF_CREATE, - gcvSHBUF_DESTROY, - gcvSHBUF_MAP, - gcvSHBUF_WRITE, - gcvSHBUF_READ, -} -gceSHBUF_COMMAND_CODES; - -/* Event locations. */ -typedef enum _gceKERNEL_WHERE -{ - gcvKERNEL_COMMAND, - gcvKERNEL_VERTEX, - gcvKERNEL_TRIANGLE, - gcvKERNEL_TEXTURE, - gcvKERNEL_PIXEL, - gcvKERNEL_BLT, -} -gceKERNEL_WHERE; - - /* gcdDUMP message type. */ typedef enum _gceDEBUG_MESSAGE_TYPE { @@ -1969,6 +805,15 @@ typedef enum _gceTEXTURE_DS_MODE gcvTEXTURE_DS_MODE_STENCIL = 2, }gceTEXTURE_DS_MODE; +typedef enum _gceTEXTURE_DS_TEX_MODE +{ + gcvTEXTURE_DS_TEXTURE_MODE_LUMINANCE = 0, + gcvTEXTURE_DS_TEXTURE_MODE_INTENSITY, + gcvTEXTURE_DS_TEXTURE_MODE_ALPHA, + gcvTEXTURE_DS_TEXTURE_MODE_RED, + + gcvTEXTURE_DS_TEXTURE_MODE_INVALID, +}gceTEXTURE_DS_TEX_MODE; /* Pixel output swizzle modes. */ typedef enum _gcePIXEL_SWIZZLE @@ -2018,28 +863,11 @@ typedef enum _gceMULTI_GPU_RENDERING_MODE gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_64x64, gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x64, gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x128, + gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED, gcvMULTI_GPU_RENDERING_MODE_INVALID } gceMULTI_GPU_RENDERING_MODE; -typedef enum _gceCORE_3D_MASK -{ - gcvCORE_3D_0_MASK = (1 << 0), - gcvCORE_3D_1_MASK = (1 << 1), - - gcvCORE_3D_ALL_MASK = (0xFFFF) -} -gceCORE_3D_MASK; - -typedef enum _gceCORE_3D_ID -{ - gcvCORE_3D_0_ID = 0, - gcvCORE_3D_1_ID = 1, - - gcvCORE_3D_ID_INVALID = ~0UL -} -gceCORE_3D_ID; - typedef enum _gceMULTI_GPU_MODE { gcvMULTI_GPU_MODE_COMBINED = 0, @@ -2076,169 +904,1164 @@ typedef enum _gceHAL_ARG_VERSION gceHAL_ARG_VERSION; -typedef enum _gceCHIP_FLAG +/** endian mode for each 2Bytes +* endian mode endian +*endian mode0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +*endian mode1: 1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14 +*endian mode2: 2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 +*endain mode3: 3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 +*endain mode4: 12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 +*endain mode5: 13 12 15 14 9 8 11 10 5 4 7 6 1 0 3 2 +*endain mode6: 14 15 12 13 10 11 8 9 6 7 4 5 2 3 0 1 +*endain mode7: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +**/ +typedef enum _gceENDIAN_MODE +{ + gcvENDIAN_MODE0 = 0x0, /* endian mode0 */ + gcvENDIAN_MODE1 = 0x1, /* endian mode1 */ + gcvENDIAN_MODE2 = 0x2, /* endian mode2 */ + gcvENDIAN_MODE3 = 0x3, /* endian mode3 */ + gcvENDIAN_MODE4 = 0x4, /* endian mode4 */ + gcvENDIAN_MODE5 = 0x5, /* endian mode5 */ + gcvENDIAN_MODE6 = 0x6, /* endian mode6 */ + gcvENDIAN_MODE7 = 0x7, /* endian mode7 */ +} +gceENDIAN_MODE; + +typedef enum _gceHW_FE_TYPE { - gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX = 1 << 0, - gcvCHIP_FLAG_GC2000_R2 = 1 << 1, - gcvCHIP_AXI_BUS128_BITS = 1 << 2, + gcvHW_FE_WAIT_LINK, + gcvHW_FE_ASYNC, + gcvHW_FE_MULTI_CHANNEL, } -gceCHIP_FLAG; +gceHW_FE_TYPE; -/* If different, choose render engine */ -#define PRIORITY_ENGINE(a, b) gcmMIN(a,b) +typedef enum _gceMCFE_CHANNEL_TYPE +{ + gcvMCFE_CHANNEL_NONE = 0, + gcvMCFE_CHANNEL_SYSTEM, + gcvMCFE_CHANNEL_SHADER, + gcvMCFE_CHANNEL_NN, + gcvMCFE_CHANNEL_TP, + + gcvMCFE_CHANNEL_3DBLIT = 128, +} +gceMCFE_CHANNEL_TYPE; -typedef enum +typedef enum _gcePAGE_TYPE { - gcvENGINE_RENDER = 0, - gcvENGINE_BLT = 1, - gcvENGINE_GPU_ENGINE_COUNT = 2, - gcvENGINE_CPU = gcvENGINE_GPU_ENGINE_COUNT, - gcvENGINE_ALL_COUNT = gcvENGINE_CPU + 1, - gcvENGINE_INVALID = gcvENGINE_ALL_COUNT + 0x100 + gcvPAGE_TYPE_1M, + gcvPAGE_TYPE_4K, } -gceENGINE; +gcePAGE_TYPE; -/* CORE enum. */ -typedef enum _gceCORE +typedef enum _gceAREA_TYPE { - gcvCORE_MAJOR, - gcvCORE_3D1, - gcvCORE_3D2, - gcvCORE_3D3, - gcvCORE_3D4, - gcvCORE_3D5, - gcvCORE_3D6, - gcvCORE_3D7, - gcvCORE_3D_MAX = gcvCORE_3D7, - gcvCORE_2D, - gcvCORE_VG, -#if gcdDEC_ENABLE_AHB - gcvCORE_DEC, -#endif - gcvCORE_COUNT + gcvAREA_TYPE_UNKNOWN = 0, + gcvAREA_TYPE_FLATMAP, + gcvAREA_TYPE_1M, + gcvAREA_TYPE_4K, } -gceCORE; +gceAREA_TYPE; + +/******************************************************************************* +** Broadcast interface. +*/ + +typedef enum _gceBROADCAST +{ + /* GPU might be idle. */ + gcvBROADCAST_GPU_IDLE, + + /* A commit is going to happen. */ + gcvBROADCAST_GPU_COMMIT, + + /* GPU seems to be stuck. */ + gcvBROADCAST_GPU_STUCK, + + /* First process gets attached. */ + gcvBROADCAST_FIRST_PROCESS, + /* Last process gets detached. */ + gcvBROADCAST_LAST_PROCESS, -typedef enum _gceSECURE_MODE + /* AXI bus error. */ + gcvBROADCAST_AXI_BUS_ERROR, + + /* Out of memory. */ + gcvBROADCAST_OUT_OF_MEMORY, +} +gceBROADCAST; + +/* Notifications. */ +typedef enum _gceNOTIFY { - /* For cores without gcvFEATURE_SECURITY. */ - gcvSECURE_NONE, + gcvNOTIFY_INTERRUPT, + gcvNOTIFY_COMMAND_QUEUE, +} +gceNOTIFY; - /* Use registers added in gcvFEATURE_SECURITY in normal driver, - ** In this mode, GPU always works under non secure mode and - ** should not touch secure buffer. It is used to test basic function. - */ - gcvSECURE_IN_NORMAL, +/* Flush flags. */ +typedef enum _gceKERNEL_FLUSH +{ + gcvFLUSH_COLOR = 0x01, + gcvFLUSH_DEPTH = 0x02, + gcvFLUSH_TEXTURE = 0x04, + gcvFLUSH_2D = 0x08, + gcvFLUSH_L2 = 0x10, + gcvFLUSH_TILE_STATUS = 0x20, + gcvFLUSH_ICACHE = 0x40, + gcvFLUSH_TXDESC = 0x80, + gcvFLUSH_FENCE = 0x100, + gcvFLUSH_VERTEX = 0x200, + gcvFLUSH_TFBHEADER = 0x400, + gcvFLUSH_ALL = gcvFLUSH_COLOR + | gcvFLUSH_DEPTH + | gcvFLUSH_TEXTURE + | gcvFLUSH_2D + | gcvFLUSH_L2 + | gcvFLUSH_TILE_STATUS + | gcvFLUSH_ICACHE + | gcvFLUSH_TXDESC + | gcvFLUSH_FENCE + | gcvFLUSH_VERTEX + | gcvFLUSH_TFBHEADER +} +gceKERNEL_FLUSH; - /* Make use of gcvFEATURE_SECURITY in trust application. */ - gcvSECURE_IN_TA +typedef enum _gceCOUNTER +{ + gcvCOUNTER_FRONT_END, + gcvCOUNTER_VERTEX_SHADER, + gcvCOUNTER_PRIMITIVE_ASSEMBLY, + gcvCOUNTER_SETUP, + gcvCOUNTER_RASTERIZER, + gcvCOUNTER_PIXEL_SHADER, + gcvCOUNTER_TEXTURE, + gcvCOUNTER_PIXEL_ENGINE, + gcvCOUNTER_MEMORY_CONTROLLER_COLOR, + gcvCOUNTER_MEMORY_CONTROLLER_DEPTH, + gcvCOUNTER_HOST_INTERFACE0, + gcvCOUNTER_HOST_INTERFACE1, + gcvCOUNTER_GPUL2_CACHE, + gcvCOUNTER_COUNT +} +gceCOUNTER; + +typedef enum _gceProfilerClient +{ + gcvCLIENT_OPENGLES11 = 1, + gcvCLIENT_OPENGLES, + gcvCLIENT_OPENGL, + gcvCLIENT_OPENVG, + gcvCLIENT_OPENCL, + gcvCLIENT_OPENVX, + gcvCLIENT_OPENVK, } -gceSECURE_MODE; +gceProfilerClient; -/* kernel driver compression option, as it's a system global option, -** it means kernel driver allows the options, NOT necessarily means it must be on. +typedef enum _gceCOUNTER_OPTYPE +{ + gcvCOUNTER_OP_DRAW = 0, + gcvCOUNTER_OP_BLT = 1, + gcvCOUNTER_OP_COMPUTE = 2, + gcvCOUNTER_OP_RS = 3, + gcvCOUNTER_OP_FINISH = 4, + gcvCOUNTER_OP_FRAME = 5, + gcvCOUNTER_OP_NONE = 6 +} +gceCOUNTER_OPTYPE; + +typedef enum _gceProbeStatus +{ + gcvPROBE_Disabled = 0, + gcvPROBE_Paused = 1, + gcvPROBE_Enabled = 2, +} +gceProbeStatus; + +typedef enum _gceProbeCmd +{ + gcvPROBECMD_BEGIN = 0, + gcvPROBECMD_PAUSE = 1, + gcvPROBECMD_RESUME = 2, + gcvPROBECMD_END = 3, +} +gceProbeCmd; + +/******************************************************************************* +** Events. ********************************************************************* */ -typedef enum _gceCOMPRESSION_OPTION + +typedef enum _halEventType +{ + /* Keyboard event. */ + HAL_KEYBOARD, + + /* Mouse move event. */ + HAL_POINTER, + + /* Mouse button event. */ + HAL_BUTTON, + + /* Application close event. */ + HAL_CLOSE, + + /* Application window has been updated. */ + HAL_WINDOW_UPDATE +} +halEventType; + +/* Scancodes for keyboard. */ +typedef enum _halKeys +{ + HAL_UNKNOWN = -1, + + HAL_BACKSPACE = 0x08, + HAL_TAB, + HAL_ENTER = 0x0D, + HAL_ESCAPE = 0x1B, + + HAL_SPACE = 0x20, + HAL_SINGLEQUOTE = 0x27, + HAL_PAD_ASTERISK = 0x2A, + HAL_COMMA = 0x2C, + HAL_HYPHEN, + HAL_PERIOD, + HAL_SLASH, + HAL_0, + HAL_1, + HAL_2, + HAL_3, + HAL_4, + HAL_5, + HAL_6, + HAL_7, + HAL_8, + HAL_9, + HAL_SEMICOLON = 0x3B, + HAL_EQUAL = 0x3D, + HAL_A = 0x41, + HAL_B, + HAL_C, + HAL_D, + HAL_E, + HAL_F, + HAL_G, + HAL_H, + HAL_I, + HAL_J, + HAL_K, + HAL_L, + HAL_M, + HAL_N, + HAL_O, + HAL_P, + HAL_Q, + HAL_R, + HAL_S, + HAL_T, + HAL_U, + HAL_V, + HAL_W, + HAL_X, + HAL_Y, + HAL_Z, + HAL_LBRACKET, + HAL_BACKSLASH, + HAL_RBRACKET, + HAL_BACKQUOTE = 0x60, + + HAL_F1 = 0x80, + HAL_F2, + HAL_F3, + HAL_F4, + HAL_F5, + HAL_F6, + HAL_F7, + HAL_F8, + HAL_F9, + HAL_F10, + HAL_F11, + HAL_F12, + + HAL_LCTRL, + HAL_RCTRL, + HAL_LSHIFT, + HAL_RSHIFT, + HAL_LALT, + HAL_RALT, + HAL_CAPSLOCK, + HAL_NUMLOCK, + HAL_SCROLLLOCK, + HAL_PAD_0, + HAL_PAD_1, + HAL_PAD_2, + HAL_PAD_3, + HAL_PAD_4, + HAL_PAD_5, + HAL_PAD_6, + HAL_PAD_7, + HAL_PAD_8, + HAL_PAD_9, + HAL_PAD_HYPHEN, + HAL_PAD_PLUS, + HAL_PAD_SLASH, + HAL_PAD_PERIOD, + HAL_PAD_ENTER, + HAL_SYSRQ, + HAL_PRNTSCRN, + HAL_BREAK, + HAL_UP, + HAL_LEFT, + HAL_RIGHT, + HAL_DOWN, + HAL_HOME, + HAL_END, + HAL_PGUP, + HAL_PGDN, + HAL_INSERT, + HAL_DELETE, + HAL_LWINDOW, + HAL_RWINDOW, + HAL_MENU, + HAL_POWER, + HAL_SLEEP, + HAL_WAKE +} +halKeys; + +/*! + @brief Command codes between kernel module and TrustZone + @discussion + Critical services must be done in TrustZone to avoid sensitive content leak. Most of kernel module is kept in non-Secure os to minimize + code in TrustZone. + */ +typedef enum kernel_packet_command { + KERNEL_START_COMMAND, + KERNEL_SUBMIT, + KERNEL_MAP_MEMORY, /* */ + KERNEL_UNMAP_MEMORY, + KERNEL_ALLOCATE_SECRUE_MEMORY, /*! Security memory management. */ + KERNEL_FREE_SECURE_MEMORY, + KERNEL_EXECUTE, /* Execute a command buffer. */ + KERNEL_DUMP_MMU_EXCEPTION, + KERNEL_HANDLE_MMU_EXCEPTION, + KERNEL_READ_MMU_EXCEPTION, +} kernel_packet_command_t; + +enum { + gcvTA_COMMAND_INIT, + gcvTA_COMMAND_DISPATCH, + + gcvTA_CALLBACK_ALLOC_SECURE_MEM, + gcvTA_CALLBACK_FREE_SECURE_MEM, +}; + +typedef enum { + gcvFENCE_TYPE_READ = 0x1, + gcvFENCE_TYPE_WRITE = 0x2, + gcvFENCE_TYPE_ALL = gcvFENCE_TYPE_READ | gcvFENCE_TYPE_WRITE, + gcvFNECE_TYPE_INVALID = 0x10000, +} +gceFENCE_TYPE; + +typedef enum _gceTLS_KEY +{ + gcvTLS_KEY_EGL, + gcvTLS_KEY_OPENGL_ES, + gcvTLS_KEY_OPENVG, + gcvTLS_KEY_OPENGL, + gcvTLS_KEY_OPENCL, + gcvTLS_KEY_OPENVX, + + gcvTLS_KEY_COUNT +} +gceTLS_KEY; + +typedef enum _gcePLS_VALUE +{ + gcePLS_VALUE_EGL_DISPLAY_INFO, + gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO, + gcePLS_VALUE_EGL_DESTRUCTOR_INFO, +} +gcePLS_VALUE; + +#if gcdENABLE_3D +/* Blending functions. */ +typedef enum _gceBLEND_FUNCTION +{ + gcvBLEND_ZERO, + gcvBLEND_ONE, + gcvBLEND_SOURCE_COLOR, + gcvBLEND_INV_SOURCE_COLOR, + gcvBLEND_SOURCE_ALPHA, + gcvBLEND_INV_SOURCE_ALPHA, + gcvBLEND_TARGET_COLOR, + gcvBLEND_INV_TARGET_COLOR, + gcvBLEND_TARGET_ALPHA, + gcvBLEND_INV_TARGET_ALPHA, + gcvBLEND_SOURCE_ALPHA_SATURATE, + gcvBLEND_CONST_COLOR, + gcvBLEND_INV_CONST_COLOR, + gcvBLEND_CONST_ALPHA, + gcvBLEND_INV_CONST_ALPHA, +} +gceBLEND_FUNCTION; + +/* Blending modes. */ +typedef enum _gceBLEND_MODE +{ + gcvBLEND_ADD = 0, + gcvBLEND_SUBTRACT, + gcvBLEND_REVERSE_SUBTRACT, + gcvBLEND_MIN, + gcvBLEND_MAX, + gcvBLEND_MULTIPLY, + gcvBLEND_SCREEN, + gcvBLEND_OVERLAY, + gcvBLEND_DARKEN, + gcvBLEND_LIGHTEN, + gcvBLEND_COLORDODGE, + gcvBLEND_COLORBURN, + gcvBLEND_HARDLIGHT, + gcvBLEND_SOFTLIGHT, + gcvBLEND_DIFFERENCE, + gcvBLEND_EXCLUSION, + gcvBLEND_HSL_HUE, + gcvBLEND_HSL_SATURATION, + gcvBLEND_HSL_COLOR, + gcvBLEND_HSL_LUMINOSITY, + + gcvBLEND_TOTAL +} +gceBLEND_MODE; + +/* Depth modes. */ +typedef enum _gceDEPTH_MODE +{ + gcvDEPTH_NONE, + gcvDEPTH_Z, + gcvDEPTH_W, +} +gceDEPTH_MODE; +#endif /* gcdENABLE_3D */ + +/* API flags. */ +typedef enum _gceAPI { - gcvCOMPRESSION_OPTION_NONE = 0x0, /* No any compression */ - gcvCOMPRESSION_OPTION_COLOR = 0x1, /* Compression for non-msaa color format */ - gcvCOMPRESSION_OPTION_DEPTH = 0x2, /* Compression for non-msaa depth format */ - gcvCOMPRESSION_OPTION_MSAA_COLOR = 0x4, /* Compression for msaa color */ - gcvCOMPRESSION_OPTION_MSAA_DEPTH = 0x8, /* Compression for msaa depth */ + gcvAPI_D3D = 1, + gcvAPI_OPENGL_ES11, + gcvAPI_OPENGL_ES20, + gcvAPI_OPENGL_ES30, + gcvAPI_OPENGL_ES31, + gcvAPI_OPENGL_ES32, + gcvAPI_OPENGL, + gcvAPI_OPENVG, + gcvAPI_OPENCL, + gcvAPI_OPENVK, +} +gceAPI; - /* default compressio option */ - gcvCOMPRESSION_OPTION_DEFAULT = gcvCOMPRESSION_OPTION_DEPTH | - gcvCOMPRESSION_OPTION_COLOR | - gcvCOMPRESSION_OPTION_MSAA_COLOR | - gcvCOMPRESSION_OPTION_MSAA_DEPTH, +typedef enum _gceWHERE +{ + gcvWHERE_COMMAND_PREFETCH = 0, + gcvWHERE_COMMAND, + gcvWHERE_RASTER, + gcvWHERE_PIXEL, + gcvWHERE_BLT, } -gceCOMPRESSION_OPTION; +gceWHERE; -typedef enum _gceHW_FE_TYPE +typedef enum _gceHOW { - gcvHW_FE_WAIT_LINK, - gcvHW_FE_ASYNC, - gcvHW_FE_MULTI_CHANNEL, + gcvHOW_SEMAPHORE = 0x1, + gcvHOW_STALL = 0x2, + gcvHOW_SEMAPHORE_STALL = 0x3, } -gceHW_FE_TYPE; +gceHOW; -typedef enum _gceMCFE_CHANNEL_TYPE +typedef enum _gceSignalHandlerType { - gcvMCFE_CHANNEL_NONE = 0, - gcvMCFE_CHANNEL_SYSTEM, - gcvMCFE_CHANNEL_SHADER, - gcvMCFE_CHANNEL_NN, - gcvMCFE_CHANNEL_TP, + gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1, +} +gceSignalHandlerType; - gcvMCFE_CHANNEL_3DBLIT = 128, +typedef enum _gceFILE_MODE +{ + gcvFILE_CREATE = 0, + gcvFILE_APPEND, + gcvFILE_READ, + gcvFILE_CREATETEXT, + gcvFILE_APPENDTEXT, + gcvFILE_READTEXT, } -gceMCFE_CHANNEL_TYPE; +gceFILE_MODE; -typedef enum _gceSRAM_INTERNAL +typedef enum _gceFILE_WHENCE { - gcvSRAM_INTERNAL0 = 0, - gcvSRAM_INTERNAL1, + gcvFILE_SEEK_SET, + gcvFILE_SEEK_CUR, + gcvFILE_SEEK_END +} +gceFILE_WHENCE; - gcvSRAM_INTER_COUNT +/* Color format classes. */ +typedef enum _gceFORMAT_CLASS +{ + gcvFORMAT_CLASS_RGBA = 4500, + gcvFORMAT_CLASS_YUV, + gcvFORMAT_CLASS_INDEX, + gcvFORMAT_CLASS_LUMINANCE, + gcvFORMAT_CLASS_BUMP, + gcvFORMAT_CLASS_DEPTH, + gcvFORMAT_CLASS_ASTC, + gcvFORMAT_CLASS_COMPRESSED, + gcvFORMAT_CLASS_OTHER } -gceSRAM_INTERNAL; +gceFORMAT_CLASS; -typedef enum _gceSRAM_EXTERNAL +/* Color format data type */ +typedef enum _gceFORMAT_DATATYPE { - gcvSRAM_EXTERNAL0 = 0, - gcvSRAM_EXTERNAL1, + gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED, + gcvFORMAT_DATATYPE_SIGNED_NORMALIZED, + gcvFORMAT_DATATYPE_UNSIGNED_INTEGER, + gcvFORMAT_DATATYPE_SIGNED_INTEGER, + gcvFORMAT_DATATYPE_FLOAT16, + gcvFORMAT_DATATYPE_FLOAT32, + gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9, + gcvFORMAT_DATATYPE_FLOAT_B10G11R11F, + gcvFORMAT_DATATYPE_INDEX, + gcvFORMAT_DATATYPE_SRGB, + gcvFORMAT_DATATYPE_FLOAT32_UINT, +} +gceFORMAT_DATATYPE; - gcvSRAM_EXT_COUNT +typedef enum _gceORIENTATION +{ + gcvORIENTATION_TOP_BOTTOM, + gcvORIENTATION_BOTTOM_TOP, } -gceSRAM_EXTERNAL; +gceORIENTATION; -typedef enum _gceFLATMAP_FLAG +/* Special enums for width field in gcsFORMAT_COMPONENT. */ +typedef enum _gceCOMPONENT_CONTROL { - gcvFLATMAP_DIRECT, - gcvFLATMAP_SHIFT, + gcvCOMPONENT_NOTPRESENT = 0x00, + gcvCOMPONENT_DONTCARE = 0x80, + gcvCOMPONENT_WIDTHMASK = 0x7F, + gcvCOMPONENT_ODD = 0x80 } -gceFLATMAP_FLAG; +gceCOMPONENT_CONTROL; -typedef enum _gcePAGE_TYPE +/* User option. */ +typedef enum _gceDEBUG_MSG { - gcvPAGE_TYPE_1M, - gcvPAGE_TYPE_4K, + gcvDEBUG_MSG_NONE, + gcvDEBUG_MSG_ERROR, + gcvDEBUG_MSG_WARNING } -gcePAGE_TYPE; +gceDEBUG_MSG; -typedef enum _gceAREA_TYPE +/* Compressed format now was defined same as dec400d, should be general. */ +typedef enum _VIV_COMPRESS_FMT { - gcvAREA_TYPE_UNKNOWN = 0, - gcvAREA_TYPE_FLATMAP, - gcvAREA_TYPE_1M, - gcvAREA_TYPE_4K, + _VIV_CFMT_ARGB8 = 0, + _VIV_CFMT_XRGB8, + _VIV_CFMT_AYUV, + _VIV_CFMT_UYVY, + _VIV_CFMT_YUY2, + _VIV_CFMT_YUV_ONLY, + _VIV_CFMT_UV_MIX, + _VIV_CFMT_ARGB4, + _VIV_CFMT_XRGB4, + _VIV_CFMT_A1R5G5B5, + _VIV_CFMT_X1R5G5B5, + _VIV_CFMT_R5G6B5, + _VIV_CFMT_Z24S8, + _VIV_CFMT_Z24, + _VIV_CFMT_Z16, + _VIV_CFMT_A2R10G10B10, + _VIV_CFMT_BAYER, + _VIV_CFMT_SIGNED_BAYER, + _VIV_CFMT_VAA16, + _VIV_CFMT_S8, + + _VIV_CFMT_MAX, +} _VIV_COMPRESS_FMT; + +typedef enum _gcePROGRAM_STAGE +{ + gcvPROGRAM_STAGE_VERTEX = 0x0, + gcvPROGRAM_STAGE_TCS = 0x1, + gcvPROGRAM_STAGE_TES = 0x2, + gcvPROGRAM_STAGE_GEOMETRY = 0x3, + gcvPROGRAM_STAGE_FRAGMENT = 0x4, + gcvPROGRAM_STAGE_GRAPHICS_COUNT = 0x5, + gcvPROGRAM_STAGE_COMPUTE = 0x5, + gcvPROGRAM_STAGE_OPENCL = 0x6, + gcvPROGRAM_STAGE_LAST } -gceAREA_TYPE; +gcePROGRAM_STAGE; + +typedef enum _gcePROGRAM_STAGE_BIT +{ + gcvPROGRAM_STAGE_VERTEX_BIT = 1 << gcvPROGRAM_STAGE_VERTEX, + gcvPROGRAM_STAGE_TCS_BIT = 1 << gcvPROGRAM_STAGE_TCS, + gcvPROGRAM_STAGE_TES_BIT = 1 << gcvPROGRAM_STAGE_TES, + gcvPROGRAM_STAGE_GEOMETRY_BIT = 1 << gcvPROGRAM_STAGE_GEOMETRY, + gcvPROGRAM_STAGE_FRAGMENT_BIT = 1 << gcvPROGRAM_STAGE_FRAGMENT, + gcvPROGRAM_STAGE_COMPUTE_BIT = 1 << gcvPROGRAM_STAGE_COMPUTE, + gcvPROGRAM_STAGE_OPENCL_BIT = 1 << gcvPROGRAM_STAGE_OPENCL, +} +gcePROGRAM_STAGE_BIT; + +typedef enum _gceBLIT_FLAG +{ + gcvBLIT_FLAG_SKIP_DEPTH_WRITE = 1 << 0, + gcvBLIT_FLAG_SKIP_STENCIL_WRITE = 1 << 1, +} gceBLIT_FLAG; + +/* Clear flags. */ +typedef enum _gceCLEAR +{ + gcvCLEAR_COLOR = 0x1, + gcvCLEAR_DEPTH = 0x2, + gcvCLEAR_STENCIL = 0x4, + gcvCLEAR_HZ = 0x8, + gcvCLEAR_WITH_GPU_ONLY = 0x100, + gcvCLEAR_WITH_CPU_ONLY = 0x200, + gcvCLEAR_MULTI_SLICES = 0x400, +} +gceCLEAR; + +typedef enum _gceBLITDRAW_TYPE +{ + gcvBLITDRAW_CLEAR = 0, + gcvBLITDRAW_BLIT = 1, + + /* last number, not a real type */ + gcvBLITDRAW_NUM_TYPE + } +gceBLITDRAW_TYPE; + +typedef enum _gceSPLIT_DRAW_TYPE +{ + gcvSPLIT_DRAW_UNKNOWN = 0x0, + gcvSPLIT_DRAW_1, + gcvSPLIT_DRAW_2, + gcvSPLIT_DRAW_3, + gcvSPLIT_DRAW_4, + gcvSPLIT_DRAW_XFB, + gcvSPLIT_DRAW_INDEX_FETCH, + gcvSPLIT_DRAW_TCS, + gcvSPLIT_DRAW_STIPPLE, + gcvSPLIT_DRAW_WIDE_LINE, + gcvSPLIT_DRAW_LAST +} +gceSPLIT_DRAW_TYPE; + +/* Blending targets. */ +typedef enum _gceBLEND_UNIT +{ + gcvBLEND_SOURCE, + gcvBLEND_TARGET, +} +gceBLEND_UNIT; + +typedef enum _gceXfbCmd +{ + gcvXFBCMD_BEGIN = 0, + gcvXFBCMD_PAUSE = 1, + gcvXFBCMD_RESUME = 2, + gcvXFBCMD_END = 3, + gcvXFBCMD_PAUSE_INCOMMIT = 4, + gcvXFBCMD_RESUME_INCOMMIT = 5, + gcvXFBCMD_INVALID = 6, +} +gceXfbCmd; + +typedef enum _gceXfbStatus +{ + gcvXFB_Disabled = 0, + gcvXFB_Paused, + gcvXFB_Enabled, +} +gceXfbStatus; + +typedef enum _gceQueryStatus +{ + gcvQUERY_Disabled = 0, + gcvQUERY_Paused = 1, + gcvQUERY_Enabled = 2, +} +gceQueryStatus; + +typedef enum _gceQueryCmd +{ + gcvQUERYCMD_BEGIN = 0, + gcvQUERYCMD_PAUSE = 1, + gcvQUERYCMD_RESUME = 2, + gcvQUERYCMD_END = 3, + gcvQUERYCMD_INVALID = 4, +} +gceQueryCmd; + +typedef enum _gceQueryType +{ + gcvQUERY_OCCLUSION = 0, + gcvQUERY_XFB_WRITTEN = 1, + gcvQUERY_PRIM_GENERATED = 2, + gcvQUERY_MAX_NUM = 3, +} +gceQueryType; + +/* Cube faces. */ +typedef enum _gceTEXTURE_FACE +{ + gcvFACE_NONE = 0, + gcvFACE_POSITIVE_X, + gcvFACE_NEGATIVE_X, + gcvFACE_POSITIVE_Y, + gcvFACE_NEGATIVE_Y, + gcvFACE_POSITIVE_Z, + gcvFACE_NEGATIVE_Z, +} +gceTEXTURE_FACE; + +typedef enum _gceVERTEX_FORMAT +{ + gcvVERTEX_BYTE, + gcvVERTEX_UNSIGNED_BYTE, + gcvVERTEX_SHORT, + gcvVERTEX_UNSIGNED_SHORT, + gcvVERTEX_INT, + gcvVERTEX_UNSIGNED_INT, + gcvVERTEX_FIXED, + gcvVERTEX_HALF, + gcvVERTEX_FLOAT, + gcvVERTEX_DOUBLE, + gcvVERTEX_UNSIGNED_INT_10_10_10_2, + gcvVERTEX_INT_10_10_10_2, + gcvVERTEX_UNSIGNED_INT_2_10_10_10_REV, + gcvVERTEX_INT_2_10_10_10_REV, + /* integer format */ + gcvVERTEX_INT8, + gcvVERTEX_INT16, + gcvVERTEX_INT32, +} +gceVERTEX_FORMAT; + +/* What the SW converting scheme to create temp attrib */ +typedef enum _gceATTRIB_SCHEME +{ + gcvATTRIB_SCHEME_KEEP = 0, + gcvATTRIB_SCHEME_2_10_10_10_REV_TO_FLOAT, + gcvATTRIB_SCHEME_BYTE_TO_IVEC4, + gcvATTRIB_SCHEME_SHORT_TO_IVEC4, + gcvATTRIB_SCHEME_INT_TO_IVEC4, + gcvATTRIB_SCHEME_UBYTE_TO_UVEC4, + gcvATTRIB_SCHEME_USHORT_TO_UVEC4, + gcvATTRIB_SCHEME_UINT_TO_UVEC4, + gcvATTRIB_SCHEME_DOUBLE_TO_FLOAT, +} gceATTRIB_SCHEME; + +typedef enum _gceBUFOBJ_TYPE +{ + gcvBUFOBJ_TYPE_ARRAY_BUFFER = 1, + gcvBUFOBJ_TYPE_ELEMENT_ARRAY_BUFFER = 2, + gcvBUFOBJ_TYPE_GENERIC_BUFFER = 100 + +} gceBUFOBJ_TYPE; + +typedef enum _gceBUFOBJ_USAGE +{ + gcvBUFOBJ_USAGE_STREAM_DRAW = 1, + gcvBUFOBJ_USAGE_STREAM_READ, + gcvBUFOBJ_USAGE_STREAM_COPY, + gcvBUFOBJ_USAGE_STATIC_DRAW, + gcvBUFOBJ_USAGE_STATIC_READ, + gcvBUFOBJ_USAGE_STATIC_COPY, + gcvBUFOBJ_USAGE_DYNAMIC_DRAW, + gcvBUFOBJ_USAGE_DYNAMIC_READ, + gcvBUFOBJ_USAGE_DYNAMIC_COPY, + + /* special patch for optimaize performance, + ** no fence and duplicate stream to ensure data correct + */ + gcvBUFOBJ_USAGE_DISABLE_FENCE_DYNAMIC_STREAM = 256 +} gceBUFOBJ_USAGE; + +/** +** @ingroup gcoVG +** +** @brief Channel mask values. +** +** This enumeration defines the values for channel mask used in image +** filtering. +*/ + +/******************************************************************************\ +******************************** VG Enumerations ******************************* +\******************************************************************************/ + +/** +** @ingroup gcoVG +** +** @brief Tiling mode for painting and imagig. +** +** This enumeration defines the tiling modes supported by the HAL. This is +** in fact a one-to-one mapping of the OpenVG 1.1 tile modes. +*/ +typedef enum _gceTILE_MODE +{ + gcvTILE_FILL, + gcvTILE_PAD, + gcvTILE_REPEAT, + gcvTILE_REFLECT +} +gceTILE_MODE; + +/******************************************************************************/ +/** @ingroup gcoVG +** +** @brief The different paint modes. +** +** This enumeration lists the available paint modes. +*/ +typedef enum _gcePAINT_TYPE +{ + /** Solid color. */ + gcvPAINT_MODE_SOLID, + + /** Linear gradient. */ + gcvPAINT_MODE_LINEAR, + + /** Radial gradient. */ + gcvPAINT_MODE_RADIAL, + + /** Pattern. */ + gcvPAINT_MODE_PATTERN, + + /** Mode count. */ + gcvPAINT_MODE_COUNT +} +gcePAINT_TYPE; -/* Video memory alloation type. */ -typedef enum _gceVIDMEM_TYPE -{ - gcvVIDMEM_TYPE_GENERIC = gcvSURF_TYPE_UNKNOWN, - gcvVIDMEM_TYPE_INDEX_BUFFER = gcvSURF_INDEX, - gcvVIDMEM_TYPE_VERTEX_BUFFER = gcvSURF_VERTEX, - gcvVIDMEM_TYPE_TEXTURE = gcvSURF_TEXTURE, - gcvVIDMEM_TYPE_COLOR_BUFFER = gcvSURF_RENDER_TARGET, - gcvVIDMEM_TYPE_DEPTH_BUFFER = gcvSURF_DEPTH, - gcvVIDMEM_TYPE_BITMAP = gcvSURF_BITMAP, - gcvVIDMEM_TYPE_TILE_STATUS = gcvSURF_TILE_STATUS, - gcvVIDMEM_TYPE_IMAGE = gcvSURF_IMAGE, - gcvVIDMEM_TYPE_MASK = gcvSURF_MASK, - gcvVIDMEM_TYPE_SCISSOR = gcvSURF_SCISSOR, - gcvVIDMEM_TYPE_HZ_BUFFER = gcvSURF_HIERARCHICAL_DEPTH, - gcvVIDMEM_TYPE_ICACHE = gcvSURF_ICACHE, - gcvVIDMEM_TYPE_TXDESC = gcvSURF_TXDESC, - gcvVIDMEM_TYPE_FENCE = gcvSURF_FENCE, - gcvVIDMEM_TYPE_TFBHEADER = gcvSURF_TFBHEADER, - gcvVIDMEM_TYPE_COMMAND, - gcvVIDMEM_TYPE_COUNT -} -gceVIDMEM_TYPE; +/** +** @ingroup gcoVG +** +** @brief Types of path data supported by HAL. +** +** This enumeration defines the types of path data supported by the HAL. +** This is in fact a one-to-one mapping of the OpenVG 1.1 path types. +*/ +typedef enum _gcePATHTYPE +{ + gcePATHTYPE_UNKNOWN = -1, + gcePATHTYPE_INT8, + gcePATHTYPE_INT16, + gcePATHTYPE_INT32, + gcePATHTYPE_FLOAT +} +gcePATHTYPE; + +/** +** @ingroup gcoVG +** +** @brief Supported path segment commands. +** +** This enumeration defines the path segment commands supported by the HAL. +*/ +typedef enum _gceVGCMD +{ + gcvVGCMD_END, /* 0: 0x00 */ + gcvVGCMD_CLOSE, /* 1: 0x01 */ + gcvVGCMD_MOVE, /* 2: 0x02 */ + gcvVGCMD_MOVE_REL, /* 3: 0x03 */ + gcvVGCMD_LINE, /* 4: 0x04 */ + gcvVGCMD_LINE_REL, /* 5: 0x05 */ + gcvVGCMD_QUAD, /* 6: 0x06 */ + gcvVGCMD_QUAD_REL, /* 7: 0x07 */ + gcvVGCMD_CUBIC, /* 8: 0x08 */ + gcvVGCMD_CUBIC_REL, /* 9: 0x09 */ + gcvVGCMD_BREAK, /* 10: 0x0A */ + gcvVGCMD_HLINE, /* 11: ******* R E S E R V E D *******/ + gcvVGCMD_HLINE_REL, /* 12: ******* R E S E R V E D *******/ + gcvVGCMD_VLINE, /* 13: ******* R E S E R V E D *******/ + gcvVGCMD_VLINE_REL, /* 14: ******* R E S E R V E D *******/ + gcvVGCMD_SQUAD, /* 15: ******* R E S E R V E D *******/ + gcvVGCMD_SQUAD_REL, /* 16: ******* R E S E R V E D *******/ + gcvVGCMD_SCUBIC, /* 17: ******* R E S E R V E D *******/ + gcvVGCMD_SCUBIC_REL, /* 18: ******* R E S E R V E D *******/ + gcvVGCMD_SCCWARC, /* 19: ******* R E S E R V E D *******/ + gcvVGCMD_SCCWARC_REL, /* 20: ******* R E S E R V E D *******/ + gcvVGCMD_SCWARC, /* 21: ******* R E S E R V E D *******/ + gcvVGCMD_SCWARC_REL, /* 22: ******* R E S E R V E D *******/ + gcvVGCMD_LCCWARC, /* 23: ******* R E S E R V E D *******/ + gcvVGCMD_LCCWARC_REL, /* 24: ******* R E S E R V E D *******/ + gcvVGCMD_LCWARC, /* 25: ******* R E S E R V E D *******/ + gcvVGCMD_LCWARC_REL, /* 26: ******* R E S E R V E D *******/ + + /* The width of the command recognized by the hardware on bits. */ + gcvVGCMD_WIDTH = 5, + + /* Hardware command mask. */ + gcvVGCMD_MASK = (1 << gcvVGCMD_WIDTH) - 1, + + /* Command modifiers. */ + gcvVGCMD_H_MOD = 1 << gcvVGCMD_WIDTH, /* = 32 */ + gcvVGCMD_V_MOD = 2 << gcvVGCMD_WIDTH, /* = 64 */ + gcvVGCMD_S_MOD = 3 << gcvVGCMD_WIDTH, /* = 96 */ + gcvVGCMD_ARC_MOD = 4 << gcvVGCMD_WIDTH, /* = 128 */ + + /* Emulated LINE commands. */ + gcvVGCMD_HLINE_EMUL = gcvVGCMD_H_MOD | gcvVGCMD_LINE, /* = 36 */ + gcvVGCMD_HLINE_EMUL_REL = gcvVGCMD_H_MOD | gcvVGCMD_LINE_REL, /* = 37 */ + gcvVGCMD_VLINE_EMUL = gcvVGCMD_V_MOD | gcvVGCMD_LINE, /* = 68 */ + gcvVGCMD_VLINE_EMUL_REL = gcvVGCMD_V_MOD | gcvVGCMD_LINE_REL, /* = 69 */ + + /* Emulated SMOOTH commands. */ + gcvVGCMD_SQUAD_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD, /* = 102 */ + gcvVGCMD_SQUAD_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD_REL, /* = 103 */ + gcvVGCMD_SCUBIC_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC, /* = 104 */ + gcvVGCMD_SCUBIC_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC_REL, /* = 105 */ + + /* Emulation ARC commands. */ + gcvVGCMD_ARC_LINE = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE, /* = 132 */ + gcvVGCMD_ARC_LINE_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE_REL, /* = 133 */ + gcvVGCMD_ARC_QUAD = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD, /* = 134 */ + gcvVGCMD_ARC_QUAD_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD_REL /* = 135 */ +} +gceVGCMD; +typedef enum _gceVGCMD * gceVGCMD_PTR; + +/** +** @ingroup gcoVG +** +** @brief Blending modes supported by the HAL. +** +** This enumeration defines the blending modes supported by the HAL. This is +** in fact a one-to-one mapping of the OpenVG 1.1 blending modes. +*/ +typedef enum _gceVG_BLEND +{ + gcvVG_BLEND_SRC, + gcvVG_BLEND_SRC_OVER, + gcvVG_BLEND_DST_OVER, + gcvVG_BLEND_SRC_IN, + gcvVG_BLEND_DST_IN, + gcvVG_BLEND_MULTIPLY, + gcvVG_BLEND_SCREEN, + gcvVG_BLEND_DARKEN, + gcvVG_BLEND_LIGHTEN, + gcvVG_BLEND_ADDITIVE, + gcvVG_BLEND_SUBTRACT, + gcvVG_BLEND_FILTER +} +gceVG_BLEND; + +/** +** @ingroup gcoVG +** +** @brief Image modes supported by the HAL. +** +** This enumeration defines the image modes supported by the HAL. This is +** in fact a one-to-one mapping of the OpenVG 1.1 image modes with the addition +** of NO IMAGE. +*/ +typedef enum _gceVG_IMAGE +{ + gcvVG_IMAGE_NONE, + gcvVG_IMAGE_NORMAL, + gcvVG_IMAGE_MULTIPLY, + gcvVG_IMAGE_STENCIL, + gcvVG_IMAGE_FILTER +} +gceVG_IMAGE; + +/** +** @ingroup gcoVG +** +** @brief Filter mode patterns and imaging. +** +** This enumeration defines the filter modes supported by the HAL. +*/ +typedef enum _gceIMAGE_FILTER +{ + gcvFILTER_POINT, + gcvFILTER_LINEAR, + gcvFILTER_BI_LINEAR +} +gceIMAGE_FILTER; + +/** +** @ingroup gcoVG +** +** @brief Primitive modes supported by the HAL. +** +** This enumeration defines the primitive modes supported by the HAL. +*/ +typedef enum _gceVG_PRIMITIVE +{ + gcvVG_SCANLINE, + gcvVG_RECTANGLE, + gcvVG_TESSELLATED, + gcvVG_TESSELLATED_TILED +} +gceVG_PRIMITIVE; + +/** +** @ingroup gcoVG +** +** @brief Rendering quality modes supported by the HAL. +** +** This enumeration defines the rendering quality modes supported by the HAL. +*/ +typedef enum _gceRENDER_QUALITY +{ + gcvVG_NONANTIALIASED, + gcvVG_2X2_MSAA, + gcvVG_2X4_MSAA, + gcvVG_4X4_MSAA +} +gceRENDER_QUALITY; + +/** +** @ingroup gcoVG +** +** @brief Fill rules supported by the HAL. +** +** This enumeration defines the fill rules supported by the HAL. +*/ +typedef enum _gceFILL_RULE +{ + gcvVG_EVEN_ODD, + gcvVG_NON_ZERO +} +gceFILL_RULE; + +/** +** @ingroup gcoVG +** +** @brief Cap styles supported by the HAL. +** +** This enumeration defines the cap styles supported by the HAL. +*/ +typedef enum _gceCAP_STYLE +{ + gcvCAP_BUTT, + gcvCAP_ROUND, + gcvCAP_SQUARE +} +gceCAP_STYLE; + +/** +** @ingroup gcoVG +** +** @brief Join styles supported by the HAL. +** +** This enumeration defines the join styles supported by the HAL. +*/ +typedef enum _gceJOIN_STYLE +{ + gcvJOIN_MITER, + gcvJOIN_ROUND, + gcvJOIN_BEVEL +} +gceJOIN_STYLE; + +/* Base values for channel mask definitions. */ +#define gcvCHANNEL_X (0) +#define gcvCHANNEL_R (1 << 0) +#define gcvCHANNEL_G (1 << 1) +#define gcvCHANNEL_B (1 << 2) +#define gcvCHANNEL_A (1 << 3) + +typedef enum _gceCHANNEL +{ + gcvCHANNEL_XXXX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_XXXA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_XXBX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_XXBA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), + + gcvCHANNEL_XGXX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_XGXA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_XGBX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_XGBA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), + + gcvCHANNEL_RXXX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_RXXA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_RXBX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_RXBA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), + + gcvCHANNEL_RGXX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_RGXA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_RGBX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_RGBA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), +} +gceCHANNEL; + +/* Defines the statistical data keys monitored by the statistics module */ +typedef enum _gceSTATISTICS +{ + gcvFRAME_FPS = 1, +} +gceSTATISTICS; + +/* Value types. */ +typedef enum _gceVALUE_TYPE +{ + gcvVALUE_UINT = 0x0, + gcvVALUE_FIXED, + gcvVALUE_FLOAT, + gcvVALUE_INT, + + /* + ** The value need be unsigned denormalized. clamp (0.0-1.0) should be done first. + */ + gcvVALUE_FLAG_UNSIGNED_DENORM = 0x00010000, + + /* + ** The value need be signed denormalized. clamp (-1.0-1.0) should be done first. + */ + gcvVALUE_FLAG_SIGNED_DENORM = 0x00020000, + + /* + ** The value need to gammar + */ + gcvVALUE_FLAG_GAMMAR = 0x00040000, + + /* + ** The value need to convert from float to float16 + */ + gcvVALUE_FLAG_FLOAT_TO_FLOAT16 = 0x0080000, + + /* + ** Mask for flag field. + */ + gcvVALUE_FLAG_MASK = 0xFFFF0000, +} +gceVALUE_TYPE; + +typedef enum _gceTRACEMODE +{ + gcvTRACEMODE_NONE = 0, + gcvTRACEMODE_FULL = 1, + gcvTRACEMODE_LOGGER = 2, + gcvTRACEMODE_ALLZONE = 3, + gcvTRACEMODE_PRE = 4, + gcvTRACEMODE_POST = 5, +} gceTRACEMODE; + +enum +{ + /* GPU can't issue more that 32bit physical address */ + gcvPLATFORM_FLAG_LIMIT_4G_ADDRESS = 1 << 0, + + gcvPLATFORM_FLAG_IMX_MM = 1 << 1, +}; /* No special needs. */ #define gcvALLOC_FLAG_NONE 0x00000000 @@ -2302,7 +2125,6 @@ gceVIDMEM_TYPE; /******************************************************************************\ ****************************** Object Declarations ***************************** \******************************************************************************/ - typedef struct _gckCONTEXT * gckCONTEXT; typedef struct _gcoCMDBUF * gcoCMDBUF; @@ -2313,7 +2135,6 @@ typedef struct _gcsHAL_INTERFACE * gcsHAL_INTERFACE_PTR; typedef struct _gcs2D_PROFILE * gcs2D_PROFILE_PTR; - #ifdef __cplusplus } #endif diff --git a/drivers/amlogic/npu/inc/gc_hal_mem.h b/drivers/amlogic/npu/inc/gc_hal_mem.h index f4c66e98f8ac4b..a1b70b9b9bb7cb 100644 --- a/drivers/amlogic/npu/inc/gc_hal_mem.h +++ b/drivers/amlogic/npu/inc/gc_hal_mem.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by diff --git a/drivers/amlogic/npu/inc/gc_hal_metadata.h b/drivers/amlogic/npu/inc/gc_hal_metadata.h index c12286ee017228..c246eff46522fc 100644 --- a/drivers/amlogic/npu/inc/gc_hal_metadata.h +++ b/drivers/amlogic/npu/inc/gc_hal_metadata.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -24,33 +24,6 @@ extern "C" { #define VIV_VIDMEM_METADATA_MAGIC __FOURCC('v', 'i', 'v', 'm') -/* Compressed format now was defined same as dec400d, should be general. */ -typedef enum _VIV_COMPRESS_FMT -{ - _VIV_CFMT_ARGB8 = 0, - _VIV_CFMT_XRGB8, - _VIV_CFMT_AYUV, - _VIV_CFMT_UYVY, - _VIV_CFMT_YUY2, - _VIV_CFMT_YUV_ONLY, - _VIV_CFMT_UV_MIX, - _VIV_CFMT_ARGB4, - _VIV_CFMT_XRGB4, - _VIV_CFMT_A1R5G5B5, - _VIV_CFMT_X1R5G5B5, - _VIV_CFMT_R5G6B5, - _VIV_CFMT_Z24S8, - _VIV_CFMT_Z24, - _VIV_CFMT_Z16, - _VIV_CFMT_A2R10G10B10, - _VIV_CFMT_BAYER, - _VIV_CFMT_SIGNED_BAYER, - _VIV_CFMT_VAA16, - _VIV_CFMT_S8, - - _VIV_CFMT_MAX, -} _VIV_COMPRESS_FMT; - /* Metadata for cross-device fd share with additional (ts) info. */ typedef struct _VIV_VIDMEM_METADATA { diff --git a/drivers/amlogic/npu/inc/gc_hal_options.h b/drivers/amlogic/npu/inc/gc_hal_options.h index 49cea667a4dcd2..45c8029e319af8 100644 --- a/drivers/amlogic/npu/inc/gc_hal_options.h +++ b/drivers/amlogic/npu/inc/gc_hal_options.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -265,7 +265,7 @@ This define enables the use of VM for gckCommand and fence buffers. /* - gcdDEBUG_FORCE_CONTEXT_UPDATE + gcdDEBUG_OPTION_SPECIFY_POOL When set to 1, pool of each type surface can be specified by changing poolPerType[] in gcsSURF_NODE_Construct. */ @@ -284,6 +284,19 @@ This define enables the use of VM for gckCommand and fence buffers. # define gcdENABLE_FSCALE_VAL_ADJUST 1 #endif +/* + gcdCAPTURE_ONLY_MODE + When non-zero, driver is built with capture only mode. + 1) Set DDR address range in capture file with contiguousBase and contiguoutsSize. + Video memory allocation will go through reserved pool with capture only mode. + 2) Set SRAM address range in capture file with sRAMBases, sRAMSizes and extSRAMBases, extSRAMSizes. + Video memory querion will go through reserved pool with capture only mode. + 3) TODO: SRAM video memory allocation. +*/ +#ifndef gcdCAPTURE_ONLY_MODE +# define gcdCAPTURE_ONLY_MODE 0 +#endif + /* gcdNULL_DRIVER @@ -309,8 +322,12 @@ This define enables the use of VM for gckCommand and fence buffers. Number of bytes in a command buffer. */ #ifndef gcdCMD_BUFFER_SIZE +#if gcdCAPTURE_ONLY_MODE +# define gcdCMD_BUFFER_SIZE (4 << 10) +#else # define gcdCMD_BUFFER_SIZE (128 << 10) #endif +#endif /* gcdCMD_BLT_BUFFER_SIZE @@ -327,8 +344,12 @@ This define enables the use of VM for gckCommand and fence buffers. Number of command buffers to use per client. */ #ifndef gcdCMD_BUFFERS +#if gcdCAPTURE_ONLY_MODE +# define gcdCMD_BUFFERS 1 +#else # define gcdCMD_BUFFERS 2 #endif +#endif /* gcdMAX_CMD_BUFFERS @@ -490,8 +511,12 @@ This define enables the use of VM for gckCommand and fence buffers. between multiple sub-buffers. */ #ifndef gcdENABLE_BUFFER_ALIGNMENT +#if gcdCAPTURE_ONLY_MODE +# define gcdENABLE_BUFFER_ALIGNMENT 0 +#else # define gcdENABLE_BUFFER_ALIGNMENT 1 #endif +#endif /* gcdENABLE_BANK_ALIGNMENT @@ -500,9 +525,14 @@ This define enables the use of VM for gckCommand and fence buffers. _GetSurfaceBankAlignment() and _GetBankOffsetBytes() to define how different types of allocations are bank and channel aligned. When disabled (default), no bank alignment is done. + For CAPTURE ONLY MODE, should make sure that gcdENABLE_BANK_ALIGNMENT is disabled. */ #ifndef gcdENABLE_BANK_ALIGNMENT +#if gcdCAPTURE_ONLY_MODE # define gcdENABLE_BANK_ALIGNMENT 0 +#else +# define gcdENABLE_BANK_ALIGNMENT 0 +#endif #endif /* @@ -971,11 +1001,15 @@ This define enables the use of VM for gckCommand and fence buffers. When it's not zero, partial fast clear is enabled. Depends on gcdHAL_3D_DRAWBLIT, if gcdHAL_3D_DRAWBLIT is not enabled, only available when scissor box is completely aligned. - Expremental, under test. + Expremental, under test only. Not ready for production. */ #ifndef gcdPARTIAL_FAST_CLEAR +#if defined(ANDROID) +# define gcdPARTIAL_FAST_CLEAR 0 +#else # define gcdPARTIAL_FAST_CLEAR 1 #endif +#endif /* gcdREMOVE_SURF_ORIENTATION @@ -1219,11 +1253,6 @@ This define enables the use of VM for gckCommand and fence buffers. #endif #endif -/* -VIV:gcdUSE_MMU_EXCEPTION - - When enabled, enable and check exception interrupt raised by MMU. -*/ #ifndef gcdUSE_MMU_EXCEPTION # define gcdUSE_MMU_EXCEPTION 1 #endif @@ -1313,6 +1342,25 @@ VIV:gcdUSE_MMU_EXCEPTION # define gcdKERNEL_QUERY_PERFORMANCE_COUNTER_V8 0 #endif +/* + gcdIGNORE_DRIVER_VERSIONS_MISMATCH + When enabled, driver will ignore user and kernel driver version mismatch. +*/ +#ifndef gcdIGNORE_DRIVER_VERSIONS_MISMATCH +# define gcdIGNORE_DRIVER_VERSIONS_MISMATCH 0 +#endif + +/* + gcdEXTERNAL_SRAM_DEFAULT_POOL + When enabled, external SRAM can be used for the initial command, + but the external SRAM base and size must be set by customer. + AXI-SRAM only can be used if pool type is speficied + with gcvSRAM_EXTERNAL[X] when allocating video memory. +*/ +#ifndef gcdEXTERNAL_SRAM_DEFAULT_POOL +# define gcdEXTERNAL_SRAM_DEFAULT_POOL 0 +#endif + #endif /* __gc_hal_options_h_ */ diff --git a/drivers/amlogic/npu/inc/gc_hal_priv.h b/drivers/amlogic/npu/inc/gc_hal_priv.h index 32a9a86c52f48e..2c7c0d9679c8df 100644 --- a/drivers/amlogic/npu/inc/gc_hal_priv.h +++ b/drivers/amlogic/npu/inc/gc_hal_priv.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -152,6 +152,9 @@ typedef enum _gcePATCH_ID gcvPATCH_ANDROID_PHOTOS, gcvPATCH_OVX_CTS, gcvPATCH_DEQP_VK, + gcvPATCH_KANZI, + gcvPATCH_OPENCV_TEST_PHOTO, + gcvPATCH_VKMARK, gcvPATCH_COUNT } gcePATCH_ID; @@ -246,6 +249,7 @@ typedef struct _gcsPLS gcsATOM_PTR globalFenceID; /* flag for memory profile */ + gctHANDLE mainThread; gctBOOL bMemoryProfile; gctPOINTER profileLock; gctUINT32 allocCount; diff --git a/drivers/amlogic/npu/inc/gc_hal_profiler.h b/drivers/amlogic/npu/inc/gc_hal_profiler.h index 4bd20ec498aa20..465d7c0136e5f1 100644 --- a/drivers/amlogic/npu/inc/gc_hal_profiler.h +++ b/drivers/amlogic/npu/inc/gc_hal_profiler.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -14,6 +14,8 @@ #ifndef __gc_hal_profiler_h_ #define __gc_hal_profiler_h_ +#include "shared/gc_hal_profiler.h" + #ifdef __cplusplus extern "C" { #endif @@ -771,263 +773,9 @@ extern "C" { } \ while (gcvFALSE) -typedef enum _gceCOUNTER -{ - gcvCOUNTER_FRONT_END, - gcvCOUNTER_VERTEX_SHADER, - gcvCOUNTER_PRIMITIVE_ASSEMBLY, - gcvCOUNTER_SETUP, - gcvCOUNTER_RASTERIZER, - gcvCOUNTER_PIXEL_SHADER, - gcvCOUNTER_TEXTURE, - gcvCOUNTER_PIXEL_ENGINE, - gcvCOUNTER_MEMORY_CONTROLLER_COLOR, - gcvCOUNTER_MEMORY_CONTROLLER_DEPTH, - gcvCOUNTER_HOST_INTERFACE0, - gcvCOUNTER_HOST_INTERFACE1, - gcvCOUNTER_GPUL2_CACHE, - gcvCOUNTER_COUNT -} -gceCOUNTER; - -typedef enum _gceProfilerClient -{ - gcvCLIENT_OPENGLES11 = 1, - gcvCLIENT_OPENGLES, - gcvCLIENT_OPENGL, - gcvCLIENT_OPENVG, - gcvCLIENT_OPENCL, - gcvCLIENT_OPENVX, - gcvCLIENT_OPENVK, -} -gceProfilerClient; - -/* HW profile information. */ -typedef struct _gcsPROFILER_COUNTERS_PART1 -{ - gctUINT32 gpuTotalRead64BytesPerFrame; - gctUINT32 gpuTotalWrite64BytesPerFrame; - - /* FE */ - gctUINT32 fe_draw_count; - gctUINT32 fe_out_vertex_count; - gctUINT32 fe_cache_miss_count; - gctUINT32 fe_cache_lk_count; - gctUINT32 fe_stall_count; - gctUINT32 fe_starve_count; - gctUINT32 fe_process_count; - - /* PE */ - gctUINT32 pe0_pixel_count_killed_by_color_pipe; - gctUINT32 pe0_pixel_count_killed_by_depth_pipe; - gctUINT32 pe0_pixel_count_drawn_by_color_pipe; - gctUINT32 pe0_pixel_count_drawn_by_depth_pipe; - gctUINT32 pe1_pixel_count_killed_by_color_pipe; - gctUINT32 pe1_pixel_count_killed_by_depth_pipe; - gctUINT32 pe1_pixel_count_drawn_by_color_pipe; - gctUINT32 pe1_pixel_count_drawn_by_depth_pipe; - - /* SH */ - gctUINT32 shader_cycle_count; - gctUINT32 vs_shader_cycle_count; - gctUINT32 ps_shader_cycle_count; - gctUINT32 ps_inst_counter; - gctUINT32 ps_rendered_pixel_counter; - gctUINT32 vs_inst_counter; - gctUINT32 vs_rendered_vertice_counter; - gctUINT32 vs_branch_inst_counter; - gctUINT32 vs_texld_inst_counter; - gctUINT32 ps_branch_inst_counter; - gctUINT32 ps_texld_inst_counter; - gctUINT32 vs_non_idle_starve_count; - gctUINT32 vs_starve_count; - gctUINT32 vs_stall_count; - gctUINT32 vs_process_count; - gctUINT32 ps_non_idle_starve_count; - gctUINT32 ps_starve_count; - gctUINT32 ps_stall_count; - gctUINT32 ps_process_count; - - /* PA */ - gctUINT32 pa_input_vtx_counter; - gctUINT32 pa_input_prim_counter; - gctUINT32 pa_output_prim_counter; - gctUINT32 pa_depth_clipped_counter; - gctUINT32 pa_trivial_rejected_counter; - gctUINT32 pa_culled_prim_counter; - gctUINT32 pa_droped_prim_counter; - gctUINT32 pa_frustum_clipped_prim_counter; - gctUINT32 pa_frustum_clipdroped_prim_counter; - gctUINT32 pa_non_idle_starve_count; - gctUINT32 pa_starve_count; - gctUINT32 pa_stall_count; - gctUINT32 pa_process_count; - - /* SE */ - gctUINT32 se_culled_triangle_count; - gctUINT32 se_culled_lines_count; - gctUINT32 se_clipped_triangle_count; - gctUINT32 se_clipped_line_count; - gctUINT32 se_starve_count; - gctUINT32 se_stall_count; - gctUINT32 se_receive_triangle_count; - gctUINT32 se_send_triangle_count; - gctUINT32 se_receive_lines_count; - gctUINT32 se_send_lines_count; - gctUINT32 se_process_count; - gctUINT32 se_trivial_rejected_line_count; - gctUINT32 se_non_idle_starve_count; - - /* RA */ - gctUINT32 ra_input_prim_count; - gctUINT32 ra_total_quad_count; - gctUINT32 ra_valid_quad_count_after_early_z; - gctUINT32 ra_valid_pixel_count_to_render; - gctUINT32 ra_output_valid_quad_count; - gctUINT32 ra_output_valid_pixel_count; - gctUINT32 ra_pipe_cache_miss_counter; - gctUINT32 ra_pipe_hz_cache_miss_counter; - gctUINT32 ra_prefetch_cache_miss_counter; - gctUINT32 ra_prefetch_hz_cache_miss_counter; - gctUINT32 ra_eez_culled_counter; - gctUINT32 ra_non_idle_starve_count; - gctUINT32 ra_starve_count; - gctUINT32 ra_stall_count; - gctUINT32 ra_process_count; - - /* TX */ - gctUINT32 tx_total_bilinear_requests; - gctUINT32 tx_total_trilinear_requests; - gctUINT32 tx_total_discarded_texture_requests; - gctUINT32 tx_total_texture_requests; - gctUINT32 tx_mc0_miss_count; - gctUINT32 tx_mc0_request_byte_count; - gctUINT32 tx_mc1_miss_count; - gctUINT32 tx_mc1_request_byte_count; - gctUINT32 tx_non_idle_starve_count; - gctUINT32 tx_starve_count; - gctUINT32 tx_stall_count; - gctUINT32 tx_process_count; -} -gcsPROFILER_COUNTERS_PART1; - -typedef struct _gcsPROFILER_COUNTERS_PART2 -{ - /* MCC */ - gctUINT32 mcc_total_read_req_8B_from_colorpipe; - gctUINT32 mcc_total_read_req_8B_sentout_from_colorpipe; - gctUINT32 mcc_total_write_req_8B_from_colorpipe; - gctUINT32 mcc_total_read_req_sentout_from_colorpipe; - gctUINT32 mcc_total_write_req_from_colorpipe; - gctUINT32 mcc_total_read_req_8B_from_depthpipe; - gctUINT32 mcc_total_read_req_8B_sentout_from_depthpipe; - gctUINT32 mcc_total_write_req_8B_from_depthpipe; - gctUINT32 mcc_total_read_req_sentout_from_depthpipe; - gctUINT32 mcc_total_write_req_from_depthpipe; - gctUINT32 mcc_total_read_req_8B_from_others; - gctUINT32 mcc_total_write_req_8B_from_others; - gctUINT32 mcc_total_read_req_from_others; - gctUINT32 mcc_total_write_req_from_others; - gctUINT32 mcc_axi_total_latency; - gctUINT32 mcc_axi_sample_count; - gctUINT32 mcc_axi_max_latency; - gctUINT32 mcc_axi_min_latency; - gctUINT32 mc_fe_read_bandwidth; - gctUINT32 mc_mmu_read_bandwidth; - gctUINT32 mc_blt_read_bandwidth; - gctUINT32 mc_sh0_read_bandwidth; - gctUINT32 mc_sh1_read_bandwidth; - gctUINT32 mc_pe_write_bandwidth; - gctUINT32 mc_blt_write_bandwidth; - gctUINT32 mc_sh0_write_bandwidth; - gctUINT32 mc_sh1_write_bandwidth; - - /* MCZ */ - gctUINT32 mcz_total_read_req_8B_from_colorpipe; - gctUINT32 mcz_total_read_req_8B_sentout_from_colorpipe; - gctUINT32 mcz_total_write_req_8B_from_colorpipe; - gctUINT32 mcz_total_read_req_sentout_from_colorpipe; - gctUINT32 mcz_total_write_req_from_colorpipe; - gctUINT32 mcz_total_read_req_8B_from_depthpipe; - gctUINT32 mcz_total_read_req_8B_sentout_from_depthpipe; - gctUINT32 mcz_total_write_req_8B_from_depthpipe; - gctUINT32 mcz_total_read_req_sentout_from_depthpipe; - gctUINT32 mcz_total_write_req_from_depthpipe; - gctUINT32 mcz_total_read_req_8B_from_others; - gctUINT32 mcz_total_write_req_8B_from_others; - gctUINT32 mcz_total_read_req_from_others; - gctUINT32 mcz_total_write_req_from_others; - gctUINT32 mcz_axi_total_latency; - gctUINT32 mcz_axi_sample_count; - gctUINT32 mcz_axi_max_latency; - gctUINT32 mcz_axi_min_latency; - - /* HI */ - gctUINT32 hi0_total_read_8B_count; - gctUINT32 hi0_total_write_8B_count; - gctUINT32 hi0_total_read_request_count; - gctUINT32 hi0_total_write_request_count; - gctUINT32 hi0_axi_cycles_read_request_stalled; - gctUINT32 hi0_axi_cycles_write_request_stalled; - gctUINT32 hi0_axi_cycles_write_data_stalled; - gctUINT32 hi1_total_read_8B_count; - gctUINT32 hi1_total_write_8B_count; - gctUINT32 hi1_total_read_request_count; - gctUINT32 hi1_total_write_request_count; - gctUINT32 hi1_axi_cycles_read_request_stalled; - gctUINT32 hi1_axi_cycles_write_request_stalled; - gctUINT32 hi1_axi_cycles_write_data_stalled; - gctUINT32 hi_total_cycle_count; - gctUINT32 hi_total_idle_cycle_count; - gctUINT32 hi_total_read_8B_count; - gctUINT32 hi_total_write_8B_count; - gctUINT32 hi_total_readOCB_16B_count; - gctUINT32 hi_total_writeOCB_16B_count; - - /* L2 */ - gctUINT32 l2_total_axi0_read_request_count; - gctUINT32 l2_total_axi1_read_request_count; - gctUINT32 l2_total_axi0_write_request_count; - gctUINT32 l2_total_axi1_write_request_count; - gctUINT32 l2_total_read_transactions_request_by_axi0; - gctUINT32 l2_total_read_transactions_request_by_axi1; - gctUINT32 l2_total_write_transactions_request_by_axi0; - gctUINT32 l2_total_write_transactions_request_by_axi1; - gctUINT32 l2_axi0_minmax_latency; - gctUINT32 l2_axi0_min_latency; - gctUINT32 l2_axi0_max_latency; - gctUINT32 l2_axi0_total_latency; - gctUINT32 l2_axi0_total_request_count; - gctUINT32 l2_axi1_minmax_latency; - gctUINT32 l2_axi1_min_latency; - gctUINT32 l2_axi1_max_latency; - gctUINT32 l2_axi1_total_latency; - gctUINT32 l2_axi1_total_request_count; -} -gcsPROFILER_COUNTERS_PART2; - -typedef struct _gcsPROFILER_COUNTERS -{ - gcsPROFILER_COUNTERS_PART1 counters_part1; - gcsPROFILER_COUNTERS_PART2 counters_part2; -} -gcsPROFILER_COUNTERS; - #define NumOfPerFrameBuf 16 #define NumOfPerDrawBuf 128 -typedef enum _gceCOUNTER_OPTYPE -{ - gcvCOUNTER_OP_DRAW = 0, - gcvCOUNTER_OP_BLT = 1, - gcvCOUNTER_OP_COMPUTE = 2, - gcvCOUNTER_OP_RS = 3, - gcvCOUNTER_OP_FINISH = 4, - gcvCOUNTER_OP_FRAME = 5, - gcvCOUNTER_OP_NONE = 6 -} -gceCOUNTER_OPTYPE; - typedef struct gcsCounterBuffer * gcsCounterBuffer_PTR; struct gcsCounterBuffer @@ -1076,23 +824,6 @@ struct _gcoPROFILER gctBOOL axiBus128bits; }; -typedef enum _gceProbeStatus -{ - gcvPROBE_Disabled = 0, - gcvPROBE_Paused = 1, - gcvPROBE_Enabled = 2, -} -gceProbeStatus; - -typedef enum _gceProbeCmd -{ - gcvPROBECMD_BEGIN = 0, - gcvPROBECMD_PAUSE = 1, - gcvPROBECMD_RESUME = 2, - gcvPROBECMD_END = 3, -} -gceProbeCmd; - typedef struct _gcsPROBESTATES { gceProbeStatus status; diff --git a/drivers/amlogic/npu/inc/gc_hal_raster.h b/drivers/amlogic/npu/inc/gc_hal_raster.h index d699fb5019db2e..4b60ba50851c46 100644 --- a/drivers/amlogic/npu/inc/gc_hal_raster.h +++ b/drivers/amlogic/npu/inc/gc_hal_raster.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -15,7 +15,7 @@ #define __gc_hal_raster_h_ #include "gc_hal_enum.h" -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #ifdef __cplusplus extern "C" { @@ -1057,6 +1057,20 @@ gco2D_NatureRotateTranslation( OUT gceSURF_ROTATION * DstRotation ); +/* Set source endian mode. */ +gceSTATUS +gco2D_SetSourceEndianMode( + IN gco2D Engine, + IN gceENDIAN_MODE eEndianMode + ); + +/* Set target endian mode. */ +gceSTATUS +gco2D_SetTargetEndianMode( + IN gco2D Engine, + IN gceENDIAN_MODE eEndianMode + ); + #ifdef __cplusplus } #endif diff --git a/drivers/amlogic/npu/inc/gc_hal_security_interface.h b/drivers/amlogic/npu/inc/gc_hal_security_interface.h index 7300ff11d5b377..d1a07bf7349134 100644 --- a/drivers/amlogic/npu/inc/gc_hal_security_interface.h +++ b/drivers/amlogic/npu/inc/gc_hal_security_interface.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -13,25 +13,6 @@ #ifndef _GC_HAL_SECURITY_INTERFACE_H_ #define _GC_HAL_SECURITY_INTERFACE_H_ -/*! - @brief Command codes between kernel module and TrustZone - @discussion - Critical services must be done in TrustZone to avoid sensitive content leak. Most of kernel module is kept in non-Secure os to minimize - code in TrustZone. - */ -typedef enum kernel_packet_command { - KERNEL_START_COMMAND, - KERNEL_SUBMIT, - KERNEL_MAP_MEMORY, /* */ - KERNEL_UNMAP_MEMORY, - KERNEL_ALLOCATE_SECRUE_MEMORY, /*! Security memory management. */ - KERNEL_FREE_SECURE_MEMORY, - KERNEL_EXECUTE, /* Execute a command buffer. */ - KERNEL_DUMP_MMU_EXCEPTION, - KERNEL_HANDLE_MMU_EXCEPTION, - KERNEL_READ_MMU_EXCEPTION, -} kernel_packet_command_t; - struct kernel_start_command { kernel_packet_command_t command; /*! The command (always needs to be the first entry in a structure). */ gctUINT8 gpu; /*! Which GPU. */ @@ -131,14 +112,6 @@ typedef struct _gcsTA_INTERFACE { gceSTATUS result; } gcsTA_INTERFACE; -enum { - gcvTA_COMMAND_INIT, - gcvTA_COMMAND_DISPATCH, - - gcvTA_CALLBACK_ALLOC_SECURE_MEM, - gcvTA_CALLBACK_FREE_SECURE_MEM, -}; - #endif diff --git a/drivers/amlogic/npu/inc/gc_hal_statistics.h b/drivers/amlogic/npu/inc/gc_hal_statistics.h index 8069094cb3bb2b..294f4e9d3fd081 100644 --- a/drivers/amlogic/npu/inc/gc_hal_statistics.h +++ b/drivers/amlogic/npu/inc/gc_hal_statistics.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -40,13 +40,6 @@ /* Multiplication factor for previous Hz off mode. Make it more than 1.0 to advertise HZ on.*/ #define VIV_STAT_EARLY_Z_FACTOR (1.05f) -/* Defines the statistical data keys monitored by the statistics module */ -typedef enum _gceSTATISTICS -{ - gcvFRAME_FPS = 1, -} -gceSTATISTICS; - /* HAL statistics information. */ typedef struct _gcsSTATISTICS_EARLYZ { diff --git a/drivers/amlogic/npu/inc/gc_hal_version.h b/drivers/amlogic/npu/inc/gc_hal_version.h index 74787b136ce0f7..9a9d6617992d16 100644 --- a/drivers/amlogic/npu/inc/gc_hal_version.h +++ b/drivers/amlogic/npu/inc/gc_hal_version.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -18,11 +18,11 @@ #define gcvVERSION_MINOR 4 -#define gcvVERSION_PATCH 0 +#define gcvVERSION_PATCH 2 -#define gcvVERSION_BUILD 229426 +#define gcvVERSION_BUILD 258160 -#define gcvVERSION_STRING "6.4.0.3.229426" +#define gcvVERSION_STRING "6.4.2.1.258160" #endif /* __gc_hal_version_h_ */ diff --git a/drivers/amlogic/npu/inc/gc_hal_vg.h b/drivers/amlogic/npu/inc/gc_hal_vg.h index b669a42e5cc24a..a5b327c17e477e 100644 --- a/drivers/amlogic/npu/inc/gc_hal_vg.h +++ b/drivers/amlogic/npu/inc/gc_hal_vg.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -19,9 +19,10 @@ extern "C" { #endif -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_enum.h" #include "gc_hal_base.h" +#include "shared/gc_hal_vg.h" #ifdef __cplusplus diff --git a/drivers/amlogic/npu/inc/gc_hal_vx.h b/drivers/amlogic/npu/inc/gc_hal_vx.h index eb50c75d572f82..568c04dcd1e03d 100644 --- a/drivers/amlogic/npu/inc/gc_hal_vx.h +++ b/drivers/amlogic/npu/inc/gc_hal_vx.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -165,6 +165,11 @@ gcoVX_KernelConstruct( IN OUT gcoVX_Hardware_Context *Context ); +gceSTATUS +gcoVX_SetHardwareType( + IN gceHARDWARE_TYPE Type + ); + gceSTATUS gcoVX_LockKernel( @@ -208,7 +213,10 @@ gcoVX_TriggerAccelerator( IN gctBOOL waitEvent, IN gctUINT32 gpuId, IN gctBOOL sync, - IN gctUINT32 syncEventID + IN gctUINT32 syncEventID, + IN gctUINT32 vipSRAMRemapStartAddr, + IN gctUINT32 axiSRAMRemapStartAddr, + IN gctUINT32 axiSRAMRemapEndAddr ); gceSTATUS @@ -356,8 +364,9 @@ gcoVX_ProgrammYUV2RGBScale( gceSTATUS gcoVX_CreateHW( IN gctUINT32 DeviceID, - IN gctUINT32 GpuCountPerDevice, - IN gctUINT32 GpuCoreIndexs[], + IN gctUINT32 CoreCountPerDevice, + IN gctUINT32 LocalCoreIndexs[], + IN gctUINT32 GlobalCoreIndexs[], OUT gcoHARDWARE * Hardware ); diff --git a/drivers/amlogic/npu/inc/gc_vsc_precomp.h b/drivers/amlogic/npu/inc/gc_vsc_precomp.h index 4722b020daf763..39b5aa376ea24d 100644 --- a/drivers/amlogic/npu/inc/gc_vsc_precomp.h +++ b/drivers/amlogic/npu/inc/gc_vsc_precomp.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by diff --git a/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_drvi_interface.h b/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_drvi_interface.h index f0e71319f116e5..8d8033d4c5acd9 100644 --- a/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_drvi_interface.h +++ b/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_drvi_interface.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -60,6 +60,8 @@ BEGIN_EXTERN_C() /* Shared use. */ #define _sldLocalMemoryAddressName "#sh_localMemoryAddress" +#define _sldThreadIdMemoryAddressName "#sh_threadIdMemAddr" +#define _sldWorkThreadCountName "#sh_workThreadCount" #define FULL_PROGRAM_BINARY_SIG_1 gcmCC('F', 'U', 'L', 'L') #define FULL_PROGRAM_BINARY_SIG_2 gcmCC('P', 'R', 'G', 'M') @@ -112,6 +114,8 @@ enum gceRecompileKind gceRK_PATCH_Y_FLIPPED_TEXTURE, gceRK_PATCH_REMOVE_ASSIGNMENT_FOR_ALPHA, gceRK_PATCH_Y_FLIPPED_SHADER, + gceRK_PATCH_INVERT_FRONT_FACING, + gceRK_PATCH_ALPHA_TEST, gceRK_PATCH_SAMPLE_MASK, gceRK_PATCH_SIGNEXTENT, gceRK_PATCH_TCS_INPUT_COUNT_MISMATCH, @@ -359,6 +363,12 @@ typedef struct _gcsPatchYFlippedShader } gcsPatchYFlippedShader; +typedef struct _gcsPatchAlphaTestShader +{ + gcUNIFORM alphaTestData; /* uniform contains refValue and func. */ +} +gcsPatchAlphaTestShader; + typedef struct _gcsPatchFlippedSamplePosition { gctFLOAT value; /* change gl_SamplePosition to (value - gl_SamplePosition); */ @@ -442,6 +452,7 @@ typedef struct _gcRecompileDirective gcsPatchYFlippedTexture * yFlippedTexture; gcsPatchRemoveAssignmentForAlphaChannel * removeOutputAlpha; gcsPatchYFlippedShader * yFlippedShader; + gcsPatchAlphaTestShader * alphaTestShader; gcsPatchSampleMask * sampleMask; gcsPatchSignExtent * signExtent; gcsPatchTCSInputCountMismatch * inputMismatch; @@ -478,11 +489,13 @@ typedef struct _gcsPROGRAM_VidMemPatchOffset gctUINT32 gprSpillVidMemInStateBuffer[gcMAX_SHADERS_IN_LINK_GOURP]; gctUINT32 crSpillVidMemInStateBuffer[gcMAX_SHADERS_IN_LINK_GOURP]; gctUINT32 sharedMemVidMemInStateBuffer; + gctUINT32 threadIdVidMemInStateBuffer; gctUINT32 instVidMemInStateDelta[gcMAX_SHADERS_IN_LINK_GOURP]; gctUINT32 gprSpillVidMemInStateDelta[gcMAX_SHADERS_IN_LINK_GOURP]; gctUINT32 crSpillVidMemInStateDelta[gcMAX_SHADERS_IN_LINK_GOURP]; gctUINT32 sharedMemVidMemInStateDelta; + gctUINT32 threadIdVidMemInStateDelta; } gcsPROGRAM_VidMemPatchOffset; @@ -575,6 +588,7 @@ typedef struct _gcSHADER_VID_NODES gctPOINTER gprSpillVidmemNode[gcMAX_SHADERS_IN_LINK_GOURP]; /* SURF Node for gpr spill memory. */ gctPOINTER crSpillVidmemNode[gcMAX_SHADERS_IN_LINK_GOURP]; /* SURF Node for cr spill memory. */ gctPOINTER sharedMemVidMemNode; + gctPOINTER threadIdVidMemNode; }gcSHADER_VID_NODES; typedef enum _gceMEMORY_ACCESS_FLAG @@ -698,6 +712,7 @@ typedef struct _gcsHINT gctUINT32 colorKillInstruction[3]; #endif + /* First word. */ /* gctBOOL isdefined as signed int, 1 bit will have problem if the value * is not used to test zero or not, use 2 bits to avoid the potential error */ @@ -719,6 +734,8 @@ typedef struct _gcsHINT gctBOOL useDSY : 2; gctBOOL yInvertAware : 2; gctBOOL hasCentroidInput : 2; /* flag if PS uses any inputs defined as centroid. */ + + /* Second word. */ gctBOOL disableEarlyZ : 2; /* Disable EarlyZ for this program. */ gctBOOL threadGroupSync : 2; gctBOOL usedSampleIdOrSamplePosition : 2; /* For sample shading. */ @@ -739,7 +756,12 @@ typedef struct _gcsHINT #endif gctBOOL useGroupId : 2; gctBOOL useLocalId : 2; + gctBOOL useEvisInst : 2; + + /* Third word. */ gctUINT fragColorUsage : 2; + gctUINT reserved : 30; + /* flag if the shader uses gl_FragCoord, gl_FrontFacing, gl_PointCoord */ gctCHAR useFragCoord[4]; gctCHAR usePointCoord[4]; @@ -825,16 +847,21 @@ typedef struct _gcsHINT gctBOOL useGPRSpill[gcvPROGRAM_STAGE_LAST]; /* padding bytes to make the offset of shaderVidNodes field be consistent in 32bit and 64bit platforms */ - gctCHAR reserved[8]; + gctCHAR reservedByteForShaderVidNodeOffset[4]; /* shaderVidNodes should always be the LAST filed in hits. */ /* SURF Node for memory that is used in shader. */ gcSHADER_VID_NODES shaderVidNodes; /* padding bytes to make the struct size be consistent in 32bit and 64bit platforms */ - gctCHAR reserved1[4]; + gctCHAR reservedByteForHitSize[8]; }gcsHINT; +#if defined(_WINDOWS) +char _check_shader_vid_nodes_offset[(gcmOFFSETOF(_gcsHINT, shaderVidNodes) % 8) == 0]; +char _check_hint_size[(sizeof(struct _gcsHINT) % 8) == 0]; +#endif + #define gcsHINT_isCLShader(Hint) ((Hint)->clShader) #define gcsHINT_GetShaderMode(Hint) ((Hint)->shaderMode) #define gcsHINT_GetSurfNode(Hint) ((Hint)->surfNode) @@ -1686,6 +1713,9 @@ typedef struct _gcOPTIMIZER_OPTION */ gctBOOL DriverVIRPath; + /* Close all optimization fro OCL debugger */ + gctBOOL disableOptForDebugger; + /* NOTE: when you add a new option, you MUST initialize it with default value in theOptimizerOption too */ } gcOPTIMIZER_OPTION; @@ -1755,7 +1785,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption; #define gcmOPT_EnableDebug() (gcmGetOptimizerOption()->enableDebug > 0) #define gcmOPT_EnableDebugDump() (gcmGetOptimizerOption()->enableDebug > 1) #define gcmOPT_EnableDebugDumpALL() (gcmGetOptimizerOption()->enableDebug > 2) -#define gcmOPT_EnableDebugMode() (gcmGetOptimizerOption()->enableDebug == 4) +#define gcmOPT_GetDebugLevel() (gcmGetOptimizerOption()->enableDebug) +#define gcmOPT_SetDebugLevel(level) (gcmGetOptimizerOption()->enableDebug = level) #define gcmOPT_INLINERKIND() (gcmGetOptimizerOption()->inlinerKind) #define gcmOPT_INLINELEVEL() (gcmGetOptimizerOption()->inlineLevel) #define gcmOPT_SetINLINELEVEL(v) (gcmGetOptimizerOptionVariable()->inlineLevel = (v)) @@ -1766,6 +1797,9 @@ extern gcOPTIMIZER_OPTION theOptimizerOption; #define gcmOPT_DualFP16Start() (gcmGetOptimizerOption()->_dual16Start) #define gcmOPT_DualFP16End() (gcmGetOptimizerOption()->_dual16End) +#define gcmOPT_DisableOPTforDebugger() (gcmGetOptimizerOption()->disableOptForDebugger) +#define gcmOPT_SetDisableOPTforDebugger(b) (gcmGetOptimizerOption()->disableOptForDebugger = b) + #define gcmOPT_TESSLEVEL() (gcmGetOptimizerOption()->testTessLevel) #define gcmOPT_DualFP16PrecisionRule() (gcmGetOptimizerOption()->dual16PrecisionRule) @@ -1833,6 +1867,8 @@ extern gctBOOL gcDoTriageForShaderId(gctINT shaderId, gctINT startId, gctINT end it can decrease the temp registers but increases the constant registers. */ #define FB_DISABLE_GL_LOOP_UNROLLING 0x40000 /* Disable loop unrolling for GL FE. */ +#define FE_GENERATED_OFFLINE_COMPILER 0x80000 /* Enable Offline Compile . */ + #define gcmOPT_SetPatchTexld(m,n) (gcmGetOptimizerOption()->patchEveryTEXLDs = (m),\ gcmGetOptimizerOption()->patchDummyTEXLDs = (n)) #define gcmOPT_SetSplitVecMUL() (gcmGetOptimizerOption()->splitVec = gcvTRUE, \ @@ -2360,12 +2396,31 @@ gcSHADER_IsHaltiCompiler( ** because detecting by clientApiVersion does not work in some cases. ** */ - gctBOOL gcSHADER_IsOGLCompiler( IN gcSHADER Shader ); +gctBOOL +gcSHADER_IsGL43( + IN gcSHADER Shader + ); + +gctBOOL +gcSHADER_IsGL44( + IN gcSHADER Shader + ); + +gctBOOL +gcSHADER_IsGL45( + IN gcSHADER Shader + ); + +gctBOOL +gcSHADER_SupportAliasedAttribute( + IN gcSHADER pShader + ); + /******************************************************************************* ** gcSHADER_SetShaderID ** @@ -7494,6 +7549,18 @@ gcLoadKernelCompiler( IN gcePATCH_ID PatchId ); +/******************************************************************************* +** gcUnloadKernelCompiler +******************************************************************************** +** +** OpenCL kernel shader compiler unload. +** +*/ +gceSTATUS +gcUnloadKernelCompiler( +void +); + /******************************************************************************* ** gcOptimizeShader ******************************************************************************** @@ -7868,6 +7935,16 @@ gcCreateYFlippedShaderDirective( OUT gcPatchDirective ** PatchDirectivePtr ); +gceSTATUS +gcCreateFrontFacingDirective( + OUT gcPatchDirective ** PatchDirectivePtr + ); + +gceSTATUS +gcCreateAlphaTestDirective( + OUT gcPatchDirective ** PatchDirectivePtr + ); + gceSTATUS gcCreateSampleMaskDirective( IN gctBOOL AlphaToConverageEnabled, @@ -8507,6 +8584,12 @@ gcSHADER_Has64BitOperation( IN gcSHADER Shader ); +void +gcSHADER_SetBuildOptions( + IN gcSHADER Shader, + IN gctSTRING Options + ); + void gcSHADER_SetDebugInfo( IN gcSHADER Shader, diff --git a/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_gcsl.h b/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_gcsl.h index 722e3fd7be05c9..99e0b70c83705d 100644 --- a/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_gcsl.h +++ b/drivers/amlogic/npu/inc/old_impl/gc_vsc_old_gcsl.h @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. * * The material in this file is confidential and contains trade secrets * of Vivante Corporation. This is proprietary information owned by @@ -120,11 +120,17 @@ BEGIN_EXTERN_C() /* bump up version to 1.37 for adding intrisinc functions for gSampler2DRect on 08/06/2019 */ /* bump up version to 1.38 for saving the full graphics shaders into the binary on 08/08/2019 */ /* bump up version to 1.39 for saving ubo array index into the binary on 08/09/2019 */ +/* bump up version to 1.40 for saving local memory size, uniform's swizzle and shader kind into the binary on 11/07/2019 */ +/* bump up version to 1.41 for saving the stream number for gcOUTPUT on 11/07/2019 */ +#define gcdSL_SHADER_BINARY_BEFORE_SAVING_STREAM_NUMBER_FOR_OUTPUT gcmCC(0, 0, 1, 41) + +/* bump up version to 1.42 for saving adding intrinsic functions sin, cos, tan 11/8/2019 */ +/* bump up version to 1.43 for supporting textureGather functions have texture2DrectShadow type 11/14/2019 */ /* current version */ -#define gcdSL_SHADER_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 39) +#define gcdSL_SHADER_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 43) -#define gcdSL_PROGRAM_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 39) +#define gcdSL_PROGRAM_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 43) typedef union _gcsValue { @@ -205,14 +211,20 @@ gceFRAGOUT_USAGE; #define _SHADER_DX_VERSION_30 gcmCC('\3', '\0', '\0', '\0') #define _cldCL1Dot1 gcmCC('\0', '\0', '\0', '\1') #define _cldCL1Dot2 gcmCC('\0', '\0', '\2', '\1') +#define _SHADER_GL10_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\0', '\1') #define _SHADER_GL11_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\1', '\1') -#define _SHADER_GL20_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\0', '\2') -#define _SHADER_GL21_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\1', '\2') -#define _SHADER_GL30_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\0', '\3') -#define _SHADER_GL31_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\1', '\3') -#define _SHADER_GL32_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\2', '\3') +#define _SHADER_GL12_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\2', '\1') +#define _SHADER_GL13_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\3', '\1') +#define _SHADER_GL14_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\4', '\1') +#define _SHADER_GL15_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\5', '\1') #define _SHADER_GL33_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\3', '\3') #define _SHADER_GL40_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\0', '\4') +#define _SHADER_GL41_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\1', '\4') +#define _SHADER_GL42_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\2', '\4') +#define _SHADER_GL43_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\3', '\4') +#define _SHADER_GL44_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\4', '\4') +#define _SHADER_GL45_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\5', '\4') +#define _SHADER_GL46_VERSION gcmCC('\0', _SHADER_GL_VERSION_SIG, '\6', '\4') #define gcShader_IsCL(S) (GetShaderType(S) == gcSHADER_TYPE_CL && (((S)->compilerVersion[0] & 0xFFFF) == _cldLanguageType)) #define gcShader_IsGlCompute(S) (GetShaderType(S) == gcSHADER_TYPE_COMPUTE && (((S)->compilerVersion[0] & 0xFFFF) != _cldLanguageType)) @@ -379,7 +391,9 @@ typedef enum _gcSL_OPCODE gcSL_CSUBCJ, /* 0x99 Complex number conjugate sub. */ gcSL_CADD, /* 0x9A Complex number add. */ gcSL_GET_IMAGE_TYPE, /* 0x9B get the image type: 0-1d, 1-1dbuffer, 2-1darray, 3-2d, 4-2darray, 5-3d */ - gcSL_CLAMPCOORD, /* clamp image 2d cooridate to its width and height */ + gcSL_CLAMPCOORD, /* 0x9C clamp image 2d cooridate to its width and height */ + gcSL_EMIT_STREAM_VERTEX, /* 0x9D For function "EmitStreamVertex" */ + gcSL_END_STREAM_PRIMITIVE, /* 0x9E For function "EndStreamPrimitive" */ gcSL_MAXOPCODE } gcSL_OPCODE; @@ -430,7 +444,9 @@ gcSL_OPCODE; (Opcode) == gcSL_TEXU_LOD || \ (Opcode) == gcSL_MEM_BARRIER || \ (Opcode) == gcSL_EMIT_VERTEX || \ - (Opcode) == gcSL_END_PRIMITIVE) + (Opcode) == gcSL_END_PRIMITIVE || \ + (Opcode) == gcSL_EMIT_STREAM_VERTEX || \ + (Opcode) == gcSL_END_STREAM_PRIMITIVE) #define gcSL_isOpcodeUseTargetAsSource(Opcode) ((Opcode) == gcSL_STORE || \ (Opcode) == gcSL_IMAGE_WR || \ @@ -486,19 +502,36 @@ gcSL_OPCODE_ATTR; extern const gcSL_OPCODE_ATTR gcvOpcodeAttr[]; -typedef enum _gcSL_BARRIER_TYPE +typedef enum _gcSL_MEMORY_SCOPE { - gcSL_BARRIER_NORMAL = 0, - gcSL_BARRIER_LOCAL, - gcSL_BARRIER_GLOBAL, - gcSL_BARRIER_MEM, - gcSL_BARRIER_MEM_ATOMIC_COUNTER, - gcSL_BARRIER_MEM_BUFFER, - gcSL_BARRIER_MEM_IMAGE, - gcSL_BARRIER_MEM_SHARED, - gcSL_BARRIER_MEM_GROUP + gcSL_MEMORY_SCOPE_CROSS_DEVICE = 0, + gcSL_MEMORY_SCOPE_DEVICE = 1, + gcSL_MEMORY_SCOPE_WORKGROUP = 2, + gcSL_MEMORY_SCOPE_SUBGROUP = 3, + gcSL_MEMORY_SCOPE_INVOCATION = 4, + gcSL_MEMORY_SCOPE_QUEUE_FAMILY = 5, } -gcSL_BARRIER_TYPE; +gcSL_MEMORY_SCOPE; + +/* Match SPIR-V spec. */ +typedef enum _gcSL_MEMORY_SEMANTIC_FLAG +{ + gcSL_MEMORY_SEMANTIC_RELAXED = 0x0, + gcSL_MEMORY_SEMANTIC_ACQUIRE = 0x2, + gcSL_MEMORY_SEMANTIC_RELEASE = 0x4, + gcSL_MEMORY_SEMANTIC_ACQUIRERELEASE = 0x8, + gcSL_MEMORY_SEMANTIC_SEQUENTIALLYCONSISTENT = 0x10, + gcSL_MEMORY_SEMANTIC_UNIFORMMEMORY = 0x40, + gcSL_MEMORY_SEMANTIC_SUBGROUPMEMORY = 0x80, + gcSL_MEMORY_SEMANTIC_WORKGROUPMEMORY = 0x100, + gcSL_MEMORY_SEMANTIC_CROSSWORKGROUPMEMORY = 0x200, + gcSL_MEMORY_SEMANTIC_ATOMICCOUNTERMEMORY = 0x400, + gcSL_MEMORY_SEMANTIC_IMAGEMEMORY = 0x800, + gcSL_MEMORY_SEMANTIC_OUTPUTMEMORY = 0x1000, + gcSL_MEMORY_SEMANTIC_MAKEAVAILABLE = 0x2000, + gcSL_MEMORY_SEMANTIC_MAKEVISIBLE = 0x4000, + gcSL_MEMORY_SEMANTIC_VOLATILE = 0x8000, +}gcSL_MEMORY_SEMANTIC_FLAG; typedef enum _gcSL_FORMAT { @@ -1049,6 +1082,8 @@ typedef enum _gcSHADER_VAR_CATEGORY gcSHADER_VAR_CATEGORY_WORK_GROUP_ID_OFFSET, /* the workGroupId offset, for multi-GPU only. */ gcSHADER_VAR_CATEGORY_GLOBAL_INVOCATION_ID_OFFSET, /* the globalId offset, for multi-GPU only. */ gcSHADER_VAR_CATEGORY_VIEW_INDEX, + gcSHADER_VAR_CATEGORY_CLIP_DISTANCE_ENABLE, + gcSHADER_VAR_CATEGORY_THREAD_ID_MEM_ADDR, } gcSHADER_VAR_CATEGORY; @@ -1386,6 +1421,8 @@ gceUNIFORM_FLAGS; #define isUniformWorkGroupIdOffset(u) ((u)->_varCategory == gcSHADER_VAR_CATEGORY_WORK_GROUP_ID_OFFSET) #define isUniformGlobalInvocationIdOffset(u)((u)->_varCategory == gcSHADER_VAR_CATEGORY_GLOBAL_INVOCATION_ID_OFFSET) #define isUniformViewIndex(u) ((u)->_varCategory == gcSHADER_VAR_CATEGORY_VIEW_INDEX) +#define isUniformClipDistanceEnable(u) ((u)->_varCategory == gcSHADER_VAR_CATEGORY_CLIP_DISTANCE_ENABLE) +#define isUniformThreadIdMemAddr(u) ((u)->_varCategory == gcSHADER_VAR_CATEGORY_THREAD_ID_MEM_ADDR) #define isUniformBasicType(u) (isUniformNormal((u)) || \ isUniformBlockMember((u)) || \ @@ -1398,6 +1435,7 @@ gceUNIFORM_FLAGS; isUniformGlImageForImaget((u)) || \ isUniformWorkThreadCount((u)) || \ isUniformWorkGroupCount((u)) || \ + isUniformClipDistanceEnable((u)) || \ isUniformWorkGroupIdOffset((u)) || \ isUniformGlobalInvocationIdOffset((u))) @@ -1477,7 +1515,8 @@ typedef enum _gceBuiltinNameKind gcSL_BOUNDING_BOX = -38, /* gl_BoundingBox */ gcSL_LAST_FRAG_DATA = -39, /* gl_LastFragData */ gcSL_CLUSTER_ID = -40, /* cluster id */ - gcSL_BUILTINNAME_COUNT = 41 + gcSL_CLIP_DISTANCE = -41, /* gl_ClipDistance */ + gcSL_BUILTINNAME_COUNT = 42 } gceBuiltinNameKind; /* Special code generation indices. */ @@ -2931,6 +2970,12 @@ typedef struct _gcBINARY_UNIFORM_EX */ gctTYPE_QUALIFIER qualifier; + /* Physically assigned values. */ + gctUINT8 swizzle; + + /* Shader type for this uniform. Set this at the end of link. */ + gcSHADER_KIND shaderKind; + /* companion to format field to denote vector size, value of 0 denote the underlying type is scalar */ gctINT16 vectorSize; @@ -3121,6 +3166,9 @@ struct _gcOUTPUT /* Flat output or smooth output. */ gcSHADER_SHADERMODE shaderMode; + /* The stream number, for GS only. The default value is 0. */ + gctINT streamNumber; + /* Location index. */ gctINT location; gctINT output2RTIndex; /* user may specify location 1,3, @@ -3163,6 +3211,8 @@ struct _gcOUTPUT #define GetOutputArrayIndex(o) ((o)->arrayIndex) #define GetOutputTempIndex(o) ((o)->tempIndex) #define GetOutputShaderMode(o) ((o)->shaderMode) +#define GetOutputStreamNumber(o) ((o)->streamNumber) +#define SetOutputStreamNumber(o, i) (GetOutputStreamNumber(o) = (i)) #define GetOutputLocation(o) ((o)->location) #define GetOutput2RTIndex(o) ((o)->output2RTIndex) #define GetOutputFieldIndex(o) ((o)->fieldIndex) @@ -3225,6 +3275,9 @@ typedef struct _gcBINARY_OUTPUT /* shader mode: flat/smooth/... */ gctINT16 shaderMode; + /* The stream number, for GS only. The default value is 0. */ + gctINT16 streamNumber; + /* layout qualifier */ char layoutQualifier[sizeof(gceLAYOUT_QUALIFIER)]; @@ -4200,6 +4253,7 @@ typedef enum _gcSHADER_FLAGS gcSHADER_FLAG_HAS_DEFINE_MAIN_FUNC = 0x800000, /* Whether the shader defines a main function, for GL shader only. */ gcSHADER_FLAG_ENABLE_MULTI_GPU = 0x1000000, /* whether enable multi-GPU. */ gcSHADER_FLAG_HAS_VIV_GCSL_DRIVER_IMAGE = 0x2000000, /* the shader has OCL option `-cl-viv-gcsl-driver-image */ + gcSHADER_FLAG_GENERATED_OFFLINE_COMPILER= 0x4000000, /* whether enable offline compile. */ } gcSHADER_FLAGS; #define gcShaderIsOldHeader(Shader) (((Shader)->flags & gcSHADER_FLAG_OLDHEADER) != 0) @@ -4228,6 +4282,7 @@ typedef enum _gcSHADER_FLAGS #define gcShaderConstantMemoryReferenced(Shader) (((Shader)->flags & gcSHADER_FLAG_CONSTANT_MEMORY_REFERENCED) != 0) #define gcShaderHasDefineMainFunc(Shader) (((Shader)->flags & gcSHADER_FLAG_HAS_DEFINE_MAIN_FUNC) != 0) #define gcShaderEnableMultiGPU(Shader) (((Shader)->flags & gcSHADER_FLAG_ENABLE_MULTI_GPU) != 0) +#define gcShaderEnableOfflineCompiler(Shader) (((Shader)->flags & gcSHADER_FLAG_GENERATED_OFFLINE_COMPILER) != 0) #define gcShaderGetFlag(Shader) (Shader)->flags) @@ -4275,6 +4330,8 @@ typedef enum _gcSHADER_FLAGS #define gcShaderClrHasDefineMainFunc(Shader) do { (Shader)->flags &= ~gcSHADER_FLAG_HAS_DEFINE_MAIN_FUNC; } while (0) #define gcShaderSetEnableMultiGPU(Shader) do { (Shader)->flags |= gcSHADER_FLAG_ENABLE_MULTI_GPU; } while (0) #define gcShaderClrEnableMultiGPU(Shader) do { (Shader)->flags &= ~gcSHADER_FLAG_ENABLE_MULTI_GPU; } while (0) +#define gcShaderSetEnableOfflineCompiler(Shader)do { (Shader)->flags |= gcSHADER_FLAG_GENERATED_OFFLINE_COMPILER; } while (0) +#define gcShaderClrEnableOfflineCompiler(Shader)do { (Shader)->flags &= ~gcSHADER_FLAG_GENERATED_OFFLINE_COMPILER; } while (0) #define gcShaderSetFlag(Shader, Flag) do { (Shader)->flags = (Flag); } while (0) @@ -4606,6 +4663,9 @@ struct _gcSHADER void * debugInfo; gceFRAGOUT_USAGE fragOutUsage; + gctUINT32 optionsLen; + gctSTRING buildOptions; + #if _SUPPORT_LONG_ULONG_DATA_TYPE /* used to modefy the index of instruction when need to insert instruction into the shader when recompile */ gctUINT InsertCount; diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_base.h b/drivers/amlogic/npu/inc/shared/gc_hal_base.h new file mode 100644 index 00000000000000..97c1f6be7b5023 --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_base.h @@ -0,0 +1,63 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_base_shared_h_ +#define __gc_hal_base_shared_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define gcdEXTERNAL_MEMORY_NAME_MAX 32 +#define gcdEXTERNAL_MEMORY_DATA_MAX 8 + +typedef struct _gcsEXTERNAL_MEMORY_INFO +{ + /* Name of allocator used to attach this memory. */ + gctCHAR allocatorName[gcdEXTERNAL_MEMORY_NAME_MAX]; + + /* User defined data which will be passed to allocator. */ + gctUINT32 userData[gcdEXTERNAL_MEMORY_DATA_MAX]; +} +gcsEXTERNAL_MEMORY_INFO; + +#define gcdBINARY_TRACE_MESSAGE_SIZE 240 + +typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR; +typedef struct _gcsBINARY_TRACE_MESSAGE +{ + gctUINT32 signature; + gctUINT32 pid; + gctUINT32 tid; + gctUINT32 line; + gctUINT32 numArguments; + gctUINT8 payload; +} +gcsBINARY_TRACE_MESSAGE; + +/* gcsOBJECT object defintinon. */ +typedef struct _gcsOBJECT +{ + /* Type of an object. */ + gceOBJECT_TYPE type; +} +gcsOBJECT; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_base_shared_h_ */ + + + diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_driver.h b/drivers/amlogic/npu/inc/shared/gc_hal_driver.h new file mode 100644 index 00000000000000..a4e2e3a305f6a5 --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_driver.h @@ -0,0 +1,1183 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_driver_h_ +#define __gc_hal_driver_h_ + +#include "gc_hal_enum.h" +#include "gc_hal_types.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* The number of context buffers per user. */ +#define gcdCONTEXT_BUFFER_NUM 2 + +/******************************************************************************\ +******************************* I/O Control Codes ****************************** +\******************************************************************************/ + +#define gcvHAL_CLASS "galcore" +#define IOCTL_GCHAL_INTERFACE 30000 +#define IOCTL_GCHAL_KERNEL_INTERFACE 30001 +#define IOCTL_GCHAL_TERMINATE 30002 + +/******************************************************************************\ +****************************** Interface Structure ***************************** +\******************************************************************************/ + +#define gcdMAX_PROFILE_FILE_NAME 128 +#define gcdMAX_FLAT_MAPPING_COUNT 16 + +/* gcvHAL_CHIP_INFO */ +typedef struct _gcsHAL_CHIP_INFO +{ + /* Chip count. */ + OUT gctINT32 count; + + /* Chip types. */ + OUT gceHARDWARE_TYPE types[gcdCHIP_COUNT]; + + /* Chip IDs. */ + OUT gctUINT32 ids[gcvCORE_COUNT]; + + OUT gctUINT32 coreIndexs[gcvCORE_COUNT]; +} +gcsHAL_CHIP_INFO; + +/* gcvHAL_VERSION */ +typedef struct _gcsHAL_VERSION +{ + /* version: ... */ + OUT gctINT32 major; + OUT gctINT32 minor; + OUT gctINT32 patch; + + /* Build version. */ + OUT gctUINT32 build; +} +gcsHAL_VERSION; + +/* gcvHAL_SET_TIMEOUT. */ +typedef struct _gcsHAL_SET_TIMEOUT +{ + gctUINT32 timeOut; +} +gcsHAL_SET_TIMEOUT; + +/* gcvHAL_QUERY_VIDEO_MEMORY */ +typedef struct _gcsHAL_QUERY_VIDEO_MEMORY +{ + /* Physical memory address of internal memory. Just a name. */ + OUT gctUINT32 internalPhysName; + /* Size in bytes of internal memory. */ + OUT gctUINT64 internalSize; + + /* Physical memory address of external memory. Just a name. */ + OUT gctUINT32 externalPhysName; + /* Size in bytes of external memory.*/ + OUT gctUINT64 externalSize; + + /* Physical memory address of contiguous memory. Just a name. */ + OUT gctUINT32 contiguousPhysName; + /* Size in bytes of contiguous memory.*/ + OUT gctUINT64 contiguousSize; +} +gcsHAL_QUERY_VIDEO_MEMORY; + +/* gcvHAL_QUERY_CHIP_IDENTITY */ +typedef struct _gcsHAL_QUERY_CHIP_IDENTITY * gcsHAL_QUERY_CHIP_IDENTITY_PTR; +typedef struct _gcsHAL_QUERY_CHIP_IDENTITY +{ + + /* Chip model. */ + gceCHIPMODEL chipModel; + + /* Revision value.*/ + gctUINT32 chipRevision; + + /* Chip date. */ + gctUINT32 chipDate; + + /* Supported feature fields. */ + gctUINT32 chipFeatures; + + /* Supported minor feature fields. */ + gctUINT32 chipMinorFeatures; + + /* Supported minor feature 1 fields. */ + gctUINT32 chipMinorFeatures1; + + /* Supported minor feature 2 fields. */ + gctUINT32 chipMinorFeatures2; + + /* Supported minor feature 3 fields. */ + gctUINT32 chipMinorFeatures3; + + /* Supported minor feature 4 fields. */ + gctUINT32 chipMinorFeatures4; + + /* Supported minor feature 5 fields. */ + gctUINT32 chipMinorFeatures5; + + /* Supported minor feature 6 fields. */ + gctUINT32 chipMinorFeatures6; + + /* Number of streams supported. */ + gctUINT32 streamCount; + + /* Number of pixel pipes. */ + gctUINT32 pixelPipes; + + /* Number of resolve pipes. */ + gctUINT32 resolvePipes; + + /* Number of instructions. */ + gctUINT32 instructionCount; + + /* Number of constants. */ + gctUINT32 numConstants; + + /* Number of varyings */ + gctUINT32 varyingsCount; + + /* Number of 3D GPUs */ + gctUINT32 gpuCoreCount; + + /* Physical mask of all AVAILABLE clusters in core.*/ + gctUINT32 clusterAvailMask; + + /* Product ID */ + gctUINT32 productID; + + /* Special chip flag bits */ + gceCHIP_FLAG chipFlags; + + /* ECO ID. */ + gctUINT32 ecoID; + + /* Customer ID. */ + gctUINT32 customerID; + + /* CPU view physical address and size of SRAMs. */ + gctUINT64 sRAMBases[gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMSizes[gcvSRAM_INTER_COUNT]; + + gctUINT64 platformFlagBits; +} +gcsHAL_QUERY_CHIP_IDENTITY; + +/* gcvHAL_QUERY_CHIP_OPTION. */ +typedef struct _gcsHAL_QUERY_CHIP_OPTIONS * gcsHAL_QUERY_CHIP_OPTIONS_PTR; +typedef struct _gcsHAL_QUERY_CHIP_OPTIONS +{ + gctBOOL gpuProfiler; + gctBOOL allowFastClear; + gctBOOL powerManagement; + /* Whether use new MMU. It is meaningless + ** for old MMU since old MMU is always enabled. + */ + gctBOOL enableMMU; + gceCOMPRESSION_OPTION allowCompression; + gctBOOL smallBatch; + gctUINT32 uscL1CacheRatio; + gctUINT32 uscAttribCacheRatio; + gctUINT32 userClusterMask; + + /* Internal SRAM. */ + gctUINT32 sRAMGPUVirtAddrs[gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMSizes[gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMCount; + + /* External SRAM. */ + gctPHYS_ADDR_T extSRAMCPUPhysAddrs[gcvSRAM_EXT_COUNT]; + gctPHYS_ADDR_T extSRAMGPUPhysAddrs[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMGPUVirtAddrs[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMGPUPhysNames[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMSizes[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMCount; + + gceSECURE_MODE secureMode; + gctBOOL enableNNTPParallel; + gctUINT enableSwtilingPhase1; +} +gcsHAL_QUERY_CHIP_OPTIONS; + +/* gcvHAL_QUERY_CHIP_FREQUENCY. */ +typedef struct _gcsHAL_QUERY_CHIP_FREQUENCY * gcsHAL_QUERY_CHIP_FREQUENCY_PTR; +typedef struct _gcsHAL_QUERY_CHIP_FREQUENCY +{ + OUT gctUINT32 mcClk; + OUT gctUINT32 shClk; +} +gcsHAL_QUERY_CHIP_FREQUENCY; + +/* Obsolete for userpace. */ +/* gcvHAL_ALLOCATE_NON_PAGED_MEMORY */ +typedef struct _gcsHAL_ALLOCATE_NON_PAGED_MEMORY +{ + /* Allocation flags. */ + IN gctUINT32 flags; + + /* Number of bytes to allocate. */ + IN OUT gctUINT64 bytes; + + /* Physical address of allocation. Just a name. */ + OUT gctUINT32 physName; + + /* Logical address of allocation. */ + OUT gctUINT64 logical; +} +gcsHAL_ALLOCATE_NON_PAGED_MEMORY; + +/* Obsolete for userpace. */ +/* gcvHAL_FREE_NON_PAGED_MEMORY */ +typedef struct _gcsHAL_FREE_NON_PAGED_MEMORY +{ + /* Number of bytes allocated. */ + IN gctUINT64 bytes; + + /* Physical address of allocation. Just a name. */ + IN gctUINT32 physName; + + /* Logical address of allocation. */ + IN gctUINT64 logical; +} +gcsHAL_FREE_NON_PAGED_MEMORY; + +/* Video memory allocation. */ +/* gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY */ +typedef struct _gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY +{ + /* Number of bytes to allocate. */ + IN OUT gctUINT64 bytes; + + /* Buffer alignment. */ + IN gctUINT32 alignment; + + /* Type of allocation, see gceVIDMEM_TYPE. */ + IN gctUINT32 type; + + /* Flag of allocation. */ + IN gctUINT32 flag; + + /* Memory pool to allocate from. */ + IN OUT gctUINT32 pool; + + /* Internal SRAM index. */ + IN gctINT32 sRAMIndex; + /* External SRAM index. */ + IN gctINT32 extSRAMIndex; + + /* Allocated video memory. */ + OUT gctUINT32 node; +} +gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY; + +typedef struct _gcsUSER_MEMORY_DESC +{ + /* Import flag. */ + gctUINT32 flag; + + /* gcvALLOC_FLAG_DMABUF */ + gctUINT32 handle; + gctUINT64 dmabuf; + + /* gcvALLOC_FLAG_USERMEMORY */ + gctUINT64 logical; + gctUINT64 physical; + gctUINT32 size; + + /* gcvALLOC_FLAG_EXTERNAL_MEMORY */ + gcsEXTERNAL_MEMORY_INFO externalMemoryInfo; +} +gcsUSER_MEMORY_DESC; + +/* gcvHAL_WRAP_USER_MEMORY. */ +typedef struct _gcsHAL_WRAP_USER_MEMORY +{ + /* Description of user memory. */ + IN gcsUSER_MEMORY_DESC desc; + + /* Video memory allocation type. */ + IN gctUINT32 type; + + /* Output video mmory node. */ + OUT gctUINT32 node; + + /* size of the node in bytes */ + OUT gctUINT64 bytes; +} +gcsHAL_WRAP_USER_MEMORY; + +/* gcvHAL_RELEASE_VIDEO_MEMORY */ +typedef struct _gcsHAL_RELEASE_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + +#ifdef __QNXNTO__ + /* Mapped logical address to unmap in user space. */ + OUT gctUINT64 memory; + + /* Number of bytes to allocated. */ + OUT gctUINT64 bytes; +#endif +} +gcsHAL_RELEASE_VIDEO_MEMORY; + +/* gcvHAL_LOCK_VIDEO_MEMORY */ +typedef struct _gcsHAL_LOCK_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Cache configuration. */ + /* Only gcvPOOL_VIRTUAL can be configured */ + IN gctBOOL cacheable; + + /* Hardware specific address. */ + OUT gctUINT32 address; + + /* Mapped logical address. */ + OUT gctUINT64 memory; + + /* Customer priviate handle*/ + OUT gctUINT32 gid; + + /* Bus address of a contiguous video node. */ + OUT gctUINT64 physicalAddress; + +#if gcdCAPTURE_ONLY_MODE + IN gctBOOL queryCapSize; + IN gctPOINTER captureLogical; + OUT gctSIZE_T captureSize; +#endif +} +gcsHAL_LOCK_VIDEO_MEMORY; + +/* gcvHAL_UNLOCK_VIDEO_MEMORY */ +typedef struct _gcsHAL_UNLOCK_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT64 node; + + /* Video memory allocation type. */ + IN gctUINT32 type; + + /* Pool of the unlock node */ + OUT gctUINT32 pool; + + /* Bytes of the unlock node */ + OUT gctUINT64 bytes; + + /* Flag to unlock surface asynchroneously. */ + IN OUT gctBOOL asynchroneous; + +#if gcdCAPTURE_ONLY_MODE + OUT gctPOINTER captureLogical; +#endif +} +gcsHAL_UNLOCK_VIDEO_MEMORY; + +/* gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY: */ +typedef struct _gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Video memory allocation type. */ + IN gctUINT32 type; +} +gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY; + +/* gcvHAL_EXPORT_VIDEO_MEMORY. */ +typedef struct _gcsHAL_EXPORT_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Export flags */ + IN gctUINT32 flags; + + /* Exported dma_buf fd */ + OUT gctINT32 fd; +} +gcsHAL_EXPORT_VIDEO_MEMORY; + +/* gcvHAL_NAME_VIDEO_MEMORY. */ +typedef struct _gcsHAL_NAME_VIDEO_MEMORY +{ + IN gctUINT32 handle; + OUT gctUINT32 name; +} +gcsHAL_NAME_VIDEO_MEMORY; + +/* gcvHAL_IMPORT_VIDEO_MEMORY. */ +typedef struct _gcsHAL_IMPORT_VIDEO_MEMORY +{ + IN gctUINT32 name; + OUT gctUINT32 handle; +} +gcsHAL_IMPORT_VIDEO_MEMORY; + +/* gcvHAL_MAP_MEMORY */ +typedef struct _gcsHAL_MAP_MEMORY +{ + /* Physical memory address to map. Just a name on Linux/Qnx. */ + IN gctUINT32 physName; + + /* Number of bytes in physical memory to map. */ + IN gctUINT64 bytes; + + /* Address of mapped memory. */ + OUT gctUINT64 logical; +} +gcsHAL_MAP_MEMORY; + +/* gcvHAL_UNMAP_MEMORY */ +typedef struct _gcsHAL_UNMAP_MEMORY +{ + /* Physical memory address to unmap. Just a name on Linux/Qnx. */ + IN gctUINT32 physName; + + /* Number of bytes in physical memory to unmap. */ + IN gctUINT64 bytes; + + /* Address of mapped memory to unmap. */ + IN gctUINT64 logical; +} +gcsHAL_UNMAP_MEMORY; + +/* gcvHAL_CACHE */ +typedef struct _gcsHAL_CACHE +{ + IN gceCACHEOPERATION operation; + IN gctUINT64 process; + IN gctUINT64 logical; + IN gctUINT64 bytes; + IN gctUINT32 node; +} +gcsHAL_CACHE; + +/* gcvHAL_ATTACH */ +typedef struct _gcsHAL_ATTACH +{ + /* Handle of context buffer object. */ + OUT gctUINT32 context; + + /* Maximum state in the buffer. */ + OUT gctUINT64 maxState; + + /* Number of states in the buffer. */ + OUT gctUINT32 numStates; + + /* Map context buffer to user or not. */ + IN gctBOOL map; + + /* Physical of context buffer. */ + OUT gctUINT64 logicals[2]; + + /* Bytes of context buffer. */ + OUT gctUINT32 bytes; + +#if gcdCAPTURE_ONLY_MODE + IN gctBOOL queryCapSize; + IN gctPOINTER contextLogical[gcdCONTEXT_BUFFER_NUM]; + OUT gctSIZE_T captureSize; +#endif +} +gcsHAL_ATTACH; + +/* gcvHAL_DETACH */ +typedef struct _gcsHAL_DETACH +{ + /* Context buffer object gckCONTEXT. Just a name. */ + IN gctUINT32 context; +} +gcsHAL_DETACH; + + +/* gcvHAL_EVENT_COMMIT. */ +typedef struct _gcsHAL_EVENT_COMMIT +{ + /* Event queue in gcsQUEUE. */ + IN gctUINT64 queue; +} +gcsHAL_EVENT_COMMIT; + +typedef struct _gcsHAL_COMMAND_LOCATION +{ + gctUINT32 priority; + gctUINT32 channelId; + + gctUINT32 videoMemNode; + + gctUINT32 address; + gctUINT64 logical; + gctUINT32 startOffset; + /* size includes reservedHead and reservedTail. */ + gctUINT32 size; + + gctUINT32 reservedHead; + gctUINT32 reservedTail; + + /* Pointer to patch list. */ + gctUINT64 patchHead; + + /* + * Location index of exit commands, ie where to put the chipEnable/link back + * commands in the reservedTail area. + * It's used in fully shared command buffer for multiple cores. + */ + gctUINT32 exitIndex; + gctUINT32 entryPipe; + gctUINT32 exitPipe; + + /* struct _gcsHAL_COMMAND_LOCATION * next; */ + gctUINT64 next; +#if gcdCAPTURE_ONLY_MODE + gctPOINTER contextLogical[gcdCONTEXT_BUFFER_NUM]; +#endif +} +gcsHAL_COMMAND_LOCATION; + +typedef struct _gcsHAL_SUBCOMMIT +{ + gctUINT32 coreId; + + /* user gcsSTATE_DELTA_PTR. */ + gctUINT64 delta; + + /* Kernel gckCONTEXT. */ + gctUINT64 context; + + /* Event queue in user gcsQUEUE *. */ + gctUINT64 queue; + + /* Locate the commands. */ + gcsHAL_COMMAND_LOCATION commandBuffer; + + /* struct _gcsHAL_SUBCOMMIT * next; */ + gctUINT64 next; +} +gcsHAL_SUBCOMMIT; + +/* gcvHAL_COMMIT */ +typedef struct _gcsHAL_COMMIT +{ + gcsHAL_SUBCOMMIT subCommit; + + gctBOOL shared; + + gctBOOL contextSwitched; + + /* Commit stamp of this commit. */ + OUT gctUINT64 commitStamp; +} +gcsHAL_COMMIT; + + +typedef struct _gcsHAL_COMMIT_DONE +{ + IN gctUINT64 context; +} +gcsHAL_COMMIT_DONE; + +/* gcvHAL_USER_SIGNAL */ +typedef struct _gcsHAL_USER_SIGNAL +{ + /* Command. */ + gceUSER_SIGNAL_COMMAND_CODES command; + + /* Signal ID. */ + IN OUT gctINT32 id; + + /* Reset mode. */ + IN gctBOOL manualReset; + + /* Wait timedout. */ + IN gctUINT32 wait; + + /* State. */ + IN gctBOOL state; +} +gcsHAL_USER_SIGNAL; + +/* gcvHAL_SIGNAL. */ +typedef struct _gcsHAL_SIGNAL +{ + /* Signal handle to signal gctSIGNAL. */ + IN gctUINT64 signal; + + /* Reserved gctSIGNAL. */ + IN gctUINT64 auxSignal; + + /* Process owning the signal gctHANDLE. */ + IN gctUINT64 process; + +#if defined(__QNXNTO__) + /* Client pulse side-channel connection ID. Set by client in gcoOS_CreateSignal. */ + IN gctINT32 coid; + + /* Set by server. */ + IN gctINT32 rcvid; +#endif + /* Event generated from where of pipeline */ + IN gceKERNEL_WHERE fromWhere; +} +gcsHAL_SIGNAL; + +/* gcvHAL_WRITE_DATA. */ +typedef struct _gcsHAL_WRITE_DATA +{ + /* Address to write data to. */ + IN gctUINT32 address; + + /* Data to write. */ + IN gctUINT32 data; +} +gcsHAL_WRITE_DATA; + +/* gcvHAL_READ_REGISTER */ +typedef struct _gcsHAL_READ_REGISTER +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + /* Data read. */ + OUT gctUINT32 data; +} +gcsHAL_READ_REGISTER; + +/* gcvHAL_WRITE_REGISTER */ +typedef struct _gcsHAL_WRITE_REGISTER +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + /* Data read. */ + IN gctUINT32 data; +} +gcsHAL_WRITE_REGISTER; + +/* gcvHAL_READ_REGISTER_EX */ +typedef struct _gcsHAL_READ_REGISTER_EX +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + IN gctUINT32 coreSelect; + + /* Data read. */ + OUT gctUINT32 data[4]; +} +gcsHAL_READ_REGISTER_EX; + +/* gcvHAL_WRITE_REGISTER_EX */ +typedef struct _gcsHAL_WRITE_REGISTER_EX +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + IN gctUINT32 coreSelect; + + /* Data read. */ + IN gctUINT32 data[4]; +} +gcsHAL_WRITE_REGISTER_EX; + +#if VIVANTE_PROFILER +/* gcvHAL_GET_PROFILE_SETTING */ +typedef struct _gcsHAL_GET_PROFILE_SETTING +{ + /* Enable profiling */ + OUT gctBOOL enable; +} +gcsHAL_GET_PROFILE_SETTING; + +/* gcvHAL_SET_PROFILE_SETTING */ +typedef struct _gcsHAL_SET_PROFILE_SETTING +{ + /* Enable profiling */ + IN gctBOOL enable; +} +gcsHAL_SET_PROFILE_SETTING; + +/* gcvHAL_READ_PROFILER_REGISTER_SETTING */ +typedef struct _gcsHAL_READ_PROFILER_REGISTER_SETTING +{ + /*Should Clear Register*/ + IN gctBOOL bclear; +} +gcsHAL_READ_PROFILER_REGISTER_SETTING; + +typedef struct _gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1 +{ + /* Context buffer object gckCONTEXT. Just a name. */ + IN gctUINT32 context; + + /* Data read. */ + OUT gcsPROFILER_COUNTERS_PART1 Counters; +} +gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1; + +typedef struct _gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2 +{ + /* Context buffer object gckCONTEXT. Just a name. */ + IN gctUINT32 context; + + /* Data read. */ + OUT gcsPROFILER_COUNTERS_PART2 Counters; +} +gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2; + +/* gcvHAL_PROFILE_REGISTERS_2D */ +typedef struct _gcsHAL_PROFILE_REGISTERS_2D +{ + /* Data read in gcs2D_PROFILE. */ + OUT gctUINT64 hwProfile2D; +} +gcsHAL_PROFILE_REGISTERS_2D; +#endif + +/* gcvHAL_SET_POWER_MANAGEMENT_STATE */ +typedef struct _gcsHAL_SET_POWER_MANAGEMENT +{ + /* Data read. */ + IN gceCHIPPOWERSTATE state; +} +gcsHAL_SET_POWER_MANAGEMENT; + +/* gcvHAL_QUERY_POWER_MANAGEMENT_STATE */ +typedef struct _gcsHAL_QUERY_POWER_MANAGEMENT +{ + /* Data read. */ + OUT gceCHIPPOWERSTATE state; + + /* Idle query. */ + OUT gctBOOL isIdle; +} +gcsHAL_QUERY_POWER_MANAGEMENT; + +/* gcvHAL_CONFIG_POWER_MANAGEMENT. */ +typedef struct _gcsHAL_CONFIG_POWER_MANAGEMENT +{ + IN gctBOOL enable; +} +gcsHAL_CONFIG_POWER_MANAGEMENT; + +typedef struct _gcsFLAT_MAPPING_RANGE +{ + gctUINT64 start; + gctUINT64 end; + gctUINT32 size; + gceFLATMAP_FLAG flag; +} +gcsFLAT_MAPPING_RANGE; + +/* gcvHAL_GET_BASE_ADDRESS */ +typedef struct _gcsHAL_GET_BASE_ADDRESS +{ + /* Physical memory address of internal memory. */ + OUT gctUINT32 baseAddress; + + OUT gctUINT32 flatMappingRangeCount; + + OUT gcsFLAT_MAPPING_RANGE flatMappingRanges[gcdMAX_FLAT_MAPPING_COUNT]; +} +gcsHAL_GET_BASE_ADDRESS; + +typedef struct _gcsHAL_SET_DEBUG_LEVEL_ZONE +{ + IN gctUINT32 level; + IN gctUINT32 zones; + IN gctBOOL enable; +} +gcsHAL_SET_DEBUG_LEVEL_ZONE; + +/* gcvHAL_DEBUG_DUMP. */ +typedef struct _gcsHAL_DEBUG_DUMP +{ + /* gceDUMP_BUFFER_TYPE type. */ + IN gctUINT32 type; + + IN gctUINT64 ptr; + IN gctUINT32 address; + IN gctUINT32 size; +} +gcsHAL_DEBUG_DUMP; + + +/* gcvHAL_TIMESTAMP */ +typedef struct _gcsHAL_TIMESTAMP +{ + /* Timer select. */ + IN gctUINT32 timer; + + /* Timer request type (0-stop, 1-start, 2-send delta). */ + IN gctUINT32 request; + + /* Result of delta time in microseconds. */ + OUT gctINT32 timeDelta; +} +gcsHAL_TIMESTAMP; + +/* gcvHAL_DATABASE */ +typedef struct _gcsHAL_DATABASE +{ + /* Set to gcvTRUE if you want to query a particular process ID. + ** Set to gcvFALSE to query the last detached process. */ + IN gctBOOL validProcessID; + + /* Process ID to query. */ + IN gctUINT32 processID; + + /* Information. */ + OUT gcuDATABASE_INFO vidMem; + OUT gcuDATABASE_INFO nonPaged; + OUT gcuDATABASE_INFO contiguous; + OUT gcuDATABASE_INFO gpuIdle; + + /* Detail information about video memory. */ + OUT gcuDATABASE_INFO vidMemPool[3]; +} +gcsHAL_DATABASE; + +/* gcvHAL_GET_FRAME_INFO. */ +typedef struct _gcsHAL_GET_FRAME_INFO +{ + /* gcsHAL_FRAME_INFO* */ + OUT gctUINT64 frameInfo; +} +gcsHAL_GET_FRAME_INFO; + + +typedef struct _gcsHAL_SET_FSCALE_VALUE +{ + IN gctUINT32 value; + IN gctUINT32 shValue; +} +gcsHAL_SET_FSCALE_VALUE; + +typedef struct _gcsHAL_GET_FSCALE_VALUE +{ + OUT gctUINT32 value; + OUT gctUINT32 minValue; + OUT gctUINT32 maxValue; +} +gcsHAL_GET_FSCALE_VALUE; + +/* gcvHAL_QUERY_RESET_TIME_STAMP. */ +typedef struct _gcsHAL_QUERY_RESET_TIME_STAMP +{ + OUT gctUINT64 timeStamp; + OUT gctUINT64 contextID; +} +gcsHAL_QUERY_RESET_TIME_STAMP; + +/* gcvHAL_CREATE_NATIVE_FENCE. */ +typedef struct _gcsHAL_CREATE_NATIVE_FENCE +{ + /* Signal id. */ + IN gctUINT64 signal; + + /* Native fence file descriptor. */ + OUT gctINT32 fenceFD; + +} +gcsHAL_CREATE_NATIVE_FENCE; + +/* gcvHAL_WAIT_NATIVE_FENCE. */ +typedef struct _gcsHAL_WAIT_NATIVE_FENCE +{ + /* Native fence file descriptor. */ + IN gctINT32 fenceFD; + + /* Wait timeout. */ + IN gctUINT32 timeout; +} +gcsHAL_WAIT_NATIVE_FENCE; + +/* gcvHAL_SHBUF. */ +typedef struct _gcsHAL_SHBUF +{ + gceSHBUF_COMMAND_CODES command; + + /* Shared buffer. */ + IN OUT gctUINT64 id; + + /* User data to be shared. */ + IN gctUINT64 data; + + /* Data size. */ + IN OUT gctUINT32 bytes; +} +gcsHAL_SHBUF; + +/* gcvHAL_GET_GRAPHIC_BUFFER_FD. */ +/* + * Fd representation of android graphic buffer contents. + * Currently, it is only to reference video nodes, signal, etc to avoid being + * destroyed when trasfering across processes. + */ +typedef struct _gcsHAL_GET_GRAPHIC_BUFFER_FD +{ + /* Max 3 video nodes, node handle here. */ + IN gctUINT32 node[3]; + + /* A shBuf. */ + IN gctUINT64 shBuf; + + /* A signal. */ + IN gctUINT64 signal; + + OUT gctINT32 fd; +} +gcsHAL_GET_GRAPHIC_BUFFER_FD; + +typedef struct _gcsHAL_VIDEO_MEMORY_METADATA +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + IN gctUINT32 readback; + + INOUT gctINT32 ts_fd; + INOUT gctUINT32 fc_enabled; + INOUT gctUINT32 fc_value; + INOUT gctUINT32 fc_value_upper; + + INOUT gctUINT32 compressed; + INOUT gctUINT32 compress_format; +} +gcsHAL_VIDEO_MEMORY_METADATA; + +/* gcvHAL_GET_VIDEO_MEMORY_FD. */ +typedef struct _gcsHAL_GET_VIDEO_MEMORY_FD +{ + IN gctUINT32 handle; + OUT gctINT32 fd; +} +gcsHAL_GET_VIDEO_MEMORY_FD; + +/* gcvHAL_DESTROY_MMU. */ +typedef struct _gcsHAL_DESTROY_MMU +{ + /* Mmu object. */ + IN gctUINT64 mmu; +} +gcsHAL_DESTROY_MMU; + +/* gcvHAL_WAIT_FENCE. */ +typedef struct _gcsHAL_WAIT_FENCE +{ + IN gctUINT32 handle; + IN gctUINT32 timeOut; +} +gcsHAL_WAIT_FENCE; + +/* gcvHAL_DEVICE_MUTEX: */ +typedef struct _gcsHAL_DEVICE_MUTEX +{ + /* Lock or Release device mutex. */ + gctBOOL isMutexLocked; +} +gcsHAL_DEVICE_MUTEX; + + +#if gcdDEC_ENABLE_AHB +/* gcvHAL_DEC300_READ. */ +typedef struct _gcsHAL_DEC300_READ +{ + gctUINT32 enable; + gctUINT32 readId; + gctUINT32 format; + gctUINT32 strides[3]; + gctUINT32 is3D; + gctUINT32 isMSAA; + gctUINT32 clearValue; + gctUINT32 isTPC; + gctUINT32 isTPCCompressed; + gctUINT32 surfAddrs[3]; + gctUINT32 tileAddrs[3]; +} +DEC300Read; + +/* gcvHAL_DEC300_WRITE. */ +typedef struct _gcsHAL_DEC300_WRITE +{ + gctUINT32 enable; + gctUINT32 readId; + gctUINT32 writeId; + gctUINT32 format; + gctUINT32 surfAddr; + gctUINT32 tileAddr; +} +DEC300Write; + +/* gcvHAL_DEC300_FLUSH. */ +typedef struct _gcsHAL_DEC300_FLUSH +{ + IN gctUINT8 useless; +} +DEC300Flush; + +/* gcvHAL_DEC300_FLUSH_WAIT. */ +typedef struct _gcsHAL_DEC300_FLUSH_WAIT +{ + IN gctUINT32 done; +} +DEC300FlushWait; +#endif + + +typedef struct _gcsHAL_INTERFACE +{ + /* Command code. */ + gceHAL_COMMAND_CODES command; + + /* Hardware type. */ + gceHARDWARE_TYPE hardwareType; + + /* Core index for current hardware type. */ + gctUINT32 coreIndex; + + /* Status value. */ + gceSTATUS status; + + /* Engine */ + gceENGINE engine; + + /* Ignore information from TSL when doing IO control */ + gctBOOL ignoreTLS; + + /* The mutext already acquired */ + IN gctBOOL commitMutex; + + /* Union of command structures. */ + union _u + { + gcsHAL_CHIP_INFO ChipInfo; + gcsHAL_VERSION Version; + gcsHAL_SET_TIMEOUT SetTimeOut; + + gcsHAL_QUERY_VIDEO_MEMORY QueryVideoMemory; + gcsHAL_QUERY_CHIP_IDENTITY QueryChipIdentity; + gcsHAL_QUERY_CHIP_OPTIONS QueryChipOptions; + gcsHAL_QUERY_CHIP_FREQUENCY QueryChipFrequency; + + gcsHAL_ALLOCATE_NON_PAGED_MEMORY AllocateNonPagedMemory; + gcsHAL_FREE_NON_PAGED_MEMORY FreeNonPagedMemory; + + gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY AllocateLinearVideoMemory; + gcsHAL_WRAP_USER_MEMORY WrapUserMemory; + gcsHAL_RELEASE_VIDEO_MEMORY ReleaseVideoMemory; + + gcsHAL_LOCK_VIDEO_MEMORY LockVideoMemory; + gcsHAL_UNLOCK_VIDEO_MEMORY UnlockVideoMemory; + gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY BottomHalfUnlockVideoMemory; + + gcsHAL_EXPORT_VIDEO_MEMORY ExportVideoMemory; + gcsHAL_NAME_VIDEO_MEMORY NameVideoMemory; + gcsHAL_IMPORT_VIDEO_MEMORY ImportVideoMemory; + + gcsHAL_MAP_MEMORY MapMemory; + gcsHAL_UNMAP_MEMORY UnmapMemory; + + gcsHAL_CACHE Cache; + + gcsHAL_ATTACH Attach; + gcsHAL_DETACH Detach; + + gcsHAL_EVENT_COMMIT Event; + gcsHAL_COMMIT Commit; + gcsHAL_COMMIT_DONE CommitDone; + + gcsHAL_USER_SIGNAL UserSignal; + gcsHAL_SIGNAL Signal; + + gcsHAL_WRITE_DATA WriteData; + gcsHAL_READ_REGISTER ReadRegisterData; + gcsHAL_WRITE_REGISTER WriteRegisterData; + gcsHAL_READ_REGISTER_EX ReadRegisterDataEx; + gcsHAL_WRITE_REGISTER_EX WriteRegisterDataEx; + +#if VIVANTE_PROFILER + gcsHAL_GET_PROFILE_SETTING GetProfileSetting; + gcsHAL_SET_PROFILE_SETTING SetProfileSetting; + gcsHAL_READ_PROFILER_REGISTER_SETTING SetProfilerRegisterClear; + gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1 RegisterProfileData_part1; + gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2 RegisterProfileData_part2; + gcsHAL_PROFILE_REGISTERS_2D RegisterProfileData2D; +#endif + + gcsHAL_SET_POWER_MANAGEMENT SetPowerManagement; + gcsHAL_QUERY_POWER_MANAGEMENT QueryPowerManagement; + gcsHAL_CONFIG_POWER_MANAGEMENT ConfigPowerManagement; + + gcsHAL_GET_BASE_ADDRESS GetBaseAddress; + + gcsHAL_SET_DEBUG_LEVEL_ZONE DebugLevelZone; + gcsHAL_DEBUG_DUMP DebugDump; + + gcsHAL_TIMESTAMP TimeStamp; + gcsHAL_DATABASE Database; + + gcsHAL_GET_FRAME_INFO GetFrameInfo; + + + /* gcsHAL_DUMP_GPU_STATE */ + /* gcsHAL_DUMP_EVENT */ + + gcsHAL_SET_FSCALE_VALUE SetFscaleValue; + gcsHAL_GET_FSCALE_VALUE GetFscaleValue; + + gcsHAL_QUERY_RESET_TIME_STAMP QueryResetTimeStamp; + + gcsHAL_CREATE_NATIVE_FENCE CreateNativeFence; + gcsHAL_WAIT_NATIVE_FENCE WaitNativeFence; + gcsHAL_SHBUF ShBuf; + gcsHAL_GET_GRAPHIC_BUFFER_FD GetGraphicBufferFd; + gcsHAL_VIDEO_MEMORY_METADATA SetVidMemMetadata; + gcsHAL_GET_VIDEO_MEMORY_FD GetVideoMemoryFd; + + gcsHAL_DESTROY_MMU DestroyMmu; + + gcsHAL_WAIT_FENCE WaitFence; + + /* gcvHAL_DEVICE_MUTEX: */ + gcsHAL_DEVICE_MUTEX DeviceMutex; + + +#if gcdDEC_ENABLE_AHB + gcsHAL_DEC300_READ DEC300Read; + gcsHAL_DEC300_WRITE DEC300Write; + gcsHAL_DEC300_FLUSH DEC300Flush; + gcsHAL_DEC300_FLUSH_WAIT DEC300FlushWait; +#endif + } + u; +} +gcsHAL_INTERFACE; + + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_driver_h_ */ + + diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_driver_vg.h b/drivers/amlogic/npu/inc/shared/gc_hal_driver_vg.h new file mode 100644 index 00000000000000..b054e16197bc08 --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_driver_vg.h @@ -0,0 +1,222 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_driver_vg_h_ +#define __gc_hal_driver_vg_h_ + +#include "gc_hal_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************\ +******************************* I/O Control Codes ****************************** +\******************************************************************************/ + +#define gcvHAL_CLASS "galcore" +#define IOCTL_GCHAL_INTERFACE 30000 + +/******************************************************************************\ +********************* Command buffer information structure. ******************** +\******************************************************************************/ + +typedef struct _gcsCOMMAND_BUFFER_INFO * gcsCOMMAND_BUFFER_INFO_PTR; +typedef struct _gcsCOMMAND_BUFFER_INFO +{ + /* FE command buffer interrupt ID. */ + gctINT32 feBufferInt; + + /* TS overflow interrupt ID. */ + gctINT32 tsOverflowInt; + + /* Alignment and mask for the buffer address. */ + gctUINT addressMask; + gctUINT32 addressAlignment; + + /* Alignment for each command. */ + gctUINT32 commandAlignment; + + /* Number of bytes required by the STATE command. */ + gctUINT32 stateCommandSize; + + /* Number of bytes required by the RESTART command. */ + gctUINT32 restartCommandSize; + + /* Number of bytes required by the FETCH command. */ + gctUINT32 fetchCommandSize; + + /* Number of bytes required by the CALL command. */ + gctUINT32 callCommandSize; + + /* Number of bytes required by the RETURN command. */ + gctUINT32 returnCommandSize; + + /* Number of bytes required by the EVENT command. */ + gctUINT32 eventCommandSize; + + /* Number of bytes required by the END command. */ + gctUINT32 endCommandSize; + + /* Number of bytes reserved at the tail of a static command buffer. */ + gctUINT32 staticTailSize; + + /* Number of bytes reserved at the tail of a dynamic command buffer. */ + gctUINT32 dynamicTailSize; +} +gcsCOMMAND_BUFFER_INFO; + +/******************************************************************************\ +******************************** Task Structures ******************************* +\******************************************************************************/ + +typedef struct _gcsTASK_HEADER * gcsTASK_HEADER_PTR; +typedef struct _gcsTASK_HEADER +{ + /* Task ID. */ + IN gceTASK id; +} +gcsTASK_HEADER; + +typedef struct _gcsTASK_LINK * gcsTASK_LINK_PTR; +typedef struct _gcsTASK_LINK +{ + /* Task ID (gcvTASK_LINK). */ + IN gceTASK id; + + /* Pointer to the next task container. */ + IN gctPOINTER cotainer; + + /* Pointer to the next task from the next task container. */ + IN gcsTASK_HEADER_PTR task; +} +gcsTASK_LINK; + +typedef struct _gcsTASK_CLUSTER * gcsTASK_CLUSTER_PTR; +typedef struct _gcsTASK_CLUSTER +{ + /* Task ID (gcvTASK_CLUSTER). */ + IN gceTASK id; + + /* Number of tasks in the cluster. */ + IN gctUINT taskCount; +} +gcsTASK_CLUSTER; + +typedef struct _gcsTASK_INCREMENT * gcsTASK_INCREMENT_PTR; +typedef struct _gcsTASK_INCREMENT +{ + /* Task ID (gcvTASK_INCREMENT). */ + IN gceTASK id; + + /* Address of the variable to increment. */ + IN gctUINT32 address; +} +gcsTASK_INCREMENT; + +typedef struct _gcsTASK_DECREMENT * gcsTASK_DECREMENT_PTR; +typedef struct _gcsTASK_DECREMENT +{ + /* Task ID (gcvTASK_DECREMENT). */ + IN gceTASK id; + + /* Address of the variable to decrement. */ + IN gctUINT32 address; +} +gcsTASK_DECREMENT; + +typedef struct _gcsTASK_SIGNAL * gcsTASK_SIGNAL_PTR; +typedef struct _gcsTASK_SIGNAL +{ + /* Task ID (gcvTASK_SIGNAL). */ + IN gceTASK id; + + /* Process owning the signal. */ + IN gctHANDLE process; + + /* Signal handle to signal. */ + IN gctSIGNAL signal; + +#if defined(__QNXNTO__) + IN gctINT32 coid; + IN gctINT32 rcvid; +#endif +} +gcsTASK_SIGNAL; + +typedef struct _gcsTASK_LOCKDOWN * gcsTASK_LOCKDOWN_PTR; +typedef struct _gcsTASK_LOCKDOWN +{ + /* Task ID (gcvTASK_LOCKDOWN). */ + IN gceTASK id; + + /* Address of the user space counter. */ + IN gctUINT32 userCounter; + + /* Address of the kernel space counter. */ + IN gctUINT32 kernelCounter; + + /* Process owning the signal. */ + IN gctHANDLE process; + + /* Signal handle to signal. */ + IN gctSIGNAL signal; +} +gcsTASK_LOCKDOWN; + +typedef struct _gcsTASK_UNLOCK_VIDEO_MEMORY * gcsTASK_UNLOCK_VIDEO_MEMORY_PTR; +typedef struct _gcsTASK_UNLOCK_VIDEO_MEMORY +{ + /* Task ID (gcvTASK_UNLOCK_VIDEO_MEMORY). */ + IN gceTASK id; + + /* Allocated video memory. */ + IN gctUINT64 node; +} +gcsTASK_UNLOCK_VIDEO_MEMORY; + +typedef struct _gcsTASK_FREE_VIDEO_MEMORY * gcsTASK_FREE_VIDEO_MEMORY_PTR; +typedef struct _gcsTASK_FREE_VIDEO_MEMORY +{ + /* Task ID (gcvTASK_FREE_VIDEO_MEMORY). */ + IN gceTASK id; + + /* Allocated video memory. */ + IN gctUINT32 node; +} +gcsTASK_FREE_VIDEO_MEMORY; + +typedef struct _gcsTASK_FREE_CONTIGUOUS_MEMORY * gcsTASK_FREE_CONTIGUOUS_MEMORY_PTR; +typedef struct _gcsTASK_FREE_CONTIGUOUS_MEMORY +{ + /* Task ID (gcvTASK_FREE_CONTIGUOUS_MEMORY). */ + IN gceTASK id; + + /* Number of bytes allocated. */ + IN gctSIZE_T bytes; + + /* Physical address of allocation. */ + IN gctPHYS_ADDR physical; + + /* Logical address of allocation. */ + IN gctPOINTER logical; +} +gcsTASK_FREE_CONTIGUOUS_MEMORY; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_driver_h_ */ + + diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_enum.h b/drivers/amlogic/npu/inc/shared/gc_hal_enum.h new file mode 100644 index 00000000000000..bb3a7e941e88f5 --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_enum.h @@ -0,0 +1,1837 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_shared_enum_h_ +#define __gc_hal_shared_enum_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Chip models. */ +typedef enum _gceCHIPMODEL +{ + gcv200 = 0x0200, + gcv300 = 0x0300, + gcv320 = 0x0320, + gcv328 = 0x0328, + gcv350 = 0x0350, + gcv355 = 0x0355, + gcv400 = 0x0400, + gcv410 = 0x0410, + gcv420 = 0x0420, + gcv428 = 0x0428, + gcv450 = 0x0450, + gcv500 = 0x0500, + gcv520 = 0x0520, + gcv530 = 0x0530, + gcv600 = 0x0600, + gcv620 = 0x0620, + gcv700 = 0x0700, + gcv800 = 0x0800, + gcv860 = 0x0860, + gcv880 = 0x0880, + gcv900 = 0x0900, + gcv1000 = 0x1000, + gcv1500 = 0x1500, + gcv2000 = 0x2000, + gcv2100 = 0x2100, + gcv2200 = 0x2200, + gcv2500 = 0x2500, + gcv3000 = 0x3000, + gcv4000 = 0x4000, + gcv5000 = 0x5000, + gcv5200 = 0x5200, + gcv6400 = 0x6400, + gcv7000 = 0x7000, + gcv7400 = 0x7400, + gcv8000 = 0x8000, +} +gceCHIPMODEL; + +/* Chip features. */ +typedef enum _gceFEATURE +{ + gcvFEATURE_PIPE_2D = 0, + gcvFEATURE_PIPE_3D, + gcvFEATURE_PIPE_VG, + gcvFEATURE_DC, + gcvFEATURE_HIGH_DYNAMIC_RANGE, + gcvFEATURE_MODULE_CG, + gcvFEATURE_MIN_AREA, + gcvFEATURE_BUFFER_INTERLEAVING, + gcvFEATURE_BYTE_WRITE_2D, + gcvFEATURE_ENDIANNESS_CONFIG, + gcvFEATURE_DUAL_RETURN_BUS, + gcvFEATURE_DEBUG_MODE, + gcvFEATURE_YUY2_RENDER_TARGET, + gcvFEATURE_FRAGMENT_PROCESSOR, + gcvFEATURE_2DPE20, + gcvFEATURE_FAST_CLEAR, + gcvFEATURE_YUV420_TILER, + gcvFEATURE_YUY2_AVERAGING, + gcvFEATURE_FLIP_Y, + gcvFEATURE_EARLY_Z, + gcvFEATURE_COMPRESSION, + gcvFEATURE_MSAA, + gcvFEATURE_SPECIAL_ANTI_ALIASING, + gcvFEATURE_SPECIAL_MSAA_LOD, + gcvFEATURE_422_TEXTURE_COMPRESSION, + gcvFEATURE_DXT_TEXTURE_COMPRESSION, + gcvFEATURE_ETC1_TEXTURE_COMPRESSION, + gcvFEATURE_CORRECT_TEXTURE_CONVERTER, + gcvFEATURE_TEXTURE_8K, + gcvFEATURE_SCALER, + gcvFEATURE_YUV420_SCALER, + gcvFEATURE_SHADER_HAS_W, + gcvFEATURE_SHADER_HAS_SIGN, + gcvFEATURE_SHADER_HAS_FLOOR, + gcvFEATURE_SHADER_HAS_CEIL, + gcvFEATURE_SHADER_HAS_SQRT, + gcvFEATURE_SHADER_HAS_TRIG, + gcvFEATURE_HZ, + gcvFEATURE_CORRECT_STENCIL, + gcvFEATURE_VG20, + gcvFEATURE_VG_FILTER, + gcvFEATURE_VG21, + gcvFEATURE_VG_DOUBLE_BUFFER, + gcvFEATURE_VG_RESOLUTION_8K, + gcvFEATURE_MC20, + gcvFEATURE_SUPER_TILED, + gcvFEATURE_FAST_CLEAR_FLUSH, + gcvFEATURE_2D_FILTERBLIT_PLUS_ALPHABLEND, + gcvFEATURE_2D_DITHER, + gcvFEATURE_2D_A8_TARGET, + gcvFEATURE_2D_A8_NO_ALPHA, + gcvFEATURE_2D_FILTERBLIT_FULLROTATION, + gcvFEATURE_2D_BITBLIT_FULLROTATION, + gcvFEATURE_WIDE_LINE, + gcvFEATURE_FC_FLUSH_STALL, + gcvFEATURE_FULL_DIRECTFB, + gcvFEATURE_HALF_FLOAT_PIPE, + gcvFEATURE_LINE_LOOP, + gcvFEATURE_2D_YUV_BLIT, + gcvFEATURE_2D_TILING, + gcvFEATURE_NON_POWER_OF_TWO, + gcvFEATURE_3D_TEXTURE, + gcvFEATURE_TEXTURE_ARRAY, + gcvFEATURE_TILE_FILLER, + gcvFEATURE_LOGIC_OP, + gcvFEATURE_MIXED_STREAMS, + gcvFEATURE_2D_MULTI_SOURCE_BLT, + gcvFEATURE_END_EVENT, + gcvFEATURE_VERTEX_10_10_10_2, + gcvFEATURE_TEXTURE_10_10_10_2, + gcvFEATURE_TEXTURE_ANISOTROPIC_FILTERING, + gcvFEATURE_TEXTURE_FLOAT_HALF_FLOAT, + gcvFEATURE_2D_ROTATION_STALL_FIX, + gcvFEATURE_2D_MULTI_SOURCE_BLT_EX, + gcvFEATURE_BUG_FIXES10, + gcvFEATURE_2D_MINOR_TILING, + gcvFEATURE_TEX_COMPRRESSION_SUPERTILED, /* Supertiled compressed textures are supported. */ + gcvFEATURE_FAST_MSAA, + gcvFEATURE_BUG_FIXED_INDEXED_TRIANGLE_STRIP, + gcvFEATURE_TEXTURE_TILE_STATUS_READ, + gcvFEATURE_DEPTH_BIAS_FIX, + gcvFEATURE_RECT_PRIMITIVE, + gcvFEATURE_BUG_FIXES11, + gcvFEATURE_SUPERTILED_TEXTURE, + gcvFEATURE_2D_NO_COLORBRUSH_INDEX8, + gcvFEATURE_RS_YUV_TARGET, + gcvFEATURE_2D_FC_SOURCE, /* For tilestatus compression feature*/ + gcvFEATURE_2D_CC_NOAA_SOURCE, + gcvFEATURE_PE_DITHER_FIX, + gcvFEATURE_2D_YUV_SEPARATE_STRIDE, + gcvFEATURE_FRUSTUM_CLIP_FIX, + gcvFEATURE_TEXTURE_SWIZZLE, + gcvFEATURE_PRIMITIVE_RESTART, + gcvFEATURE_TEXTURE_LINEAR, + gcvFEATURE_TEXTURE_YUV_ASSEMBLER, + gcvFEATURE_LINEAR_RENDER_TARGET, + gcvFEATURE_SHADER_HAS_ATOMIC, + gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE, + gcvFEATURE_SHADER_ENHANCEMENTS2, + gcvFEATURE_BUG_FIXES7, + gcvFEATURE_SHADER_HAS_RTNE, + gcvFEATURE_SHADER_HAS_EXTRA_INSTRUCTIONS2, + gcvFEATURE_SHADER_ENHANCEMENTS3, + gcvFEATURE_DYNAMIC_FREQUENCY_SCALING, + gcvFEATURE_SINGLE_BUFFER, + gcvFEATURE_OCCLUSION_QUERY, + gcvFEATURE_2D_GAMMA, + gcvFEATURE_2D_COLOR_SPACE_CONVERSION, + gcvFEATURE_2D_SUPER_TILE_VERSION, + gcvFEATURE_HALTI0, + gcvFEATURE_HALTI1, + gcvFEATURE_HALTI2, + gcvFEATURE_SUPPORT_GCREGTX, + gcvFEATURE_2D_MIRROR_EXTENSION, + gcvFEATURE_TEXTURE_ASTC, + gcvFEATURE_TEXTURE_ASTC_DECODE_FIX, + gcvFEATURE_TEXTURE_ASTC_BASE_LOD_FIX, + gcvFEATURE_2D_SUPER_TILE_V1, + gcvFEATURE_2D_SUPER_TILE_V2, + gcvFEATURE_2D_SUPER_TILE_V3, + gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2, + gcvFEATURE_NEW_RA, + gcvFEATURE_BUG_FIXED_IMPLICIT_PRIMITIVE_RESTART, + gcvFEATURE_PE_MULTI_RT_BLEND_ENABLE_CONTROL, + gcvFEATURE_SMALL_MSAA, /* An upgraded version of Fast MSAA */ + gcvFEATURE_VERTEX_INST_ID_AS_ATTRIBUTE, + gcvFEATURE_DUAL_16, + gcvFEATURE_BRANCH_ON_IMMEDIATE_REG, + gcvFEATURE_2D_COMPRESSION, + gcvFEATURE_TPC_COMPRESSION, + gcvFEATURE_TPCV11_COMPRESSION, + gcvFEATURE_DEC_COMPRESSION, + gcvFEATURE_DEC300_COMPRESSION, + gcvFEATURE_DEC400_COMPRESSION, + /*Its a new core for DEC400 compression*/ + gcvFEATURE_DEC400EX_COMPRESSION, + gcvFEATURE_DEC_TPC_COMPRESSION, + gcvFEATURE_DEC_COMPRESSION_TILE_NV12_8BIT, + gcvFEATURE_DEC_COMPRESSION_TILE_NV12_10BIT, + gcvFEATURE_2D_OPF_YUV_OUTPUT, + gcvFEATURE_2D_FILTERBLIT_A8_ALPHA, + gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT, + gcvFEATURE_2D_MULTI_SRC_BLT_BILINEAR_FILTER, + gcvFEATURE_2D_MULTI_SRC_BLT_1_5_ENHANCEMENT, + gcvFEATURE_V2_COMPRESSION_Z16_FIX, + gcvFEATURE_VERTEX_INST_ID_AS_INTEGER, + gcvFEATURE_2D_YUV_MODE, + gcvFEATURE_2D_CACHE_128B256BPERLINE, + gcvFEATURE_2D_SEPARATE_CACHE, + gcvFEATURE_2D_MAJOR_SUPER_TILE, + gcvFEATURE_2D_V4COMPRESSION, + gcvFEATURE_2D_VMSAA, + gcvFEATURE_2D_10BIT_OUTPUT_LINEAR, + gcvFEATURE_2D_YUV420_OUTPUT_LINEAR, + gcvFEATURE_ACE, + gcvFEATURE_COLOR_COMPRESSION, + gcvFEATURE_32BPP_COMPONENT_TEXTURE_CHANNEL_SWIZZLE, + gcvFEATURE_64BPP_HW_CLEAR_SUPPORT, + gcvFEATURE_TX_LERP_PRECISION_FIX, + gcvFEATURE_COMPRESSION_V2, + gcvFEATURE_MMU, + gcvFEATURE_COMPRESSION_V3, + gcvFEATURE_TX_DECOMPRESSOR, + gcvFEATURE_MRT_TILE_STATUS_BUFFER, + gcvFEATURE_COMPRESSION_V1, + gcvFEATURE_V1_COMPRESSION_Z16_DECOMPRESS_FIX, + gcvFEATURE_RTT, + gcvFEATURE_GENERIC_ATTRIB, + gcvFEATURE_2D_ONE_PASS_FILTER, + gcvFEATURE_2D_ONE_PASS_FILTER_TAP, + gcvFEATURE_2D_POST_FLIP, + gcvFEATURE_2D_PIXEL_ALIGNMENT, + gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT, + gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT_WIDTH, + gcvFEATURE_8K_RT, + gcvFEATURE_HALTI3, + gcvFEATURE_EEZ, + gcvFEATURE_INTEGER_SIGNEXT_FIX, + gcvFEATURE_PSOUTPUT_MAPPING, + gcvFEATURE_8K_RT_FIX, + gcvFEATURE_TX_TILE_STATUS_MAPPING, + gcvFEATURE_SRGB_RT_SUPPORT, + gcvFEATURE_TEXTURE_16K, + gcvFEATURE_PA_FARZCLIPPING_FIX, + gcvFEATURE_PE_DITHER_COLORMASK_FIX, + gcvFEATURE_ZSCALE_FIX, + gcvFEATURE_MULTI_PIXELPIPES, + gcvFEATURE_PIPE_CL, + gcvFEATURE_BUG_FIXES18, + gcvFEATURE_UNIFIED_SAMPLERS, + gcvFEATURE_CL_PS_WALKER, + gcvFEATURE_NEW_HZ, + gcvFEATURE_TX_FRAC_PRECISION_6BIT, + gcvFEATURE_SH_INSTRUCTION_PREFETCH, + gcvFEATURE_PROBE, + gcvFEATURE_SINGLE_PIPE_HALTI1, + gcvFEATURE_BUG_FIXES8, /* This HW feature is wrong, we can't use this to check integer branch!!!*/ + gcvFEATURE_2D_ALL_QUAD, + gcvFEATURE_SEPARATE_SRC_DST, + gcvFEATURE_TX_HOR_ALIGN_SEL, + gcvFEATURE_HALTI4, + gcvFEATURE_MRT_FC_FIX, + gcvFEATURE_TESSELLATION, + gcvFEATURE_DRAW_INDIRECT, + gcvFEATURE_COMPUTE_INDIRECT, + gcvFEATURE_MSAA_TEXTURE, + gcvFEATURE_STENCIL_TEXTURE, + gcvFEATURE_S8_ONLY_RENDERING, + gcvFEATURE_D24S8_SAMPLE_STENCIL, + gcvFEATURE_ADVANCED_BLEND_MODE_PART0, + gcvFEATURE_RA_DEPTH_WRITE, + gcvFEATURE_RS_DS_DOWNSAMPLE_NATIVE_SUPPORT, + gcvFEATURE_S8_MSAA_COMPRESSION, + gcvFEATURE_MSAA_FRAGMENT_OPERATION, + gcvFEATURE_FE_START_VERTEX_SUPPORT, + gcvFEATURE_DIVISOR_STREAM_ADDR_FIX, + gcvFEATURE_ZERO_ATTRIB_SUPPORT, + gcvFEATURE_DANGLING_VERTEX_FIX, + gcvFEATURE_PE_DISABLE_COLOR_PIPE, + gcvFEATURE_FE_12bit_stride, + gcvFEATURE_TX_LOD_GUARDBAND, + gcvFEATURE_HAS_PRODUCTID, + gcvFEATURE_INTEGER32_FIX, + gcvFEATURE_TEXTURE_GATHER, + gcvFEATURE_IMG_INSTRUCTION, + gcvFEATURE_HELPER_INVOCATION, + gcvFEATURE_NO_USER_CSC, + gcvFEATURE_ANDROID_ONLY, + gcvFEATURE_V2_MSAA_COHERENCY_FIX, + gcvFEATURE_BLOCK_SIZE_16x16, + gcvFEATURE_TX_SUPPORT_DEC, + gcvFEATURE_RSBLT_MSAA_DECOMPRESSION, + gcvFEATURE_TILEFILLER_32TILE_ALIGNED, + gcvFEATURE_GEOMETRY_SHADER, + gcvFEATURE_HALTI5, + gcvFEATURE_PIPELINE_32_ATTRIBUTES, + gcvFEATURE_USC, + gcvFEATURE_CUBEMAP_ARRAY, + gcvFEATURE_TX_DESCRIPTOR, + gcvFEATURE_SEPARATE_RT_CTRL, + gcvFEATURE_RENDER_ARRAY, + gcvFEATURE_BLT_ENGINE, + gcvFEATURE_TEXTURE_BUFFER, + gcvFEATURE_GS_SUPPORT_EMIT, + gcvFEATURE_SAMPLER_BASE_OFFSET, + gcvFEATURE_IMAGE_OUT_BOUNDARY_FIX, + gcvFEATURE_TX_BORDER_CLAMP, + gcvFEATURE_MSAA_SHADING, + gcvFEATURE_ADVANCED_SH_INST, + gcvFEATURE_LOD_FIX_FOR_BASELEVEL, + gcvFEATURE_MULTIDRAW_INDIRECT, + gcvFEATURE_DRAW_ELEMENTS_BASE_VERTEX, + gcvFEATURE_NEW_STEERING_AND_ICACHE_FLUSH, /* Steering base on register base. Trigger-style Icache flush state. */ + gcvFEATURE_PE_DITHER_FIX2, + gcvFEATURE_INDEX_FETCH_FIX, + gcvFEATURE_TEX_BASELOD, + gcvFEATURE_TEX_SEAMLESS_CUBE, + gcvFEATURE_TEX_ETC2, + gcvFEATURE_TEX_CUBE_BORDER_LOD, + gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG, + gcvFEATURE_TX_8BPP_TS_FIX, + gcvFEATURE_HW_TFB, + gcvFEATURE_COMPRESSION_V4, + gcvFEATURE_FENCE_32BIT, + gcvFEATURE_FENCE_64BIT, + gcvFEATURE_R8_UNORM, + gcvFEATURE_TX_DEFAULT_VALUE_FIX, + gcvFEATURE_TX_8bit_UVFrac, + gcvFEATURE_TX_MIPFILTER_NONE_FIX, + gcvFEATURE_MC_STENCIL_CTRL, + gcvFEATURE_DEPTH_MATH_FIX, + gcvFEATURE_PE_B2B_PIXEL_FIX, + gcvFEATURE_TEXTURE_GATHER_OFFSETS, + gcvFEATURE_TEX_CACHE_FLUSH_FIX, + gcvFEATURE_WIDELINE_HELPER_FIX, + gcvFEATURE_LINE_DIAMOND_RULE_FIX, + gcvFEATURE_MULTIGPU_SYNC_V2, + gcvFEATURE_DRAW_ID, + gcvFEATURE_SNAPPAGE_CMD, + gcvFEATURE_COMMAND_PREFETCH, + gcvFEATURE_SAMPLEPOS_SWIZZLE_FIX, + gcvFEATURE_SELECTMAP_SRC0_SWIZZLE_FIX, + gcvFEATURE_LOADATTR_OOB_FIX, + gcvFEATURE_RA_DEPTH_WRITE_MSAA1X_FIX, + gcvFEATURE_MRT_8BIT_DUAL_PIPE_FIX, + gcvFEATURE_BUG_FIXES1, + gcvFEATURE_MULTI_SOURCE_BLT, + gcvFEATURE_ZCOMPRESSION, + gcvFEATURE_DITHER_AND_FILTER_PLUS_ALPHA_2D, + gcvFEATURE_ONE_PASS_2D_FILTER, + gcvFEATURE_TX_FILTER, + gcvFEATURE_CHIPENABLE_LINK, + gcvFEATURE_TEXTURE_BIAS_LOD_FIX, + gcvFEATURE_USE_GL_Z, + gcvFEATURE_SUPPORT_INTEGER, + /* PARTLY_SUPPORT_INTEGER_BRANCH: + ** chips can support all integer types for compare instructions, e.g, CMP, SELECT. + ** FULLLY_SUPPORT_INTEGER_BRANCH: + ** chips can support all integer types for JMP instruction. + ** If PARTLY_SUPPORT_INTEGER_BRANCH is TRUE but FULLLY_SUPPORT_INTEGER_BRANCH is FALSE, + ** then this chip can only support INT32/UINT32 JMP instruction. + */ + gcvFEATURE_PARTLY_SUPPORT_INTEGER_BRANCH, + gcvFEATURE_FULLLY_SUPPORT_INTEGER_BRANCH, + gcvFEATURE_SUPPORT_INTEGER_ATTRIBUTE, + gcvFEATURE_SUPPORT_MOVAI, + gcvFEATURE_NEED_FIX_FOR_CL_X, + gcvFEATURE_NEED_FIX_FOR_CL_XE, + gcvFEATURE_HAS_OUTPUT_COUNT_FIX, + gcvFEATURE_VARYING_PACKING_LIMITATION, + gcvFEATURE_HIGHP_VARYING_SHIFT, + gcvFEATURE_BUG_FIXES2, + gcvFEATURE_64K_L2_CACHE, + gcvFEATURE_128BTILE, + gcvFEATURE_ADVANCED_BLEND_OPT, + gcvFEATURE_SNAPPAGE_CMD_FIX, + gcvFEATURE_L2_CACHE_FOR_2D_420, + gcvFEATURE_TILE_STATUS_2BITS, + gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS0, + gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS1, + gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS2, + gcvFEATURE_MEDIUM_PRECISION, + gcvFEATURE_FE20_BIT_INDEX, + gcvFEATURE_BUG_FIXES4, + gcvFEATURE_BUG_FIXES12, + gcvFEATURE_VMSAA, + gcvFEATURE_ROBUST_ATOMIC, + gcvFEATURE_32F_COLORMASK_FIX, + gcvFEATURE_NEW_GPIPE, + gcvFEATURE_RS_NEW_BASEADDR, + gcvFEATURE_TX_DXT, + gcvFEATURE_SH_FLAT_INTERPOLATION_DUAL16_FIX, + gcvFEATURE_EVIS, + gcvFEATURE_SH_SUPPORT_V4, + gcvFEATURE_SH_SUPPORT_ALPHA_KILL, + gcvFEATURE_PE_NO_ALPHA_TEST, + gcvFEATURE_SH_SNAP2PAGE_MAXPAGES_FIX, + gcvFEATURE_USC_FULLCACHE_FIX, + gcvFEATURE_PE_64bit_FENCE_FIX, + gcvFEATURE_BLT_8bit_256TILE_FC_FIX, + gcvFEATURE_PE_RGBA16I_FIX, + gcvFEATURE_BLT_64bpp_MASKED_CLEAR_FIX, + gcvFEATURE_SH_PSO_MSAA1x_FIX, + gcvFEATURE_USC_ATOMIC_FIX, + gcvFEATURE_INDEX_CONST_ON_B0, + gcvFEATURE_SH_NO_ONECONST_LIMIT, + gcvFEATURE_EVIS_NO_ABSDIFF, + gcvFEATURE_EVIS_NO_BITREPLACE, + gcvFEATURE_EVIS_NO_BOXFILTER, + gcvFEATURE_EVIS_NO_CORDIAC, + gcvFEATURE_EVIS_NO_DP32, + gcvFEATURE_EVIS_NO_FILTER, + gcvFEATURE_EVIS_NO_IADD, + gcvFEATURE_EVIS_NO_SELECTADD, + gcvFEATURE_EVIS_LERP_7OUTPUT, + gcvFEATURE_EVIS_ACCSQ_8OUTPUT, + gcvFEATURE_ROBUSTNESS, + gcvFEATURE_SECURITY, + gcvFEATURE_TX_YUV_ASSEMBLER_10BIT, + gcvFEATURE_USC_GOS_ADDR_FIX, + gcvFEATURE_SUPPORT_MSAA2X, + gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX, + gcvFEATURE_TX_INTEGER_COORDINATE, + gcvFEATURE_PSIO_SAMPLEMASK_IN_R0ZW_FIX, + gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG, + gcvFEATURE_SH_IMG_LDST_ON_TEMP, + gcvFEATURE_TX_INTEGER_COORDINATE_V2, + gcvFEATURE_COMPUTE_ONLY, + gcvFEATURE_SH_IMG_LDST_CLAMP, + gcvFEATURE_SH_ICACHE_ALLOC_COUNT_FIX, + gcvFEATURE_MSAA_OQ_FIX, + gcvFEATURE_PE_ENHANCEMENTS2, + gcvFEATURE_PSIO_MSAA_CL_FIX, + gcvFEATURE_FE_NEED_DUMMYDRAW, + gcvFEATURE_MULTI_CLUSTER, + gcvFEATURE_PSIO_INTERLOCK, + gcvFEATURE_BLIT_COMPRESS_DEST, + gcvFEATURE_SH_MULTI_WG_PACK, + gcvFEATURE_FE_ROBUST_FIX, + gcvFEATURE_TX_ASTC_MULTISLICE_FIX, + gcvFEATURE_PSIO_DUAL16_32bpc_FIX, + gcvFEATURE_LS_SUPPORT_PER_COMP_DEPENDENCY, + gcvFEATURE_COMPRESSION_DEC400, + gcvFEATURE_SH_TEXLD_U_FIX, + gcvFEATURE_TX_FLUSH_L1CACHE, + gcvFEATURE_USC_DEFER_FILL_FIX, + gcvFEATURE_MC_FCCACHE_BYTEMASK, + gcvFEATURE_SH_MULTI_WG_PACK_FIX, + gcvFEATURE_FE_PATCHLIST_FETCH_FIX, + gcvFEATURE_RA_CG_FIX, + gcvFEATURE_EVIS_VX2, + gcvFEATURE_SH_HALF_DEPENDENCY_FIX, + gcvFEATURE_FE_BASEINSTANCE, + gcvFEATURE_FE_COMPUREINDIRECT_SKIP_UNIFORM, + gcvFEATURE_SH_CLOCK_GATE_FIX, + gcvFEATURE_GPIPE_CLOCK_GATE_FIX, + gcvFEATURE_TP_ENGINE, + gcvFEATURE_TX_BORDER_CLAMP_FIX, + gcvFEATURE_SH_IMAGE_LD_LAST_PIXEL_FIX, + gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG2, + gcvFEATURE_MULTIGPU_SYNC_V3, + gcvFEATURE_PE_VMSAA_COVERAGE_CACHE_FIX, + gcvFEATURE_SECURITY_AHB, + gcvFEATURE_TX_LERP_LESS_BIT, + gcvFEATURE_SMALL_BATCH, + gcvFEATURE_SH_IDIV0_SWZL_EHS, + gcvFEATURE_SH_CMPLX, + gcvFEATURE_VIP_V7, + gcvFEATURE_SH_GM_ENDIAN, + gcvFEATURE_SH_GM_USC_UNALLOC, + gcvFEATURE_SH_END_OF_BB, + gcvFEATURE_ASYNC_BLIT, + gcvFEATURE_ASYNC_FE_FENCE_FIX, + gcvFEATURE_PSCS_THROTTLE, + gcvFEATURE_SEPARATE_LS, + gcvFEATURE_PA_VARYING_COMPONENT_TOGGLE_FIX, + gcvFEATURE_TX_MULTISAMPLER_FC_FIX, + gcvFEATURE_WIDELINE_TRIANGLE_EMU, + gcvFEATURE_FENCE, + gcvFEATURE_MCFE, + gcvFEATURE_NN_INTERLEAVE8, + gcvFEATURE_TP_REORDER, + gcvFEATURE_TP_RTNE, + gcvFEATURE_TP_LRN, + gcvFEATURE_TP_ROI_POOLING, + gcvFEATURE_TP_MAX_POOLING_STRIDE1, + gcvFEATURE_NN_BRICK_MODE, + gcvFEATURE_NN_BORDER_MODE, + gcvFEATURE_NN_FP16_ALU, + gcvFEATURE_NN_BF16_ALU, + gcvFEATURE_NN_INT16_ALU, + gcvFEATURE_NN_ZDP3, + gcvFEATURE_NN_ZDP6, + gcvFEATURE_PE_DEPTH_ONLY_OQFIX, + gcvFEATURE_TX_SNORM_SUPPORT, + gcvFEATURE_HWMANAGED_LS, + gcvFEATURE_SH_SCATTER_GATHER, + gcvFEATURE_NN_POWER_ISOLATION, + gcvFEATURE_SWTILING_PHASE1, + gcvFEATURE_SWTILING_PHASE2, + gcvFEATURE_SWTILING_PHASE3, + gcvFEATURE_TF_QUANTIZATION, + gcvFEATURE_NN_XYDP9, + gcvFEATURE_TP_SIMPLE_INT16, + gcvFEATURE_TP_REAL_INT16, + gcvFEATURE_NN_FIRST_PIXEL_POOLING, + gcvFEATURE_NN_STRIDE_SUPPORT, + gcvFEATURE_NN_XYDP6, + gcvFEATURE_NN_XYDP0, + gcvFEATURE_TP_REORDER_FIX, + gcvFEATURE_NN_CONV1x1_PERF_FIX, + gcvFEATURE_NN_CACHELINE_MODE_PERF_FIX, + gcvFEATURE_NN_PER3DTILE_BUBBLE_FIX, + gcvFEATURE_SH_IO_CG_FIX, + gcvFEATURE_USC_STAY_LRU, + gcvFEATURE_NN_NONZERO_MIRROR_BORDER, + gcvFEATURE_NN_COEF_DECOMPRESS_PERF2X, + gcvFEATURE_4BIT_INPUT, + gcvFEATURE_COEF_COMPRESSION_ENHANCEMENT, + gcvFEATURE_NN_ZDP3_NO_COMPRESS_FIX, + gcvFEATURE_NN_ASYNC_COPY_PERF_FIX, + gcvFEATURE_OCB_COUNTER, + gcvFEATURE_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX, + gcvFEATURE_NN_FULLCACHE_KERNEL_INTERLEAVE_FIX, + gcvFEATURE_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX, + gcvFEATURE_USC_BOTTLENECK_FIX, + gcvFEATURE_OCB_REMAP_PHYSICAL_ADDRESS, + gcvFEATURE_NN_SLICE_PADDING_TO_64BYTE_ALIGN, + gcvFEATURE_NN_DW_1x1_CONV_MERGE, + gcvFEATURE_TP_REORDER_LAYER_SUSPEND_FIX, + gcvFEATURE_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX, + gcvFEATURE_IMG_POP_PIPELINE_PAUSE_FIX, + gcvFEATURE_NN_SLOW_OUTPUT, + gcvFEATURE_NO_NARROW_POST_PROCESS_PIPE, + gcvFEATURE_TP_NN_PROBE, + gcvFEATURE_TP_23BITS_POST_MULTIPLIER, + gcvFEATURE_NN_TRANSPOSE, + gcvFEATURE_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX, + gcvFEATURE_TP_BFLOAT16, + gcvFEATURE_EVIS2_FLOP_RESET_FIX, + gcvFEATURE_USC_ASYNC_CP_RTN_FLOP_RESET_FIX, + gcvFEATURE_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX, + gcvFEATURE_NEGATIVE_POST_SHIFT_FIX, + gcvFEATURE_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX, + gcvFEATURE_NN_LEAKY_RELU, + gcvFEATURE_NN_PRELU, + gcvFEATURE_NN_NATIVE_STRIDE_TWO, + gcvFEATURE_NN_TENSOR_ADD, + + gcvFEATURE_IMAGE_LS_NO_FULLMASK_FIX, + gcvFEATURE_BLT_YUV_OUTPUT, + gcvFEATURE_PE_TILE_CACHE_FLUSH_FIX, + gcvFEATURE_SH_ROBUSTNESS_FIX, + gcvFEATURE_USC_ATOMIC_FIX2, + gcvFEATURE_MULTIVIEW_RENDER, + gcvFEATURE_FE_DRAW_DIRECT, + gcvFEATURE_TX_VKBORDER_MODE, + gcvFEATURE_TX_UNNORMALIZED_COORD, + gcvFEATURE_VG_IMAGE_16K, + gcvFEATURE_MULTICORE_CONFIG, + gcvFEATURE_PA_LINECLIP_FIX, + gcvFEATURE_NN_ENGINE, + gcvFEATURE_NN_ASYNC_COPY_MERGE_FIX, + gcvFEATURE_NN_CONVOUT_FIFO_DEPTH_FIX, + gcvFEATURE_NN_SMALLBATCH_PHASE1, + gcvFEATURE_TP_SMALLBATCH_PHASE1, + gcvFEATURE_VIP_SCALER, + gcvFEATURE_VIP_SCALER_4K, + gcvFEATURE_TX_8bit_UVFrac_ROUNDING_FIX, + gcvFEATURE_NN_REQ_SLOWARBITRATION_FIX, + gcvFEATUER_IMAGE_PARTIAL_CACHE, + gcvFEATURE_FULLCACHE_KERNELHEAD_FIX, + gcvFEATURE_NN_SINGLEPORT_ACCUMBUFFER, + gcvFEATURE_NN_SMALLBATCH, + gcvFEATURE_TP_SMALLBATCH, + gcvFEATURE_NN_ZDP_INIMAGE_SIZE_FIX, + gcvFEATURE_HI_REORDER_FIX, + gcvFEATURE_TP_COEF_COMPRESSION_ENHANCEMENT, + gcvFEATURE_NN_DEPTHWISE_SUPPORT, + gcvFEATURE_IMAGE_NOT_PACKED_IN_SRAM_FIX, + gcvFEATURE_IDLE_BEFORE_FLUSH_COMPLETE_FIX, + gcvFEATURE_NO_FLUSH_USC_FIX, + gcvFEATURE_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX, + gcvFEATURE_XY_OFFSET_LIMITATION_FIX, + gcvFEATURE_USC_INVALIDATE_CACHE_LINE_FIX, + gcvFEATURE_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX, + gcvFEATURE_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX, + gcvFEATURE_NN_PER_CHANNEL_QUANT, + gcvFEATURE_NN_NO_Z_LOCATION_OFFSET, + gcvFEATURE_NN_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX, + gcvFEATURE_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX, + gcvFEATURE_VIP_DEC400, + gcvFEATURE_MAX_POINTSIZE_CLAMP, + gcvFEATURE_2D_FAST_CLEAR, /* For tilestatus Fast Clear feature*/ + gcvFEATURE_NN_PER_CHANNEL_QUANT_ASYM, + gcvFEATURE_SMALL_BATCH_FLOPS_RESET_FIX, + gcvFEATURE_SMALL_BATCH_DISBLE_FIX, + gcvFEATURE_FORMAT_10BIT_CROSS_4K, + gcvFEATURE_ENDIAN_CONTROL, + gcvFEATURE_SH_VX2_FLOATING_MAD_FIX, + gcvFEATURE_PE_A8B8G8R8, /* For PE support A8B8G8R8 format feature*/ + gcvFEATURE_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX, + + /* AIGPU feature. */ + gcvFEATURE_AI_GPU, + gcvFEATURE_NN_FAST_FIRST_PIXEL_POOLING, + gcvFEATURE_NN_FLOAT_POST_MULT, + + gcvFEATURE_FORMAT_YUV_I010, /*support YUVI010 & P010_LSB format*/ + + gcFEATURE_BIT_NN_COMPRESSION_BYPASSS, + gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX, + gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN, + gcFEATURE_PREPROCESS_IMG_BUF_640BYTE_LIMIT, + + gcvFEATURE_VIP_HW_FINAL_RELEASE, + /* Insert features above this comment only. */ + gcvFEATURE_COUNT /* Not a feature. */ +} +gceFEATURE; + +/* Chip Power Status. */ +typedef enum _gceCHIPPOWERSTATE +{ + gcvPOWER_INVALID = -1, + + /* Global/base states. */ + gcvPOWER_ON = 0, + gcvPOWER_IDLE, + gcvPOWER_SUSPEND, + gcvPOWER_OFF, + + /* Power on but not global or broadcast. */ + gcvPOWER_ON_AUTO, + + /* Broadcast states. */ + gcvPOWER_FLAG_BROADCAST = 0x10, + gcvPOWER_IDLE_BROADCAST = gcvPOWER_IDLE | gcvPOWER_FLAG_BROADCAST, + gcvPOWER_SUSPEND_BROADCAST = gcvPOWER_SUSPEND | gcvPOWER_FLAG_BROADCAST, + gcvPOWER_OFF_BROADCAST = gcvPOWER_OFF | gcvPOWER_FLAG_BROADCAST, + + + /* Timeout states. */ + gcvPOWER_FLAG_TIMEOUT = 0x20, + gcvPOWER_IDLE_TIMEOUT = gcvPOWER_IDLE | gcvPOWER_FLAG_TIMEOUT, + gcvPOWER_SUSPEND_TIMEOUT = gcvPOWER_SUSPEND | gcvPOWER_FLAG_TIMEOUT, + gcvPOWER_OFF_TIMEOUT = gcvPOWER_OFF | gcvPOWER_FLAG_TIMEOUT, + +} +gceCHIPPOWERSTATE; + +/* CPU cache operations */ +typedef enum _gceCACHEOPERATION +{ + gcvCACHE_CLEAN = 0x01, /* Flush CPU cache to mem */ + gcvCACHE_INVALIDATE = 0x02, /* Invalidte CPU cache */ + gcvCACHE_FLUSH = gcvCACHE_CLEAN | gcvCACHE_INVALIDATE, /* Both flush & invalidate */ + gcvCACHE_MEMORY_BARRIER = 0x04 +} +gceCACHEOPERATION; + +/* Surface types. */ +typedef enum _gceSURF_TYPE +{ + gcvSURF_TYPE_UNKNOWN = 0, + gcvSURF_INDEX, + gcvSURF_VERTEX, + gcvSURF_TEXTURE, + gcvSURF_RENDER_TARGET, + gcvSURF_DEPTH, + gcvSURF_BITMAP, + gcvSURF_TILE_STATUS, + gcvSURF_IMAGE, + gcvSURF_MASK, + gcvSURF_SCISSOR, + gcvSURF_HIERARCHICAL_DEPTH, + gcvSURF_ICACHE, + gcvSURF_TXDESC, + gcvSURF_FENCE, + gcvSURF_TFBHEADER, + gcvSURF_NUM_TYPES, /* Make sure this is the last one! */ + + /* Combinations. */ + gcvSURF_NO_TILE_STATUS = 0x100, + gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node. + In Android, vidmem node is allocated by another process. */ + gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */ + gcvSURF_TILE_RLV_FENCE = 0x800, /* create texture fence as tile */ + gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */ + gcvSURF_LINEAR = 0x2000, + gcvSURF_CREATE_AS_TEXTURE = 0x4000, /* create it as a texture */ + gcvSURF_PROTECTED_CONTENT = 0x8000, /* create it as content protected */ + gcvSURF_CREATE_AS_DISPLAYBUFFER = 0x10000, /*create it as a display buffer surface */ + gcvSURF_CONTIGUOUS = 0x20000, /*create it as contiguous */ + gcvSURF_NO_COMPRESSION = 0x40000, /* Create it as no compression, valid on when it has tile status. */ + gcvSURF_DEC = 0x80000, /* Surface is DEC compressed */ + gcvSURF_NO_HZ = 0x100000, + gcvSURF_3D = 0x200000, /* It's 3d surface */ + gcvSURF_DMABUF_EXPORTABLE = 0x400000, /* master node can be exported as dma-buf fd */ + gcvSURF_CACHE_MODE_128 = 0x800000, + + gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE + | gcvSURF_LINEAR, + + gcvSURF_RENDER_TARGET_LINEAR = gcvSURF_RENDER_TARGET + | gcvSURF_LINEAR, + + gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET + | gcvSURF_NO_TILE_STATUS, + + gcvSURF_RENDER_TARGET_NO_COMPRESSION = gcvSURF_RENDER_TARGET + | gcvSURF_NO_COMPRESSION, + + gcvSURF_RENDER_TARGET_TS_DIRTY = gcvSURF_RENDER_TARGET + | gcvSURF_TILE_STATUS_DIRTY, + + gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH + | gcvSURF_NO_TILE_STATUS, + + gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH + | gcvSURF_TILE_STATUS_DIRTY, + + /* Supported surface types with no vidmem node. */ + gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP + | gcvSURF_NO_VIDMEM, + + gcvSURF_TEXTURE_NO_VIDMEM = gcvSURF_TEXTURE + | gcvSURF_NO_VIDMEM, + + /* Cacheable surface types with no vidmem node. */ + gcvSURF_CACHEABLE_BITMAP_NO_VIDMEM = gcvSURF_BITMAP_NO_VIDMEM + | gcvSURF_CACHEABLE, + + gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP + | gcvSURF_CACHEABLE, + + gcvSURF_TEXTURE_3D = gcvSURF_TEXTURE + | gcvSURF_3D +} +gceSURF_TYPE; + +/* Surface formats. +** Name rules is from MSB->LSB. +*/ +typedef enum _gceSURF_FORMAT +{ + /* Unknown format. */ + gcvSURF_UNKNOWN = 0, + + /* Palettized formats. */ + gcvSURF_INDEX1 = 100, + gcvSURF_INDEX4, + gcvSURF_INDEX8, +#if gcdVG_ONLY + gcvSURF_INDEX2, +#endif + + /* RGB formats. */ + gcvSURF_A2R2G2B2 = 200, + gcvSURF_R3G3B2, + gcvSURF_A8R3G3B2, + gcvSURF_X4R4G4B4, + gcvSURF_A4R4G4B4, + gcvSURF_R4G4B4A4, + gcvSURF_X1R5G5B5, + gcvSURF_A1R5G5B5, + gcvSURF_R5G5B5A1, + gcvSURF_R5G6B5, + gcvSURF_R8G8B8, + gcvSURF_X8R8G8B8, + gcvSURF_A8R8G8B8, + gcvSURF_R8G8B8A8, + gcvSURF_G8R8G8B8, + gcvSURF_R8G8B8G8, + gcvSURF_X2R10G10B10, + gcvSURF_A2R10G10B10, + gcvSURF_R10G10B10A2, + gcvSURF_X12R12G12B12, + gcvSURF_A12R12G12B12, + gcvSURF_X16R16G16B16, + gcvSURF_A16R16G16B16, + gcvSURF_A32R32G32B32, + gcvSURF_R8G8B8X8, + gcvSURF_R5G5B5X1, + gcvSURF_R4G4B4X4, + gcvSURF_X16R16G16B16_2_A8R8G8B8, + gcvSURF_A16R16G16B16_2_A8R8G8B8, + gcvSURF_A32R32G32B32_2_G32R32F, + gcvSURF_A32R32G32B32_4_A8R8G8B8, + /* BGR formats. */ + gcvSURF_A4B4G4R4 = 300, + gcvSURF_A1B5G5R5, + gcvSURF_B5G6R5, + gcvSURF_B8G8R8, + gcvSURF_B16G16R16, + gcvSURF_X8B8G8R8, + gcvSURF_A8B8G8R8, + gcvSURF_A2B10G10R10, + gcvSURF_X16B16G16R16, + gcvSURF_A16B16G16R16, + gcvSURF_B32G32R32, + gcvSURF_X32B32G32R32, + gcvSURF_A32B32G32R32, + gcvSURF_B4G4R4A4, + gcvSURF_B5G5R5A1, + gcvSURF_B8G8R8X8, + gcvSURF_B8G8R8A8, + gcvSURF_B10G10R10A2, + gcvSURF_X4B4G4R4, + gcvSURF_X1B5G5R5, + gcvSURF_B4G4R4X4, + gcvSURF_B5G5R5X1, + gcvSURF_X2B10G10R10, + gcvSURF_B8G8R8_SNORM, + gcvSURF_X8B8G8R8_SNORM, + gcvSURF_A8B8G8R8_SNORM, + gcvSURF_A8B12G12R12_2_A8R8G8B8, + + /* Compressed formats. */ + gcvSURF_DXT1 = 400, + gcvSURF_DXT2, + gcvSURF_DXT3, + gcvSURF_DXT4, + gcvSURF_DXT5, + gcvSURF_CXV8U8, + gcvSURF_ETC1, + gcvSURF_R11_EAC, + gcvSURF_SIGNED_R11_EAC, + gcvSURF_RG11_EAC, + gcvSURF_SIGNED_RG11_EAC, + gcvSURF_RGB8_ETC2, + gcvSURF_SRGB8_ETC2, + gcvSURF_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, + gcvSURF_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, + gcvSURF_RGBA8_ETC2_EAC, + gcvSURF_SRGB8_ALPHA8_ETC2_EAC, + + /* YUV formats. */ + gcvSURF_YUY2 = 500, + gcvSURF_UYVY, + gcvSURF_YV12, + gcvSURF_I420, + gcvSURF_NV12, + gcvSURF_NV21, + gcvSURF_NV16, + gcvSURF_NV61, + gcvSURF_YVYU, + gcvSURF_VYUY, + gcvSURF_AYUV, + gcvSURF_YUV420_10_ST, + gcvSURF_YUV420_TILE_ST, + gcvSURF_YUV420_TILE_10_ST, + gcvSURF_NV12_10BIT, + gcvSURF_NV21_10BIT, + gcvSURF_NV16_10BIT, + gcvSURF_NV61_10BIT, + gcvSURF_P010, + gcvSURF_P010_LSB, + gcvSURF_I010, +#if gcdVG_ONLY + gcvSURF_AYUY2, + gcvSURF_ANV12, + gcvSURF_ANV16, + gcvSURF_AUYVY, + gcvSURF_YV16, +#endif + + /* Depth formats. */ + gcvSURF_D16 = 600, + gcvSURF_D24S8, + gcvSURF_D32, + gcvSURF_D24X8, + gcvSURF_D32F, + gcvSURF_S8D32F, + gcvSURF_S8D32F_1_G32R32F, + gcvSURF_S8D32F_2_A8R8G8B8, + gcvSURF_D24S8_1_A8R8G8B8, + gcvSURF_S8, + gcvSURF_X24S8, + gcvSURF_X24S8_1_A8R8G8B8, + + /* Alpha formats. */ + gcvSURF_A4 = 700, + gcvSURF_A8, + gcvSURF_A12, + gcvSURF_A16, + gcvSURF_A32, + gcvSURF_A1, + + /* Luminance formats. */ + gcvSURF_L4 = 800, + gcvSURF_L8, + gcvSURF_L12, + gcvSURF_L16, + gcvSURF_L32, + gcvSURF_L1, + gcvSURF_L8_RAW, + + /* Alpha/Luminance formats. */ + gcvSURF_A4L4 = 900, + gcvSURF_A2L6, + gcvSURF_A8L8, + gcvSURF_A4L12, + gcvSURF_A12L12, + gcvSURF_A16L16, + + gcvSURF_A8L8_1_A8R8G8B8, + + gcvSURF_A8L8_RAW, + + /* Bump formats. */ + gcvSURF_L6V5U5 = 1000, + gcvSURF_V8U8, + gcvSURF_X8L8V8U8, + gcvSURF_Q8W8V8U8, + gcvSURF_A2W10V10U10, + gcvSURF_V16U16, + gcvSURF_Q16W16V16U16, + + /* R/RG/RA formats. */ + gcvSURF_R8 = 1100, + gcvSURF_X8R8, + gcvSURF_G8R8, + gcvSURF_X8G8R8, + gcvSURF_A8R8, + gcvSURF_R16, + gcvSURF_X16R16, + gcvSURF_G16R16, + gcvSURF_X16G16R16, + gcvSURF_A16R16, + gcvSURF_R32, + gcvSURF_X32R32, + gcvSURF_G32R32, + gcvSURF_X32G32R32, + gcvSURF_A32R32, + gcvSURF_RG16, + gcvSURF_R8_SNORM, + gcvSURF_G8R8_SNORM, + + gcvSURF_R8_1_X8R8G8B8, + gcvSURF_G8R8_1_X8R8G8B8, + + /* Floating point formats. */ + gcvSURF_R16F = 1200, + gcvSURF_X16R16F, + gcvSURF_G16R16F, + gcvSURF_X16G16R16F, + gcvSURF_B16G16R16F, + gcvSURF_X16B16G16R16F, + gcvSURF_A16B16G16R16F, + gcvSURF_R32F, + gcvSURF_X32R32F, + gcvSURF_G32R32F, + gcvSURF_X32G32R32F, + gcvSURF_B32G32R32F, + gcvSURF_X32B32G32R32F, + gcvSURF_A32B32G32R32F, + gcvSURF_A16F, + gcvSURF_L16F, + gcvSURF_A16L16F, + gcvSURF_A16R16F, + gcvSURF_A32F, + gcvSURF_L32F, + gcvSURF_A32L32F, + gcvSURF_A32R32F, + gcvSURF_E5B9G9R9, + gcvSURF_B10G11R11F, + + gcvSURF_X16B16G16R16F_2_A8R8G8B8, + gcvSURF_A16B16G16R16F_2_A8R8G8B8, + gcvSURF_A16B16G16R16F_2_G16R16F, + gcvSURF_G32R32F_2_A8R8G8B8, + gcvSURF_X32B32G32R32F_2_G32R32F, + gcvSURF_A32B32G32R32F_2_G32R32F, + gcvSURF_X32B32G32R32F_4_A8R8G8B8, + gcvSURF_A32B32G32R32F_4_A8R8G8B8, + + gcvSURF_R16F_1_A4R4G4B4, + gcvSURF_G16R16F_1_A8R8G8B8, + gcvSURF_B16G16R16F_2_A8R8G8B8, + + gcvSURF_R32F_1_A8R8G8B8, + gcvSURF_B32G32R32F_3_A8R8G8B8, + gcvSURF_B10G11R11F_1_A8R8G8B8, + + gcvSURF_A32F_1_R32F, + gcvSURF_L32F_1_R32F, + gcvSURF_A32L32F_1_G32R32F, + + + + /* sRGB format. */ + gcvSURF_SBGR8 = 1400, + gcvSURF_A8_SBGR8, + gcvSURF_X8_SBGR8, + gcvSURF_A8_SRGB8, + gcvSURF_X8_SRGB8, + + /* Integer formats. */ + gcvSURF_R8I = 1500, + gcvSURF_R8UI, + gcvSURF_R16I, + gcvSURF_R16UI, + gcvSURF_R32I, + gcvSURF_R32UI, + gcvSURF_X8R8I, + gcvSURF_G8R8I, + gcvSURF_X8R8UI, + gcvSURF_G8R8UI, + gcvSURF_X16R16I, + gcvSURF_G16R16I, + gcvSURF_X16R16UI, + gcvSURF_G16R16UI, + gcvSURF_X32R32I, + gcvSURF_G32R32I, + gcvSURF_X32R32UI, + gcvSURF_G32R32UI, + gcvSURF_X8G8R8I, + gcvSURF_B8G8R8I, + gcvSURF_X8G8R8UI, + gcvSURF_B8G8R8UI, + gcvSURF_X16G16R16I, + gcvSURF_B16G16R16I, + gcvSURF_X16G16R16UI, + gcvSURF_B16G16R16UI, + gcvSURF_X32G32R32I, + gcvSURF_B32G32R32I, + gcvSURF_X32G32R32UI, + gcvSURF_B32G32R32UI, + gcvSURF_X8B8G8R8I, + gcvSURF_A8B8G8R8I, + gcvSURF_X8B8G8R8UI, + gcvSURF_A8B8G8R8UI, + gcvSURF_X16B16G16R16I, + gcvSURF_A16B16G16R16I, + gcvSURF_X16B16G16R16UI, + gcvSURF_A16B16G16R16UI, + gcvSURF_X32B32G32R32I, + gcvSURF_A32B32G32R32I, + gcvSURF_X32B32G32R32UI, + gcvSURF_A32B32G32R32UI, + gcvSURF_A2B10G10R10UI, + gcvSURF_G32R32I_2_A8R8G8B8, + gcvSURF_G32R32I_1_G32R32F, + gcvSURF_G32R32UI_2_A8R8G8B8, + gcvSURF_G32R32UI_1_G32R32F, + gcvSURF_X16B16G16R16I_2_A8R8G8B8, + gcvSURF_X16B16G16R16I_1_G32R32F, + gcvSURF_A16B16G16R16I_2_A8R8G8B8, + gcvSURF_A16B16G16R16I_1_G32R32F, + gcvSURF_X16B16G16R16UI_2_A8R8G8B8, + gcvSURF_X16B16G16R16UI_1_G32R32F, + gcvSURF_A16B16G16R16UI_2_A8R8G8B8, + gcvSURF_A16B16G16R16UI_1_G32R32F, + gcvSURF_X32B32G32R32I_2_G32R32I, + gcvSURF_A32B32G32R32I_2_G32R32I, + gcvSURF_A32B32G32R32I_2_G32R32F, + gcvSURF_X32B32G32R32I_3_A8R8G8B8, + gcvSURF_A32B32G32R32I_4_A8R8G8B8, + gcvSURF_X32B32G32R32UI_2_G32R32UI, + gcvSURF_A32B32G32R32UI_2_G32R32UI, + gcvSURF_A32B32G32R32UI_2_G32R32F, + gcvSURF_X32B32G32R32UI_3_A8R8G8B8, + gcvSURF_A32B32G32R32UI_4_A8R8G8B8, + gcvSURF_A2B10G10R10UI_1_A8R8G8B8, + gcvSURF_A8B8G8R8I_1_A8R8G8B8, + gcvSURF_A8B8G8R8UI_1_A8R8G8B8, + gcvSURF_R8I_1_A4R4G4B4, + gcvSURF_R8UI_1_A4R4G4B4, + gcvSURF_R16I_1_A4R4G4B4, + gcvSURF_R16UI_1_A4R4G4B4, + gcvSURF_R32I_1_A8R8G8B8, + gcvSURF_R32UI_1_A8R8G8B8, + gcvSURF_X8R8I_1_A4R4G4B4, + gcvSURF_X8R8UI_1_A4R4G4B4, + gcvSURF_G8R8I_1_A4R4G4B4, + gcvSURF_G8R8UI_1_A4R4G4B4, + gcvSURF_X16R16I_1_A4R4G4B4, + gcvSURF_X16R16UI_1_A4R4G4B4, + gcvSURF_G16R16I_1_A8R8G8B8, + gcvSURF_G16R16UI_1_A8R8G8B8, + gcvSURF_X32R32I_1_A8R8G8B8, + gcvSURF_X32R32UI_1_A8R8G8B8, + gcvSURF_X8G8R8I_1_A4R4G4B4, + gcvSURF_X8G8R8UI_1_A4R4G4B4, + gcvSURF_B8G8R8I_1_A8R8G8B8, + gcvSURF_B8G8R8UI_1_A8R8G8B8, + gcvSURF_B16G16R16I_2_A8R8G8B8, + gcvSURF_B16G16R16I_1_G32R32F, + gcvSURF_B16G16R16UI_2_A8R8G8B8, + gcvSURF_B16G16R16UI_1_G32R32F, + gcvSURF_B32G32R32I_3_A8R8G8B8, + gcvSURF_B32G32R32UI_3_A8R8G8B8, + gcvSURF_A16B16G16R16_2_A8R8G8B8, + gcvSURF_R8G8B8_1_A8R8G8B8, + gcvSURF_G16R16_1_A8R8G8B8, + gcvSURF_A2B10G10R10_1_A8R8G8B8, + gcvSURF_A2R10G10B10_1_A8R8G8B8, + gcvSURF_A2W10V10U10_1_A8R8G8B8, + + /* ASTC formats. */ + gcvSURF_ASTC4x4 = 1600, + gcvSURF_ASTC5x4, + gcvSURF_ASTC5x5, + gcvSURF_ASTC6x5, + gcvSURF_ASTC6x6, + gcvSURF_ASTC8x5, + gcvSURF_ASTC8x6, + gcvSURF_ASTC8x8, + gcvSURF_ASTC10x5, + gcvSURF_ASTC10x6, + gcvSURF_ASTC10x8, + gcvSURF_ASTC10x10, + gcvSURF_ASTC12x10, + gcvSURF_ASTC12x12, + gcvSURF_ASTC4x4_SRGB, + gcvSURF_ASTC5x4_SRGB, + gcvSURF_ASTC5x5_SRGB, + gcvSURF_ASTC6x5_SRGB, + gcvSURF_ASTC6x6_SRGB, + gcvSURF_ASTC8x5_SRGB, + gcvSURF_ASTC8x6_SRGB, + gcvSURF_ASTC8x8_SRGB, + gcvSURF_ASTC10x5_SRGB, + gcvSURF_ASTC10x6_SRGB, + gcvSURF_ASTC10x8_SRGB, + gcvSURF_ASTC10x10_SRGB, + gcvSURF_ASTC12x10_SRGB, + gcvSURF_ASTC12x12_SRGB, + + /* Recompile format*/ + gcvSURF_L16_1_A4R4G4B4 = 1700, + gcvSURF_V16U16_1_A8R8G8B8, + gcvSURF_Q8W8V8U8_1_A8R8G8B8, + gcvSURF_X8L8V8U8_1_A8R8G8B8, + gcvSURF_R3G3B2_1_A8R8G8B8, + gcvSURF_A8R3G3B2_1_A8R8G8B8, + gcvSURF_W11V11U10_1_A8R8G8B8, + gcvSURF_Q16W16V16U16_2_A8R8G8B8, + gcvSURF_W11V11U10, + gcvSURF_V8U8_1_A4R4G4B4, + gcvSURF_A8B8G8R8_1_A8R8G8B8, + gcvSURF_A32R32G32B32_1_A8R8G8B8, + gcvSURF_X16B16G16R16F_1_A8R8G8B8, + gcvSURF_A16B16G16R16F_1_A8R8G8B8, + gcvSURF_G32R32F_1_A8R8G8B8, + gcvSURF_X32B32G32R32F_1_A8R8G8B8, + gcvSURF_A32B32G32R32F_1_A8R8G8B8, + gcvSURF_G32R32I_1_A8R8G8B8, + gcvSURF_G32R32UI_1_A8R8G8B8, + gcvSURF_A32B32G32R32I_1_A8R8G8B8, + gcvSURF_A32B32G32R32UI_1_A8R8G8B8, + gcvSURF_Q16W16V16U16_1_A8R8G8B8, + gcvSURF_A16B16G16R16_1_A8R8G8B8, + + /* Integer formats (2)) */ + gcvSURF_R10G10B10A2UI = 1800, + gcvSURF_R5G6B5UI, + gcvSURF_B5G6R5UI, + gcvSURF_R3G3B2UI, + gcvSURF_B2G3R3UI, + gcvSURF_R4G4B4A4UI, + gcvSURF_A4B4G4R4UI, + gcvSURF_R5G5B5A1UI, + gcvSURF_A1B5G5R5UI, + gcvSURF_R8G8B8A8UI, + + /* GL4 formats */ + gcvSURF_G8 = 1900, + gcvSURF_B8, + gcvSURF_G32F, + gcvSURF_B32F, +} +gceSURF_FORMAT; + +/* Pipes. */ +typedef enum _gcePIPE_SELECT +{ + gcvPIPE_INVALID = ~0, + gcvPIPE_3D = 0, + gcvPIPE_2D +} +gcePIPE_SELECT; + +/* Hardware type. */ +typedef enum _gceHARDWARE_TYPE +{ + gcvHARDWARE_INVALID, + gcvHARDWARE_3D2D, + gcvHARDWARE_3D, + gcvHARDWARE_2D, + gcvHARDWARE_VIP, + gcvHARDWARE_VG, + gcvHARDWARE_NUM_TYPES, +} +gceHARDWARE_TYPE; + +/* User signal command codes. */ +typedef enum _gceUSER_SIGNAL_COMMAND_CODES +{ + gcvUSER_SIGNAL_CREATE, + gcvUSER_SIGNAL_DESTROY, + gcvUSER_SIGNAL_SIGNAL, + gcvUSER_SIGNAL_WAIT, + gcvUSER_SIGNAL_MAP, + gcvUSER_SIGNAL_UNMAP, +} +gceUSER_SIGNAL_COMMAND_CODES; + +/* Shared buffer command codes. */ +typedef enum _gceSHBUF_COMMAND_CODES +{ + gcvSHBUF_CREATE, + gcvSHBUF_DESTROY, + gcvSHBUF_MAP, + gcvSHBUF_WRITE, + gcvSHBUF_READ, +} +gceSHBUF_COMMAND_CODES; + +/* Event locations. */ +typedef enum _gceKERNEL_WHERE +{ + gcvKERNEL_COMMAND, + gcvKERNEL_VERTEX, + gcvKERNEL_TRIANGLE, + gcvKERNEL_TEXTURE, + gcvKERNEL_PIXEL, + gcvKERNEL_BLT, +} +gceKERNEL_WHERE; + +typedef enum _gceBLOCK +{ + gcvBLOCK_COMMAND, + gcvBLOCK_TESSELLATOR, + gcvBLOCK_TESSELLATOR2, + gcvBLOCK_TESSELLATOR3, + gcvBLOCK_RASTER, + gcvBLOCK_VG, + gcvBLOCK_VG2, + gcvBLOCK_VG3, + gcvBLOCK_PIXEL, + + /* Number of defined blocks. */ + gcvBLOCK_COUNT +} +gceBLOCK; + +typedef enum _gceCORE_3D_MASK +{ + gcvCORE_3D_0_MASK = (1 << 0), + gcvCORE_3D_1_MASK = (1 << 1), + + gcvCORE_3D_ALL_MASK = (0xFFFF) +} +gceCORE_3D_MASK; + +typedef enum _gceCORE_3D_ID +{ + gcvCORE_3D_0_ID = 0, + gcvCORE_3D_1_ID = 1, + + gcvCORE_3D_ID_INVALID = ~0UL +} +gceCORE_3D_ID; + + +typedef enum _gceCHIP_FLAG +{ + gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX = 1 << 0, + gcvCHIP_FLAG_GC2000_R2 = 1 << 1, + gcvCHIP_AXI_BUS128_BITS = 1 << 2, +} +gceCHIP_FLAG; + +/* If different, choose render engine */ +#define PRIORITY_ENGINE(a, b) gcmMIN(a,b) + +typedef enum +{ + gcvENGINE_RENDER = 0, + gcvENGINE_BLT = 1, + gcvENGINE_GPU_ENGINE_COUNT = 2, + gcvENGINE_CPU = gcvENGINE_GPU_ENGINE_COUNT, + gcvENGINE_ALL_COUNT = gcvENGINE_CPU + 1, + gcvENGINE_INVALID = gcvENGINE_ALL_COUNT + 0x100 +} +gceENGINE; + +/* CORE enum. */ +typedef enum _gceCORE +{ + gcvCORE_MAJOR, + gcvCORE_3D1, + gcvCORE_3D2, + gcvCORE_3D3, + gcvCORE_3D4, + gcvCORE_3D5, + gcvCORE_3D6, + gcvCORE_3D7, + gcvCORE_3D_MAX = gcvCORE_3D7, + gcvCORE_2D, + gcvCORE_VG, +#if gcdDEC_ENABLE_AHB + gcvCORE_DEC, +#endif + gcvCORE_COUNT +} +gceCORE; + +#define gcdCHIP_COUNT gcvCORE_COUNT + +typedef enum _gceSECURE_MODE +{ + /* For cores without gcvFEATURE_SECURITY. */ + gcvSECURE_NONE, + + /* Use registers added in gcvFEATURE_SECURITY in normal driver, + ** In this mode, GPU always works under non secure mode and + ** should not touch secure buffer. It is used to test basic function. + */ + gcvSECURE_IN_NORMAL, + + /* Make use of gcvFEATURE_SECURITY in trust application. */ + gcvSECURE_IN_TA +} +gceSECURE_MODE; + +/* kernel driver compression option, as it's a system global option, +** it means kernel driver allows the options, NOT necessarily means it must be on. +*/ +typedef enum _gceCOMPRESSION_OPTION +{ + gcvCOMPRESSION_OPTION_NONE = 0x0, /* No any compression */ + gcvCOMPRESSION_OPTION_COLOR = 0x1, /* Compression for non-msaa color format */ + gcvCOMPRESSION_OPTION_DEPTH = 0x2, /* Compression for non-msaa depth format */ + gcvCOMPRESSION_OPTION_MSAA_COLOR = 0x4, /* Compression for msaa color */ + gcvCOMPRESSION_OPTION_MSAA_DEPTH = 0x8, /* Compression for msaa depth */ + + /* default compressio option */ + gcvCOMPRESSION_OPTION_DEFAULT = gcvCOMPRESSION_OPTION_DEPTH | + gcvCOMPRESSION_OPTION_COLOR | + gcvCOMPRESSION_OPTION_MSAA_COLOR | + gcvCOMPRESSION_OPTION_MSAA_DEPTH, +} +gceCOMPRESSION_OPTION; + +typedef enum _gceSRAM_INTERNAL +{ + gcvSRAM_INTERNAL0 = 0, + gcvSRAM_INTERNAL1, + + gcvSRAM_INTER_COUNT +} +gceSRAM_INTERNAL; + +typedef enum _gceSRAM_EXTERNAL +{ + gcvSRAM_EXTERNAL0 = 0, + gcvSRAM_EXTERNAL1, + + gcvSRAM_EXT_COUNT +} +gceSRAM_EXTERNAL; + +typedef enum _gceFLATMAP_FLAG +{ + gcvFLATMAP_DIRECT, + gcvFLATMAP_SHIFT, +} +gceFLATMAP_FLAG; + +/* Video memory alloation type. */ +typedef enum _gceVIDMEM_TYPE +{ + gcvVIDMEM_TYPE_GENERIC = gcvSURF_TYPE_UNKNOWN, + gcvVIDMEM_TYPE_INDEX_BUFFER = gcvSURF_INDEX, + gcvVIDMEM_TYPE_VERTEX_BUFFER = gcvSURF_VERTEX, + gcvVIDMEM_TYPE_TEXTURE = gcvSURF_TEXTURE, + gcvVIDMEM_TYPE_COLOR_BUFFER = gcvSURF_RENDER_TARGET, + gcvVIDMEM_TYPE_DEPTH_BUFFER = gcvSURF_DEPTH, + gcvVIDMEM_TYPE_BITMAP = gcvSURF_BITMAP, + gcvVIDMEM_TYPE_TILE_STATUS = gcvSURF_TILE_STATUS, + gcvVIDMEM_TYPE_IMAGE = gcvSURF_IMAGE, + gcvVIDMEM_TYPE_MASK = gcvSURF_MASK, + gcvVIDMEM_TYPE_SCISSOR = gcvSURF_SCISSOR, + gcvVIDMEM_TYPE_HZ_BUFFER = gcvSURF_HIERARCHICAL_DEPTH, + gcvVIDMEM_TYPE_ICACHE = gcvSURF_ICACHE, + gcvVIDMEM_TYPE_TXDESC = gcvSURF_TXDESC, + gcvVIDMEM_TYPE_FENCE = gcvSURF_FENCE, + gcvVIDMEM_TYPE_TFBHEADER = gcvSURF_TFBHEADER, + gcvVIDMEM_TYPE_COMMAND, + gcvVIDMEM_TYPE_COUNT +} +gceVIDMEM_TYPE; + +typedef enum _gceTASK +{ + gcvTASK_LINK, + gcvTASK_CLUSTER, + gcvTASK_INCREMENT, + gcvTASK_DECREMENT, + gcvTASK_SIGNAL, + gcvTASK_LOCKDOWN, + gcvTASK_UNLOCK_VIDEO_MEMORY, + gcvTASK_FREE_VIDEO_MEMORY, + gcvTASK_FREE_CONTIGUOUS_MEMORY, +} +gceTASK; + +/******************************************************************************\ +********************************* Status Codes ********************************* +\******************************************************************************/ + +typedef enum _gceSTATUS +{ + gcvSTATUS_OK = 0, + gcvSTATUS_FALSE = 0, + gcvSTATUS_TRUE = 1, + gcvSTATUS_NO_MORE_DATA = 2, + gcvSTATUS_CACHED = 3, + gcvSTATUS_MIPMAP_TOO_LARGE = 4, + gcvSTATUS_NAME_NOT_FOUND = 5, + gcvSTATUS_NOT_OUR_INTERRUPT = 6, + gcvSTATUS_MISMATCH = 7, + gcvSTATUS_MIPMAP_TOO_SMALL = 8, + gcvSTATUS_LARGER = 9, + gcvSTATUS_SMALLER = 10, + gcvSTATUS_CHIP_NOT_READY = 11, + gcvSTATUS_NEED_CONVERSION = 12, + gcvSTATUS_SKIP = 13, + gcvSTATUS_DATA_TOO_LARGE = 14, + gcvSTATUS_INVALID_CONFIG = 15, + gcvSTATUS_CHANGED = 16, + gcvSTATUS_NOT_SUPPORT_DITHER = 17, + gcvSTATUS_EXECUTED = 18, + gcvSTATUS_TERMINATE = 19, + + gcvSTATUS_INVALID_ARGUMENT = -1, + gcvSTATUS_INVALID_OBJECT = -2, + gcvSTATUS_OUT_OF_MEMORY = -3, + gcvSTATUS_MEMORY_LOCKED = -4, + gcvSTATUS_MEMORY_UNLOCKED = -5, + gcvSTATUS_HEAP_CORRUPTED = -6, + gcvSTATUS_GENERIC_IO = -7, + gcvSTATUS_INVALID_ADDRESS = -8, + gcvSTATUS_CONTEXT_LOSSED = -9, + gcvSTATUS_TOO_COMPLEX = -10, + gcvSTATUS_BUFFER_TOO_SMALL = -11, + gcvSTATUS_INTERFACE_ERROR = -12, + gcvSTATUS_NOT_SUPPORTED = -13, + gcvSTATUS_MORE_DATA = -14, + gcvSTATUS_TIMEOUT = -15, + gcvSTATUS_OUT_OF_RESOURCES = -16, + gcvSTATUS_INVALID_DATA = -17, + gcvSTATUS_INVALID_MIPMAP = -18, + gcvSTATUS_NOT_FOUND = -19, + gcvSTATUS_NOT_ALIGNED = -20, + gcvSTATUS_INVALID_REQUEST = -21, + gcvSTATUS_GPU_NOT_RESPONDING = -22, + gcvSTATUS_TIMER_OVERFLOW = -23, + gcvSTATUS_VERSION_MISMATCH = -24, + gcvSTATUS_LOCKED = -25, + gcvSTATUS_INTERRUPTED = -26, + gcvSTATUS_DEVICE = -27, + gcvSTATUS_NOT_MULTI_PIPE_ALIGNED = -28, + gcvSTATUS_OUT_OF_SAMPLER = -29, + + /* Linker errors. */ + gcvSTATUS_GLOBAL_TYPE_MISMATCH = -1000, + gcvSTATUS_TOO_MANY_ATTRIBUTES = -1001, + gcvSTATUS_TOO_MANY_UNIFORMS = -1002, + gcvSTATUS_TOO_MANY_VARYINGS = -1003, + gcvSTATUS_UNDECLARED_VARYING = -1004, + gcvSTATUS_VARYING_TYPE_MISMATCH = -1005, + gcvSTATUS_MISSING_MAIN = -1006, + gcvSTATUS_NAME_MISMATCH = -1007, + gcvSTATUS_INVALID_INDEX = -1008, + gcvSTATUS_UNIFORM_MISMATCH = -1009, + gcvSTATUS_UNSAT_LIB_SYMBOL = -1010, + gcvSTATUS_TOO_MANY_SHADERS = -1011, + gcvSTATUS_LINK_INVALID_SHADERS = -1012, + gcvSTATUS_CS_NO_WORKGROUP_SIZE = -1013, + gcvSTATUS_LINK_LIB_ERROR = -1014, + + gcvSTATUS_SHADER_VERSION_MISMATCH = -1015, + gcvSTATUS_TOO_MANY_INSTRUCTION = -1016, + gcvSTATUS_SSBO_MISMATCH = -1017, + gcvSTATUS_TOO_MANY_OUTPUT = -1018, + gcvSTATUS_TOO_MANY_INPUT = -1019, + gcvSTATUS_NOT_SUPPORT_CL = -1020, + gcvSTATUS_NOT_SUPPORT_INTEGER = -1021, + gcvSTATUS_UNIFORM_TYPE_MISMATCH = -1022, + + gcvSTATUS_MISSING_PRIMITIVE_TYPE = -1023, + gcvSTATUS_MISSING_OUTPUT_VERTEX_COUNT = -1024, + gcvSTATUS_NON_INVOCATION_ID_AS_INDEX = -1025, + gcvSTATUS_INPUT_ARRAY_SIZE_MISMATCH = -1026, + gcvSTATUS_OUTPUT_ARRAY_SIZE_MISMATCH = -1027, + gcvSTATUS_LOCATION_ALIASED = -1028, + gcvSTATUS_LOCATION_OVERLAP = -1029, + gcvSTATUS_LOCATION_NOTCONSISTENT = -1030, + + /* Compiler errors. */ + gcvSTATUS_COMPILER_FE_PREPROCESSOR_ERROR = -2000, + gcvSTATUS_COMPILER_FE_PARSER_ERROR = -2001, + + /* Recompilation Errors */ + gcvSTATUS_RECOMPILER_CONVERT_UNIMPLEMENTED = -3000, +} +gceSTATUS; + +/* The patch types. */ +enum _gceHAL_PATCH_TYPE +{ + gcvHAL_PATCH_VIDMEM_ADDRESS = 1, + gcvHAL_PATCH_MCFE_SEMAPHORE, + gcvHAL_PATCH_VIDMEM_TIMESTAMP, + + /* Must be the last one for counting. */ + gcvHAL_PATCH_TYPE_COUNT, +}; + +/******************************************************************************\ +********************************* Command Codes ******************************** +\******************************************************************************/ + +typedef enum _gceHAL_COMMAND_CODES +{ + /*************** Common ***************/ + + /* Chip info: count, type and so on. */ + gcvHAL_CHIP_INFO, + + /* HAL driver version. */ + gcvHAL_VERSION, + + /* Query chip id and options. */ + gcvHAL_QUERY_CHIP_IDENTITY, + gcvHAL_QUERY_CHIP_OPTION, + + /* Query chip frequency, used by CL. */ + gcvHAL_QUERY_CHIP_FREQUENCY, + + /* Query system pool video memory, used by CL. */ + gcvHAL_QUERY_VIDEO_MEMORY, + + /* Memory management. */ + gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY, + gcvHAL_WRAP_USER_MEMORY, + gcvHAL_RELEASE_VIDEO_MEMORY, + gcvHAL_LOCK_VIDEO_MEMORY, + gcvHAL_UNLOCK_VIDEO_MEMORY, + gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY, + gcvHAL_MAP_MEMORY, + gcvHAL_UNMAP_MEMORY, + + /* Cache operations. */ + gcvHAL_CACHE, + + /* HAL user attach and detach. */ + gcvHAL_ATTACH, + gcvHAL_DETACH, + + /* Event commit. */ + gcvHAL_EVENT_COMMIT, + + /* User command commit. */ + gcvHAL_COMMIT, + + /* Set hardware timeout, used by CL. */ + gcvHAL_SET_TIMEOUT, + + /* User signal operations. */ + gcvHAL_USER_SIGNAL, + + /* Event signal, commit stall. */ + gcvHAL_SIGNAL, + + /* Profile related. */ + gcvHAL_SET_PROFILE_SETTING, + gcvHAL_READ_PROFILER_REGISTER_SETTING, + gcvHAL_READ_ALL_PROFILE_REGISTERS_PART1, + gcvHAL_READ_ALL_PROFILE_REGISTERS_PART2, + + /* Query process database info when debug trace and proflie. */ + gcvHAL_DATABASE, + + /* Power managment enable/disable. */ + gcvHAL_CONFIG_POWER_MANAGEMENT, + + /* Debug/dump feature. */ + gcvHAL_DEBUG_DUMP, + + /*************** Common end ***************/ + + /*************** GPU only ***************/ + /* Register operations, 2D only. */ + gcvHAL_READ_REGISTER, + gcvHAL_WRITE_REGISTER, + gcvHAL_PROFILE_REGISTERS_2D, + + /* Get base address for old mmu. */ + gcvHAL_GET_BASE_ADDRESS, + + /* Read frame database, 3D only. */ + gcvHAL_GET_FRAME_INFO, + + /* Set video memory meta data. */ + gcvHAL_SET_VIDEO_MEMORY_METADATA, + + /* Query command buffer, VG only. */ + gcvHAL_QUERY_COMMAND_BUFFER, + + /* Reset time stamp. */ + gcvHAL_QUERY_RESET_TIME_STAMP, + + /* Create native fence. */ + gcvHAL_CREATE_NATIVE_FENCE, + + /* Wait native fence. */ + gcvHAL_WAIT_NATIVE_FENCE, + + /* Wait until GPU finishes access to a resource. */ + gcvHAL_WAIT_FENCE, + + /* Video memory node operations. */ + gcvHAL_EXPORT_VIDEO_MEMORY, + gcvHAL_NAME_VIDEO_MEMORY, + gcvHAL_IMPORT_VIDEO_MEMORY, + + /* Mutex Operation. */ + gcvHAL_DEVICE_MUTEX, + /*************** GPU only end ***************/ + + /*************** DEC only ***************/ + /* DEC200 test. */ + gcvHAL_DEC200_TEST, + + /* DEC300 related operations. */ + gcvHAL_DEC300_READ, + gcvHAL_DEC300_WRITE, + gcvHAL_DEC300_FLUSH, + gcvHAL_DEC300_FLUSH_WAIT, + /*************** DEC only end ***************/ + + /*************** OS specific ***************/ + + /* Android gralloc: shared buffer operations. */ + gcvHAL_SHBUF, + + /* Android gralloc: get graphic buffer fd. */ + gcvHAL_GET_GRAPHIC_BUFFER_FD, + + /* Vsimulator only. */ + gcvHAL_UPDATE_DEBUG_CALLBACK, + gcvHAL_CONFIG_CTX_FRAMEWORK, + + /* Non paged memory management backup compatibility, windows, qnx. */ + gcvHAL_ALLOCATE_NON_PAGED_MEMORY, + gcvHAL_FREE_NON_PAGED_MEMORY, + + /* Write user data, windows only. */ + gcvHAL_WRITE_DATA, + + /*************** OS specific end ***************/ + + /*************** Reserved ***************/ + gcvHAL_SET_IDLE, + gcvHAL_RESET, + + /* Command commit done, kernel event only. */ + gcvHAL_COMMIT_DONE, + + /* Get video memory file description. */ + gcvHAL_GET_VIDEO_MEMORY_FD, + + /* Get profile setting. */ + gcvHAL_GET_PROFILE_SETTING, + + /* Read/Write register ex. */ + gcvHAL_READ_REGISTER_EX, + gcvHAL_WRITE_REGISTER_EX, + + /* Power managment state. */ + gcvHAL_SET_POWER_MANAGEMENT_STATE, + gcvHAL_QUERY_POWER_MANAGEMENT_STATE, + + /* Set debug level. */ + gcvHAL_SET_DEBUG_LEVEL_ZONE, + + /* Dump info. */ + gcvHAL_DUMP_GPU_STATE, + gcvHAL_DUMP_EVENT, + gcvHAL_DUMP_GPU_PROFILE, + + /* Timer. */ + gcvHAL_TIMESTAMP, + + /* FSCALE_VAL. */ + gcvHAL_SET_FSCALE_VALUE, + gcvHAL_GET_FSCALE_VALUE, + + /* Destory MMU. */ + gcvHAL_DESTROY_MMU, + /*************** Reserved end ***************/ +} +gceHAL_COMMAND_CODES; + +/******************************************************************************\ +******************************** gcsOBJECT Object ******************************* +\******************************************************************************/ + +/* Macro to combine four characters into a Charcater Code. */ +#define gcmCC(c1, c2, c3, c4) \ +(\ + (char) (c1) \ + | \ + ((char) (c2) << 8) \ + | \ + ((char) (c3) << 16) \ + | \ + ((char) (c4) << 24) \ +) + +/* Type of objects. */ +typedef enum _gceOBJECT_TYPE +{ + gcvOBJ_UNKNOWN = 0, + gcvOBJ_2D = gcmCC('2','D',' ',' '), + gcvOBJ_3D = gcmCC('3','D',' ',' '), + gcvOBJ_ATTRIBUTE = gcmCC('A','T','T','R'), + gcvOBJ_BRUSHCACHE = gcmCC('B','R','U','$'), + gcvOBJ_BRUSHNODE = gcmCC('B','R','U','n'), + gcvOBJ_BRUSH = gcmCC('B','R','U','o'), + gcvOBJ_BUFFER = gcmCC('B','U','F','R'), + gcvOBJ_COMMAND = gcmCC('C','M','D',' '), + gcvOBJ_COMMANDBUFFER = gcmCC('C','M','D','B'), + gcvOBJ_CONTEXT = gcmCC('C','T','X','T'), + gcvOBJ_DEVICE = gcmCC('D','E','V',' '), + gcvOBJ_DUMP = gcmCC('D','U','M','P'), + gcvOBJ_EVENT = gcmCC('E','V','N','T'), + gcvOBJ_FUNCTION = gcmCC('F','U','N','C'), + gcvOBJ_HAL = gcmCC('H','A','L',' '), + gcvOBJ_HARDWARE = gcmCC('H','A','R','D'), + gcvOBJ_HEAP = gcmCC('H','E','A','P'), + gcvOBJ_INDEX = gcmCC('I','N','D','X'), + gcvOBJ_INTERRUPT = gcmCC('I','N','T','R'), + gcvOBJ_KERNEL = gcmCC('K','E','R','N'), + gcvOBJ_KERNEL_FUNCTION = gcmCC('K','F','C','N'), + gcvOBJ_MEMORYBUFFER = gcmCC('M','E','M','B'), + gcvOBJ_MMU = gcmCC('M','M','U',' '), + gcvOBJ_OS = gcmCC('O','S',' ',' '), + gcvOBJ_OUTPUT = gcmCC('O','U','T','P'), + gcvOBJ_PAINT = gcmCC('P','N','T',' '), + gcvOBJ_PATH = gcmCC('P','A','T','H'), + gcvOBJ_QUEUE = gcmCC('Q','U','E',' '), + gcvOBJ_SAMPLER = gcmCC('S','A','M','P'), + gcvOBJ_SHADER = gcmCC('S','H','D','R'), + gcvOBJ_VIR_SHADER = gcmCC('V','S','D','R'), + gcvOBJ_STREAM = gcmCC('S','T','R','M'), + gcvOBJ_SURF = gcmCC('S','U','R','F'), + gcvOBJ_TEXTURE = gcmCC('T','X','T','R'), + gcvOBJ_UNIFORM = gcmCC('U','N','I','F'), + gcvOBJ_VARIABLE = gcmCC('V','A','R','I'), + gcvOBJ_VERTEX = gcmCC('V','R','T','X'), + gcvOBJ_VIDMEM = gcmCC('V','M','E','M'), + gcvOBJ_VIDMEM_BLOCK = gcmCC('V','M','B','K'), + gcvOBJ_VG = gcmCC('V','G',' ',' '), + gcvOBJ_BUFOBJ = gcmCC('B','U','F','O'), + gcvOBJ_UNIFORM_BLOCK = gcmCC('U','B','L','K'), + gcvOBJ_CL = gcmCC('C','L',' ',' '), + gcvOBJ_STORAGE_BLOCK = gcmCC('S','B','L','K'), + gcvOBJ_IO_BLOCK = gcmCC('I','O','B','K'), +} +gceOBJECT_TYPE; + +/* Video memory pool type. */ +typedef enum _gcePOOL +{ + gcvPOOL_UNKNOWN = 0, + gcvPOOL_DEFAULT, + gcvPOOL_LOCAL, + gcvPOOL_LOCAL_INTERNAL, + gcvPOOL_LOCAL_EXTERNAL, + gcvPOOL_UNIFIED, + gcvPOOL_SYSTEM, + gcvPOOL_SRAM, + gcvPOOL_VIRTUAL, + gcvPOOL_USER, + gcvPOOL_INTERNAL_SRAM, + gcvPOOL_EXTERNAL_SRAM, + + gcvPOOL_NUMBER_OF_POOLS +} +gcePOOL; + +typedef enum _gceDUMP_BUFFER_TYPE +{ + gcvDUMP_BUFFER_USER_STRING, + gcvDUMP_BUFFER_VERIFY, + + gcvDUMP_BUFFER_MEMORY, + gcvDUMP_BUFFER_TEXTURE, + gcvDUMP_BUFFER_STREAM, + gcvDUMP_BUFFER_INDEX, + gcvDUMP_BUFFER_BUFOBJ, + gcvDUMP_BUFFER_IMAGE, + /* A type of command, but should not execute directly. */ + gcvDUMP_BUFFER_INSTRUCTION, + gcvDUMP_BUFFER_CONTEXT, + gcvDUMP_BUFFER_COMMAND, + gcvDUMP_BUFFER_ASYNC_COMMAND, + gcvDUMP_BUFFER_USER_TYPE_LAST = gcvDUMP_BUFFER_ASYNC_COMMAND, + + gcvDUMP_BUFFER_KERNEL_CONTEXT, + gcvDUMP_BUFFER_KERNEL_COMMAND, + + gcvDUMP_BUFFER_PHYSICAL_MEMORY, + + gcvDUMP_BUFFER_TYPE_COUNT, +} +gceDUMP_BUFFER_TYPE; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_enum_shared_h_ */ + + + diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_profiler.h b/drivers/amlogic/npu/inc/shared/gc_hal_profiler.h new file mode 100644 index 00000000000000..0664a7bbbb605d --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_profiler.h @@ -0,0 +1,239 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_profiler_shared_h_ +#define __gc_hal_profiler_shared_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* HW profile information. */ +typedef struct _gcsPROFILER_COUNTERS_PART1 +{ + gctUINT32 gpuTotalRead64BytesPerFrame; + gctUINT32 gpuTotalWrite64BytesPerFrame; + + /* FE */ + gctUINT32 fe_draw_count; + gctUINT32 fe_out_vertex_count; + gctUINT32 fe_cache_miss_count; + gctUINT32 fe_cache_lk_count; + gctUINT32 fe_stall_count; + gctUINT32 fe_starve_count; + gctUINT32 fe_process_count; + + /* PE */ + gctUINT32 pe0_pixel_count_killed_by_color_pipe; + gctUINT32 pe0_pixel_count_killed_by_depth_pipe; + gctUINT32 pe0_pixel_count_drawn_by_color_pipe; + gctUINT32 pe0_pixel_count_drawn_by_depth_pipe; + gctUINT32 pe1_pixel_count_killed_by_color_pipe; + gctUINT32 pe1_pixel_count_killed_by_depth_pipe; + gctUINT32 pe1_pixel_count_drawn_by_color_pipe; + gctUINT32 pe1_pixel_count_drawn_by_depth_pipe; + + /* SH */ + gctUINT32 shader_cycle_count; + gctUINT32 vs_shader_cycle_count; + gctUINT32 ps_shader_cycle_count; + gctUINT32 ps_inst_counter; + gctUINT32 ps_rendered_pixel_counter; + gctUINT32 vs_inst_counter; + gctUINT32 vs_rendered_vertice_counter; + gctUINT32 vs_branch_inst_counter; + gctUINT32 vs_texld_inst_counter; + gctUINT32 ps_branch_inst_counter; + gctUINT32 ps_texld_inst_counter; + gctUINT32 vs_non_idle_starve_count; + gctUINT32 vs_starve_count; + gctUINT32 vs_stall_count; + gctUINT32 vs_process_count; + gctUINT32 ps_non_idle_starve_count; + gctUINT32 ps_starve_count; + gctUINT32 ps_stall_count; + gctUINT32 ps_process_count; + + /* PA */ + gctUINT32 pa_input_vtx_counter; + gctUINT32 pa_input_prim_counter; + gctUINT32 pa_output_prim_counter; + gctUINT32 pa_depth_clipped_counter; + gctUINT32 pa_trivial_rejected_counter; + gctUINT32 pa_culled_prim_counter; + gctUINT32 pa_droped_prim_counter; + gctUINT32 pa_frustum_clipped_prim_counter; + gctUINT32 pa_frustum_clipdroped_prim_counter; + gctUINT32 pa_non_idle_starve_count; + gctUINT32 pa_starve_count; + gctUINT32 pa_stall_count; + gctUINT32 pa_process_count; + + /* SE */ + gctUINT32 se_culled_triangle_count; + gctUINT32 se_culled_lines_count; + gctUINT32 se_clipped_triangle_count; + gctUINT32 se_clipped_line_count; + gctUINT32 se_starve_count; + gctUINT32 se_stall_count; + gctUINT32 se_receive_triangle_count; + gctUINT32 se_send_triangle_count; + gctUINT32 se_receive_lines_count; + gctUINT32 se_send_lines_count; + gctUINT32 se_process_count; + gctUINT32 se_trivial_rejected_line_count; + gctUINT32 se_non_idle_starve_count; + + /* RA */ + gctUINT32 ra_input_prim_count; + gctUINT32 ra_total_quad_count; + gctUINT32 ra_valid_quad_count_after_early_z; + gctUINT32 ra_valid_pixel_count_to_render; + gctUINT32 ra_output_valid_quad_count; + gctUINT32 ra_output_valid_pixel_count; + gctUINT32 ra_pipe_cache_miss_counter; + gctUINT32 ra_pipe_hz_cache_miss_counter; + gctUINT32 ra_prefetch_cache_miss_counter; + gctUINT32 ra_prefetch_hz_cache_miss_counter; + gctUINT32 ra_eez_culled_counter; + gctUINT32 ra_non_idle_starve_count; + gctUINT32 ra_starve_count; + gctUINT32 ra_stall_count; + gctUINT32 ra_process_count; + + /* TX */ + gctUINT32 tx_total_bilinear_requests; + gctUINT32 tx_total_trilinear_requests; + gctUINT32 tx_total_discarded_texture_requests; + gctUINT32 tx_total_texture_requests; + gctUINT32 tx_mc0_miss_count; + gctUINT32 tx_mc0_request_byte_count; + gctUINT32 tx_mc1_miss_count; + gctUINT32 tx_mc1_request_byte_count; + gctUINT32 tx_non_idle_starve_count; + gctUINT32 tx_starve_count; + gctUINT32 tx_stall_count; + gctUINT32 tx_process_count; +} +gcsPROFILER_COUNTERS_PART1; + +typedef struct _gcsPROFILER_COUNTERS_PART2 +{ + /* MCC */ + gctUINT32 mcc_total_read_req_8B_from_colorpipe; + gctUINT32 mcc_total_read_req_8B_sentout_from_colorpipe; + gctUINT32 mcc_total_write_req_8B_from_colorpipe; + gctUINT32 mcc_total_read_req_sentout_from_colorpipe; + gctUINT32 mcc_total_write_req_from_colorpipe; + gctUINT32 mcc_total_read_req_8B_from_depthpipe; + gctUINT32 mcc_total_read_req_8B_sentout_from_depthpipe; + gctUINT32 mcc_total_write_req_8B_from_depthpipe; + gctUINT32 mcc_total_read_req_sentout_from_depthpipe; + gctUINT32 mcc_total_write_req_from_depthpipe; + gctUINT32 mcc_total_read_req_8B_from_others; + gctUINT32 mcc_total_write_req_8B_from_others; + gctUINT32 mcc_total_read_req_from_others; + gctUINT32 mcc_total_write_req_from_others; + gctUINT32 mcc_axi_total_latency; + gctUINT32 mcc_axi_sample_count; + gctUINT32 mcc_axi_max_latency; + gctUINT32 mcc_axi_min_latency; + gctUINT32 mc_fe_read_bandwidth; + gctUINT32 mc_mmu_read_bandwidth; + gctUINT32 mc_blt_read_bandwidth; + gctUINT32 mc_sh0_read_bandwidth; + gctUINT32 mc_sh1_read_bandwidth; + gctUINT32 mc_pe_write_bandwidth; + gctUINT32 mc_blt_write_bandwidth; + gctUINT32 mc_sh0_write_bandwidth; + gctUINT32 mc_sh1_write_bandwidth; + + /* MCZ */ + gctUINT32 mcz_total_read_req_8B_from_colorpipe; + gctUINT32 mcz_total_read_req_8B_sentout_from_colorpipe; + gctUINT32 mcz_total_write_req_8B_from_colorpipe; + gctUINT32 mcz_total_read_req_sentout_from_colorpipe; + gctUINT32 mcz_total_write_req_from_colorpipe; + gctUINT32 mcz_total_read_req_8B_from_depthpipe; + gctUINT32 mcz_total_read_req_8B_sentout_from_depthpipe; + gctUINT32 mcz_total_write_req_8B_from_depthpipe; + gctUINT32 mcz_total_read_req_sentout_from_depthpipe; + gctUINT32 mcz_total_write_req_from_depthpipe; + gctUINT32 mcz_total_read_req_8B_from_others; + gctUINT32 mcz_total_write_req_8B_from_others; + gctUINT32 mcz_total_read_req_from_others; + gctUINT32 mcz_total_write_req_from_others; + gctUINT32 mcz_axi_total_latency; + gctUINT32 mcz_axi_sample_count; + gctUINT32 mcz_axi_max_latency; + gctUINT32 mcz_axi_min_latency; + + /* HI */ + gctUINT32 hi0_total_read_8B_count; + gctUINT32 hi0_total_write_8B_count; + gctUINT32 hi0_total_read_request_count; + gctUINT32 hi0_total_write_request_count; + gctUINT32 hi0_axi_cycles_read_request_stalled; + gctUINT32 hi0_axi_cycles_write_request_stalled; + gctUINT32 hi0_axi_cycles_write_data_stalled; + gctUINT32 hi1_total_read_8B_count; + gctUINT32 hi1_total_write_8B_count; + gctUINT32 hi1_total_read_request_count; + gctUINT32 hi1_total_write_request_count; + gctUINT32 hi1_axi_cycles_read_request_stalled; + gctUINT32 hi1_axi_cycles_write_request_stalled; + gctUINT32 hi1_axi_cycles_write_data_stalled; + gctUINT32 hi_total_cycle_count; + gctUINT32 hi_total_idle_cycle_count; + gctUINT32 hi_total_read_8B_count; + gctUINT32 hi_total_write_8B_count; + gctUINT32 hi_total_readOCB_16B_count; + gctUINT32 hi_total_writeOCB_16B_count; + + /* L2 */ + gctUINT32 l2_total_axi0_read_request_count; + gctUINT32 l2_total_axi1_read_request_count; + gctUINT32 l2_total_axi0_write_request_count; + gctUINT32 l2_total_axi1_write_request_count; + gctUINT32 l2_total_read_transactions_request_by_axi0; + gctUINT32 l2_total_read_transactions_request_by_axi1; + gctUINT32 l2_total_write_transactions_request_by_axi0; + gctUINT32 l2_total_write_transactions_request_by_axi1; + gctUINT32 l2_axi0_minmax_latency; + gctUINT32 l2_axi0_min_latency; + gctUINT32 l2_axi0_max_latency; + gctUINT32 l2_axi0_total_latency; + gctUINT32 l2_axi0_total_request_count; + gctUINT32 l2_axi1_minmax_latency; + gctUINT32 l2_axi1_min_latency; + gctUINT32 l2_axi1_max_latency; + gctUINT32 l2_axi1_total_latency; + gctUINT32 l2_axi1_total_request_count; +} +gcsPROFILER_COUNTERS_PART2; + +typedef struct _gcsPROFILER_COUNTERS +{ + gcsPROFILER_COUNTERS_PART1 counters_part1; + gcsPROFILER_COUNTERS_PART2 counters_part2; +} +gcsPROFILER_COUNTERS; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_profiler_shared_h_ */ + + + diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_types.h b/drivers/amlogic/npu/inc/shared/gc_hal_types.h new file mode 100644 index 00000000000000..e096f7683242c8 --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_types.h @@ -0,0 +1,945 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_types_h_ +#define __gc_hal_types_h_ + +#include "gc_hal_version.h" +#include "gc_hal_options.h" + +#if !defined(VIV_KMD) +#if defined(__KERNEL__) +#include "linux/version.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + typedef unsigned long uintptr_t; +# endif +# include "linux/types.h" +#elif defined(UNDER_CE) +#include +typedef signed char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef long long int64_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +#elif defined(_MSC_VER) && (_MSC_VER <= 1500) +#include +#include "vadefs.h" +#elif defined(__QNXNTO__) +#define _QNX_SOURCE +#include +#include +#else +#include +#include +#include +#endif +#endif + +#ifdef _WIN32 +#pragma warning(disable:4127) /* Conditional expression is constant (do { } while(0)). */ +#pragma warning(disable:4100) /* Unreferenced formal parameter. */ +#pragma warning(disable:4204) /* Non-constant aggregate initializer (C99). */ +#pragma warning(disable:4131) /* Uses old-style declarator. */ +#pragma warning(disable:4206) /* Translation unit is empty. */ +#pragma warning(disable:4214) /* Nonstandard extension used : + ** bit field types other than int. */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************\ +** Platform macros. +*/ + +#if defined(__GNUC__) +# define gcdHAS_ELLIPSIS 1 /* GCC always has it. */ +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define gcdHAS_ELLIPSIS 1 /* C99 has it. */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1500) +# define gcdHAS_ELLIPSIS 1 /* MSVC 2007+ has it. */ +#elif defined(UNDER_CE) +#if UNDER_CE >= 600 +# define gcdHAS_ELLIPSIS 1 +# else +# define gcdHAS_ELLIPSIS 0 +# endif +#else +# error "gcdHAS_ELLIPSIS: Platform could not be determined" +#endif + +/******************************************************************************\ +************************************ Keyword *********************************** +\******************************************************************************/ + +#if defined(ANDROID) && defined(__BIONIC_FORTIFY) +#if defined(__clang__) +# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline)) +# else +# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline)) __attribute__ ((artificial)) +# endif +#elif ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__APPLE__)) +# define gcmINLINE inline /* C99 keyword. */ +#elif defined(__GNUC__) +# define gcmINLINE __inline__ /* GNU keyword. */ +#elif defined(_MSC_VER) || defined(UNDER_CE) +# define gcmINLINE __inline /* Internal keyword. */ +#else +# error "gcmINLINE: Platform could not be determined" +#endif + + +/* Possible debug flags. */ +#define gcdDEBUG_NONE 0 +#define gcdDEBUG_ALL (1 << 0) +#define gcdDEBUG_FATAL (1 << 1) +#define gcdDEBUG_TRACE (1 << 2) +#define gcdDEBUG_BREAK (1 << 3) +#define gcdDEBUG_ASSERT (1 << 4) +#define gcdDEBUG_CODE (1 << 5) +#define gcdDEBUG_STACK (1 << 6) + +#define gcmIS_DEBUG(flag) (gcdDEBUG & (flag | gcdDEBUG_ALL) ) + +#ifndef gcdDEBUG +#if (defined(DBG) && DBG) || defined(DEBUG) || defined(_DEBUG) +# define gcdDEBUG gcdDEBUG_ALL +# else +# define gcdDEBUG gcdDEBUG_NONE +# endif +#endif + +#ifdef _USRDLL +#ifdef _MSC_VER +#ifdef HAL_EXPORTS +# define HALAPI __declspec(dllexport) +# else +# define HALAPI __declspec(dllimport) +# endif +# define HALDECL __cdecl +# else +#ifdef HAL_EXPORTS +# define HALAPI +# else +# define HALAPI extern +# endif +# endif +#else +# define HALAPI +# define HALDECL +#endif + +/******************************************************************************\ +********************************** Common Types ******************************** +\******************************************************************************/ + +#define gcvFALSE 0 +#define gcvTRUE 1 + +#define gcvINFINITE ((gctUINT32) ~0U) + +#define gcvINVALID_HANDLE ((gctHANDLE) ~0U) + +typedef int gctBOOL; +typedef gctBOOL * gctBOOL_PTR; + +typedef int gctINT; +typedef signed char gctINT8; +typedef signed short gctINT16; +typedef signed int gctINT32; +typedef signed long long gctINT64; + +typedef gctINT * gctINT_PTR; +typedef gctINT8 * gctINT8_PTR; +typedef gctINT16 * gctINT16_PTR; +typedef gctINT32 * gctINT32_PTR; +typedef gctINT64 * gctINT64_PTR; + +typedef unsigned int gctUINT; +typedef unsigned char gctUINT8; +typedef unsigned short gctUINT16; +typedef unsigned int gctUINT32; +typedef unsigned long long gctUINT64; +typedef uintptr_t gctUINTPTR_T; +typedef ptrdiff_t gctPTRDIFF_T; + +typedef gctUINT * gctUINT_PTR; +typedef gctUINT8 * gctUINT8_PTR; +typedef gctUINT16 * gctUINT16_PTR; +typedef gctUINT32 * gctUINT32_PTR; +typedef gctUINT64 * gctUINT64_PTR; + +typedef size_t gctSIZE_T; +typedef gctSIZE_T * gctSIZE_T_PTR; +typedef gctUINT32 gctTRACE; + +#ifdef __cplusplus +# define gcvNULL 0 +#else +# define gcvNULL ((void *) 0) +#endif + +#define gcvMAXINT8 0x7f +#define gcvMININT8 0x80 +#define gcvMAXINT16 0x7fff +#define gcvMININT16 0x8000 +#define gcvMAXINT32 0x7fffffff +#define gcvMININT32 0x80000000 +#define gcvMAXINT64 0x7fffffffffffffff +#define gcvMININT64 0x8000000000000000 +#define gcvMAXUINT8 0xff +#define gcvMINUINT8 0x0 +#define gcvMAXUINT16 0xffff +#define gcvMINUINT16 0x0 +#define gcvMAXUINT32 0xffffffff +#define gcvMINUINT32 0x0 +#define gcvMAXUINT64 0xffffffffffffffff +#define gcvMINUINT64 0x0 +#define gcvMAXUINTPTR_T (~(gctUINTPTR_T)0) +#define gcvMAXSIZE_T ((gctSIZE_T)(-1)) + +typedef float gctFLOAT; +typedef signed int gctFIXED_POINT; +typedef float * gctFLOAT_PTR; + +typedef void * gctPHYS_ADDR; +typedef void * gctHANDLE; +typedef void * gctFILE; +typedef void * gctSIGNAL; +typedef void * gctWINDOW; +typedef void * gctIMAGE; +typedef void * gctSHBUF; + +typedef void * gctSEMAPHORE; + +typedef void * gctPOINTER; +typedef const void * gctCONST_POINTER; + +typedef char gctCHAR; +typedef signed char gctSIGNED_CHAR; +typedef unsigned char gctUNSIGNED_CHAR; +typedef char * gctSTRING; +typedef const char * gctCONST_STRING; + +typedef gctUINT64 gctPHYS_ADDR_T; + +typedef struct _gcsCOUNT_STRING +{ + gctSIZE_T Length; + gctCONST_STRING String; +} +gcsCOUNT_STRING; + +typedef union _gcuFLOAT_UINT32 +{ + gctFLOAT f; + gctUINT32 u; +} +gcuFLOAT_UINT32; + +/* Fixed point constants. */ +#define gcvZERO_X ((gctFIXED_POINT) 0x00000000) +#define gcvHALF_X ((gctFIXED_POINT) 0x00008000) +#define gcvONE_X ((gctFIXED_POINT) 0x00010000) +#define gcvNEGONE_X ((gctFIXED_POINT) 0xFFFF0000) +#define gcvTWO_X ((gctFIXED_POINT) 0x00020000) + + + +#define gcmFIXEDCLAMP_NEG1_TO_1(_x) \ + (((_x) < gcvNEGONE_X) \ + ? gcvNEGONE_X \ + : (((_x) > gcvONE_X) \ + ? gcvONE_X \ + : (_x))) + +#define gcmFLOATCLAMP_NEG1_TO_1(_f) \ + (((_f) < -1.0f) \ + ? -1.0f \ + : (((_f) > 1.0f) \ + ? 1.0f \ + : (_f))) + + +#define gcmFIXEDCLAMP_0_TO_1(_x) \ + (((_x) < 0) \ + ? 0 \ + : (((_x) > gcvONE_X) \ + ? gcvONE_X \ + : (_x))) + +#define gcmFLOATCLAMP_0_TO_1(_f) \ + (((_f) < 0.0f) \ + ? 0.0f \ + : (((_f) > 1.0f) \ + ? 1.0f \ + : (_f))) + + +/******************************************************************************\ +******************************* Multicast Values ******************************* +\******************************************************************************/ + +/* Value unions. */ +typedef union _gcuVALUE +{ + gctUINT uintValue; + gctFIXED_POINT fixedValue; + gctFLOAT floatValue; + gctINT intValue; +} +gcuVALUE; + + + + +/* Stringizing macro. */ +#define gcmSTRING(Value) #Value + +/******************************************************************************\ +******************************* Fixed Point Math ******************************* +\******************************************************************************/ + +#define gcmXMultiply(x1, x2) gcoMATH_MultiplyFixed(x1, x2) +#define gcmXDivide(x1, x2) gcoMATH_DivideFixed(x1, x2) +#define gcmXMultiplyDivide(x1, x2, x3) gcoMATH_MultiplyDivideFixed(x1, x2, x3) + +/* 2D Engine profile. */ +typedef struct _gcs2D_PROFILE +{ + /* Cycle count. + 32bit counter incremented every 2D clock cycle. + Wraps back to 0 when the counter overflows. + */ + gctUINT32 cycleCount; + + /* Pixels rendered by the 2D engine. + Resets to 0 every time it is read. */ + gctUINT32 pixelsRendered; +} +gcs2D_PROFILE; + +#define gcmPRINTABLE(c) ((((c) >= ' ') && ((c) <= '}')) ? ((c) != '%' ? (c) : ' ') : ' ') + +#define gcmCC_PRINT(cc) \ + gcmPRINTABLE((char) ((cc) & 0xFF)), \ + gcmPRINTABLE((char) (((cc) >> 8) & 0xFF)), \ + gcmPRINTABLE((char) (((cc) >> 16) & 0xFF)), \ + gcmPRINTABLE((char) (((cc) >> 24) & 0xFF)) + +/******************************************************************************\ +****************************** Function Parameters ***************************** +\******************************************************************************/ + +#define IN +#define OUT +#define INOUT +#define OPTIONAL + +/******************************************************************************\ +********************************* Status Macros ******************************** +\******************************************************************************/ + +#define gcmIS_ERROR(status) (status < 0) +#define gcmNO_ERROR(status) (status >= 0) +#define gcmIS_SUCCESS(status) (status == gcvSTATUS_OK) + +/******************************************************************************\ +********************************* Field Macros ********************************* +\******************************************************************************/ + +#define __gcmSTART(reg_field) \ + (0 ? reg_field) + +#define __gcmEND(reg_field) \ + (1 ? reg_field) + +#define __gcmGETSIZE(reg_field) \ + (__gcmEND(reg_field) - __gcmSTART(reg_field) + 1) + +#define __gcmALIGN(data, reg_field) \ + (((gctUINT32) (data)) << __gcmSTART(reg_field)) + +#define __gcmMASK(reg_field) \ + ((gctUINT32) ((__gcmGETSIZE(reg_field) == 32) \ + ? ~0U \ + : (~(~0U << __gcmGETSIZE(reg_field))))) + +/******************************************************************************* +** +** gcmFIELDMASK +** +** Get aligned field mask. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +*/ +#define gcmFIELDMASK(reg, field) \ +(\ + __gcmALIGN(__gcmMASK(reg##_##field), reg##_##field) \ +) + +/******************************************************************************* +** +** gcmGETFIELD +** +** Extract the value of a field from specified data. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +*/ +#define gcmGETFIELD(data, reg, field) \ +(\ + ((((gctUINT32) (data)) >> __gcmSTART(reg##_##field)) \ + & __gcmMASK(reg##_##field)) \ +) + +/******************************************************************************* +** +** gcmSETFIELD +** +** Set the value of a field within specified data. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +** value Value for field. +*/ +#define gcmSETFIELD(data, reg, field, value) \ +(\ + (((gctUINT32) (data)) \ + & ~__gcmALIGN(__gcmMASK(reg##_##field), reg##_##field)) \ + | __gcmALIGN((gctUINT32) (value) \ + & __gcmMASK(reg##_##field), reg##_##field) \ +) + +/******************************************************************************* +** +** gcmSETFIELDVALUE +** +** Set the value of a field within specified data with a +** predefined value. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +** value Name of the value within the field. +*/ +#define gcmSETFIELDVALUE(data, reg, field, value) \ +(\ + (((gctUINT32) (data)) \ + & ~__gcmALIGN(__gcmMASK(reg##_##field), reg##_##field)) \ + | __gcmALIGN(reg##_##field##_##value \ + & __gcmMASK(reg##_##field), reg##_##field) \ +) + +/******************************************************************************* +** +** gcmGETMASKEDFIELDMASK +** +** Determine field mask of a masked field. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +*/ +#define gcmGETMASKEDFIELDMASK(reg, field) \ +(\ + gcmSETFIELD(0, reg, field, ~0U) | \ + gcmSETFIELD(0, reg, MASK_ ## field, ~0U) \ +) + +/******************************************************************************* +** +** gcmSETMASKEDFIELD +** +** Set the value of a masked field with specified data. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +** value Value for field. +*/ +#define gcmSETMASKEDFIELD(reg, field, value) \ +(\ + gcmSETFIELD (~0U, reg, field, value) & \ + gcmSETFIELDVALUE(~0U, reg, MASK_ ## field, ENABLED) \ +) + +/******************************************************************************* +** +** gcmSETMASKEDFIELDVALUE +** +** Set the value of a masked field with specified data. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +** value Value for field. +*/ +#define gcmSETMASKEDFIELDVALUE(reg, field, value) \ +(\ + gcmSETFIELDVALUE(~0U, reg, field, value) & \ + gcmSETFIELDVALUE(~0U, reg, MASK_ ## field, ENABLED) \ +) + +/******************************************************************************* +** +** gcmVERIFYFIELDVALUE +** +** Verify if the value of a field within specified data equals a +** predefined value. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +** value Name of the value within the field. +*/ +#define gcmVERIFYFIELDVALUE(data, reg, field, value) \ +(\ + (((gctUINT32) (data)) >> __gcmSTART(reg##_##field) & \ + __gcmMASK(reg##_##field)) \ + == \ + (reg##_##field##_##value & __gcmMASK(reg##_##field)) \ +) + +/******************************************************************************* +** Bit field macros. +*/ + +#define __gcmSTARTBIT(Field) \ + (1 ? Field ) + +#define __gcmBITSIZE(Field) \ + (0 ? Field ) + +#define __gcmBITMASK(Field) \ +(\ + (1 << __gcmBITSIZE(Field)) - 1 \ +) + +#define gcmGETBITS(Value, Type, Field) \ +(\ + (((Type) (Value)) >> __gcmSTARTBIT(Field) ) \ + & \ + __gcmBITMASK(Field) \ +) + +#define gcmSETBITS(Value, Type, Field, NewValue) \ +(\ + (((Type) (Value)) \ + & ~(__gcmBITMASK(Field) << __gcmSTARTBIT(Field)) \ + ) \ + | \ + ((((Type) (NewValue)) \ + & __gcmBITMASK(Field) \ + ) << __gcmSTARTBIT(Field) \ + ) \ +) + +/******************************************************************************* +** +** gcmISINREGRANGE +** +** Verify whether the specified address is in the register range. +** +** ARGUMENTS: +** +** Address Address to be verified. +** Name Name of a register. +*/ + +#define gcmISINREGRANGE(Address, Name) \ +(\ + ((Address & (~0U << Name ## _LSB)) == (Name ## _Address >> 2)) \ +) + +/******************************************************************************\ +******************************** Ceiling Macro ******************************** +\******************************************************************************/ +#define gcmCEIL(x) (((x) - (gctUINT32)(x)) == 0 ? (gctUINT32)(x) : (gctUINT32)(x) + 1) + +/******************************************************************************\ +******************************** Min/Max Macros ******************************** +\******************************************************************************/ + +#define gcmMIN(x, y) (((x) <= (y)) ? (x) : (y)) +#define gcmMAX(x, y) (((x) >= (y)) ? (x) : (y)) +#define gcmCLAMP(x, min, max) (((x) < (min)) ? (min) : \ + ((x) > (max)) ? (max) : (x)) +#define gcmABS(x) (((x) < 0) ? -(x) : (x)) +#define gcmNEG(x) (((x) < 0) ? (x) : -(x)) + +/******************************************************************************\ +******************************** Bit Macro ******************************** +\******************************************************************************/ +#define gcmBITSET(x, bit) ((x) | (1 << (bit))) +#define gcmBITCLEAR(x, bit) ((x) & ~(1 << (bit))) +#define gcmBITTEST(x, bit) ((x) & (1 << (bit))) + +/******************************************************************************* +** +** gcmPTR2SIZE +** +** Convert a pointer to an integer value. +** +** ARGUMENTS: +** +** p Pointer value. +*/ +#define gcmPTR2SIZE(p) \ +(\ + (gctUINTPTR_T) (p) \ +) + +#define gcmPTR2INT32(p) \ +(\ + (gctUINT32)(gctUINTPTR_T) (p) \ +) + +/******************************************************************************* +** +** gcmINT2PTR +** +** Convert an integer value into a pointer. +** +** ARGUMENTS: +** +** v Integer value. +*/ + +#define gcmINT2PTR(i) \ +(\ + (gctPOINTER) (gctUINTPTR_T)(i) \ +) + +/******************************************************************************* +** +** gcmOFFSETOF +** +** Compute the byte offset of a field inside a structure. +** +** ARGUMENTS: +** +** s Structure name. +** field Field name. +*/ +#define gcmOFFSETOF(s, field) \ +(\ + gcmPTR2INT32(& (((struct s *) 0)->field)) \ +) + +#define __gcmOFFSETOF(type, field) \ +(\ + gcmPTR2INT32(& (((type *) 0)->field)) \ +) + +/******************************************************************************* +** +** gcmCONTAINEROF +** +** Get containing structure of a member. +** +** ARGUMENTS: +** +** Pointer Pointer of member. +** Type Structure name. +** Name Field name. +*/ +#define gcmCONTAINEROF(Pointer, Type, Member) \ +(\ + (Type *)((gctUINTPTR_T)Pointer - __gcmOFFSETOF(Type, Member)) \ +) + +/******************************************************************************* +** +** gcmBSWAP32 +** +** Return a value with all bytes in the 32 bit argument swapped. +*/ +#if !defined(__KERNEL__) && defined(__GNUC__) && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ >= 40300) \ + && !defined(__VXWORKS__) +# define gcmBSWAP32(x) __builtin_bswap32(x) +#else +# define gcmBSWAP32(x) ((gctUINT32)(\ + (((gctUINT32)(x) & (gctUINT32)0x000000FFUL) << 24) | \ + (((gctUINT32)(x) & (gctUINT32)0x0000FF00UL) << 8) | \ + (((gctUINT32)(x) & (gctUINT32)0x00FF0000UL) >> 8) | \ + (((gctUINT32)(x) & (gctUINT32)0xFF000000UL) >> 24))) +#endif + +/******************************************************************************* +***** Database ****************************************************************/ + +typedef struct _gcsDATABASE_COUNTERS +{ + /* Number of currently allocated bytes. */ + gctUINT64 bytes; + + /* Maximum number of bytes allocated (memory footprint). */ + gctUINT64 maxBytes; + + /* Total number of bytes allocated. */ + gctUINT64 totalBytes; + + /* The numbers of times video memory was allocated. */ + gctUINT32 allocCount; + + /* The numbers of times video memory was freed. */ + gctUINT32 freeCount; +} +gcsDATABASE_COUNTERS; + +typedef struct _gcuDATABASE_INFO +{ + /* Counters. */ + gcsDATABASE_COUNTERS counters; + + /* Time value. */ + gctUINT64 time; +} +gcuDATABASE_INFO; + +/******************************************************************************* +***** Frame database **********************************************************/ + +/* gcsHAL_FRAME_INFO */ +typedef struct _gcsHAL_FRAME_INFO +{ + /* Current timer tick. */ + OUT gctUINT64 ticks; + + /* Bandwidth counters. */ + OUT gctUINT readBytes8[8]; + OUT gctUINT writeBytes8[8]; + + /* Counters. */ + OUT gctUINT cycles[8]; + OUT gctUINT idleCycles[8]; + OUT gctUINT mcCycles[8]; + OUT gctUINT readRequests[8]; + OUT gctUINT writeRequests[8]; + + /* 3D counters. */ + OUT gctUINT vertexCount; + OUT gctUINT primitiveCount; + OUT gctUINT rejectedPrimitives; + OUT gctUINT culledPrimitives; + OUT gctUINT clippedPrimitives; + OUT gctUINT outPrimitives; + OUT gctUINT inPrimitives; + OUT gctUINT culledQuadCount; + OUT gctUINT totalQuadCount; + OUT gctUINT quadCount; + OUT gctUINT totalPixelCount; + + /* PE counters. */ + OUT gctUINT colorKilled[8]; + OUT gctUINT colorDrawn[8]; + OUT gctUINT depthKilled[8]; + OUT gctUINT depthDrawn[8]; + + /* Shader counters. */ + OUT gctUINT shaderCycles; + OUT gctUINT vsInstructionCount; + OUT gctUINT vsTextureCount; + OUT gctUINT psInstructionCount; + OUT gctUINT psTextureCount; + + /* Texture counters. */ + OUT gctUINT bilinearRequests; + OUT gctUINT trilinearRequests; + OUT gctUINT txBytes8; + OUT gctUINT txHitCount; + OUT gctUINT txMissCount; +} +gcsHAL_FRAME_INFO; + +typedef struct _gckLINKDATA * gckLINKDATA; +struct _gckLINKDATA +{ + gctUINT32 start; + gctUINT32 end; + gctUINT32 pid; + gctUINT32 linkLow; + gctUINT32 linkHigh; +}; + +typedef struct _gckADDRESSDATA * gckADDRESSDATA; +struct _gckADDRESSDATA +{ + gctUINT32 start; + gctUINT32 end; +}; + +typedef union _gcuQUEUEDATA +{ + struct _gckLINKDATA linkData; + + struct _gckADDRESSDATA addressData; +} +gcuQUEUEDATA; + +typedef struct _gckQUEUE * gckQUEUE; +struct _gckQUEUE +{ + gcuQUEUEDATA * datas; + gctUINT32 rear; + gctUINT32 front; + gctUINT32 count; + gctUINT32 size; +}; + +typedef struct _gcsLISTHEAD * gcsLISTHEAD_PTR; +typedef struct _gcsLISTHEAD +{ + gcsLISTHEAD_PTR prev; + gcsLISTHEAD_PTR next; +} +gcsLISTHEAD; + +/* + * 'Patch' here means a mechanism to let kernel side modify user space reserved + * command buffer location, or something the like, during the command buffer + * commit. + * + * Reasons of using 'patch': + * 1. Some resources/states are managed globally only in kernel side, such as + * MCFE semaphore, etc. + * 2. For the sake of security or optimization, like video memory address. + * + * Patches are arranged in arrays, each array has the same type. The 'patchArray' + * in 'gcsHAL_PATCH_LIST' pointers the concrete patch item array. + * + * NOTICE: + * Be aware of the order and values! Tables in gc_hal_user_buffer.c and + * gc_hal_kernel_command.c depend on this. + */ +/* The patch array. */ +typedef struct _gcsHAL_PATCH_LIST +{ + /* Patch type. */ + gctUINT32 type; + + /* Patch item count. */ + gctUINT32 count; + + /* + * Pointer to the patch items. + * + * gcsHAL_PATCH_VIDMEM_ADDRESS * patchArray; + * gcsHAL_PATCH_MCFE_SEMAPHORE * patchArray; + * gcsHAL_PATCH_VIDMEM_TIMESTAMP * patchArray; + * ... + */ + gctUINT64 patchArray; + + /* struct _gcsHAL_PATCH_LIST * next; */ + gctUINT64 next; +} +gcsHAL_PATCH_LIST; + +/* + * Patch a GPU address in the place (gcvHAL_PATCH_VIDMEM_ADDRESS). + * Size of a GPU address is always 32 bits. + */ +typedef struct _gcsHAL_PATCH_VIDMEM_ADDRESS +{ + /* Patch location in the command buffer. */ + gctUINT32 location; + + /* Handle of the video memory node. */ + gctUINT32 node; + + /* Address offset in the video memory node. */ + gctUINT32 offset; +} +gcsHAL_PATCH_VIDMEM_ADDRESS; + +/* + * Patch a MCFE semaphore command in the place (gcvHAL_PATCH_MCFE_SEMAPHORE). + * Size of the semaphore command is fixed at _64_ bits! + */ +typedef struct _gcsHAL_PATCH_MCFE_SEMAPHORE +{ + /* Patch location in the command buffer. */ + gctUINT32 location; + + /* semaphore direction: 1 = Send, 0 = Wait. */ + gctUINT32 sendSema; + + /* Handle of the semaphore. */ + gctUINT32 semaHandle; +} +gcsHAL_PATCH_MCFE_SEMAPHORE; + +/* + * Patch timestamp of given video memory node (gcvHAL_PATCH_VIDMEM_TIMESTAMP). + * Pure software-wise, not command relevant. + */ +typedef struct _gcsHAL_PATCH_VIDMEM_TIMESTAMP +{ + /* Handle of a video memory node. */ + gctUINT32 handle; + + gctUINT32 flag; +} +gcsHAL_PATCH_VIDMEM_TIMESTAMP; + +/* + gcvFEATURE_DATABASE_DATE_MASK + + Mask used to control which bits of chip date will be used to + query feature database, ignore release date for fpga and emulator. +*/ +#if (gcdFPGA_BUILD || defined(EMULATOR)) +# define gcvFEATURE_DATABASE_DATE_MASK (0U) +#else +# define gcvFEATURE_DATABASE_DATE_MASK (~0U) +#endif + +#if defined(__GNUC__) +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define gcdENDIAN_BIG 1 +#else +#define gcdENDIAN_BIG 0 +#endif +#else +#define gcdENDIAN_BIG 0 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_types_h_ */ + + diff --git a/drivers/amlogic/npu/inc/shared/gc_hal_vg.h b/drivers/amlogic/npu/inc/shared/gc_hal_vg.h new file mode 100644 index 00000000000000..140d02233c3466 --- /dev/null +++ b/drivers/amlogic/npu/inc/shared/gc_hal_vg.h @@ -0,0 +1,178 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#ifndef __gc_hal_shared_vg_h_ +#define __gc_hal_shared_vg_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Command buffer header. */ +typedef struct _gcsCMDBUFFER * gcsCMDBUFFER_PTR; +typedef struct _gcsCMDBUFFER +{ + /* Pointer to the completion signal. */ + gcsCOMPLETION_SIGNAL_PTR completion; + + /* The user sets this to the node of the container buffer whitin which + this particular command buffer resides. The kernel sets this to the + node of the internally allocated buffer. */ + gcuVIDMEM_NODE_PTR node; + + /* Command buffer hardware address. */ + gctUINT32 address; + + /* The offset of the buffer from the beginning of the header. */ + gctUINT32 bufferOffset; + + /* Size of the area allocated for the data portion of this particular + command buffer (headers and tail reserves are excluded). */ + gctUINT32 size; + + /* Offset into the buffer [0..size]; reflects exactly how much data has + been put into the command buffer. */ + gctUINT offset; + + /* The number of command units in the buffer for the hardware to + execute. */ + gctUINT32 dataCount; + + /* MANAGED BY : user HAL (gcoBUFFER object). + USED BY : user HAL (gcoBUFFER object). + Points to the immediate next allocated command buffer. */ + gcsCMDBUFFER_PTR nextAllocated; + + /* MANAGED BY : user layers (HAL and drivers). + USED BY : kernel HAL (gcoBUFFER object). + Points to the next subbuffer if any. A family of subbuffers are chained + together and are meant to be executed inseparably as a unit. Meaning + that context switching cannot occur while a chain of subbuffers is being + executed. */ + gcsCMDBUFFER_PTR nextSubBuffer; +} +gcsCMDBUFFER; + +/* Command queue element. */ +typedef struct _gcsVGCMDQUEUE +{ + /* Pointer to the command buffer header. */ + gcsCMDBUFFER_PTR commandBuffer; + + /* Dynamic vs. static command buffer state. */ + gctBOOL dynamic; +} +gcsVGCMDQUEUE; + +/* Context map entry. */ +typedef struct _gcsVGCONTEXT_MAP +{ + /* State index. */ + gctUINT32 index; + + /* New state value. */ + gctUINT32 data; + + /* Points to the next entry in the mod list. */ + gcsVGCONTEXT_MAP_PTR next; +} +gcsVGCONTEXT_MAP; + +/* gcsVGCONTEXT structure that holds the current context. */ +typedef struct _gcsVGCONTEXT +{ + /* Context ID. */ + gctUINT64 id; + + /* State caching ebable flag. */ + gctBOOL stateCachingEnabled; + + /* Current pipe. */ + gctUINT32 currentPipe; + + /* State map/mod buffer. */ + gctUINT32 mapFirst; + gctUINT32 mapLast; + gcsVGCONTEXT_MAP_PTR mapContainer; + gcsVGCONTEXT_MAP_PTR mapPrev; + gcsVGCONTEXT_MAP_PTR mapCurr; + gcsVGCONTEXT_MAP_PTR firstPrevMap; + gcsVGCONTEXT_MAP_PTR firstCurrMap; + + /* Main context buffer. */ + gcsCMDBUFFER_PTR header; + gctUINT32_PTR buffer; + + /* Completion signal. */ + gctHANDLE process; + gctSIGNAL signal; + +#if defined(__QNXNTO__) + gctSIGNAL userSignal; + gctINT32 coid; + gctINT32 rcvid; +#endif +} +gcsVGCONTEXT; + +/* User space task header. */ +typedef struct _gcsTASK * gcsTASK_PTR; +typedef struct _gcsTASK +{ + /* Pointer to the next task for the same interrupt in user space. */ + gcsTASK_PTR next; + + /* Size of the task data that immediately follows the structure. */ + gctUINT size; + + /* Task data starts here. */ + /* ... */ +} +gcsTASK; + +/* User space task master table entry. */ +typedef struct _gcsTASK_MASTER_ENTRY * gcsTASK_MASTER_ENTRY_PTR; +typedef struct _gcsTASK_MASTER_ENTRY +{ + /* Pointers to the head and to the tail of the task chain. */ + gcsTASK_PTR head; + gcsTASK_PTR tail; +} +gcsTASK_MASTER_ENTRY; + +/* User space task master table entry. */ +typedef struct _gcsTASK_MASTER_TABLE +{ + /* Table with one entry per block. */ + gcsTASK_MASTER_ENTRY table[gcvBLOCK_COUNT]; + + /* The total number of tasks sckeduled. */ + gctUINT count; + + /* The total size of event data in bytes. */ + gctUINT size; + +#if defined(__QNXNTO__) + gctINT32 coid; + gctINT32 rcvid; +#endif +} +gcsTASK_MASTER_TABLE; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __gc_hal_shared_h_ */ + + diff --git a/drivers/amlogic/npu/kernel/Android.mk b/drivers/amlogic/npu/kernel/Android.mk index 3b5fa4d408e4ef..ba4dcded8484bb 100644 --- a/drivers/amlogic/npu/kernel/Android.mk +++ b/drivers/amlogic/npu/kernel/Android.mk @@ -1,6 +1,6 @@ ############################################################################## # -# Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +# Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. # # The material in this file is confidential and contains trade secrets # of Vivante Corporation. This is proprietary information owned by diff --git a/drivers/amlogic/npu/kernel/arch/cebuild/makefile b/drivers/amlogic/npu/kernel/arch/cebuild/makefile index e74c4e3bb7205e..988556ed5f9570 100755 --- a/drivers/amlogic/npu/kernel/arch/cebuild/makefile +++ b/drivers/amlogic/npu/kernel/arch/cebuild/makefile @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2014 - 2019 Vivante Corporation +# Copyright (c) 2014 - 2020 Vivante Corporation # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ # # The GPL License (GPL) # -# Copyright (C) 2014 - 2019 Vivante Corporation +# Copyright (C) 2014 - 2020 Vivante Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/arch/cebuild/sources b/drivers/amlogic/npu/kernel/arch/cebuild/sources index 20aa96c01c64c8..e8fe06d92256c3 100755 --- a/drivers/amlogic/npu/kernel/arch/cebuild/sources +++ b/drivers/amlogic/npu/kernel/arch/cebuild/sources @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2014 - 2019 Vivante Corporation +# Copyright (c) 2014 - 2020 Vivante Corporation # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ # # The GPL License (GPL) # -# Copyright (C) 2014 - 2019 Vivante Corporation +# Copyright (C) 2014 - 2020 Vivante Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -59,6 +59,7 @@ TARGETTYPE=LIBRARY SOURCES= \ ../gc_hal_kernel_hardware.c \ + ../gc_hal_kernel_hardware_func.c \ ../gc_hal_kernel_hardware_async_fe.c \ ../gc_hal_kernel_hardware_mc_fe.c \ ../gc_hal_kernel_hardware_waitlink_fe.c \ diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.c index 17494703e851d1..a059ad902e542b 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.c +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -3134,8 +3134,13 @@ _InitializeContextBuffer( index += _State(Context, index, 0x00644 >> 2, 0x00000000, 1, gcvFALSE, gcvTRUE); index += _State(Context, index, 0x00648 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE); index += _State(Context, index, 0x00674 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE); - index += _State(Context, index, 0x00678 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE); - index += _State(Context, index, 0x0067C >> 2, 0xFFFFFFFF, 1, gcvFALSE, gcvFALSE); + + if (halti1) + { + index += _State(Context, index, 0x00678 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE); + index += _State(Context, index, 0x0067C >> 2, 0xFFFFFFFF, 1, gcvFALSE, gcvFALSE); + } + index += _CLOSE_RANGE(); if (hasRobustness) @@ -4168,11 +4173,17 @@ _DestroyContext( { gckKERNEL kernel = Context->hardware->kernel; +#if gcdCAPTURE_ONLY_MODE + gceDATABASE_TYPE dbType; + gctUINT32 processID; +#endif + /* End cpu access. */ gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( kernel, buffer->videoMem, 0, + gcvFALSE, gcvFALSE )); @@ -4184,6 +4195,21 @@ _DestroyContext( gcvNULL )); +#if gcdCAPTURE_ONLY_MODE + /* Encode surface type and pool to database type. */ + dbType = gcvDB_VIDEO_MEMORY + | (gcvVIDMEM_TYPE_GENERIC << gcdDB_VIDEO_MEMORY_TYPE_SHIFT) + | (buffer->videoMem->pool << gcdDB_VIDEO_MEMORY_POOL_SHIFT); + + gcmkONERROR(gckOS_GetProcessID(&processID)); + + gcmkONERROR( + gckKERNEL_RemoveProcessDB(kernel, + processID, + dbType, + buffer->videoMem)); +#endif + /* Free video memory. */ gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( kernel, @@ -4224,6 +4250,11 @@ _AllocateContextBuffer( gctSIZE_T totalSize = Context->totalSize; gctUINT32 allocFlag = 0; +#if gcdCAPTURE_ONLY_MODE + gceDATABASE_TYPE dbType; + gctUINT32 processID; +#endif + #if gcdENABLE_CACHEABLE_COMMAND_BUFFER allocFlag = gcvALLOC_FLAG_CACHEABLE; #endif @@ -4239,6 +4270,26 @@ _AllocateContextBuffer( &Buffer->videoMem )); +#if gcdCAPTURE_ONLY_MODE + gcmkONERROR(gckVIDMEM_HANDLE_Allocate(kernel, Buffer->videoMem, &Context->buffer->handle)); + + /* Encode surface type and pool to database type. */ + dbType = gcvDB_VIDEO_MEMORY + | (gcvVIDMEM_TYPE_GENERIC << gcdDB_VIDEO_MEMORY_TYPE_SHIFT) + | (pool << gcdDB_VIDEO_MEMORY_POOL_SHIFT); + + gcmkONERROR(gckOS_GetProcessID(&processID)); + + /* Record in process db. */ + gcmkONERROR( + gckKERNEL_AddProcessDB(kernel, + processID, + dbType, + Buffer->videoMem, + gcvNULL, + totalSize)); +#endif + /* Lock for GPU access. */ gcmkONERROR(gckVIDMEM_NODE_Lock( kernel, diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.h b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.h index 11d94d71f0fd6e..5f99ddf4da9ef2 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.h +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_context.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -90,6 +90,10 @@ typedef struct _gcsCONTEXT /* Video memory of the context buffer. */ gckVIDMEM_NODE videoMem; +#if gcdCAPTURE_ONLY_MODE + gctUINT32 handle; +#endif + /* Logical address of the context buffer. */ gctUINT32_PTR logical; diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.c index 998621ef0ee9c3..b1bf6865c9bd02 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.c +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -62,28 +62,6 @@ #define _GC_OBJ_ZONE gcvZONE_HARDWARE -#define gcmSEMAPHORESTALL(buffer) \ - do \ - { \ - /* Arm the PE-FE Semaphore. */ \ - *buffer++ \ - = gcmSETFIELDVALUE(0, AQ_COMMAND_LOAD_STATE_COMMAND, OPCODE, LOAD_STATE) \ - | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, COUNT, 1) \ - | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, ADDRESS, 0x0E02); \ - \ - *buffer++ \ - = gcmSETFIELDVALUE(0, AQ_SEMAPHORE, SOURCE, FRONT_END) \ - | gcmSETFIELDVALUE(0, AQ_SEMAPHORE, DESTINATION, PIXEL_ENGINE);\ - \ - /* STALL FE until PE is done flushing. */ \ - *buffer++ \ - = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \ - \ - *buffer++ \ - = gcmSETFIELDVALUE(0, STALL_STALL, SOURCE, FRONT_END) \ - | gcmSETFIELDVALUE(0, STALL_STALL, DESTINATION, PIXEL_ENGINE); \ - } while(0) - typedef struct _gcsiDEBUG_REGISTERS * gcsiDEBUG_REGISTERS_PTR; typedef struct _gcsiDEBUG_REGISTERS { @@ -329,6 +307,11 @@ _IdentifyHardwareByDatabase( Hardware->identity.customerID); gcmkONERROR(gcvSTATUS_NOT_FOUND); } + else if (database->chipVersion != Hardware->identity.chipRevision) + { + gcmkPRINT("[galcore]: Warning: chipRevision mismatch, database chipRevision=0x%x register read chipRevision=0x%x\n", + database->chipVersion, Hardware->identity.chipRevision); + } Identity->pixelPipes = database->NumPixelPipes; @@ -376,10 +359,14 @@ _IdentifyHardwareByDatabase( /* If module parameter doesn't set per-core SRAM sizes. */ if (i == gcvSRAM_INTER_COUNT) { - for (i = gcvSRAM_INTERNAL0; i < gcvSRAM_INTER_COUNT; i++) + gctUINT j = 0; + for (i = Core; i < gcvCORE_COUNT; i++) { - /* Try to get SRAM sizes from database. */ - Device->sRAMSizes[Core][i] = Identity->sRAMSizes[i] = database->VIP_SRAM_SIZE; + for (j = gcvSRAM_INTERNAL0; j < gcvSRAM_INTER_COUNT; j++) + { + /* Try to get SRAM sizes from database. */ + Device->sRAMSizes[i][j] = Identity->sRAMSizes[j] = database->VIP_SRAM_SIZE; + } } } @@ -1330,7 +1317,12 @@ _QueryFeatureDatabase( break; case gcvFEATURE_MMU: +#if gcdCAPTURE_ONLY_MODE + available = gcvTRUE; +#else available = database->REG_MMU; +#endif + break; case gcvFEATURE_FENCE_64BIT: @@ -1517,6 +1509,10 @@ _QueryFeatureDatabase( available = database->G2D_DEC400; break; + case gcvFEATURE_DEC400EX_COMPRESSION: + available = database->G2D_DEC400EX; + break; + case gcvFEATURE_TPC_COMPRESSION: available = database->REG_ThirdPartyCompression; break; @@ -1627,6 +1623,10 @@ _QueryFeatureDatabase( available = database->OCB_COUNTER; break; + case gcvFEATURE_AI_GPU: + available = database->AI_GPU; + break; + case gcvFEATURE_NN_ENGINE: available = database->NNCoreCount > 0; break; @@ -1639,9 +1639,21 @@ _QueryFeatureDatabase( available = database->HI_REORDER_FIX; break; + case gcvFEATURE_EVIS2_FLOP_RESET_FIX: + available = database->EVIS2_FLOP_RESET_FIX; + break; + + case gcvFEATURE_USC_ASYNC_CP_RTN_FLOP_RESET_FIX: + available = database->USC_ASYNC_CP_RTN_FLOP_RESET_FIX; + break; + + case gcvFEATURE_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX: + available = database->USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX; + /*FALLTHRU*/ default: gcmkFATAL("Invalid feature has been requested."); available = gcvFALSE; + /*FALLTHRU*/ } gcmkFOOTER_ARG("%d", available ? gcvSTATUS_TRUE : gcvSTATUS_FALSE); @@ -1870,6 +1882,19 @@ gckSTATETIMER_Reset( gckOS_ZeroMemory(StateTimer->elapse, gcmSIZEOF(StateTimer->elapse)); } +gceSTATUS +gckHARDWARE_StartTimerReset( + IN gckHARDWARE Hardware + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gcmkHEADER(); + + gckSTATETIMER_Reset(&Hardware->powerStateCounter, 0); + + gcmkFOOTER(); + return status; +} static void gckSTATETIMER_Accumulate( @@ -1907,11 +1932,6 @@ gckSTATETIMER_Query( *Suspend = StateTimer->elapse[gcvPOWER_SUSPEND]; } -static gceSTATUS -_PrepareFunctions( - IN gckHARDWARE Hardware - ); - static gceSTATUS _InitPageTableArray( IN gckHARDWARE Hardware @@ -1925,7 +1945,7 @@ _InitPageTableArray( gcePOOL pool = gcvPOOL_DEFAULT; gctUINT32 flags = gcvALLOC_FLAG_CONTIGUOUS; -#if defined(CONFIG_ZONE_DMA32) +#if defined(CONFIG_ZONE_DMA32) || defined(CONFIG_ZONE_DMA) #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) flags |= gcvALLOC_FLAG_4GB_ADDR; #endif @@ -2135,11 +2155,20 @@ gckHARDWARE_Construct( { hardware->type = gcvHARDWARE_3D2D; } - else - if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_PIPE_2D)) + else if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_PIPE_2D)) { hardware->type = gcvHARDWARE_2D; } + else if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_AI_GPU)) + { + hardware->type = gcvHARDWARE_3D; + } + else if (gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_NN_ENGINE) + || gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_TP_ENGINE) + ) + { + hardware->type = gcvHARDWARE_VIP; + } else { hardware->type = gcvHARDWARE_3D; @@ -2272,8 +2301,6 @@ gckHARDWARE_Construct( hardware->minFscaleValue = 1; hardware->waitCount = 200; - gckSTATETIMER_Reset(&hardware->powerStateCounter, 0); - #if gcdLINK_QUEUE_SIZE gcmkONERROR(gckQUEUE_Allocate(hardware->os, &hardware->linkQueue, gcdLINK_QUEUE_SIZE)); #endif @@ -2300,6 +2327,9 @@ gckHARDWARE_Construct( gcmkONERROR(gckASYNC_FE_Construct(hardware, &hardware->asyncFE)); } + /* Construct hardware function */ + gcmkONERROR(gckFUNCTION_Construct(hardware)); + /* Return pointer to the gckHARDWARE object. */ *Hardware = hardware; @@ -2360,16 +2390,29 @@ gckHARDWARE_PostConstruct( ) { gceSTATUS status; + gctUINT i; /* Initialize MMU page table array. */ gcmkONERROR(_InitPageTableArray(Hardware)); - /* Initialize function commands. */ - gcmkONERROR(_PrepareFunctions(Hardware)); + for (i = 0; i < gcvFUNCTION_EXECUTION_NUM; i++) + { + gctBOOL funcVaild = gcvFALSE; + + gckFUNCTION_Validate(&Hardware->functions[i], &funcVaild); + if (funcVaild) + { + gcmkONERROR(gckFUNCTION_Init(&Hardware->functions[i])); + } + } return gcvSTATUS_OK; OnError: + for (i = 0; i < gcvFUNCTION_EXECUTION_NUM; i++) + { + gckFUNCTION_Release(&Hardware->functions[i]); + } return status; } @@ -2396,49 +2439,7 @@ gckHARDWARE_PreDestroy( { gcmkHEADER_ARG("%x", Hardware); - if (Hardware->auxFuncVideoMem) - { - /* Synchroneous unlock. */ - gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( - Hardware->kernel, - Hardware->auxFuncVideoMem, - 0, - gcvNULL - )); - - gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( - Hardware->kernel, - Hardware->auxFuncVideoMem, - 0, - gcvFALSE - )); - - gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( - Hardware->kernel, - Hardware->auxFuncVideoMem - )); - - Hardware->auxFuncVideoMem = gcvNULL; - Hardware->auxFuncLogical = gcvNULL; - } - - if (Hardware->mmuFuncVideoMem) - { - gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( - Hardware->kernel, - Hardware->mmuFuncVideoMem, - 0, - gcvFALSE - )); - - gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( - Hardware->kernel, - Hardware->mmuFuncVideoMem - )); - - Hardware->mmuFuncVideoMem = gcvNULL; - Hardware->mmuFuncLogical = gcvNULL; - } + gcmkVERIFY_OK(gckFUNCTION_Destory(Hardware)); if (Hardware->pagetableArray.videoMem) { @@ -2446,6 +2447,7 @@ gckHARDWARE_PreDestroy( Hardware->kernel, Hardware->pagetableArray.videoMem, 0, + gcvFALSE, gcvFALSE )); @@ -2599,6 +2601,7 @@ gckHARDWARE_InitializeHardware( gctUINT32 control; gctUINT32 data; gctUINT32 regPMC = 0; + gctUINT32 i; gcmkHEADER_ARG("Hardware=0x%x", Hardware); @@ -2905,9 +2908,59 @@ gckHARDWARE_InitializeHardware( data)); } + /* AHBDEC400 */ + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DEC400EX_COMPRESSION)) + { + data = 0x0201018A; + data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))); + gcmkONERROR(gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x00800, + data)); + + data = 0x003FC810; + data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:0) - (0 ? + 6:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:0) - (0 ? + 6:0) + 1))))))) << (0 ? + 6:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 6:0) - (0 ? + 6:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:0) - (0 ? 6:0) + 1))))))) << (0 ? 6:0))); + data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 13:7) - (0 ? + 13:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 13:7) - (0 ? + 13:7) + 1))))))) << (0 ? + 13:7))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? + 13:7) - (0 ? + 13:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 13:7) - (0 ? 13:7) + 1))))))) << (0 ? 13:7))); + gcmkONERROR(gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x00808, + data)); + } + +#if !gcdCAPTURE_ONLY_MODE gcmkONERROR( gckHARDWARE_SetMMU(Hardware, Hardware->kernel->mmu)); +#endif if (Hardware->mcFE) { @@ -3275,6 +3328,25 @@ gckHARDWARE_InitializeHardware( _ConfigureModuleLevelClockGating(Hardware); #endif + /* Perfrom hardware functions */ + for (i = 0; i < gcvFUNCTION_EXECUTION_NUM; i++) + { + gctBOOL funcVaild = gcvFALSE; + + /* Skip functions since it will perform at special place */ + if (i == gcvFUNCTION_EXECUTION_MMU || i == gcvFUNCTION_EXECUTION_FLUSH) + { + continue; + } + + gckFUNCTION_Validate(&Hardware->functions[i], &funcVaild); + if (funcVaild) + { + gckFUNCTION_Execute(&Hardware->functions[i]); + gckFUNCTION_Release(&Hardware->functions[i]); + } + } + /* Success. */ gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -4699,8 +4771,6 @@ gckHARDWARE_SetMMU( { gceSTATUS status; gctUINT32 address = 0; - gctUINT32 idle; - gctUINT32 timer = 0, delay = 1; gcmkHEADER_ARG("Hardware=0x%x Mmu=0x%x", Hardware, Mmu); @@ -4752,275 +4822,77 @@ gckHARDWARE_SetMMU( 0x0040C, address)); } - else if (Hardware->options.enableMMU && - (Hardware->options.secureMode != gcvSECURE_IN_TA)) + else { - gctBOOL hwMmuDisabled = gcvTRUE; - - /* Force Disable MMU to guarantee setup command be read from physical addr */ - if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) - { - gctUINT32 regMmuCtrl = 0; - gcmkONERROR(gckOS_ReadRegisterEx( - Hardware->os, - Hardware->core, - 0x00388, - ®MmuCtrl - )); - - hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) - ? gcvFALSE - : gcvTRUE; - } - else - { - gctUINT32 regMmuCtrl = 0; - - gcmkONERROR(gckOS_ReadRegisterEx( - Hardware->os, - Hardware->core, - 0x0018C, - ®MmuCtrl - )); + gctBOOL mmuValid = gcvTRUE; - hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) - ? gcvFALSE - : gcvTRUE; - } + gcmkONERROR(gckFUNCTION_Validate(&Hardware->functions[gcvFUNCTION_EXECUTION_MMU], &mmuValid)); - if (hwMmuDisabled) + if (mmuValid) { - /* Prepared command sequence contains an END, - ** so update lastEnd and store executeCount to END command. - */ - gcsHARDWARE_FUNCTION *function = &Hardware->functions[gcvHARDWARE_FUNCTION_MMU]; - gctUINT32_PTR endLogical = (gctUINT32_PTR)function->endLogical; - - Hardware->lastEnd = function->endAddress; - - if (Hardware->wlFE) - { - /* Append a executeCount in End command, MCFE does not support such End command. */ - *(endLogical + 1) = Hardware->executeCount + 1; - } + gctBOOL hwMmuDisabled = gcvTRUE; + /* Force Disable MMU to guarantee setup command be read from physical addr */ if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) { - gctUINT32 extSafeAddress; - /* Set up base address of page table array. */ - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x0038C, - (gctUINT32)(Hardware->pagetableArray.address & 0xFFFFFFFF) - )); - - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x00390, - (gctUINT32)((Hardware->pagetableArray.address >> 32) & 0xFFFFFFFF) - )); - - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x00394, - 1 - )); - - address = (gctUINT32)(Mmu->safePagePhysical & 0xFFFFFFFF); - extSafeAddress = (gctUINT32)(Mmu->safePagePhysical >> 32); - - if (address & 0x3F) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - /* more than 40bit physical address */ - if (extSafeAddress & 0xFFFFFF00) - { - gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); - } - - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x0039C, - address - )); - - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x00398, - address - )); - - gcmkONERROR(gckOS_WriteRegisterEx( + gctUINT32 regMmuCtrl = 0; + gcmkONERROR(gckOS_ReadRegisterEx( Hardware->os, Hardware->core, - 0x003A0, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? - 23:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? - 23:16))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)extSafeAddress) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? - 23:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:31) - (0 ? - 31:31) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:31) - (0 ? - 31:31) + 1))))))) << (0 ? - 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 31:31) - (0 ? - 31:31) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? - 7:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 7:0) - (0 ? - 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)extSafeAddress) & ((gctUINT32) ((((1 ? - 7:0) - (0 ? - 7:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:15) - (0 ? - 15:15) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:15) - (0 ? - 15:15) + 1))))))) << (0 ? - 15:15))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 15:15) - (0 ? - 15:15) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) + 0x00388, + ®MmuCtrl )); - } - - gcmkDUMP(Hardware->os, "#[function: set mmu]"); - gcmkDUMP_BUFFER( - Hardware->os, - gcvDUMP_BUFFER_KERNEL_COMMAND, - function->logical, - function->address, - function->bytes); - /* Execute prepared command sequence. */ - if (Hardware->mcFE) - { - gcmkONERROR(gckMCFE_Execute( - Hardware, - gcvFALSE, - 0, - function->address, - function->bytes - )); + hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) + ? gcvFALSE + : gcvTRUE; } else { - gcmkONERROR(gckWLFE_Execute( - Hardware, - function->address, - function->bytes - )); - } - -#if gcdLINK_QUEUE_SIZE - { - gcuQUEUEDATA data; - - gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid)); - - data.linkData.start = function->address; - data.linkData.end = function->address + function->bytes; - data.linkData.linkLow = 0; - data.linkData.linkHigh = 0; - - gckQUEUE_Enqueue(&Hardware->linkQueue, &data); - } -#endif - - /* Wait until MMU configure finishes. */ - do - { - gckOS_Delay(Hardware->os, delay); + gctUINT32 regMmuCtrl = 0; gcmkONERROR(gckOS_ReadRegisterEx( Hardware->os, Hardware->core, - 0x00004, - &idle)); - - timer += delay; - delay *= 2; + 0x0018C, + ®MmuCtrl + )); -#if gcdGPU_TIMEOUT - if (timer >= Hardware->kernel->timeOut) - { - gckHARDWARE_DumpGPUState(Hardware); - - if (Hardware->kernel->command) - { - gckCOMMAND_DumpExecutingBuffer(Hardware->kernel->command); - } - - /* Even if hardware is not reset correctly, let software - ** continue to avoid software stuck. Software will timeout again - ** and try to recover GPU in next timeout. - */ - gcmkONERROR(gcvSTATUS_DEVICE); - } -#endif + hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) + ? gcvFALSE + : gcvTRUE; } - while (!(((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) )); - gcmkDUMP(Hardware->os, "@[register.wait 0x%05X 0x%08X 0x%08X]", - 0x00004, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + if (hwMmuDisabled) + { + gcmkONERROR(gckFUNCTION_Execute(&Hardware->functions[gcvFUNCTION_EXECUTION_MMU])); + + /* Enable MMU. */ + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) + { + gcmkONERROR(gckOS_WriteRegisterEx_NoDump( + Hardware->os, + Hardware->core, + 0x00388, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) ((gctUINT32) (~0U) & ((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))), - idle); - - /* Enable MMU. */ - if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) - { - gcmkONERROR(gckOS_WriteRegisterEx_NoDump( - Hardware->os, - Hardware->core, - 0x00388, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 0:0) - (0 ? - 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) - )); - } - else - { - gcmkONERROR(gckOS_WriteRegisterEx( - Hardware->os, - Hardware->core, - 0x0018C, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + )); + } + else + { + gcmkONERROR(gckOS_WriteRegisterEx( + Hardware->os, + Hardware->core, + 0x0018C, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -5030,9 +4902,11 @@ gckHARDWARE_SetMMU( 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) - )); + )); + } } } + } /* Return the status. */ @@ -5870,1394 +5744,27 @@ gckHARDWARE_FlushAsyncMMU( if (Hardware->stallFEPrefetch) { - stall |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 29:28) - (0 ? - 29:28) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 29:28) - (0 ? - 29:28) + 1))))))) << (0 ? - 29:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? - 29:28) - (0 ? - 29:28) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ? 29:28))); - } - - gcmkONERROR(gckOS_WriteMemory( - Hardware->os, - buffer + 7, - stall)); - - gcmkONERROR(gckOS_WriteMemory( - Hardware->os, - buffer + 8, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x502E) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) - )); - - gcmkONERROR(gckOS_WriteMemory( - Hardware->os, - buffer + 9, - ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 0:0) - (0 ? - 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) - )); - } - - if (Bytes != gcvNULL) - { - /* Return number of bytes required by the PIPESELECT command. */ - *Bytes = 40; - } - - /* Success. */ - gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); - return gcvSTATUS_OK; - -OnError: - /* Success. */ - gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); - return status; -} - -gceSTATUS -gckHARDWARE_FlushMcfeMMU( - IN gckHARDWARE Hardware, - IN gctPOINTER Logical, - IN OUT gctUINT32 * Bytes - ) -{ - gceSTATUS status; - gctUINT32_PTR buffer; - gctUINT32 flushSize; - - gcmkHEADER_ARG("Hardware=0x%x", Hardware); - - /* MCFE with old mmu? nonsense!. */ - gcmkASSERT(Hardware->mmuVersion > 0); - - flushSize = 4 * 6; - - if (Logical) - { - if (*Bytes < flushSize) - { - gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL); - } - - buffer = (gctUINT32_PTR)Logical; - - /* Flush MMU cache. */ - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:4) - (0 ? - 4:4) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:4) - (0 ? - 4:4) + 1))))))) << (0 ? - 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? - 4:4) - (0 ? - 4:4) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:4) - (0 ? - 4:4) + 1))))))) << (0 ? - 4:4))) & ((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:7) - (0 ? - 7:7) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 7:7) - (0 ? - 7:7) + 1))))))) << (0 ? - 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 7:7) - (0 ? - 7:7) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)))); - - /* - * System channel can only take one command at a time, Trigger and - * SubmitJob are not required. - */ - - /* AQHiIdle to trigger. */ - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0001) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = 0; - - /* SubmitJob. */ - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x16 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) (0x001 & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); - } - - if (Bytes) - { - *Bytes = flushSize; - } - - /* Success. */ - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - - /* Return the status. */ - gcmkFOOTER(); - return status; -} - -static gceSTATUS -_ProgramMMUStates( - IN gckHARDWARE Hardware, - IN gckMMU Mmu, - IN gceMMU_MODE Mode, - IN gctPOINTER Logical, - IN OUT gctUINT32 * Bytes - ) -{ - gceSTATUS status = gcvSTATUS_OK; - gctUINT32 config, address; - gctUINT32 extMtlb, extSafeAddress, configEx = 0; - gctPHYS_ADDR_T physical; - gctUINT32_PTR buffer; - gctBOOL ace; - gctUINT32 reserveBytes = 0; - - gctBOOL config2D; - - gcmkHEADER_ARG("Hardware=0x%x", Hardware); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - gcmkVERIFY_ARGUMENT(Hardware->mmuVersion != 0); - - ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE); - - switch (Hardware->options.secureMode) - { - case gcvSECURE_IN_NORMAL: - reserveBytes = 8 + 4 * 4; - break; - case gcvSECURE_NONE: - reserveBytes = 16 + 4 * 4; - if (ace) - { - reserveBytes += 8; - } - break; - case gcvSECURE_IN_TA: - default: - gcmkASSERT(gcvFALSE); - gcmkPRINT("%s(%d): secureMode is wrong", __FUNCTION__, __LINE__); - break; - } - - config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D) - && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D); - - if (config2D) - { - reserveBytes += - /* Pipe Select. */ - 4 * 4 - /* Configure MMU States. */ - + 4 * 4 - /* Semaphore stall */ - + 4 * 8; - - if (ace) - { - reserveBytes += 8; - } - } - - reserveBytes += 8; - - physical = Mmu->mtlbPhysical; - - config = (gctUINT32)(physical & 0xFFFFFFFF); - extMtlb = (gctUINT32)(physical >> 32); - - /* more than 40bit physical address */ - if (extMtlb & 0xFFFFFF00) - { - gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); - } - - physical = Mmu->safePagePhysical; - - address = (gctUINT32)(physical & 0xFFFFFFFF); - extSafeAddress = (gctUINT32)(physical >> 32); - - if (address & 0x3F) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - /* more than 40bit physical address */ - if (extSafeAddress & 0xFFFFFF00) - { - gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); - } - - if (ace) - { - configEx = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? - 7:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 7:0) - (0 ? - 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (extSafeAddress) & ((gctUINT32) ((((1 ? - 7:0) - (0 ? - 7:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? - 23:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? - 23:16))) | (((gctUINT32) ((gctUINT32) (extMtlb) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? - 23:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))); - } - - switch (Mode) - { - case gcvMMU_MODE_1K: - if (config & 0x3FF) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 0:0) - (0 ? - 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); - - break; - - case gcvMMU_MODE_4K: - if (config & 0xFFF) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 0:0) - (0 ? - 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); - - break; - - default: - gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); - } - - if (Logical != gcvNULL) - { - buffer = Logical; - - if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) - { - gcsMMU_TABLE_ARRAY_ENTRY * entry; - entry = (gcsMMU_TABLE_ARRAY_ENTRY *) Hardware->pagetableArray.logical; - - /* Setup page table array entry. */ - if (Hardware->bigEndian) - { - entry->low = gcmBSWAP32(config); - entry->high = gcmBSWAP32(extMtlb); - } - else - { - entry->low = config; - entry->high = extMtlb; - } - - gcmkDUMP(Mmu->os, "#[mmu: page table array]"); - - gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", - (unsigned long long)Hardware->pagetableArray.address, entry->low, 4); - - gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", - (unsigned long long)Hardware->pagetableArray.address + 4, entry->high, 4); - - gcmkVERIFY_OK(gckVIDMEM_NODE_CleanCache( - Hardware->kernel, - Hardware->pagetableArray.videoMem, - 0, - entry, - 8 - )); - - /* Setup command buffer to load index 0 of page table array. */ - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ - = (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) &((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 16:16) - (0 ? - 16:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 16:16) - (0 ? - 16:16) + 1))))))) << (0 ? - 16:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 16:16) - (0 ? - 16:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)))); - } - else - { - gcmkASSERT(Hardware->options.secureMode == gcvSECURE_NONE); - - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = config; - - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = address; - - if (ace) - { - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ - = configEx; - } - } - - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E12) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 16:16) - (0 ? - 16:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 16:16) - (0 ? - 16:16) + 1))))))) << (0 ? - 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 16:16) - (0 ? - 16:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))); - - do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 12:8) - (0 ? - 12:8) + 1))))))) << (0 ? - 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 12:8) - (0 ? - 12:8) + 1))))))) << (0 ? - 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0); -; - - - if (config2D) - { - /* LoadState(AQPipeSelect, 1), pipe. */ - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = 0x1; - - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = config; - - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = address; - - if (ace) - { - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ - = configEx; - } - - do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 12:8) - (0 ? - 12:8) + 1))))))) << (0 ? - 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 12:8) - (0 ? - 12:8) + 1))))))) << (0 ? - 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0); -; - - - /* LoadState(AQPipeSelect, 1), pipe. */ - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ = 0x0; - - do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 12:8) - (0 ? - 12:8) + 1))))))) << (0 ? - 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 4:0) - (0 ? - 4:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 4:0) - (0 ? - 4:0) + 1))))))) << (0 ? - 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 12:8) - (0 ? - 12:8) + 1))))))) << (0 ? - 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? - 12:8) - (0 ? - 12:8) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0); -; - - } - - } - - if (Bytes != gcvNULL) - { - *Bytes = reserveBytes; - } - - /* Return the status. */ - gcmkFOOTER_NO(); - return status; - -OnError: - /* Return the status. */ - gcmkFOOTER(); - return status; -} - -static gceSTATUS -_ProgramMMUStatesMCFE( - IN gckHARDWARE Hardware, - IN gckMMU Mmu, - IN gceMMU_MODE Mode, - IN gctPOINTER Logical, - IN OUT gctUINT32 * Bytes - ) -{ - gceSTATUS status = gcvSTATUS_OK; - gctUINT32 config, address; - gctUINT32 extMtlb, extSafeAddress, configEx = 0; - gctPHYS_ADDR_T physical; - gctUINT32_PTR buffer; - gctBOOL ace; - gctUINT32 reserveBytes = 0; - - gcmkHEADER_ARG("Hardware=0x%x", Hardware); - - /* Verify the arguments. */ - gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); - gcmkVERIFY_ARGUMENT(Hardware->mmuVersion != 0); - - ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE); - - switch (Hardware->options.secureMode) - { - case gcvSECURE_IN_NORMAL: - reserveBytes = 8; - reserveBytes += 8; - break; - case gcvSECURE_NONE: - reserveBytes = 16;; - if (ace) - { - reserveBytes += 8; - reserveBytes += 8; - } - break; - case gcvSECURE_IN_TA: - default: - gcmkASSERT(gcvFALSE); - gcmkPRINT("%s(%d): secureMode is wrong", __FUNCTION__, __LINE__); - break; - } - - physical = Mmu->mtlbPhysical; - - config = (gctUINT32)(physical & 0xFFFFFFFF); - extMtlb = (gctUINT32)(physical >> 32); - - /* more than 40bit physical address */ - if (extMtlb & 0xFFFFFF00) - { - gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); - } - - physical = Mmu->safePagePhysical; - - address = (gctUINT32)(physical & 0xFFFFFFFF); - extSafeAddress = (gctUINT32)(physical >> 32); - - if (address & 0x3F) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - /* more than 40bit physical address */ - if (extSafeAddress & 0xFFFFFF00) - { - gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); - } - - if (ace) - { - configEx = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 7:0) - (0 ? - 7:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 7:0) - (0 ? - 7:0) + 1))))))) << (0 ? - 7:0))) | (((gctUINT32) ((gctUINT32) (extSafeAddress) & ((gctUINT32) ((((1 ? - 7:0) - (0 ? - 7:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 23:16) - (0 ? - 23:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 23:16) - (0 ? - 23:16) + 1))))))) << (0 ? - 23:16))) | (((gctUINT32) ((gctUINT32) (extMtlb) & ((gctUINT32) ((((1 ? - 23:16) - (0 ? - 23:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))); - } - - switch (Mode) - { - case gcvMMU_MODE_1K: - if (config & 0x3FF) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 0:0) - (0 ? - 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); - - break; - - case gcvMMU_MODE_4K: - if (config & 0xFFF) - { - gcmkONERROR(gcvSTATUS_NOT_ALIGNED); - } - - config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 0:0) - (0 ? - 0:0) + 1))))))) << (0 ? - 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 0:0) - (0 ? - 0:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); - - break; - - default: - gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); - } - - if (Logical != gcvNULL) - { - buffer = Logical; - - if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) - { - gcsMMU_TABLE_ARRAY_ENTRY * entry; - entry = (gcsMMU_TABLE_ARRAY_ENTRY *) Hardware->pagetableArray.logical; - - /* Setup page table array entry. */ - if (Hardware->bigEndian) - { - entry->low = gcmBSWAP32(config); - entry->high = gcmBSWAP32(extMtlb); - } - else - { - entry->low = config; - entry->high = extMtlb; - } - - gcmkDUMP(Mmu->os, "#[mmu: page table array]"); - - gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", - (unsigned long long)Hardware->pagetableArray.address, entry->low, 4); - - gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", - (unsigned long long)Hardware->pagetableArray.address + 4, entry->high, 4); - - gcmkVERIFY_OK(gckVIDMEM_NODE_CleanCache( - Hardware->kernel, - Hardware->pagetableArray.videoMem, - 0, - entry, - 8 - )); - - /* Setup command buffer to load index 0 of page table array. */ - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 25:16) - (0 ? - 25:16) + 1))))))) << (0 ? - 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? - 25:16) - (0 ? - 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - - *buffer++ - = (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 15:0) - (0 ? - 15:0) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 15:0) - (0 ? - 15:0) + 1))))))) << (0 ? - 15:0))) &((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 16:16) - (0 ? - 16:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 16:16) - (0 ? - 16:16) + 1))))))) << (0 ? - 16:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? - 16:16) - (0 ? - 16:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)))); - - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? + stall |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:28) - (0 ? + 29:28) + 1) == 32) ? ~0U : (~(~0U << ((1 ? - 31:27) - (0 ? - 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? - 31:27) - (0 ? - 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + 29:28) - (0 ? + 29:28) + 1))))))) << (0 ? + 29:28))) | (((gctUINT32) (0x3 & ((gctUINT32) ((((1 ? + 29:28) - (0 ? + 29:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ? 29:28))); } - else - { - gcmkASSERT(Hardware->options.secureMode == gcvSECURE_NONE); - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 7, + stall)); + + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 8, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7267,17 +5774,17 @@ _ProgramMMUStatesMCFE( 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x502E) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7286,12 +5793,70 @@ _ProgramMMUStatesMCFE( 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) + )); + + gcmkONERROR(gckOS_WriteMemory( + Hardware->os, + buffer + 9, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + )); + } + + if (Bytes != gcvNULL) + { + /* Return number of bytes required by the PIPESELECT command. */ + *Bytes = 40; + } + + /* Success. */ + gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); + return gcvSTATUS_OK; + +OnError: + /* Success. */ + gcmkFOOTER_ARG("*Bytes=%lu", gcmOPT_VALUE(Bytes)); + return status; +} + +gceSTATUS +gckHARDWARE_FlushMcfeMMU( + IN gckHARDWARE Hardware, + IN gctPOINTER Logical, + IN OUT gctUINT32 * Bytes + ) +{ + gceSTATUS status; + gctUINT32_PTR buffer; + gctUINT32 flushSize; + + gcmkHEADER_ARG("Hardware=0x%x", Hardware); + + /* MCFE with old mmu? nonsense!. */ + gcmkASSERT(Hardware->mmuVersion > 0); + + flushSize = 4 * 6; + + if (Logical) + { + if (*Bytes < flushSize) + { + gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL); + } - *buffer++ = config; + buffer = (gctUINT32_PTR)Logical; - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + /* Flush MMU cache. */ + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7301,17 +5866,17 @@ _ProgramMMUStatesMCFE( 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7322,12 +5887,36 @@ _ProgramMMUStatesMCFE( 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - *buffer++ = address; + *buffer++ = (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:4) - (0 ? + 4:4) + 1))))))) << (0 ? + 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:4) - (0 ? + 4:4) + 1))))))) << (0 ? + 4:4))) & ((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:7) - (0 ? + 7:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:7) - (0 ? + 7:7) + 1))))))) << (0 ? + 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 7:7) - (0 ? + 7:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7)))); - if (ace) - { - *buffer++ - = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + /* + * System channel can only take one command at a time, Trigger and + * SubmitJob are not required. + */ + + /* AQHiIdle to trigger. */ + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7337,17 +5926,17 @@ _ProgramMMUStatesMCFE( 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? - 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0001) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) - | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7358,19 +5947,31 @@ _ProgramMMUStatesMCFE( 25:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); - *buffer++ = configEx; + *buffer++ = 0; - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + /* SubmitJob. */ + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? - 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? + 31:27))) | (((gctUINT32) (0x16 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); - *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) (0x001 & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? @@ -7380,20 +5981,19 @@ _ProgramMMUStatesMCFE( 31:27) - (0 ? 31:27) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); - } - } } - if (Bytes != gcvNULL) + if (Bytes) { - *Bytes = reserveBytes; + *Bytes = flushSize; } - /* Return the status. */ + /* Success. */ gcmkFOOTER_NO(); - return status; + return gcvSTATUS_OK; OnError: + /* Return the status. */ gcmkFOOTER(); return status; @@ -9369,6 +7969,48 @@ _PmInitializeGPU( { gceSTATUS status; + gctBOOL hwMmuDisabled = gcvTRUE; + + /* VIV for 8MM_EVK, maybe power off is failed, the GPU still has been power on, + so we need to check the mmu enable flag to see if we need to dummy draw */ + if (_IsHardwareMatch(Hardware, gcv600, 0x4653)) + { + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) + { + gctUINT32 regMmuCtrl = 0; + gcmkONERROR(gckOS_ReadRegisterEx( + Hardware->os, + Hardware->core, + 0x00388, + ®MmuCtrl + )); + + hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) + ? gcvFALSE + : gcvTRUE; + } + else + { + gctUINT32 regMmuCtrl = 0; + + gcmkONERROR(gckOS_ReadRegisterEx( + Hardware->os, + Hardware->core, + 0x0018C, + ®MmuCtrl + )); + + hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1) + ? gcvFALSE + : gcvTRUE; + } + } + + if(hwMmuDisabled) + { + Command->dummyDraw = gcvTRUE; + } + /* Initialize hardware. */ gcmkONERROR(gckHARDWARE_InitializeHardware(Hardware)); @@ -9379,9 +8021,6 @@ _PmInitializeGPU( /* Force the command queue to reload the next context. */ Command->currContext = gcvNULL; - /* Trigger a possible dummy draw. */ - Command->dummyDraw = gcvTRUE; - OnError: return status; } @@ -9470,7 +8109,7 @@ _PmFlushCache( } else { - gckHARDWARE_ExecuteFunctions(Hardware, gcvHARDWARE_FUNCTION_FLUSH); + gcmkONERROR(gckFUNCTION_Execute(&Hardware->functions[gcvFUNCTION_EXECUTION_FLUSH])); gckOS_Delay(gcvNULL, 1); } @@ -9518,6 +8157,7 @@ _PmSetPowerOnDirection( } requireInit = gcvTRUE; + /* FALLTHRU */ case gcvPOWER_SUSPEND: /* Clock on. */ @@ -9585,13 +8225,16 @@ _PmSetPowerOffDirection( switch (Hardware->chipPowerState) { case gcvPOWER_ON: - /* Stall. */ - status = _PmStallCommand(Hardware, command, Broadcast); - - if (!gcmIS_SUCCESS(status)) + if(Hardware->kernel->threadInitialized == gcvTRUE) { - /* abort for error and NOT READY. */ - goto OnError; + /* Stall. */ + status = _PmStallCommand(Hardware, command, Broadcast); + + if (!gcmIS_SUCCESS(status)) + { + /* abort for error and NOT READY. */ + goto OnError; + } } if (State == gcvPOWER_IDLE) @@ -9599,6 +8242,7 @@ _PmSetPowerOffDirection( gcmkONERROR(_PmClockControl(Hardware, gcvPOWER_IDLE)); break; } + /* FALLTHRU */ case gcvPOWER_IDLE: /* Stop. */ @@ -9613,10 +8257,14 @@ _PmSetPowerOffDirection( gcmkONERROR(_PmClockOff(Hardware, gcvTRUE)); break; } + /* FALLTHRU */ case gcvPOWER_SUSPEND: - /* Flush. */ - gcmkONERROR(_PmFlushCache(Hardware, command)); + if(Hardware->kernel->threadInitialized == gcvTRUE) + { + /* Flush. */ + gcmkONERROR(_PmFlushCache(Hardware, command)); + } /* Clock control. */ gcmkONERROR(_PmClockControl(Hardware, gcvPOWER_OFF)); @@ -9707,6 +8355,7 @@ gckHARDWARE_SetPowerState( case gcvPOWER_IDLE_TIMEOUT: case gcvPOWER_SUSPEND_TIMEOUT: timeout = gcvTRUE; + /* FALLTHRU */ case gcvPOWER_OFF_BROADCAST: case gcvPOWER_IDLE_BROADCAST: case gcvPOWER_SUSPEND_BROADCAST: @@ -10154,7 +8803,8 @@ gckHARDWARE_SetGpuProfiler( gceSTATUS gckHARDWARE_SetFscaleValue( IN gckHARDWARE Hardware, - IN gctUINT32 FscaleValue + IN gctUINT32 FscaleValue, + IN gctUINT32 ShaderFscaleValue ) { gceSTATUS status; @@ -10299,6 +8949,7 @@ gckHARDWARE_SetFscaleValue( 11:11) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))))); + /* Scale the core clock. */ clock = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? @@ -10345,20 +8996,87 @@ gckHARDWARE_SetFscaleValue( 0x00000, clock)); - /* Done loading the frequency scaler. */ - gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, - Hardware->core, - 0x00000, - ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? - 9:9) - (0 ? - 9:9) + 1) == 32) ? + /* Done loading the frequency scaler. */ + gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, + Hardware->core, + 0x00000, + ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 9:9) - (0 ? + 9:9) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 9:9) - (0 ? + 9:9) + 1))))))) << (0 ? + 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 9:9) - (0 ? + 9:9) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))))); + + /* A option to support shader clock scaling. */ + if (ShaderFscaleValue != ~0U && ShaderFscaleValue > 0 && ShaderFscaleValue < 64) + { + /* Scale the shader clock. */ + clock = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 17:17) - (0 ? + 17:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 17:17) - (0 ? + 17:17) + 1))))))) << (0 ? + 17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 17:17) - (0 ? + 17:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:1) - (0 ? + 7:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:1) - (0 ? + 7:1) + 1))))))) << (0 ? + 7:1))) | (((gctUINT32) ((gctUINT32) (ShaderFscaleValue) & ((gctUINT32) ((((1 ? + 7:1) - (0 ? + 7:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:1) - (0 ? 7:1) + 1))))))) << (0 ? 7:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + + gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, + Hardware->core, + 0x0010C, + clock)); + + /* Done loading the frequency scaler. */ + gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, + Hardware->core, + 0x0010C, + ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? - 9:9) - (0 ? - 9:9) + 1))))))) << (0 ? - 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? - 9:9) - (0 ? - 9:9) + 1) == 32) ? - ~0U : (~(~0U << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))))); + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))))); + } /* Restore all clock gating. */ gcmkONERROR( @@ -10434,6 +9152,13 @@ gckHARDWARE_QueryIdle( gcmkHEADER_ARG("Hardware=0x%x", Hardware); +#if gcdCAPTURE_ONLY_MODE + *IsIdle = gcvTRUE; + + gcmkFOOTER_NO(); + return gcvSTATUS_OK; +#endif + /* Verify the arguments. */ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); gcmkVERIFY_ARGUMENT(IsIdle != gcvNULL); @@ -10447,40 +9172,54 @@ gckHARDWARE_QueryIdle( break; } - /* Read idle register. */ - gcmkONERROR( - gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00004, &idle)); - - /* Pipe must be idle. */ - if ((idle | (1 << 14)) != 0x7ffffffe) + if (Hardware->mcFE) { - /* Something is busy. */ - break; + gctBOOL isIdle; + + gcmkONERROR(gckMCFE_HardwareIdle(Hardware, &isIdle)); + + if(!isIdle) + { + break; + } } + else + { + /* Read idle register. */ + gcmkONERROR( + gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00004, &idle)); + + /* Pipe must be idle. */ + if ((idle | (1 << 14)) != 0x7ffffffe) + { + /* Something is busy. */ + break; + } #if gcdSECURITY - isIdle = gcvTRUE; - break; + isIdle = gcvTRUE; + break; #else - /* Read the current FE address. */ - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00664, - &address)); + /* Read the current FE address. */ + gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, + Hardware->core, + 0x00664, + &address)); - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00664, - &address)); + gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, + Hardware->core, + 0x00664, + &address)); - /* Test if address is inside the last WAIT/LINK sequence. */ - if ((address < Hardware->lastWaitLink) || - (address >= (gctUINT64)Hardware->lastWaitLink + 16)) - { - /* FE is not in WAIT/LINK yet. */ - break; - } + /* Test if address is inside the last WAIT/LINK sequence. */ + if ((address < Hardware->lastWaitLink) || + (address >= (gctUINT64)Hardware->lastWaitLink + 16)) + { + /* FE is not in WAIT/LINK yet. */ + break; + } #endif + } /* end of else */ #if gcdINTERRUPT_STATISTIC gcmkONERROR(gckOS_AtomGet( @@ -10598,17 +9337,17 @@ gckHARDWARE_QueryIdle( static gctUINT32 CalcDelta( - IN gctUINT32 new, - IN gctUINT32 old + IN gctUINT32 newval, + IN gctUINT32 oldval ) { - if (new >= old) + if (newval >= oldval) { - return new - old; + return newval - oldval; } else { - return (gctUINT32)((gctUINT64)new + 0x100000000ll - old); + return (gctUINT32)((gctUINT64)newval + 0x100000000ll - oldval); } } @@ -10746,28 +9485,28 @@ gckHARDWARE_UpdateContextProfile( gcmkONERROR( gckOS_ReadRegisterEx(Hardware->os, Hardware->core, - 0x00438, - &profiler_part2->hi_total_cycle_count)); + 0x00078, + &profiler_part2->hi_total_idle_cycle_count)); gcmkONERROR( gckOS_ReadRegisterEx(Hardware->os, Hardware->core, - 0x00078, - &profiler_part2->hi_total_idle_cycle_count)); + 0x00438, + &profiler_part2->hi_total_cycle_count)); } else { gcmkONERROR( gckOS_ReadRegisterEx(Hardware->os, Hardware->core, - 0x00078, - &profiler_part2->hi_total_cycle_count)); + 0x0007C, + &profiler_part2->hi_total_idle_cycle_count)); gcmkONERROR( gckOS_ReadRegisterEx(Hardware->os, Hardware->core, - 0x0007C, - &profiler_part2->hi_total_idle_cycle_count)); + 0x00078, + &profiler_part2->hi_total_cycle_count)); } gcmkUPDATE_PROFILE_DATA_PART2(hi_total_cycle_count); gcmkUPDATE_PROFILE_DATA_PART2(hi_total_idle_cycle_count); @@ -10957,6 +9696,8 @@ gckHARDWARE_UpdateContextProfile( 0x00000, clock)); + gcmkONERROR( + gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0007C, 0)); gcmkONERROR( gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0)); gcmkONERROR( @@ -14256,14 +12997,14 @@ gckHARDWARE_GetFrameInfo( ~0U : (~(~0U << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))))); /* Read cycle registers. */ - gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, - Hardware->core, - 0x00078, - &info.cycles[i])); gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0007C, &info.idleCycles[i])); + gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, + Hardware->core, + 0x00078, + &info.cycles[i])); gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00438, @@ -14721,315 +13462,31 @@ gckHARDWARE_InitDVFS( } #endif -/******************************************************************************* -** -** _PrepareFunctions -** -** Generate command buffer snippets which will be used by gckHARDWARE, by which -** gckHARDWARE can manipulate GPU by FE command without using gckCOMMAND to avoid -** race condition and deadlock. -** -** Notice: -** 1. Each snippet can only be executed when GPU is idle. -** 2. Execution is triggered by AHB (0x658) -** 3. Each snippet followed by END so software can sync with GPU by checking GPU -** idle -** 4. It is transparent to gckCOMMAND command buffer. -** -** Existing Snippets: -** 1. MMU Configure -** For new MMU, after GPU is reset, FE execute this command sequence to enable MMU. -*/ -gceSTATUS -_PrepareFunctions( - IN gckHARDWARE Hardware - ) -{ - gckOS os; - gceSTATUS status; - gcePOOL pool; - gctUINT32 offset = 0; - gctUINT32 endBytes = 0; - gctUINT32 flushBytes; - gctPHYS_ADDR_T physical; - gctUINT8_PTR logical; - gctUINT32 address; - gcsHARDWARE_FUNCTION *function; - gceDUMMY_DRAW_TYPE dummyDrawType = gcvDUMMY_DRAW_INVALID; - gctUINT32 allocFlag = 0; - - gcmkHEADER_ARG("%x", Hardware); - - os = Hardware->os; - - Hardware->auxFuncBytes = Hardware->mmuFuncBytes = 1024; - - if (Hardware->wlFE) - { - gcmkONERROR(gckWLFE_End(Hardware, gcvNULL, ~0U, &endBytes)); - } - - if ((Hardware->mmuVersion > 0) && - Hardware->options.enableMMU && - (Hardware->options.secureMode != gcvSECURE_IN_TA)) - { - gctUINT32 mmuBytes = 0; - gctUINT32 tailBytes; - gctUINT32 flags = gcvALLOC_FLAG_CONTIGUOUS; - gceMMU_MODE mode; - -#if gcdENABLE_MMU_1KMODE - mode = gcvMMU_MODE_1K; -#else - mode = gcvMMU_MODE_4K; -#endif - - flags |= gcvALLOC_FLAG_4GB_ADDR; - -#if gcdENABLE_CACHEABLE_COMMAND_BUFFER - flags |= gcvALLOC_FLAG_CACHEABLE; -#endif - - pool = gcvPOOL_DEFAULT; - - /* Allocate mmu command buffer within 32bit space */ - gcmkONERROR(gckKERNEL_AllocateVideoMemory( - Hardware->kernel, - 64, - gcvVIDMEM_TYPE_COMMAND, - flags, - &Hardware->mmuFuncBytes, - &pool, - &Hardware->mmuFuncVideoMem - )); - - /* Lock for kernel side CPU access. */ - gcmkONERROR(gckVIDMEM_NODE_LockCPU( - Hardware->kernel, - Hardware->mmuFuncVideoMem, - gcvFALSE, - gcvFALSE, - &Hardware->mmuFuncLogical - )); - - /* Get CPU physical address. */ - gcmkONERROR(gckVIDMEM_NODE_GetPhysical( - Hardware->kernel, - Hardware->mmuFuncVideoMem, - 0, - &physical - )); - - /* Convert to GPU physical address. */ - gcmkVERIFY_OK(gckOS_CPUPhysicalToGPUPhysical( - os, - physical, - &physical - )); - - if (!(flags & gcvALLOC_FLAG_4GB_ADDR) && (physical & 0xFFFFFFFF00000000ULL)) - { - gcmkFATAL("%s(%d): Command buffer physical address (0x%llx) for MMU setup exceeds 32bits, " - "please rebuild kernel with CONFIG_ZONE_DMA32=y.", - __FUNCTION__, __LINE__, physical); - } - - function = &Hardware->functions[gcvHARDWARE_FUNCTION_MMU]; - function->logical = (gctUINT8_PTR)Hardware->mmuFuncLogical; - gcmkSAFECASTPHYSADDRT(function->address, physical); - - if (Hardware->mcFE) - { - gcmkONERROR(_ProgramMMUStatesMCFE( - Hardware, - Hardware->kernel->mmu, - mode, - function->logical, - &mmuBytes - )); - } - else - { - gcmkONERROR(_ProgramMMUStates( - Hardware, - Hardware->kernel->mmu, - mode, - function->logical, - &mmuBytes - )); - } - - function->endAddress = function->address + mmuBytes; - function->endLogical = function->logical + mmuBytes; - - if (Hardware->wlFE) - { - tailBytes = (gctUINT32)(Hardware->mmuFuncBytes - mmuBytes); - gcmkONERROR(gckWLFE_End(Hardware, function->endLogical, function->endAddress, &tailBytes)); - } - else - { - tailBytes = 0; - } - - function->bytes = mmuBytes + tailBytes; - - gcmkONERROR(gckVIDMEM_NODE_CleanCache( - Hardware->kernel, - Hardware->mmuFuncVideoMem, - 0, - Hardware->mmuFuncLogical, - function->bytes - )); - } - - pool = gcvPOOL_DEFAULT; - -#if gcdENABLE_CACHEABLE_COMMAND_BUFFER - allocFlag = gcvALLOC_FLAG_CACHEABLE; -#endif - - /* Allocate video memory node for aux functions. */ - gcmkONERROR(gckKERNEL_AllocateVideoMemory( - Hardware->kernel, - 64, - gcvVIDMEM_TYPE_COMMAND, - allocFlag, - &Hardware->auxFuncBytes, - &pool, - &Hardware->auxFuncVideoMem - )); - - /* Lock for GPU access. */ - gcmkONERROR(gckVIDMEM_NODE_Lock( - Hardware->kernel, - Hardware->auxFuncVideoMem, - &Hardware->auxFuncAddress - )); - - /* Lock for kernel side CPU access. */ - gcmkONERROR(gckVIDMEM_NODE_LockCPU( - Hardware->kernel, - Hardware->auxFuncVideoMem, - gcvFALSE, - gcvFALSE, - &Hardware->auxFuncLogical - )); - - /* - ** All cache flush command sequence. - */ - function = &Hardware->functions[gcvHARDWARE_FUNCTION_FLUSH]; - - function->logical = logical = (gctUINT8_PTR)Hardware->auxFuncLogical; - function->address = Hardware->auxFuncAddress; - - /* Get the size of the flush command. */ - gcmkONERROR(gckHARDWARE_Flush(Hardware, gcvFLUSH_ALL, gcvNULL, &flushBytes)); - - /* Append a flush. */ - gcmkONERROR(gckHARDWARE_Flush(Hardware, gcvFLUSH_ALL, logical, &flushBytes)); - - offset += flushBytes; - - logical = (gctUINT8_PTR)Hardware->auxFuncLogical + offset; - address = Hardware->auxFuncAddress + offset; - - if (Hardware->wlFE) - { - gcmkONERROR(gckWLFE_End(Hardware, logical, address, &endBytes)); - } - - offset += endBytes; - - function->bytes = flushBytes + endBytes; - - function->endAddress = function->address + flushBytes; - function->endLogical = function->logical + flushBytes; - - /************************************************************************************ - * Dummy draw. - */ - if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_FE_NEED_DUMMYDRAW)) - { - dummyDrawType = gcvDUMMY_DRAW_GC400; - } - - if (!gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_USC_DEFER_FILL_FIX) && - gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_USC)) - { - dummyDrawType = gcvDUMMY_DRAW_V60; - } - - if (dummyDrawType != gcvDUMMY_DRAW_INVALID) - { - gctUINT32 dummyDrawBytes; - - function = &Hardware->functions[gcvHARDWARE_FUNCTION_DUMMY_DRAW]; - - function->logical = logical = (gctUINT8_PTR)Hardware->auxFuncLogical + offset; - function->address = Hardware->auxFuncAddress + offset; - - /* Append a dummy draw. */ - gcmkONERROR(gckHARDWARE_DummyDraw(Hardware, logical, function->address, dummyDrawType, &dummyDrawBytes)); - - offset += dummyDrawBytes; - - logical += dummyDrawBytes; - address = function->address + dummyDrawBytes; - - if (Hardware->wlFE) - { - gcmkONERROR(gckWLFE_End(Hardware, logical, address, &endBytes)); - - offset += endBytes; - } - - function->endAddress = function->address + dummyDrawBytes; - function->endLogical = function->logical + dummyDrawBytes; - - function->bytes = dummyDrawBytes + endBytes; - } - gcmkASSERT(offset < Hardware->auxFuncBytes); - - gcmkONERROR(gckVIDMEM_NODE_CleanCache( - Hardware->kernel, - Hardware->auxFuncVideoMem, - 0, - Hardware->auxFuncLogical, - Hardware->auxFuncBytes - )); - - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - -OnError: - gcmkFOOTER(); - return status; -} - gceSTATUS gckHARDWARE_ExecuteFunctions( - IN gckHARDWARE Hardware, - IN gceHARDWARE_FUNCTION Function + IN gcsFUNCTION_EXECUTION_PTR Execution ) { gceSTATUS status; gctUINT32 idle; gctUINT32 timer = 0, delay = 1; - gcsHARDWARE_FUNCTION * function = &Hardware->functions[Function]; gctUINT32 address; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + +#if gcdCAPTURE_ONLY_MODE + return gcvSTATUS_OK; +#endif - address = function->address; + address = Execution->address; /* Execute prepared command sequence. */ - if (Hardware->mcFE) + if (hardware->mcFE) { - gcmkONERROR(gckMCFE_Execute(Hardware, gcvFALSE, 0, address, function->bytes)); + gcmkONERROR(gckMCFE_Execute(hardware, gcvFALSE, 0, address, Execution->bytes)); } else { - gcmkONERROR(gckWLFE_Execute(Hardware, address, function->bytes)); + gcmkONERROR(gckWLFE_Execute(hardware, address, Execution->bytes)); } #if gcdLINK_QUEUE_SIZE @@ -15039,43 +13496,24 @@ gckHARDWARE_ExecuteFunctions( gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid)); data.linkData.start = address; - data.linkData.end = address + function->bytes; + data.linkData.end = address + Execution->bytes; data.linkData.linkLow = 0; data.linkData.linkHigh = 0; - gckQUEUE_Enqueue(&Hardware->linkQueue, &data); + gckQUEUE_Enqueue(&hardware->linkQueue, &data); } #endif - { - static char *func[] = - { - "set mmu", - "flush", - "dummy draw", - "" - }; - - (void)func; - gcmkDUMP(Hardware->os, "#[function: %s]", func[Function]); - } - - gcmkDUMP_BUFFER( - Hardware->os, - gcvDUMP_BUFFER_KERNEL_COMMAND, - function->logical, - address, - function->bytes - ); + gckFUNCTION_Dump(Execution); /* Wait until GPU idle. */ do { - gckOS_Delay(Hardware->os, delay); + gckOS_Delay(hardware->os, delay); gcmkONERROR(gckOS_ReadRegisterEx( - Hardware->os, - Hardware->core, + hardware->os, + hardware->core, 0x00004, &idle)); @@ -15083,13 +13521,13 @@ gckHARDWARE_ExecuteFunctions( delay *= 2; #if gcdGPU_TIMEOUT - if (timer >= Hardware->kernel->timeOut) + if (timer >= hardware->kernel->timeOut) { - gckHARDWARE_DumpGPUState(Hardware); + gckHARDWARE_DumpGPUState(hardware); - if (Hardware->kernel->command) + if (hardware->kernel->command) { - gckCOMMAND_DumpExecutingBuffer(Hardware->kernel->command); + gckCOMMAND_DumpExecutingBuffer(hardware->kernel->command); } /* Even if hardware is not reset correctly, let software diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.h b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.h index 1ae9edfc701beb..83dfd6d1974754 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.h +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -56,6 +56,8 @@ #ifndef __gc_hal_kernel_hardware_h_ #define __gc_hal_kernel_hardware_h_ +#include "gc_hal_kernel_hardware_func.h" + #ifdef __cplusplus extern "C" { @@ -67,7 +69,6 @@ typedef enum { gcvHARDWARE_FUNCTION_MMU, gcvHARDWARE_FUNCTION_FLUSH, - gcvHARDWARE_FUNCTION_DUMMY_DRAW, gcvHARDWARE_FUNCTION_NUM, } gceHARDWARE_FUNCTION; @@ -76,25 +77,6 @@ typedef struct _gckASYNC_FE * gckASYNC_FE; typedef struct _gckWLFE * gckWLFE; typedef struct _gckMCFE * gckMCFE; -typedef struct _gcsHARWARE_FUNCTION -{ - /* Entry of the function. */ - gctUINT32 address; - - /* CPU address of the function. */ - gctUINT8_PTR logical; - - /* Bytes of the function. */ - gctUINT32 bytes; - - /* Hardware address of END in this function. */ - gctUINT32 endAddress; - - /* Logical of END in this function. */ - gctUINT8_PTR endLogical; -} -gcsHARDWARE_FUNCTION; - typedef struct _gcsSTATETIMER { gctUINT64 start; @@ -223,17 +205,7 @@ struct _gckHARDWARE gctPOINTER pendingEvent; - /* Function used by gckHARDWARE. */ - gckVIDMEM_NODE mmuFuncVideoMem; - gctPOINTER mmuFuncLogical; - gctSIZE_T mmuFuncBytes; - - gckVIDMEM_NODE auxFuncVideoMem; - gctPOINTER auxFuncLogical; - gctUINT32 auxFuncAddress; - gctSIZE_T auxFuncBytes; - - gcsHARDWARE_FUNCTION functions[gcvHARDWARE_FUNCTION_NUM]; + gcsFUNCTION_EXECUTION_PTR functions; gcsSTATETIMER powerStateCounter; gctUINT32 executeCount; @@ -293,8 +265,7 @@ gckHARDWARE_HandleFault( gceSTATUS gckHARDWARE_ExecuteFunctions( - IN gckHARDWARE Hardware, - IN gceHARDWARE_FUNCTION Function + IN gcsFUNCTION_EXECUTION_PTR Execution ); gceSTATUS diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_async_fe.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_async_fe.c index 40672cf144998e..a339e5ac800574 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_async_fe.c +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_async_fe.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_fe.h b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_fe.h index b673e630975c84..cc397e8f2d4547 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_fe.h +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_fe.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -286,5 +286,11 @@ gckMCFE_Execute( IN gctUINT32 Bytes ); +/* Query hardware module idle */ +gceSTATUS +gckMCFE_HardwareIdle( + IN gckHARDWARE Hardware, + OUT gctBOOL_PTR IsIdle + ); #endif diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.c new file mode 100644 index 00000000000000..54a7908d80fb4f --- /dev/null +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.c @@ -0,0 +1,15164 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#include "gc_hal.h" +#include "gc_hal_kernel.h" +#include "gc_hal_kernel_hardware.h" + + +#if gcdINITIALIZE_PPU +static gctUINT32 ppuMem0[] = +{ + 0x00010000, +}; + +static gctUINT32 ppuMem1[] = +{ + 0x00010000, +}; + +static gctUINT32 ppuMem2[] = +{ + 0x38011039, + 0x39200804, + 0xC0A90050, + 0x74000008, + 0x38021039, + 0x39202804, + 0xC0A90050, + 0x74000008, + 0x38031039, + 0x39204804, + 0xC0A90050, + 0x74000008, + 0xB8017005, + 0x002018FC, + 0x01C900C0, + 0x40390098, + 0xB8027005, + 0x002028FC, + 0x01C90140, + 0x40390098, + 0xB8037005, + 0x002038FC, + 0x01C901C0, + 0x40390098, + 0x04041036, + 0x00000804, + 0x4000047A, + 0x00000002, + 0x0400100C, + 0x3FC04804, + 0x40AB0440, + 0x2000007A, + 0x38000835, + 0x39207804, + 0x41E80050, + 0x00390018, + 0x04041036, + 0x00001804, + 0x4000047A, + 0x00000002, + 0x0400100C, + 0x3FC04804, + 0x40AB0440, + 0x2000007A, + 0x38000835, + 0x39207804, + 0x41E80050, + 0x00390028, + 0x04041036, + 0x00002804, + 0x4000047A, + 0x00000002, + 0x0400100C, + 0x3FC04804, + 0x40AB0440, + 0x2000007A, + 0x38000835, + 0x39207804, + 0x41E80050, + 0x00390038, +}; + +static gctUINT32 ppuMem3[] = +{ + 0x07841009, + 0x00200004, + 0xC0000000, + 0x200000D8, + 0xB8019005, + 0x0020D81C, + 0xC00106D0, + 0x0039004A, + 0x38011039, + 0x39200804, + 0xC0A90050, + 0x74000008, + 0xB8029005, + 0x0020D81C, + 0xC00106D0, + 0x0039004A, + 0x38021039, + 0x39202804, + 0xC0A90050, + 0x74000008, + 0xB8039005, + 0x0020D81C, + 0xC00106D0, + 0x0039004A, + 0x38031039, + 0x39204804, + 0xC0A90050, + 0x74000008, + 0xB8017005, + 0x002018FC, + 0x01C900C0, + 0x40390098, + 0xB8027005, + 0x002028FC, + 0x01C90140, + 0x40390098, + 0xB8037005, + 0x002038FC, + 0x01C901C0, + 0x40390098, + 0x04041036, + 0x00000804, + 0x4000047A, + 0x00000002, + 0x0400100C, + 0x3FC04804, + 0x40AB0440, + 0x2000007A, + 0x38000835, + 0x39207804, + 0x41E80050, + 0x00390018, + 0x04041036, + 0x00001804, + 0x4000047A, + 0x00000002, + 0x0400100C, + 0x3FC04804, + 0x40AB0440, + 0x2000007A, + 0x38000835, + 0x39207804, + 0x41E80050, + 0x00390028, + 0x04041036, + 0x00002804, + 0x4000047A, + 0x00000002, + 0x0400100C, + 0x3FC04804, + 0x40AB0440, + 0x2000007A, + 0x38000835, + 0x39207804, + 0x41E80050, + 0x00390038, +}; + +static gctUINT32 ppuMem4[] = +{ + 0x7E7E7E7E, + 0x797B7E7F, + 0x79797879, + 0x7D7C7B7A, + 0x80818181, + 0x7B7C7D7F, + 0x83817C79, + 0x7C7D8082, + 0x7C7C7D7D, + 0x7D7D7C7C, + 0x81818181, + 0x7D7D7F80, + 0x73777E83, + 0x71717171, + 0x7E7A7574, + 0x8A888782, + 0x7475797B, + 0x8D888078, + 0x8F92918F, + 0x787B8189, + 0x908E8781, + 0x787B838C, + 0x7A767576, + 0x85868581, + 0x817F8185, + 0x87838181, + 0x8182878D, + 0x787C8181, + 0x807A787A, + 0x8B878483, + 0x8D8A8787, + 0x8885878D, + 0x817E7D7D, + 0x81828483, + 0x7C7D7D7E, + 0x69686D76, + 0x6E6D6C6C, + 0x70727271, + 0x74727172, + 0x74757675, + 0x6F6E7072, + 0x70717170, + 0x6E6E7073, + 0x78767471, + 0x7A77726F, + 0x84817F7C, + 0x93949596, + 0x8D8D9092, + 0x8F8F8D88, + 0xB3A79991, + 0xABB4BABD, + 0x8D9199A2, + 0x77737274, + 0x676F787A, + 0x78716862, + 0x7577797A, + 0x74747474, + 0x78777675, + 0x78797A7A, + 0x74747576, + 0x817C7977, + 0x82848685, + 0x787A7D80, + 0x8886807A, + 0x79858D91, + 0x6D6A696E, + 0x676D7471, + 0x5659646A, + 0x3E3B3F45, + 0x44484A46, + 0x675B504A, + 0x82807A72, + 0x71777C80, + 0x6868696C, + 0x716E6D6B, + 0x7F7B7773, + 0x87909391, + 0x908F8A85, + 0x9596938F, + 0x89898C91, + 0x89878584, + 0x92908E8C, + 0x99999693, + 0x7B818993, + 0x7A818582, + 0x928B8078, + 0x928A8D97, + 0xA5968F93, + 0x939DA5AB, + 0x8F8D8A8C, + 0x8D8B8A8C, + 0x85878B8D, + 0x7C7D8082, + 0x7F807F7E, + 0x85858382, + 0x787B7F83, + 0x72717475, + 0x9B928378, + 0x9EB4B6AB, + 0x8C898589, + 0x998F8A8E, + 0x686D7E93, + 0x6A6A6865, + 0x65646568, + 0x64676868, + 0x60616162, + 0x7A7A7268, + 0x72767878, + 0x6C717577, + 0x716A6466, + 0x7D7E7B78, + 0x7A777679, + 0x8484817F, + 0x7A7E8183, + 0x89807E84, + 0x8080868D, + 0x60505069, + 0x7074857A, + 0x968D7A69, + 0x8E8C8D93, + 0x6D6D7A8D, + 0x8A7E7470, + 0x7C7D7F80, + 0x7A7A7A7B, + 0x7A7A7C7C, + 0x74757678, + 0x7C7A7775, + 0x75777A7C, + 0x7A7A7978, + 0x7A7A7A7A, + 0x81817C7A, + 0x7D7E7F81, + 0x8D898581, + 0x8185898D, + 0x7374787B, + 0x79797674, + 0x797A7A7B, + 0x79797878, + 0x807F7D7C, + 0x7D7E7F80, + 0x78797A7A, + 0x79797878, + 0x77787878, + 0x76767677, + 0x77777778, + 0x76767676, + 0x78767574, + 0x7F7E7C7A, + 0x797B7D7F, + 0x76767677, + 0x807E7C7A, + 0x82828181, + 0x7C7F8183, + 0x7979797A, + 0x84807B79, + 0x8E8D8C88, + 0x88888888, + 0x86878788, + 0x82818384, + 0x85868684, + 0x87878787, + 0x87878786, + 0x767B8185, + 0x72717173, + 0x7F818282, + 0x76787A7C, + 0x76767676, + 0x74747576, + 0x78736E6A, + 0x77787A7A, + 0x78757474, + 0x85827F7B, + 0x8D8E8D8D, + 0x8184878C, + 0x87837F7C, + 0x82848788, + 0x80818182, + 0x7E7E7F7F, + 0x8985817E, + 0x8C8C8D8C, + 0x8B8A8A8B, + 0x7A80878B, + 0x86817D7B, + 0x8D8D8C89, + 0x87888785, + 0x82828386, + 0x89848181, + 0x9293938F, + 0x8D8D8F92, + 0x868A8E8F, + 0x89837F7C, + 0x8C8E8F8D, + 0x78808689, + 0x63666A71, + 0x5F5C5F63, + 0x73726E67, + 0x75727274, + 0x68696E74, + 0x6C6B6C6B, + 0x83837D73, + 0x686B7074, + 0x807A716A, + 0x81828180, + 0x676C747C, + 0x68626060, + 0x7D7C7A72, + 0x7074787A, + 0x7F79716E, + 0x6E6A7585, + 0x686E7474, + 0x5C646665, + 0x4F4C4C52, + 0x63615A53, + 0x786F6763, + 0x7A7F8385, + 0x77757475, + 0x6B6E7171, + 0x65646467, + 0x6662605F, + 0x736E6A68, + 0x79797877, + 0x74757779, + 0x78747170, + 0x7B7D7D7B, + 0x7F7B7B7E, + 0x7C818483, + 0x8B878585, + 0x92939491, + 0x99949190, + 0x90959B9D, + 0x6C717E8A, + 0x7E7D7870, + 0x81828282, + 0x84828080, + 0x71727C87, + 0x7D7A7774, + 0x676F7E88, + 0x837B7068, + 0x84888A8B, + 0x7A7A7C80, + 0x76747373, + 0x76787979, + 0x6E6E7072, + 0x87817A73, + 0x8385878A, + 0x797B8082, + 0x8989837D, + 0x7E7C7D83, + 0x817B7A7B, + 0x757F8788, + 0x6F727476, + 0x6D6D6D6E, + 0x707A7A75, + 0x62626368, + 0x62636566, + 0x67656362, + 0x6E6E6E6E, + 0x7E78726E, + 0x817F7E7D, + 0x908D8A86, + 0x82818488, + 0x8A8C8B87, + 0x8184878A, + 0x807F7E7F, + 0x84858787, + 0x767A7F82, + 0x6C6C6C6C, + 0x7674716E, + 0x76787A7A, + 0x70717274, + 0x6E6D6E70, + 0x7D7B7772, + 0x807B7A78, + 0x878D8E87, + 0x79828989, + 0x74777774, + 0x4E545E67, + 0x6B645A50, + 0x8A796C68, + 0x63718490, + 0x7068615C, + 0x74747675, + 0x7C787471, + 0x82828180, + 0x7A7B7B7B, + 0x74757779, + 0x858B877E, + 0x7B747077, + 0x6F717980, + 0x74767572, + 0x6E6F6F6F, + 0x696A6B6D, + 0x565C6060, + 0x605F5A55, + 0x5F5F5E5D, + 0x66646160, + 0x736E6A68, + 0x7C7F7E7A, + 0x75757879, + 0x79797877, + 0x71717375, + 0x6C6E7273, + 0x6D6B6A69, + 0x71706F6E, + 0x66686A6B, + 0x61616263, + 0x7F7F7365, + 0x61697379, + 0x6B67625D, + 0x69696B6C, + 0x7776716B, + 0x75737274, + 0x6E788082, + 0x6F696365, + 0x6E6F7172, + 0x6E6D6B6B, + 0x74625E6F, + 0x74767679, + 0x77787979, + 0x7F7B7876, + 0x7C7D7D7C, + 0x6E71757A, + 0x63626262, + 0x6C6A6865, + 0x7C827C72, + 0x76747173, + 0x74706F6F, + 0x74777A78, + 0x6A6F7274, + 0x56595E64, + 0x615E775C, + 0x61625E6E, + 0x694F8559, + 0x13285176, + 0x1910261C, + 0x16201313, + 0x29191017, + 0x567B8219, + 0x836E967A, + 0x6B6C7087, + 0x726C6862, + 0x71827477, + 0x10171091, + 0x13252F10, + 0x1010171C, + 0x17101923, + 0x60847A58, + 0x66735684, + 0x6E6A6868, + 0x79777471, + 0x5C747B77, + 0x5676866C, + 0x5C67616B, + 0x102D1F14, + 0x67251028, + 0x955B7689, + 0x8A8B8B8C, + 0x8989898A, + 0x936E9489, + 0x79778177, + 0x102A6A6E, + 0x10151310, + 0x1E131214, + 0x13131F1D, + 0x817C8D8B, + 0x71706368, + 0x696E7479, + 0x7A746E69, + 0x7D807E7C, + 0x73737478, + 0x79797572, + 0x60646C74, + 0x7870596B, + 0x7B8D9A93, + 0x777A7274, + 0x105F6880, + 0x10181829, + 0x78604720, + 0x65696D6E, + 0x56585C60, + 0x8D685B55, + 0x8E78A599, + 0x21107F71, + 0x1024102F, + 0x10101B2D, + 0x13251618, + 0x634F5C16, + 0x44567A3C, + 0x5B565350, + 0x5D5D5D5C, + 0x5E5C5C5C, + 0x69686461, + 0x73716F6E, + 0x7A797775, + 0x56677099, + 0x465D624C, + 0x1F134859, + 0x10191910, + 0x10101010, + 0x10101010, + 0x71939610, + 0x8F574661, + 0x7A7C7B7A, + 0x7B797778, + 0x6068886D, + 0x705F7971, + 0x18101925, + 0x1F10101D, + 0x1B1A1F10, + 0x6C4C1F13, + 0x6866686A, + 0x5D545A6B, + 0x5A5A5959, + 0x57585959, + 0x6C625953, + 0x6D6F7171, + 0x44586863, + 0x4C4E3C58, + 0x101F2613, + 0x101D1110, + 0x161F1019, + 0x4F191310, + 0x6056617B, + 0x4A505F6C, + 0x855B3E60, + 0x3F4A3E78, + 0x107A3849, + 0x1B101A27, + 0x1910101A, + 0x102B101F, + 0x5E6F1112, + 0x67626263, + 0x65625E5C, + 0x5F626466, + 0x7A808588, + 0x4A556472, + 0x66629274, + 0x4E464873, + 0x6E673E56, + 0x102F6E57, + 0x1B101810, + 0x13131C19, + 0x101E1019, + 0x35685021, + 0x75676D6E, + 0x5981667E, + 0x463E4E4F, + 0x105C6350, + 0x19111822, + 0x21101E10, + 0x21232323, + 0x18191A1E, + 0x1D101E12, + 0x674E4810, + 0x66747368, + 0x7C6E5D59, + 0x6B6B6A6A, + 0x6F6E6B6A, + 0x7F80776E, + 0x74707077, + 0x51107274, + 0x10171E18, + 0x19191919, + 0x19191919, + 0x191B1C1C, + 0x17171819, + 0x646A6268, + 0x6A726C74, + 0x73637362, + 0x32485C51, + 0x2E1A1017, + 0x1F131023, + 0x2A103114, + 0x564A121C, + 0x4C45374F, + 0x35425A64, + 0x6D614E40, + 0x4550606C, + 0x3D454B50, + 0x282A2F35, + 0x7B797979, + 0x7D7F807E, + 0x7B7B7B7B, + 0x7F7E7D7C, + 0x80808180, + 0x7B7C7E7F, + 0x83817C79, + 0x7E7F8182, + 0x7A7A7A7B, + 0x7B7A7A7A, + 0x817F7D7C, + 0x83838281, + 0x777D7E7A, + 0x7B746E6E, + 0x807F7E7D, + 0x83838281, + 0x7A7A7D7F, + 0x918D857E, + 0x9192918F, + 0x7D81868D, + 0x8D8D8883, + 0x75798088, + 0x837D7977, + 0x8A8C8D89, + 0x84828285, + 0x87838183, + 0x7E81878D, + 0x81838280, + 0x8B878481, + 0x9393928F, + 0x8F939595, + 0x8787898C, + 0x82808080, + 0x83848684, + 0x82828283, + 0x6E6E737C, + 0x6F6E6E6E, + 0x72737371, + 0x75737272, + 0x7A7A7A79, + 0x72737476, + 0x70727373, + 0x6D6C6E71, + 0x7877746F, + 0x6F717475, + 0x8C847A72, + 0x8E8F9090, + 0x87888A8C, + 0x8A87837F, + 0xB1A5968D, + 0xA4ABB1B4, + 0x878C939B, + 0x78757578, + 0x6870787A, + 0x837A6E66, + 0x8B8B8B89, + 0x74747575, + 0x79787675, + 0x78797A7A, + 0x76767777, + 0x817D7B7A, + 0x7E818383, + 0x77747476, + 0x8C89847D, + 0x74818C91, + 0x6C68666A, + 0x6D70726A, + 0x5C5E666C, + 0x564A494C, + 0x6A707168, + 0x746E6866, + 0x81817D79, + 0x787B7E80, + 0x6E6F7174, + 0x7473706E, + 0x7F7B7875, + 0x878D8D8A, + 0x8D8D8985, + 0x99988F87, + 0x797D8591, + 0x85817E7C, + 0x93918D8A, + 0x98999894, + 0x7A7F8791, + 0x70747472, + 0x938B7D72, + 0x8D888C96, + 0x9C8F888D, + 0x979C9FA1, + 0x8E8D8E91, + 0x8D8C8C8D, + 0x87898C8E, + 0x7A7B7F82, + 0x8482807C, + 0x8181807E, + 0x74767B80, + 0x72727374, + 0x84817B75, + 0x949F9988, + 0x8D8B8687, + 0x938D898C, + 0x74717A8B, + 0x6B6D7074, + 0x65676869, + 0x68686765, + 0x5B5C6064, + 0x787A746A, + 0x78787474, + 0x787B7B7B, + 0x7C777374, + 0x84858381, + 0x807E7E81, + 0x8483817E, + 0x7C7F8283, + 0x877E7B7D, + 0x787E878B, + 0x524F4B5A, + 0x6661685E, + 0x948D7A6B, + 0x8D8B8C91, + 0x6E6A788C, + 0x7F7C7A77, + 0x7B7C7D7E, + 0x7B7B7B7B, + 0x7B7C7E7E, + 0x7777787A, + 0x74747576, + 0x76757474, + 0x7A797878, + 0x7A7A7A7A, + 0x807E7A78, + 0x7B7C7D7F, + 0x87868381, + 0x81838687, + 0x7374797D, + 0x7A7A7774, + 0x7B7C7D7D, + 0x7A7A7A7B, + 0x7F7E7D7D, + 0x7C7C7E7F, + 0x78797A7A, + 0x78787878, + 0x77787878, + 0x76767677, + 0x74747575, + 0x74747474, + 0x77747473, + 0x7D7C7A79, + 0x787A7B7C, + 0x77767677, + 0x7D7D7D7C, + 0x81807E7D, + 0x80818283, + 0x7B7B7C7E, + 0x8683817F, + 0x8B8B8A88, + 0x88888787, + 0x85868787, + 0x81818183, + 0x85868684, + 0x86878787, + 0x85858585, + 0x787C8082, + 0x75747475, + 0x7F7F7F7F, + 0x7C7D7E7F, + 0x7F7F7E7E, + 0x7C7C7E7F, + 0x7A797472, + 0x7375797B, + 0x7A787675, + 0x8583817D, + 0x8B8C8C8B, + 0x7F818588, + 0x87837E7B, + 0x81848788, + 0x7E808181, + 0x81807F7E, + 0x8784817E, + 0x8B8C8B8A, + 0x8A8A8A8B, + 0x7A7F8689, + 0x85817E7C, + 0x89898887, + 0x8184888B, + 0x87868281, + 0x88858281, + 0x8D8D8D8B, + 0x8B8B8C8D, + 0x86888C8D, + 0x87838180, + 0x83868989, + 0x797E8285, + 0x6C6E6F74, + 0x5F5C6064, + 0x73726E66, + 0x76757475, + 0x62636973, + 0x6E696763, + 0x8A8A8378, + 0x646E7A82, + 0x79726862, + 0x787A7978, + 0x5E636B74, + 0x615B5A5C, + 0x7273726B, + 0x7C7C7A78, + 0x817E7B7B, + 0x6D6A7584, + 0x686C7172, + 0x61636668, + 0x5053585D, + 0x605B5047, + 0x776F6662, + 0x7F7F7C7A, + 0x75777A7D, + 0x6B6E6F6E, + 0x65646568, + 0x68666564, + 0x736F6B68, + 0x7A797876, + 0x7B7C7C7B, + 0x70707375, + 0x7A797673, + 0x7F7A7B7E, + 0x7E838785, + 0x8B878585, + 0x9092928F, + 0x99939190, + 0x8E949A9C, + 0x72757D85, + 0x807F7C76, + 0x81807F7F, + 0x86868482, + 0x70717B87, + 0x7A787573, + 0x6C717B83, + 0x8A83796F, + 0x85898C8D, + 0x7A7A7D81, + 0x74747677, + 0x6F727474, + 0x6E6C6E6F, + 0x89847A73, + 0x82848789, + 0x787A7E81, + 0x83817A73, + 0x7A7A7A80, + 0x817A7979, + 0x77808788, + 0x70737475, + 0x6D6D6E6E, + 0x6E777773, + 0x62626266, + 0x5F606262, + 0x63626160, + 0x6B6B6B6A, + 0x817A726D, + 0x797B8185, + 0x8D88817B, + 0x81818589, + 0x8E8E8C87, + 0x8286898C, + 0x81818181, + 0x80818284, + 0x73767B7F, + 0x6C6B6C6C, + 0x7574716E, + 0x7678797A, + 0x71727374, + 0x6A6A6D6F, + 0x7A78746E, + 0x7877797A, + 0x8B8E8B81, + 0x7A818685, + 0x777A7A77, + 0x4C505A62, + 0x6F695D52, + 0x87786D69, + 0x6571838D, + 0x746F6761, + 0x74747677, + 0x7A777473, + 0x7A7B7B7B, + 0x77767575, + 0x7A7A7A79, + 0x868B8781, + 0x7E79767C, + 0x6F71797F, + 0x74757572, + 0x6E6F7070, + 0x696A6B6D, + 0x545E6363, + 0x53514F4E, + 0x5E5D5C5A, + 0x5D5D5D5E, + 0x6A64615F, + 0x777B7B74, + 0x6C6E7174, + 0x696B6D6D, + 0x6C6A6C6E, + 0x6C6E6F6E, + 0x6A686868, + 0x6E6E6D6C, + 0x696C6E6E, + 0x64646668, + 0x7B7B7165, + 0x61687076, + 0x6A67625D, + 0x62646769, + 0x716C655F, + 0x76747373, + 0x71797C7D, + 0x6D69676A, + 0x7072716F, + 0x6F6E6C6E, + 0x74625D6E, + 0x76787779, + 0x77767676, + 0x79797877, + 0x7A7B7C7C, + 0x6F727478, + 0x71706F6F, + 0x79787573, + 0x7B7A7977, + 0x6D6F7479, + 0x6E6E7072, + 0x7875726F, + 0x6D717475, + 0x5B5D6268, + 0x615C6759, + 0x61685E6E, + 0x7A7D5C44, + 0xD6144E6D, + 0xDDE5E2EB, + 0xE4EBEBEB, + 0xEBDCE3EB, + 0x8F6E73DD, + 0x64518573, + 0x6766626E, + 0x6E676260, + 0x74887C71, + 0xE7DD3B61, + 0xE7E9CCEB, + 0xDCE1EBEB, + 0xEBDEDCE2, + 0x606F8774, + 0x6371687F, + 0x6D6A6868, + 0x7674726F, + 0x80817C79, + 0x61748786, + 0x78635A4E, + 0xEBE5D014, + 0x86C8E5E7, + 0x6E748F7B, + 0x77777778, + 0x75757676, + 0x7E647F74, + 0x7470656D, + 0xE1444A68, + 0xE9CED7EB, + 0xE6DDDDDD, + 0xE7EAE9E8, + 0x874A7282, + 0x9F7E876E, + 0x696E7478, + 0x79746E69, + 0x7C808180, + 0x6E6E7076, + 0x6B6E6E6F, + 0x5E606267, + 0x5F5C646D, + 0x6E76716E, + 0x73796A73, + 0x17496762, + 0xDEEBDFE4, + 0x899AC9D7, + 0x6267696B, + 0x56575A5E, + 0x6B5C656F, + 0x83687A6F, + 0xD31A7483, + 0xEAD3E5E7, + 0xEBEBDEE0, + 0xEBE4EBDF, + 0x692F63E8, + 0x534A584E, + 0x58565554, + 0x5C5C5B5A, + 0x5E5C5C5C, + 0x65646260, + 0x6B696868, + 0x70706E6D, + 0x7A707474, + 0x4E4A543B, + 0xC41B564C, + 0xE9E5EBC4, + 0xE8E8E8E8, + 0xE8E8E8E8, + 0x8F556FEB, + 0x6E7A7593, + 0x5B5F6E7B, + 0x61646560, + 0x4A727E51, + 0x6B54585E, + 0xE1EBD52E, + 0xE4EBE7E8, + 0xE6E8EBEA, + 0x6668E6EB, + 0x4E5D5E4F, + 0x6E6C5F4F, + 0x53535252, + 0x53535454, + 0x635C5653, + 0x67686867, + 0x375B6352, + 0x44505A4F, + 0xEBE2D820, + 0xEAE6D6CC, + 0xDCE8E5E8, + 0x6FE8E2EB, + 0x45556166, + 0x43504E43, + 0x495A525A, + 0x4E4D4276, + 0x2B446056, + 0xD0EBEBDC, + 0xDCE4EBD1, + 0xEBE2D2EB, + 0x438CE3D5, + 0x60626E6E, + 0x625E5956, + 0x5D606264, + 0x74736F6C, + 0x5E626970, + 0x6E6C8561, + 0x4A4B496C, + 0x7A63582A, + 0xE929566C, + 0xDDD9EBE9, + 0xE2EBE2EB, + 0xE7DEDBEB, + 0x785A54DC, + 0x7B74715E, + 0x687B5673, + 0x443E5154, + 0x1462654E, + 0xEBE3E3E4, + 0xEBE3EBE7, + 0xE2E3E3E3, + 0xDFDFE0E1, + 0xE8E0E9E2, + 0x636C60C8, + 0x727B786E, + 0x7C746867, + 0x58575D62, + 0x7D776C60, + 0x7C7C746D, + 0x6B6B6E75, + 0xD0347668, + 0xEBEBE4CA, + 0xE9E9E9E9, + 0xE9E9E9E9, + 0xE9E9E9E9, + 0xE8E8E8E8, + 0x5B5D5756, + 0x61646062, + 0x50485064, + 0x104D4946, + 0xDFE9EAE8, + 0xEBEBEADB, + 0xD7EADEEB, + 0x4876D4E3, + 0x5B4E4958, + 0x3F4B616D, + 0x6960534A, + 0x4E56626A, + 0x3F474D50, + 0x2C2E3238, + 0x79747372, + 0x8483817E, + 0x7F808181, + 0x807F7F7F, + 0x80818080, + 0x7D7E7F80, + 0x82817C79, + 0x80808182, + 0x77777878, + 0x78787777, + 0x817C7A77, + 0x8B8A8785, + 0x7A817C74, + 0x877A6D6F, + 0x82858789, + 0x7C7D7E81, + 0x81818284, + 0x95918A84, + 0x93928F8D, + 0x87898E92, + 0x8A8D8C89, + 0x75787D84, + 0x938A8380, + 0x999B9C99, + 0x898A8A8B, + 0x89848286, + 0x7E81888F, + 0x8C8A8681, + 0x9699958F, + 0x999E9E98, + 0x8F9B9F9D, + 0x84888A89, + 0x83828283, + 0x87878786, + 0x8A8A8989, + 0x74747A84, + 0x706E6F71, + 0x74747472, + 0x79747373, + 0x8383817D, + 0x787A7C7F, + 0x6F727476, + 0x68686B6E, + 0x7876726D, + 0x686D747A, + 0x9387776B, + 0x898B8B8C, + 0x82848687, + 0x84837F7A, + 0xA59A8D85, + 0x999FA3A5, + 0x83868C92, + 0x7A797A7D, + 0x6E747A7C, + 0x8A837A73, + 0x8A8B8D8D, + 0x74757778, + 0x79787674, + 0x78787878, + 0x78787878, + 0x817E7C7B, + 0x7F818383, + 0x7A777778, + 0x8081817F, + 0x6B788287, + 0x68635F62, + 0x73757066, + 0x65686C6E, + 0x75656062, + 0x8B929389, + 0x7D7E8081, + 0x7D7D7C7C, + 0x81818180, + 0x76787B7F, + 0x79787674, + 0x7D7B7A79, + 0x84868581, + 0x8B8B8884, + 0x8E938C83, + 0x6C6D7481, + 0x817D7A78, + 0x8D8C8885, + 0x93949391, + 0x8183878E, + 0x6E6F706F, + 0x8D898074, + 0x8C898D96, + 0x8D838188, + 0x9D9C9894, + 0x8C8F9399, + 0x8A898887, + 0x8286898A, + 0x787C8389, + 0x7C7A7977, + 0x7E7E7B7A, + 0x6F73777C, + 0x78726F6F, + 0x8182827F, + 0x8F958E81, + 0x8E8D8887, + 0x8B8B8989, + 0x7F787882, + 0x6B6E757B, + 0x6A6C6E6C, + 0x686A6867, + 0x56585D63, + 0x777A736A, + 0x7D7A7473, + 0x8686827F, + 0x87868484, + 0x88898887, + 0x83838487, + 0x85838180, + 0x7D7E8184, + 0x81818180, + 0x5E6C7B81, + 0x49514A4C, + 0x6259574A, + 0x938D7E71, + 0x8C8A8B8F, + 0x736A788D, + 0x747C8481, + 0x7A7A7B7B, + 0x7D7C7B7B, + 0x7D7E7F80, + 0x797A7A7B, + 0x6B6E7477, + 0x77746E6B, + 0x79787777, + 0x7979797A, + 0x7E7C7975, + 0x7A7A7A7C, + 0x81818282, + 0x82828181, + 0x74767B80, + 0x7D7B7975, + 0x80818181, + 0x7C7C7E7F, + 0x7E7E7D7D, + 0x7A7B7C7D, + 0x78797A7B, + 0x76767677, + 0x77777777, + 0x76767676, + 0x71727272, + 0x70707171, + 0x7472706F, + 0x7A797875, + 0x77797A7A, + 0x76767676, + 0x7A7A7B7B, + 0x7F7C7A78, + 0x84838382, + 0x80818283, + 0x87878685, + 0x87878787, + 0x87878786, + 0x85858687, + 0x81808181, + 0x86878684, + 0x85868787, + 0x82828384, + 0x797A7C7D, + 0x76767778, + 0x7F7D7A7A, + 0x84838281, + 0x87878786, + 0x84858787, + 0x80817F7E, + 0x6E72787D, + 0x7F7C7A79, + 0x86858381, + 0x86878787, + 0x7A7C8083, + 0x86817C79, + 0x81838787, + 0x7E818284, + 0x7D7C7C7C, + 0x8581807E, + 0x8A8A8887, + 0x88888989, + 0x7B7F8487, + 0x8381807F, + 0x83848484, + 0x7E7F8488, + 0x81828280, + 0x8784817E, + 0x87878687, + 0x87878786, + 0x87878788, + 0x87878686, + 0x7A7E8387, + 0x777A7D7F, + 0x75757475, + 0x5F5E6266, + 0x72706C65, + 0x78797675, + 0x5D5E6470, + 0x6C65605C, + 0x89898376, + 0x6874818A, + 0x6E6A6462, + 0x71716E6D, + 0x5F63696E, + 0x5A55575C, + 0x61656863, + 0x867F756E, + 0x84868788, + 0x6E6E7884, + 0x686C7071, + 0x6865676B, + 0x5761696C, + 0x5C564A3E, + 0x7068605C, + 0x837F7872, + 0x73767B81, + 0x6B6E6F6F, + 0x65646568, + 0x6F6F6E6E, + 0x7573706F, + 0x7E7A7775, + 0x86858381, + 0x686E787F, + 0x7C78706A, + 0x8078797C, + 0x878D8F8A, + 0x8B878686, + 0x8D8F8F8E, + 0x96928F8E, + 0x8B909799, + 0x7A7A7D81, + 0x82817F7C, + 0x84807E7F, + 0x8D8E8E8A, + 0x6F717A86, + 0x79777473, + 0x7474787C, + 0x928D847A, + 0x85898D8E, + 0x7A7B7E81, + 0x6E717477, + 0x68696C6E, + 0x69656464, + 0x89837A71, + 0x8386888A, + 0x787A7F81, + 0x7C79716B, + 0x7676787A, + 0x837C7979, + 0x79808788, + 0x72747677, + 0x6B6C6E6F, + 0x6C73736E, + 0x62626263, + 0x5C5D5E5F, + 0x5F5E5C5C, + 0x62606060, + 0x7D766D65, + 0x6E72797E, + 0x83807972, + 0x7F7F8489, + 0x918F8A84, + 0x81848788, + 0x81818080, + 0x7D7F8181, + 0x7274797C, + 0x6C6C6C6C, + 0x7473706E, + 0x76777878, + 0x73747475, + 0x66686C6F, + 0x76746E69, + 0x77747575, + 0x8A8D8B81, + 0x83878786, + 0x80828381, + 0x5457626B, + 0x6E6A6259, + 0x83766E6E, + 0x67718189, + 0x7A786F68, + 0x75747579, + 0x76767474, + 0x72737476, + 0x74716F6E, + 0x83817D78, + 0x878A8886, + 0x82818183, + 0x6F71787E, + 0x73747573, + 0x6E6E6F70, + 0x69696B6C, + 0x525C6261, + 0x4D4D4B4B, + 0x5D5C5B59, + 0x56585B5C, + 0x615A5858, + 0x71797A6E, + 0x6262676B, + 0x5E626564, + 0x625F6061, + 0x6B6A6865, + 0x6B696868, + 0x6F6E6E6D, + 0x6E707172, + 0x68686A6C, + 0x76756E65, + 0x62676D72, + 0x6867625D, + 0x5B5D6266, + 0x6F69625E, + 0x70727373, + 0x77797774, + 0x6A6A6D71, + 0x7576726E, + 0x6F6E6E71, + 0x73625D6B, + 0x76787777, + 0x75727272, + 0x787A7B7A, + 0x78797A7A, + 0x72737476, + 0x78767676, + 0x7E7D7B7A, + 0x80787B85, + 0x626B7A83, + 0x6A6A6968, + 0x7974706C, + 0x71747778, + 0x6264686C, + 0x6A645A5F, + 0x50625B72, + 0x58896E95, + 0xE9162710, + 0xE8E1EBEB, + 0xE4EBE2E6, + 0xE1DFEBE2, + 0x101028E7, + 0x68454A10, + 0x72625669, + 0x7C776C6A, + 0x5174806E, + 0xD8D12810, + 0xE8EBCAEB, + 0xE4EAEBDE, + 0xEBE5E2D8, + 0x87645811, + 0x7363697C, + 0x6B6A6969, + 0x706F6E6C, + 0x6E768768, + 0x7A78928C, + 0x94726577, + 0xEBD2E015, + 0x5CD4EBE0, + 0x6F8D9355, + 0x6C6C6C6C, + 0x6B6B6B6B, + 0x797A7D63, + 0x1F1C1050, + 0xD0121326, + 0xEBEBEBE7, + 0xE8EBEBEB, + 0xE5EBDAE3, + 0x552E2519, + 0x8770725F, + 0x676A7074, + 0x74706A66, + 0x777B7D7D, + 0x696A6D72, + 0x5E646B6F, + 0x615F5C5B, + 0x6C5C6A5E, + 0x82857A7A, + 0x605F5B68, + 0x3972666E, + 0xEAEBE5EA, + 0x7A92D6E6, + 0x5E626365, + 0x5456575B, + 0x7058504F, + 0x7C727179, + 0xE21B2B10, + 0xEBD2E8E5, + 0xE0E8E6E8, + 0xE5E5D0D7, + 0x633438DA, + 0x63505362, + 0x56545454, + 0x5C5B5957, + 0x5D5C5C5B, + 0x5F5F5F5E, + 0x61605F5E, + 0x63636262, + 0x8B636352, + 0x635A6349, + 0xDE103B15, + 0xEBE4E4EB, + 0xEBEBEBEB, + 0xEBEBEBEB, + 0x1A132DCC, + 0x70552812, + 0x4E5C6D77, + 0x7D6E594C, + 0x146E8866, + 0x1A101030, + 0xD6E7E33E, + 0xE8E2DEEB, + 0xEBE6DDCC, + 0x1728D6EB, + 0x5B52341A, + 0x56443841, + 0x4D4D4C4C, + 0x504F4F4E, + 0x56555353, + 0x5E5D5C59, + 0x363F3B44, + 0x1013665B, + 0xEBEAE531, + 0xEBE0E4E8, + 0xE5E2EBEB, + 0x32DDD6EB, + 0x6256392C, + 0x4B413844, + 0x394E525A, + 0x5A4A4D70, + 0x25191F2A, + 0xE0EBEBDF, + 0xE3E7EBE4, + 0xEBE2E4EB, + 0x1434CDEB, + 0x6F7B7D53, + 0x645E5853, + 0x5F626567, + 0x716D635C, + 0x6C6C6D70, + 0x66686C4E, + 0x5860505B, + 0x78637D76, + 0xDE2C1E15, + 0xE8E3EBE8, + 0xE5E5E5E9, + 0xEBEBEBE2, + 0x10112DEB, + 0x6F4D3510, + 0x7A856379, + 0x3E435E67, + 0x10555642, + 0xEBEAEBEB, + 0xE3E4E8EA, + 0xE2E2E2E2, + 0xE3E3E3E3, + 0xE4DEE6EB, + 0x7D7926DD, + 0x7E817A72, + 0x77767577, + 0x50525D67, + 0x7F77695A, + 0x7A79746F, + 0x65686E75, + 0xE5295C55, + 0xEBE7EBE8, + 0xE6E6E6E6, + 0xE6E6E6E6, + 0xE8E8E8E8, + 0xEAEAE9E9, + 0x5352534C, + 0x5151544D, + 0x26194F48, + 0x1114294F, + 0xEBDDD9EB, + 0xE6E4E8EB, + 0xD6E9E1EB, + 0x104ABBE9, + 0x503A4345, + 0x66676866, + 0x65605B59, + 0x565C6568, + 0x40464B4F, + 0x3133363A, + 0x78737070, + 0x8887847F, + 0x83868788, + 0x7E7F8081, + 0x81818181, + 0x7F7F8081, + 0x817F7B79, + 0x80808081, + 0x75767777, + 0x77777675, + 0x827D7976, + 0x8F8E8B87, + 0x7A7E7A74, + 0x8B817574, + 0x85898D8E, + 0x7A7B7D81, + 0x81818284, + 0x93908A85, + 0x938E8987, + 0x91939696, + 0x878C8E8F, + 0x787A7D81, + 0x988F8783, + 0xA4A4A39F, + 0x8E939699, + 0x8C868388, + 0x83878D93, + 0x8F8D8985, + 0x90999A93, + 0x8F98988F, + 0x8F9D9C91, + 0x82878786, + 0x85838485, + 0x88898887, + 0x8E8E8D8D, + 0x78797F88, + 0x72707273, + 0x77787774, + 0x7C777575, + 0x8B8A8782, + 0x7E818689, + 0x6D70757A, + 0x62626568, + 0x76736E68, + 0x6E707477, + 0x92887C72, + 0x8B8C8D8D, + 0x84858788, + 0x82868581, + 0x9088807E, + 0x8F929394, + 0x8385888C, + 0x7E7D8082, + 0x757A7F80, + 0x8A87817D, + 0x80818588, + 0x7476797A, + 0x77767474, + 0x77777676, + 0x79797878, + 0x7E7B7A7A, + 0x81828281, + 0x81818182, + 0x6E747A80, + 0x6871787A, + 0x6B666262, + 0x7879726C, + 0x6E767674, + 0x81797474, + 0x878C8D8A, + 0x7E82878A, + 0x7C7B7A7B, + 0x87858280, + 0x7A7E8286, + 0x7B7C7A7A, + 0x7A7A797A, + 0x81807E7B, + 0x8C8B8784, + 0x7B898D8C, + 0x6F68636B, + 0x80808181, + 0x7F7F7F80, + 0x8B898582, + 0x92908D8D, + 0x8F919598, + 0x8E959993, + 0x8C8A8C92, + 0x807A7C87, + 0xA19B9189, + 0x888E989F, + 0x8B8A8782, + 0x7D848A8C, + 0x757A8186, + 0x75757474, + 0x81817F7D, + 0x71747A7E, + 0x7A716D6B, + 0x81868884, + 0x767A7A77, + 0x82817C76, + 0x86898A8B, + 0x817C7A7F, + 0x6E707476, + 0x7474726F, + 0x686D6F6F, + 0x5F5D5E62, + 0x7574726F, + 0x7D7A7775, + 0x8D8C8780, + 0x888B8C8C, + 0x8C8B8A89, + 0x8386888B, + 0x85828182, + 0x7D7D8084, + 0x7A818481, + 0x50627276, + 0x55605A59, + 0x726F6E5A, + 0x8D8A7E74, + 0x8786868A, + 0x786F7A8C, + 0x737D8887, + 0x7A7A7A7A, + 0x7E7D7B7A, + 0x7C7E7E7F, + 0x797A7A7B, + 0x686D7377, + 0x77736D68, + 0x78787776, + 0x78787979, + 0x7C7B7874, + 0x79797A7B, + 0x7B7D8183, + 0x83817D7B, + 0x76797E82, + 0x807E7A77, + 0x82838383, + 0x7D7E8081, + 0x7B7C7C7C, + 0x7A7A7A7B, + 0x77797A7B, + 0x75757576, + 0x76767676, + 0x76767676, + 0x6F6F6F6F, + 0x6E6E6E6E, + 0x706E6D6C, + 0x75747472, + 0x76777979, + 0x73737474, + 0x76777574, + 0x7A787574, + 0x87858280, + 0x82848787, + 0x85868687, + 0x82838384, + 0x86858584, + 0x84848586, + 0x81808181, + 0x87878785, + 0x84858687, + 0x7E7F8182, + 0x79797979, + 0x76777879, + 0x7F7B7977, + 0x86858481, + 0x88878787, + 0x85868787, + 0x85868583, + 0x72757B81, + 0x8481807E, + 0x86868786, + 0x7F818283, + 0x7577797C, + 0x85807A76, + 0x80828587, + 0x7F828486, + 0x7274777B, + 0x81807E7D, + 0x88878684, + 0x87878787, + 0x7D808285, + 0x8181807F, + 0x7D7E8081, + 0x837F7E80, + 0x757C8487, + 0x84817B76, + 0x82828384, + 0x83828180, + 0x87868584, + 0x84858686, + 0x70757C81, + 0x72747577, + 0x79777473, + 0x61616468, + 0x716E6A65, + 0x7B7B7774, + 0x5F5F6572, + 0x6462615F, + 0x7A7A756C, + 0x777A7B7C, + 0x686A6E74, + 0x746F6B68, + 0x6E717475, + 0x615D6269, + 0x5E666C69, + 0x81766961, + 0x85878988, + 0x6F737B84, + 0x6B6D6F6F, + 0x6E69696D, + 0x68707675, + 0x63635B52, + 0x6C645D5E, + 0x7E7C7874, + 0x7374787B, + 0x6A6F7476, + 0x66646265, + 0x7576736E, + 0x73747474, + 0x807B7875, + 0x8E8D8985, + 0x6972808A, + 0x847D736A, + 0x7D787A80, + 0x80878B87, + 0x8C8A8887, + 0x8C8D8D8D, + 0x928D8C8B, + 0x858B9294, + 0x7B7B7B7C, + 0x7F7E7D7B, + 0x837C7A7A, + 0x8F92928D, + 0x6F707983, + 0x79777473, + 0x7C777677, + 0x94928C83, + 0x82878B8D, + 0x797A7C80, + 0x6D6F7477, + 0x68686A6C, + 0x6E67625F, + 0x87847E76, + 0x82838687, + 0x7A7C7F81, + 0x7474716F, + 0x73737374, + 0x857F7A78, + 0x7C818788, + 0x74787A7B, + 0x66686C70, + 0x6A706F69, + 0x64646264, + 0x5C5D5E5F, + 0x5A5A5A5B, + 0x54515152, + 0x736C6259, + 0x6B686B6E, + 0x7C7A7771, + 0x7A7B8084, + 0x8A87837E, + 0x7B7D7F80, + 0x7C7B7A7A, + 0x77797A7C, + 0x6E707476, + 0x6D6C6C6B, + 0x7473716E, + 0x76767676, + 0x75757676, + 0x63666C71, + 0x726F6A66, + 0x827B7774, + 0x8990938C, + 0x91918F8D, + 0x8C8E9091, + 0x6E737C85, + 0x73747470, + 0x81777476, + 0x67707D85, + 0x7F7D746D, + 0x7674747A, + 0x74747575, + 0x6E6E7173, + 0x736F6D6C, + 0x88857F79, + 0x87878788, + 0x86878989, + 0x7071777D, + 0x70737473, + 0x6B6D6E6E, + 0x6868696A, + 0x5A5D6162, + 0x6264625C, + 0x5C5C5C5C, + 0x56585B5C, + 0x5C565657, + 0x6C76796B, + 0x5C595C5F, + 0x61646662, + 0x59565656, + 0x6866625D, + 0x6F6E6D6D, + 0x74737271, + 0x70727374, + 0x696A6C6E, + 0x6E6E6A65, + 0x6265686C, + 0x6868625E, + 0x585C6066, + 0x6C645E5B, + 0x6C6E7271, + 0x7A78726D, + 0x6B6E7278, + 0x7B7B746E, + 0x6E6D6F75, + 0x71625E6A, + 0x73757474, + 0x726D6C6E, + 0x7C7F7F7A, + 0x74767779, + 0x74747474, + 0x74737372, + 0x78777674, + 0x897F8391, + 0x636B7D8D, + 0x6D66615E, + 0x75767673, + 0x73767879, + 0x696A6D70, + 0x605E4C65, + 0x51585367, + 0x4F5C4E45, + 0xE2E4D342, + 0xEBEBE8DC, + 0xE8E7E2EB, + 0xC8D7EBE2, + 0xEBEBD0EB, + 0x7B8CDFDE, + 0x78706471, + 0x80816A68, + 0x28567456, + 0xE2EBEAEB, + 0xD7EBEBD8, + 0xEBE4E6E3, + 0xE5E5EBDF, + 0x6858CAE6, + 0x6D657D65, + 0x6868696A, + 0x6A696968, + 0x6E5C6D65, + 0x96949381, + 0x70687C93, + 0xE5EBDB32, + 0x63C4D4CA, + 0x6A767A63, + 0x6B6B6B6B, + 0x6B6B6B6B, + 0x716E6E55, + 0xEBB43E68, + 0xEBC6E7EB, + 0xC7DFEBE5, + 0xEBEBE8E4, + 0xD6EBDEEB, + 0x62EBE1D6, + 0x767A536E, + 0x62666C70, + 0x6E6B6662, + 0x70717171, + 0x6E6E6E6F, + 0x5C636E74, + 0x67635E5B, + 0x5D596D67, + 0x65636463, + 0x68625B71, + 0x15535C71, + 0xDBE4E1EA, + 0x828FD7DA, + 0x575A5B5C, + 0x51525456, + 0x695D5757, + 0x686B4A69, + 0xEBE0BB3A, + 0xE8E9DEE6, + 0xE9E9E6EB, + 0xE1EBEBEB, + 0x69DCCFEB, + 0x4B3E444A, + 0x5451504F, + 0x5C5A5856, + 0x5C5C5B5B, + 0x58595B5C, + 0x58585857, + 0x5A595959, + 0x5046546A, + 0x4950363A, + 0xE5EBE110, + 0xC5EBD4E6, + 0xE7E7E7E7, + 0xE7E7E7E7, + 0xEBEBD3E7, + 0x6475D6E0, + 0x64635B53, + 0x7C716562, + 0x1E457A8E, + 0xDFEBEBC5, + 0xE3E3EBC7, + 0xEBE6E5EB, + 0xEBE8E5DB, + 0xEBE0EBDC, + 0x40125DE0, + 0x3E486060, + 0x4B4B4B4B, + 0x4E4D4C4C, + 0x4D4F5154, + 0x5654504E, + 0x4E6D4C4D, + 0xDF392F31, + 0xC3E4E0E3, + 0xE0DEEBEB, + 0xEBE1E2DC, + 0xE1EBE7D2, + 0x4A165EE8, + 0x45536868, + 0x4D4E535C, + 0x3631524E, + 0xD7DC2E3E, + 0xEBCBDCEB, + 0xE6E7E5EB, + 0xC3E4EBEB, + 0xEBEBDAEB, + 0x7557466E, + 0x6E68615C, + 0x66696E70, + 0x6F6E6863, + 0x5F62666C, + 0x585B5B55, + 0x747C6756, + 0x5B495256, + 0xE1EBC329, + 0xEBEBD2C9, + 0xEBE2EBEB, + 0xD4DCEBE8, + 0xEBEBC5EB, + 0x5A6AC1E2, + 0x8D96746E, + 0x474D6B74, + 0x145F5E4A, + 0xE8E4EBE9, + 0xEBEBE0EB, + 0xE7E7E8E8, + 0xE7E8E8E8, + 0xEBEBE0E7, + 0x6E7742EB, + 0x807C7671, + 0x6C71797E, + 0x67696E70, + 0x726E6A67, + 0x71707071, + 0x62676D70, + 0xE7255C5E, + 0xE6E1EBEB, + 0xEBEBEBEB, + 0xEBEBEBEB, + 0xEBEBEBEB, + 0xEBEBEBEB, + 0x4B4A5751, + 0x3A404C3E, + 0xCE453E49, + 0xE6E3DDE5, + 0xD9E4E9EB, + 0xDCEBEBD9, + 0xE1EBEBCA, + 0xD1DDEBEB, + 0x5043574F, + 0x6E6B6861, + 0x63606162, + 0x585E6466, + 0x3D414548, + 0x32333538, + 0x7B757372, + 0x8A898781, + 0x85888C8D, + 0x7C7D7F81, + 0x82828282, + 0x7F808181, + 0x7D7D7A79, + 0x7F7D7C7D, + 0x77787979, + 0x79797877, + 0x85807C7A, + 0x908F8D89, + 0x78777A7F, + 0x8786827D, + 0x86898C8D, + 0x7D7E8082, + 0x7A7A7B7D, + 0x8886817B, + 0x90888380, + 0x96999997, + 0x82878B8E, + 0x7A7B7C7F, + 0x8B85807D, + 0x9D9A9691, + 0x8F969EA4, + 0x8D878488, + 0x8C8E9294, + 0x8C8C8C8B, + 0x818D918D, + 0x878D8980, + 0x8E99917F, + 0x85888785, + 0x86848585, + 0x88898A88, + 0x8C8C8A8B, + 0x76767C86, + 0x74737374, + 0x7A7B7A78, + 0x7D7A7878, + 0x8D8C8883, + 0x81868B8E, + 0x696E747B, + 0x5C5C6063, + 0x736F6862, + 0x7C797471, + 0x8B888480, + 0x8E909191, + 0x88898B8D, + 0x858B8B88, + 0x7F7A787C, + 0x89888787, + 0x87878888, + 0x81818284, + 0x7C7F8283, + 0x8786817E, + 0x84848687, + 0x76787A7C, + 0x76757474, + 0x76767676, + 0x77777777, + 0x78777778, + 0x7A7A7B7A, + 0x8684807D, + 0x70757E84, + 0x71747574, + 0x77736E6E, + 0x7C7D7879, + 0x76858279, + 0x7A7A7673, + 0x7A767475, + 0x7A7D8182, + 0x7E7C7A7A, + 0x8583817F, + 0x7D7F8184, + 0x7C7E7F7E, + 0x7877777A, + 0x817C7A7A, + 0x8F8D8986, + 0x7A8C9598, + 0x8074686B, + 0x83888D8E, + 0x7174787D, + 0x837C7673, + 0xA49E948B, + 0xBABDC4C9, + 0x96A6B6BA, + 0x89868284, + 0x7A787C86, + 0xA1998D83, + 0x878D98A0, + 0x9B99938C, + 0x848E999B, + 0x7474777A, + 0x79787775, + 0x7D7E7D7C, + 0x6F72767A, + 0x706B696B, + 0x6F747876, + 0x706A6A6A, + 0x8A8C877B, + 0x84898D8E, + 0x7C7F8181, + 0x78787470, + 0x7D7A7575, + 0x69717679, + 0x7A736966, + 0x6D6F7A84, + 0x7C7B7872, + 0x8C8D8881, + 0x82878B8B, + 0x8C888787, + 0x80858B8D, + 0x817C7A7C, + 0x807D7E82, + 0x767C7F7B, + 0x66717875, + 0x6E747377, + 0x818D967E, + 0x88877F78, + 0x83818084, + 0x7A757B86, + 0x757C8482, + 0x7979797A, + 0x7C7B7A7A, + 0x7A7B7B7C, + 0x77787879, + 0x6D6F7375, + 0x75736F6D, + 0x78787776, + 0x78787979, + 0x7E7C7976, + 0x7A7A7B7D, + 0x7A7D8184, + 0x84817D7A, + 0x797B8084, + 0x82817E7A, + 0x82838485, + 0x7C7D7F81, + 0x7A7A7A7B, + 0x7979797A, + 0x76787A7A, + 0x74747475, + 0x76767675, + 0x76767676, + 0x6F6F6F6F, + 0x6E6E6E6E, + 0x6E6D6C6B, + 0x7271706F, + 0x72747575, + 0x6C6D6E70, + 0x75746F6B, + 0x75737273, + 0x8985807C, + 0x8285888A, + 0x81818181, + 0x80808080, + 0x84838382, + 0x83838484, + 0x82818182, + 0x88888785, + 0x82848686, + 0x797A7D80, + 0x7A7A7978, + 0x797A7A7A, + 0x7E7B7A79, + 0x83828181, + 0x81818181, + 0x80808181, + 0x88868280, + 0x80828688, + 0x87868584, + 0x85868787, + 0x777A7D7E, + 0x6F707274, + 0x827D7672, + 0x7E818385, + 0x7E818181, + 0x686C7279, + 0x7F7D7C7B, + 0x86858381, + 0x82838382, + 0x7C7C7E80, + 0x7D7D7C7C, + 0x78797A7C, + 0x807A7979, + 0x71798183, + 0x817B7570, + 0x80818283, + 0x7E7C7B7B, + 0x85848381, + 0x7D7E7F80, + 0x696E747A, + 0x6A6C6E70, + 0x77746F6C, + 0x6566686B, + 0x706E6B68, + 0x7F7D7773, + 0x6A686E78, + 0x62686D6E, + 0x686A6862, + 0x8A807167, + 0x6872808A, + 0x736E6865, + 0x74767776, + 0x716C7077, + 0x70777D7A, + 0x756C625D, + 0x7F80807D, + 0x6E757C81, + 0x6C6D6D6D, + 0x726E6D6E, + 0x7A7A7A77, + 0x70797873, + 0x6A625E63, + 0x74767879, + 0x7A767372, + 0x68727A80, + 0x66626062, + 0x79787168, + 0x6F747878, + 0x817C7A78, + 0x908E8A86, + 0x727A8790, + 0x8D867A73, + 0x7A7A8087, + 0x6E757C7D, + 0x8D8D8B8A, + 0x898A8B8C, + 0x8D898787, + 0x7E848C8E, + 0x76767677, + 0x77777676, + 0x7C757374, + 0x898C8C86, + 0x6E6E7580, + 0x77747371, + 0x7F797574, + 0x8E8E8B86, + 0x7C808589, + 0x7476797A, + 0x7173777A, + 0x6D6E6F70, + 0x7E766E6A, + 0x85868683, + 0x7B7A797A, + 0x7C7E7F7E, + 0x6E71767A, + 0x6E6D6D6C, + 0x867E7772, + 0x84878989, + 0x777C7F80, + 0x61646A71, + 0x6C706E67, + 0x6C6B6868, + 0x60626465, + 0x5C5C5C5E, + 0x4F4C4D4F, + 0x6A655C55, + 0x64616266, + 0x7575736C, + 0x7877797A, + 0x7A7A7A79, + 0x73747474, + 0x77767474, + 0x6F707374, + 0x67696C6E, + 0x6D6B6A69, + 0x7474716F, + 0x76757474, + 0x79787877, + 0x65686F74, + 0x6F6E6966, + 0x87817B77, + 0x8B939690, + 0x99959291, + 0x92939699, + 0x8C8C9094, + 0x878B8D8D, + 0x7E79797E, + 0x666D7981, + 0x807E756E, + 0x7775767A, + 0x74747575, + 0x6E6F7072, + 0x74706E6E, + 0x87847E79, + 0x85828387, + 0x868A8D8A, + 0x7071767B, + 0x6E717473, + 0x68696B6C, + 0x68686868, + 0x6B67686B, + 0x81858377, + 0x5C5C5E60, + 0x5B5C5D5C, + 0x59565859, + 0x65737668, + 0x5A565657, + 0x63666662, + 0x57555453, + 0x67635F5A, + 0x6F6E6E6D, + 0x74747371, + 0x6F717272, + 0x68686B6E, + 0x68676565, + 0x66656567, + 0x6C6B6762, + 0x5D5F6469, + 0x675C5550, + 0x6E6F716E, + 0x7A756E69, + 0x6F72767A, + 0x81807972, + 0x6B6D727A, + 0x6F646069, + 0x6E727070, + 0x6C68696D, + 0x7B7C7A74, + 0x72737475, + 0x76747472, + 0x77767676, + 0x76767677, + 0x8D83838D, + 0x6F707C8C, + 0x716A6768, + 0x74787B79, + 0x73747677, + 0x6E6E6F71, + 0x62655878, + 0x69565C6B, + 0x1410164B, + 0xE8E2C73D, + 0xD0EBD5EB, + 0xEAEAEBEB, + 0xEBEBD0D8, + 0xD4DCEBD0, + 0x6A7ADEEB, + 0x5762636C, + 0x52706977, + 0x10274110, + 0xE0CBE8EB, + 0xEBE0E6EB, + 0xDBC3DAEB, + 0xE8EBEBC3, + 0x3835C1EB, + 0x6E4E5031, + 0x66686869, + 0x64646465, + 0x8C5C5A75, + 0x8C907670, + 0x311D8B7B, + 0xCBEBC525, + 0x81DDE3EB, + 0x605F687C, + 0x67676767, + 0x67676767, + 0x21155B6F, + 0xEBB0222B, + 0xC0EBE0E3, + 0xEBEBE8E0, + 0xDADBE0E4, + 0xD5EBBFE2, + 0x1DC5DEEB, + 0x59431E25, + 0x61646A6E, + 0x6B686360, + 0x6B686564, + 0x7776746F, + 0x61666F75, + 0x68666361, + 0x5A5F6A75, + 0x736E6E64, + 0x63685363, + 0x101C2D3F, + 0xE9EBE6E7, + 0x6171D6E2, + 0x51525252, + 0x4F505050, + 0x5754443D, + 0x1D371047, + 0xCAD7B939, + 0xE4E6EBE7, + 0xEBEBE2E8, + 0xE4D8EADB, + 0x2EDEEAEB, + 0x32293113, + 0x53504D4B, + 0x57575656, + 0x5B5C5B5B, + 0x54555759, + 0x55555555, + 0x55555555, + 0x51694B5F, + 0x1B371054, + 0xCCEBDC2B, + 0xE3E6DCEB, + 0xE9E9E9E9, + 0xE9E9E9E9, + 0xE0E8EBE4, + 0x6C63E8DC, + 0x65676E75, + 0x535A6265, + 0x19152410, + 0xDBE2EBCA, + 0xE6E9D1EB, + 0xD7E9E8D2, + 0xDAEBEBEB, + 0xDEE2DEE7, + 0x40104ED0, + 0x3B44564F, + 0x4A4B4C4C, + 0x4C4C4B4A, + 0x4A4D5155, + 0x514F4B49, + 0x16412F3C, + 0xE0341F19, + 0xE3E7BEEB, + 0xEBEBE4D0, + 0xDBE2EBE5, + 0xEBE9E0E7, + 0x491356E2, + 0x313F5050, + 0x44566257, + 0x2E13483A, + 0xEBE61910, + 0xE7EBEBD1, + 0xE2EBDFDD, + 0xEBE8EBDC, + 0xE7EBD6EB, + 0x633C1035, + 0x7A746D68, + 0x6F73787A, + 0x6C6E6F70, + 0x49515D67, + 0x55505363, + 0x70727463, + 0x1A191051, + 0xE8D2D03E, + 0xCAE0E4EB, + 0xE2EADDEB, + 0xEBEBDFEB, + 0xD2EBDDD0, + 0x5F7ADCEB, + 0x7A786267, + 0x535C7880, + 0x105A5E50, + 0xEBE6EBE7, + 0xCADBC7EB, + 0xE8E8E8E9, + 0xE3E6E8E9, + 0xCBE8DBE3, + 0x79817DC3, + 0x77726E6E, + 0x61687379, + 0x88837568, + 0x72747A83, + 0x65666B6F, + 0x61646867, + 0xD1104A50, + 0xE8E3E8DE, + 0xE2E2E2E2, + 0xE2E2E2E2, + 0xE5E5E6E6, + 0xE4E4E4E5, + 0x484A5F5E, + 0x293C5040, + 0xD63A101C, + 0xE8EBE3E4, + 0xDEEBEBEA, + 0xDFEBE7D7, + 0xE8EBEBE4, + 0xEAD2EBD5, + 0x40342A10, + 0x6164695F, + 0x62616264, + 0x555B6264, + 0x383D4043, + 0x30303134, + 0x7F797574, + 0x89898885, + 0x85878B8C, + 0x7D7E7F81, + 0x81828282, + 0x7C7D7F81, + 0x7A7A7977, + 0x7B7A7879, + 0x7C7C7D7D, + 0x7D7D7C7C, + 0x87848180, + 0x8E8D8D8A, + 0x77747E89, + 0x81878A82, + 0x8788898A, + 0x7F808285, + 0x6E707476, + 0x7C79746F, + 0x8C837D7A, + 0x94979994, + 0x7C808589, + 0x7F7F7D7C, + 0x7F7D7B7A, + 0x8E8B8581, + 0x8A8E979F, + 0x8D878587, + 0x91929191, + 0x888A8D8F, + 0x7D868B8A, + 0x8E8F887E, + 0x8B8F887B, + 0x88898786, + 0x89878686, + 0x888A8C8C, + 0x81828284, + 0x6E6E737B, + 0x78747372, + 0x7E7F7E7C, + 0x7B79797A, + 0x87878480, + 0x7F83888B, + 0x666B7279, + 0x58585C61, + 0x716D655C, + 0x837D756F, + 0x88878787, + 0x8E909191, + 0x88898B8D, + 0x888D8A86, + 0x7A797980, + 0x8482807F, + 0x89888787, + 0x84838485, + 0x7D808384, + 0x81817F7D, + 0x81817F80, + 0x797A7A7A, + 0x7A7A7979, + 0x77787878, + 0x75767677, + 0x70727577, + 0x6C6E6F70, + 0x8881746B, + 0x81828689, + 0x76767472, + 0x7E7A7675, + 0x83857F85, + 0x7A8E897C, + 0x7579736C, + 0x7E746C6E, + 0x75757576, + 0x7A797876, + 0x7C7C7C7C, + 0x7F7F7E7D, + 0x7C808282, + 0x78767678, + 0x857D797A, + 0x93908E8C, + 0x929B9E9C, + 0x8F888387, + 0x878E9396, + 0x72747A81, + 0x7D777370, + 0xAAA19387, + 0xC1C6CACA, + 0x8E9EB0BA, + 0x857E7977, + 0x7E7C7F84, + 0x9C958A81, + 0x888D959C, + 0xABABA49A, + 0x8F9DA8AB, + 0x74777A7D, + 0x71737474, + 0x6A6C6D6E, + 0x5F616468, + 0x62606062, + 0x62656665, + 0x81746E6C, + 0x9699988E, + 0x858C8F8D, + 0x767F8483, + 0x81817A73, + 0x817D7A7C, + 0x6F757B7E, + 0x978A796E, + 0x686F869A, + 0x817D776E, + 0x858A8983, + 0x7B828583, + 0x857F7C7B, + 0x757D8789, + 0x7A716E70, + 0x827D7B7E, + 0x777B7C7B, + 0x7F7F7C78, + 0x7E818189, + 0x808E9F8D, + 0x88898581, + 0x84818183, + 0x7A7A7B7F, + 0x797B7E7D, + 0x797A7A7A, + 0x7A7A7979, + 0x77787979, + 0x75757676, + 0x74747474, + 0x74747474, + 0x79787777, + 0x7979797A, + 0x81817C7A, + 0x7D7E7F81, + 0x7F818284, + 0x8482817F, + 0x7C7E8185, + 0x8382817E, + 0x7F818385, + 0x7A7A7B7D, + 0x78787979, + 0x7A797878, + 0x76777879, + 0x74747474, + 0x75757575, + 0x76767676, + 0x71727272, + 0x70707171, + 0x6F6E6E6E, + 0x7070706F, + 0x70717272, + 0x696A6C6E, + 0x75746E68, + 0x716F6E72, + 0x88837B76, + 0x7F83878A, + 0x7B7B7B7B, + 0x7F7E7D7B, + 0x82818181, + 0x82828283, + 0x82818182, + 0x87878785, + 0x81848585, + 0x74777A7E, + 0x7B797776, + 0x7F7F7E7D, + 0x7F7E7D7C, + 0x7F7F807F, + 0x7A7B7D7E, + 0x7C7B7A7A, + 0x8B86807B, + 0x8D8E8F8E, + 0x86878787, + 0x81818385, + 0x7074787A, + 0x6A6A6B6E, + 0x807A736E, + 0x7B7E8182, + 0x787A7978, + 0x63676E74, + 0x7E7B7A79, + 0x81818180, + 0x7C7F8080, + 0x74747578, + 0x77767574, + 0x74747576, + 0x6D6B6E70, + 0x74747470, + 0x7A777474, + 0x7F81817F, + 0x77747578, + 0x8081817D, + 0x7A7B7B7C, + 0x696E7479, + 0x6465686A, + 0x746F6A66, + 0x6D6E6F70, + 0x72716F6E, + 0x837E7874, + 0x7A797B81, + 0x68737C81, + 0x68696866, + 0x8F816F62, + 0x6D788792, + 0x6966625F, + 0x67686A6B, + 0x77707074, + 0x7F858781, + 0x6E6C6C6C, + 0x78787673, + 0x6E767C7D, + 0x6E6D6A69, + 0x72716F6E, + 0x7E7B7774, + 0x6D7A7B78, + 0x5E56525B, + 0x6E727577, + 0x807A736E, + 0x68737D83, + 0x63605D60, + 0x7F7C7368, + 0x777F8280, + 0x807D7C7B, + 0x8C8A8783, + 0x7C81898F, + 0x8C88827D, + 0x7A7A7E81, + 0x777B7E7E, + 0x8D8D8D8B, + 0x8787878A, + 0x8A878585, + 0x7980878B, + 0x74737373, + 0x70737576, + 0x7D777575, + 0x898A8884, + 0x6E6E7681, + 0x73717170, + 0x7C777473, + 0x84858581, + 0x74767C81, + 0x6E717373, + 0x71717374, + 0x71737373, + 0x88837C78, + 0x7D818789, + 0x78747271, + 0x8081807C, + 0x686F7981, + 0x6A6A6968, + 0x857C736C, + 0x88888988, + 0x7A7F8182, + 0x5D626A72, + 0x70726E67, + 0x7674706E, + 0x6A6C6D6E, + 0x66666868, + 0x59585A5C, + 0x6A68635D, + 0x57596168, + 0x6867635C, + 0x78746F6C, + 0x6A6E7478, + 0x6B696868, + 0x72706E6D, + 0x6C6E7072, + 0x6567696B, + 0x6B686765, + 0x7473716E, + 0x76747372, + 0x7B7A7978, + 0x6A6E747A, + 0x6F6E6C69, + 0x7A767574, + 0x83888981, + 0x918B8786, + 0x8C8C8E92, + 0x908C8988, + 0x92939493, + 0x7A777A81, + 0x636A747B, + 0x7F7B736C, + 0x7A797A7D, + 0x74757677, + 0x71717273, + 0x74737171, + 0x817F7B78, + 0x807C7E81, + 0x83878A87, + 0x7171757A, + 0x6C707474, + 0x67686869, + 0x6B696868, + 0x736E6E71, + 0x888E8D81, + 0x5F606367, + 0x5F616261, + 0x56565B5A, + 0x606E7263, + 0x59565555, + 0x5E5E5E5C, + 0x5A5A5857, + 0x62605C5B, + 0x68676665, + 0x6D6C6B69, + 0x6E6E6E6E, + 0x6466686B, + 0x62606164, + 0x6A666362, + 0x73726F6C, + 0x66686B6F, + 0x6E68625E, + 0x6D6E7070, + 0x74716D6A, + 0x79797977, + 0x82817A75, + 0x696E777F, + 0x6F666269, + 0x6C706F6E, + 0x68686A6E, + 0x7373716D, + 0x70707171, + 0x76757472, + 0x80818181, + 0x7A7B7D7F, + 0x84807A79, + 0x7B75757F, + 0x74757A7F, + 0x70747675, + 0x6F707172, + 0x6F6F6E6E, + 0x74766F80, + 0x54285C79, + 0xE6C81A56, + 0xE5CBEBE0, + 0x212CBBE8, + 0x101E1010, + 0x1D191F30, + 0xEBEBDE10, + 0x6B78D4DC, + 0x7D7E7472, + 0x646F5C6F, + 0xEAE8C937, + 0xE4EBE4E4, + 0x25101FD6, + 0x23172710, + 0xCFEBBF26, + 0xE0D2EBD6, + 0x936E7AB5, + 0x63656868, + 0x5F5F6062, + 0x60567A55, + 0x7A68625B, + 0xC6117F6A, + 0xEBE4EBB5, + 0x66DDE0DE, + 0x626A5F67, + 0x61616060, + 0x62626261, + 0xBF386560, + 0xE2EBD5E9, + 0x1CDEEBEB, + 0x101A2419, + 0x161C1914, + 0xEBC92225, + 0xEBE9EBE6, + 0x7560D7E4, + 0x6064696D, + 0x69676260, + 0x68626060, + 0x7A78746E, + 0x62646A70, + 0x60626262, + 0x6E6C5F60, + 0x4B645C72, + 0x62716E62, + 0xE8DE3A6D, + 0xE6E8DCDB, + 0x646FE1E5, + 0x4D4C4C4C, + 0x4F4E4E4D, + 0x55544D4F, + 0xDCD63E5F, + 0xEBCCEBDB, + 0x152DC6EB, + 0x101D2512, + 0xDEC52731, + 0xD0EBD7E9, + 0x5772D6E1, + 0x504F4D4B, + 0x55555452, + 0x595B5C5C, + 0x51535557, + 0x53535353, + 0x53535353, + 0x5B724E56, + 0xE3C5316D, + 0xE6C5EBE4, + 0x1927C2EB, + 0x10101010, + 0x10101010, + 0xEBEAD11B, + 0x6A56EBEB, + 0x565C666D, + 0x4A4D5154, + 0xD0E3CA44, + 0xEBC7E8EB, + 0x312525C1, + 0x17212613, + 0x221A1016, + 0xEBE9EBCA, + 0xE8EBDBD0, + 0x5A585674, + 0x494A4A4B, + 0x4D4C4A4A, + 0x4B4E5254, + 0x4F4D4B4A, + 0x2D3B455E, + 0xD6C9EBC6, + 0xEBEBDFC7, + 0x1010111B, + 0x12101010, + 0xB7EBEBEB, + 0xDDE7CCC8, + 0x48474062, + 0x3A495653, + 0x99134062, + 0xE6E5EBE5, + 0x24D9EBDA, + 0x20211816, + 0xCA31171F, + 0xEADCEBDF, + 0x7DC7E2E5, + 0x7A756F6B, + 0x72757A7B, + 0x6C6E7275, + 0x444E5C66, + 0x5245455E, + 0x553B5F6C, + 0xDECA106B, + 0xEBD4EBCB, + 0x1E1FB0D1, + 0x102A1913, + 0x1013101B, + 0xE4EBC410, + 0x6070CED2, + 0x6060616D, + 0x66697D7E, + 0x105D6962, + 0xCDDAEBEB, + 0x103741B3, + 0x15121111, + 0x10131818, + 0x101B1714, + 0x756D561F, + 0x6E6A6D73, + 0x60656D70, + 0x998B6F58, + 0x80828A96, + 0x62656C72, + 0x64666764, + 0xDF236268, + 0xEAE8EBE8, + 0x1F1F1F1F, + 0x1F1F1F1F, + 0x14151515, + 0x13131314, + 0x5257696C, + 0x27496457, + 0xEBE2E3E0, + 0xEBD7D1EB, + 0x25191013, + 0x17101018, + 0xBC151014, + 0xEBE0EBEB, + 0x58B7E5EB, + 0x675D5B54, + 0x615F5F5F, + 0x52585E62, + 0x393F4447, + 0x2C2D3034, + 0x817A7674, + 0x87898A87, + 0x82848687, + 0x80808081, + 0x7F818181, + 0x797A7B7D, + 0x76777776, + 0x77757474, + 0x81818283, + 0x83828181, + 0x89878584, + 0x8D8D8D8B, + 0x7A7A838D, + 0x81878983, + 0x88898988, + 0x7D7F8387, + 0x696D7275, + 0x76736E69, + 0x877F7A7A, + 0x8D919390, + 0x7B7D8186, + 0x8786837F, + 0x7A7E7F7F, + 0x7F7C7978, + 0x807E848C, + 0x89878583, + 0x918F8C89, + 0x898B8D90, + 0x83868A8D, + 0x97928B86, + 0x81828689, + 0x88888783, + 0x8D898786, + 0x898C8F8F, + 0x7577787A, + 0x6664686F, + 0x7A757270, + 0x81818280, + 0x7776787A, + 0x7E7D7C79, + 0x797B7F81, + 0x65696F74, + 0x56575C61, + 0x706B635B, + 0x7C7A7876, + 0x8D89837F, + 0x888A8A8B, + 0x81838587, + 0x8C8D867E, + 0x7E7C7E84, + 0x817E7C7A, + 0x87868583, + 0x84858586, + 0x797B8083, + 0x74767778, + 0x77747272, + 0x7D7A7877, + 0x81818180, + 0x7A7B7C7D, + 0x74757678, + 0x6C6E7376, + 0x6667686A, + 0x8C867669, + 0x81808288, + 0x77797877, + 0x7F7A7675, + 0x8C8E858A, + 0x7A91897D, + 0x797B756E, + 0x82797172, + 0x7A7A7978, + 0x78797A7A, + 0x73747679, + 0x83807A75, + 0x7C818587, + 0x7A777677, + 0x8D817A79, + 0x93939595, + 0xA9A79E95, + 0x99999EA5, + 0x8A8D8F90, + 0x81838587, + 0x7C7A7B7C, + 0x9F988C81, + 0xAEB7B1A8, + 0x8287929F, + 0x827E7A7A, + 0x83818182, + 0x958F8781, + 0x8E909396, + 0xA8AAA59B, + 0x8D9AA5A6, + 0x71798187, + 0x6365686C, + 0x595C5F61, + 0x52525456, + 0x59575656, + 0x605F5D5B, + 0x78706862, + 0x82817E7C, + 0x858E8F89, + 0x757E8181, + 0x82817C77, + 0x82807E80, + 0x757A7E80, + 0x9F928176, + 0x7275879A, + 0x85827E78, + 0x7B848783, + 0x747B7D7A, + 0x827A7473, + 0x6E798588, + 0x72686468, + 0x7D767476, + 0x7677787A, + 0x867C7474, + 0x878D878B, + 0x7E828F89, + 0x83878582, + 0x807D7C7F, + 0x7E7E7D7B, + 0x7C7E7F7E, + 0x797A7C7D, + 0x76777778, + 0x76767777, + 0x74747475, + 0x79787675, + 0x75767879, + 0x7A797878, + 0x7A7A7A7A, + 0x8685817E, + 0x81828385, + 0x86858584, + 0x84858586, + 0x80818385, + 0x83838381, + 0x7A7E8184, + 0x78787778, + 0x76767677, + 0x7A7A7876, + 0x75767777, + 0x75747474, + 0x75747474, + 0x76767675, + 0x74747575, + 0x74747474, + 0x73747474, + 0x72727273, + 0x74747473, + 0x70717374, + 0x7476716C, + 0x706D6C6F, + 0x87807772, + 0x7A7F8588, + 0x78777878, + 0x7D7C7A79, + 0x8181807F, + 0x81818182, + 0x81808181, + 0x84858482, + 0x81838485, + 0x7174787D, + 0x77747270, + 0x83817F7B, + 0x81818181, + 0x7D7E7F80, + 0x787A7E81, + 0x7F7C7A78, + 0x8F8B8682, + 0x8D8F9191, + 0x82858789, + 0x7B7B7D80, + 0x6B6F7476, + 0x66666768, + 0x7D776F6A, + 0x797B8081, + 0x70737475, + 0x5F62676B, + 0x7D7A7875, + 0x7E7F807F, + 0x757B7E7F, + 0x6868696E, + 0x6F6E6C6A, + 0x6F6F7070, + 0x62626669, + 0x7D776E66, + 0x73747A81, + 0x7E7F7D78, + 0x706D7074, + 0x797C7E79, + 0x78787878, + 0x686C7276, + 0x61626568, + 0x736E6862, + 0x76777676, + 0x75747475, + 0x88817A79, + 0x8987898B, + 0x757D8587, + 0x75777673, + 0x83807A76, + 0x74787E83, + 0x6B6A6866, + 0x6365686A, + 0x766E6C6C, + 0x83868781, + 0x73757C81, + 0x7C7A7874, + 0x6F7A7E7C, + 0x72706C69, + 0x6F707070, + 0x75747270, + 0x6771706B, + 0x5B534E56, + 0x74747474, + 0x7C797674, + 0x68737B80, + 0x5F5D5C60, + 0x817F7468, + 0x838A8A84, + 0x7F7E7F7F, + 0x84838180, + 0x83848688, + 0x81828383, + 0x7D7A7878, + 0x88878681, + 0x8B8D8C8A, + 0x82828387, + 0x89878585, + 0x777D8689, + 0x7D777474, + 0x72798081, + 0x82807E7D, + 0x8D8B8986, + 0x73747E89, + 0x72717274, + 0x77737170, + 0x7A7B7C7A, + 0x6B6D7378, + 0x686B6D6C, + 0x736E6B6A, + 0x7F7F7D79, + 0x8B87827F, + 0x7C81868A, + 0x81807F7F, + 0x83858584, + 0x6A707B84, + 0x6C6D6D6A, + 0x837D746D, + 0x81818284, + 0x7A7F8181, + 0x5E626B74, + 0x74757068, + 0x817E7974, + 0x76767675, + 0x75757676, + 0x6D6D7073, + 0x7272716E, + 0x585C666E, + 0x595C5C5B, + 0x7C74685E, + 0x6068737B, + 0x615E5C5C, + 0x6B696764, + 0x68696C6E, + 0x62636667, + 0x68646260, + 0x72706E6B, + 0x75747271, + 0x7D7C7A78, + 0x70747A80, + 0x71706F6E, + 0x6F6D6C6B, + 0x747A7C76, + 0x81787372, + 0x817F8083, + 0x8382807C, + 0x82818182, + 0x7573767D, + 0x62687177, + 0x7E786F69, + 0x7D7D7F80, + 0x74767879, + 0x71727274, + 0x74737271, + 0x7A797876, + 0x7A76777A, + 0x7F838581, + 0x7171757A, + 0x6A6E7374, + 0x68686868, + 0x6E6D6A68, + 0x74747473, + 0x7F83827B, + 0x696A6E71, + 0x62676A6B, + 0x565A5D5B, + 0x5F6D7062, + 0x59595755, + 0x56565657, + 0x5B5C5C5A, + 0x5A595758, + 0x5E5C5C5B, + 0x6262615F, + 0x6B6C6C6C, + 0x61636669, + 0x5D5B5D63, + 0x6E686260, + 0x7A7A7A78, + 0x6E6F7276, + 0x7B7D7A77, + 0x6C6D7076, + 0x6E6C6D6E, + 0x827F7A73, + 0x837F7A76, + 0x6B737C83, + 0x6F686268, + 0x6E73706F, + 0x6B6B6C6D, + 0x6E6E6D6C, + 0x706E6E6E, + 0x76757472, + 0x7D7F7F80, + 0x7475787A, + 0x76787168, + 0x7E746C6E, + 0x7A828788, + 0x65666870, + 0x6B6B6C6C, + 0x6E6E6D6B, + 0x6C6C7470, + 0x56105A76, + 0xE2EB211E, + 0xDCE4DCDC, + 0x6653E3EB, + 0x62745042, + 0x57597F52, + 0xE9DBDB2E, + 0x1E3FC7EB, + 0x7E755332, + 0x667D7290, + 0xE8E8CE29, + 0xD0DAEBE1, + 0x876E67EB, + 0x6B6C7E62, + 0xC7EBCC43, + 0xE6DAEAEB, + 0x60688BEB, + 0x62636668, + 0x5C5C5D5F, + 0x15196231, + 0x13101E23, + 0xEB101C19, + 0xEBC5EBE7, + 0x5FEBEBE9, + 0x5766565E, + 0x5D5D5D5C, + 0x5F5F5E5E, + 0xCF13635C, + 0xD1E5E9E7, + 0x41E2EBE5, + 0x44716E39, + 0x565C5044, + 0xEBD72C54, + 0xEBC1E2E8, + 0x8656EBE2, + 0x5D616669, + 0x65625F5C, + 0x62606162, + 0x6D6E6C68, + 0x5D5E6368, + 0x55595C5D, + 0x5756574C, + 0x1F4C1047, + 0x10101710, + 0xE1DA103E, + 0xE3E8E7EB, + 0x676FE9E7, + 0x4B4A4949, + 0x50504F4D, + 0x535A5150, + 0xDEDD2556, + 0xE7E1EBEB, + 0x657EE2E8, + 0x2B4A6350, + 0xE8E12852, + 0xE7E6EBE2, + 0x4B40D1EB, + 0x4A494949, + 0x5C59534E, + 0x575A5C5C, + 0x51525355, + 0x51515151, + 0x52525251, + 0x1E104060, + 0xEBBD261A, + 0xE1EBE6E8, + 0x2E74EBD6, + 0x53535353, + 0x53535353, + 0xEBE0D51D, + 0x1F2FC0DC, + 0x55514A42, + 0x4B4C4F53, + 0xDCDED424, + 0xD9ABEBE3, + 0x453755EB, + 0x382F3B38, + 0x404F3943, + 0xE8E2D0CF, + 0xCAE8EAEB, + 0x48595153, + 0x4949494A, + 0x52504D4A, + 0x4F505152, + 0x4D4D4E4E, + 0x19475D5C, + 0xE9EBE4CA, + 0xEBEAE4EB, + 0x5E5F6867, + 0x1D33344C, + 0xEBDCE9E9, + 0xD1EBE8EB, + 0x545F4B4E, + 0x4A42464A, + 0xE920436E, + 0xEBC3EBE9, + 0x4FE9EBE2, + 0x4444424E, + 0xDC423C45, + 0xD7EBEBD7, + 0xA2EBEBDA, + 0x706B6662, + 0x6C6E7172, + 0x696D6E6E, + 0x444C5762, + 0x51424258, + 0x6A1A4971, + 0xEBEB141C, + 0xD0EBDDD0, + 0x756EE4EB, + 0x565E6354, + 0x4C5F5C39, + 0xE9DCE148, + 0x203CCFEB, + 0x746A5F49, + 0x83777A70, + 0x30849287, + 0xEBE7EBEB, + 0x3D6866E5, + 0x625B5655, + 0x61666A68, + 0x5E646D50, + 0x4E736666, + 0x6A69737F, + 0x69696C6D, + 0x92866F5C, + 0x81828790, + 0x62656C72, + 0x61626362, + 0xD4104953, + 0xE9E0E6E1, + 0x61616161, + 0x61616161, + 0x72727171, + 0x73737372, + 0x60696F71, + 0x25557271, + 0xE9EBD8DF, + 0xEBEBE9DE, + 0x4A605E50, + 0x6A6D563F, + 0xCC305161, + 0xDEE9CAE3, + 0x5CDAEBEA, + 0x5C596762, + 0x5F5C5A58, + 0x55585C5F, + 0x424A5156, + 0x2B2D3139, + 0x827A7572, + 0x87898A88, + 0x81818181, + 0x82828181, + 0x7D7E7F80, + 0x7576787A, + 0x74757676, + 0x74737172, + 0x85868687, + 0x87868685, + 0x8A888786, + 0x8D8D8D8C, + 0x7F81888E, + 0x83848481, + 0x8A8B8A89, + 0x7A7D8287, + 0x6A6E7479, + 0x77736E69, + 0x857E7A7A, + 0x868B8E8C, + 0x7E7D8185, + 0x8E8D8983, + 0x7A7F8181, + 0x72707074, + 0x7871737A, + 0x86868581, + 0x8E8B8682, + 0x8C8D8D8F, + 0x8583878D, + 0x938D8787, + 0x77778799, + 0x8585847F, + 0x908C8887, + 0x8A8D9193, + 0x6D6F7174, + 0x5F5D6067, + 0x7C76716E, + 0x81838482, + 0x73747679, + 0x76767574, + 0x74757778, + 0x64686E71, + 0x56575C62, + 0x706B635B, + 0x72757A7F, + 0x938A7E74, + 0x81838484, + 0x7A7C7E80, + 0x8D8C8279, + 0x807F8187, + 0x7E7C7A79, + 0x82828181, + 0x84868686, + 0x74777C81, + 0x6A6C6E6E, + 0x78746E6B, + 0x817B7774, + 0x88878784, + 0x7C7E8081, + 0x7476777A, + 0x6A6E7275, + 0x67686969, + 0x90908376, + 0x72717784, + 0x7A7F8181, + 0x817D7878, + 0x92968889, + 0x7990877D, + 0x7A7C7973, + 0x7A747073, + 0x88888786, + 0x7D7F8387, + 0x6D6E7375, + 0x87817870, + 0x7C828789, + 0x7B797677, + 0x94847A78, + 0x93959A9D, + 0xB2A9998E, + 0x9BA0AAB1, + 0x8C898887, + 0x92918F8D, + 0x7C818689, + 0x938D837D, + 0xA5B0A594, + 0x837F808E, + 0x83838485, + 0x87838182, + 0x908B8580, + 0x93939392, + 0x989D9992, + 0x818D9797, + 0x6A747E85, + 0x60616265, + 0x575C5F62, + 0x52525354, + 0x55555453, + 0x58565554, + 0x6868615A, + 0x786E6464, + 0x85918F84, + 0x787E7E7C, + 0x7F7C7A78, + 0x83828180, + 0x7A7E807F, + 0x998D7F78, + 0x817B818C, + 0x87878787, + 0x737E8381, + 0x70767771, + 0x877D7775, + 0x727E8B8E, + 0x6E646266, + 0x746E6C70, + 0x706D6B6E, + 0x87776C6E, + 0x919B8E8A, + 0x867D8386, + 0x777B7B7A, + 0x74727073, + 0x83827F7B, + 0x7F818383, + 0x797B7D7E, + 0x74747577, + 0x75767676, + 0x74747474, + 0x7B7A7776, + 0x76777A7B, + 0x7A7A7978, + 0x7A7A7A7A, + 0x89878481, + 0x85858687, + 0x8A888684, + 0x8486888A, + 0x82828385, + 0x83848483, + 0x777B8083, + 0x76757474, + 0x75747575, + 0x7A7A7876, + 0x74757676, + 0x75757474, + 0x75747474, + 0x76767675, + 0x77777778, + 0x76767676, + 0x76777878, + 0x74747475, + 0x7A797776, + 0x7A7A7A7A, + 0x74787572, + 0x706C6A6E, + 0x867E746E, + 0x777C8387, + 0x76767677, + 0x7C7B7A77, + 0x81807F7F, + 0x81818181, + 0x7F7E8081, + 0x81828281, + 0x81838484, + 0x6F73777C, + 0x736E6B69, + 0x85827D78, + 0x82828383, + 0x7D7E7F81, + 0x7A7D8184, + 0x82807B7A, + 0x93928F8D, + 0x86898D92, + 0x7F838789, + 0x7777797B, + 0x686D7274, + 0x64636365, + 0x7C756D68, + 0x787A7E7F, + 0x6A707578, + 0x5C5C6064, + 0x7D7A7674, + 0x7C7D7F7F, + 0x71797D7F, + 0x5F5F6168, + 0x6A686563, + 0x6C6C6C6C, + 0x68676868, + 0x8A82766D, + 0x6E73818D, + 0x7C7C7A73, + 0x6C686C73, + 0x747A7C76, + 0x6F6F6F6F, + 0x60646A6E, + 0x60616467, + 0x746F6862, + 0x7D7D7B7A, + 0x78787A7B, + 0x8B827D7D, + 0x92919291, + 0x7E828687, + 0x8285837F, + 0x757D878D, + 0x78757271, + 0x7A7A7978, + 0x7174767A, + 0x79716E6E, + 0x84868681, + 0x797F8890, + 0x84827E7A, + 0x747F827F, + 0x78756F6D, + 0x6E6E7073, + 0x6A6C6E6E, + 0x6E757068, + 0x69615B62, + 0x7C7A7571, + 0x7374787B, + 0x6971787A, + 0x5C5C5C62, + 0x7A797064, + 0x878C897F, + 0x7D7F8181, + 0x7E7E7D7D, + 0x86848281, + 0x777B8185, + 0x7B797775, + 0x8683807D, + 0x898C8B89, + 0x7F7F8184, + 0x89878686, + 0x767D868A, + 0x877F7A79, + 0x78828D8E, + 0x83828181, + 0x8D898684, + 0x7A7D8793, + 0x74747679, + 0x726F6E6E, + 0x74767675, + 0x65676D73, + 0x65686868, + 0x7A6F6866, + 0x92918D84, + 0x8D898582, + 0x86888B8D, + 0x90929395, + 0x86888C8E, + 0x6E727C85, + 0x70737370, + 0x83817972, + 0x78787A80, + 0x7B7F8080, + 0x60646C74, + 0x78787169, + 0x87847E79, + 0x7F7D7B7A, + 0x81818181, + 0x7A7C8083, + 0x787A7B7B, + 0x68696F75, + 0x565D6568, + 0x80746256, + 0x5B657480, + 0x59565351, + 0x6563615C, + 0x5E606366, + 0x5A5B5D5E, + 0x65615D5C, + 0x706E6C69, + 0x75737170, + 0x7E7D7B79, + 0x74797F83, + 0x72727373, + 0x746E6A66, + 0x6B747C7A, + 0x746A6464, + 0x78757578, + 0x7B828381, + 0x6D6C6D73, + 0x726E7279, + 0x62676F74, + 0x7D756E68, + 0x80818281, + 0x7577797A, + 0x71717273, + 0x74737170, + 0x74757574, + 0x77737476, + 0x7B80817E, + 0x71717579, + 0x696E7374, + 0x68686869, + 0x716F6D6A, + 0x787B7A75, + 0x7A7A7976, + 0x7474777A, + 0x666C7375, + 0x595D605C, + 0x626F7162, + 0x595C5855, + 0x54515155, + 0x595C5B59, + 0x52515155, + 0x57565554, + 0x5C5B5A58, + 0x6A6B6B6A, + 0x60626568, + 0x5B575C63, + 0x7168625F, + 0x7F818181, + 0x7374767A, + 0x8184817D, + 0x70707279, + 0x69696D71, + 0x8882796F, + 0x827C7876, + 0x6E768185, + 0x71696268, + 0x70757370, + 0x6F6E6D6A, + 0x706F6E6F, + 0x706E6D6C, + 0x76757472, + 0x71737474, + 0x65686A6E, + 0x6D746F63, + 0x7A706562, + 0x808A8781, + 0x59585E6E, + 0x68686868, + 0x6E6C6A68, + 0x62627E76, + 0xB0377E7F, + 0xE8EBD6E6, + 0x201E19E8, + 0x3F661012, + 0x59484F5C, + 0x81639143, + 0xBB31151E, + 0xD2CAEBD6, + 0x6280A2CA, + 0x747D6177, + 0xE3EBE53A, + 0x1035E2DB, + 0x58605839, + 0x744E617C, + 0x17101C10, + 0xE5EBE2E3, + 0x61616EEB, + 0x60626566, + 0x5A5B5C5D, + 0xBE43496E, + 0xE7EBDED3, + 0xEBE5DBE4, + 0xE2EBE9D2, + 0x68E8E0DF, + 0x535B4C69, + 0x5C5B5B5B, + 0x5C5C5C5C, + 0xEB196A46, + 0xE0E0EBE2, + 0x4D301014, + 0x555F6659, + 0x8D765950, + 0x10421086, + 0xDFE4EBE5, + 0x8563EAE1, + 0x595C6265, + 0x615E5B58, + 0x5E5E6265, + 0x5E606160, + 0x595A5E62, + 0x4E53585A, + 0x423C5C4F, + 0xC3D82844, + 0xEBE5CBEB, + 0xEBDFE2DF, + 0xE9E7E0E3, + 0x3D52E5EB, + 0x4C4A4948, + 0x5251504E, + 0x56625754, + 0xE8E91F56, + 0x28EAE5D6, + 0x3D572110, + 0x626E5253, + 0x10103336, + 0xE2E9D821, + 0x6D39DCE9, + 0x44424344, + 0x6660564B, + 0x56595C5D, + 0x52525254, + 0x50505050, + 0x51515150, + 0xDA354533, + 0xCFEAEBDD, + 0x1C241FD9, + 0x7D381020, + 0x56565656, + 0x56565656, + 0xDB391912, + 0xEBE7EBE8, + 0x4C6891B0, + 0x44474644, + 0xEBE6E61A, + 0x192BD6DB, + 0x49614831, + 0x3D515B41, + 0x103C473A, + 0xEBBF1E2D, + 0xE8E7DCEB, + 0x555C5A6F, + 0x4A4A4949, + 0x5756514E, + 0x52525150, + 0x4C4E5051, + 0x25384446, + 0xE5EBD5EB, + 0x101528D2, + 0x62566E5E, + 0x11565371, + 0xEB101716, + 0xDFE8DAEA, + 0x39372B4C, + 0x5856523D, + 0xCA21473C, + 0xDBE7DCEB, + 0x4124102E, + 0x3E645B5B, + 0x13145431, + 0xEBC31029, + 0x52D6EBE4, + 0x645F5A56, + 0x65666868, + 0x62676562, + 0x3E434B57, + 0x594C4F62, + 0xA6254A7B, + 0xE5E7E7D2, + 0x351932EB, + 0x52681610, + 0x625C607A, + 0x58687246, + 0xC2181716, + 0xD6D2EBBB, + 0xA08FA1CB, + 0x8D818275, + 0x1E798F8D, + 0xE9DCE4E8, + 0x5A7E69E9, + 0x6358524F, + 0x686D706D, + 0x67628C6D, + 0x648E4A75, + 0x6B6D7A8A, + 0x74706E6D, + 0x8481786F, + 0x74757980, + 0x5C60666A, + 0x57595B5C, + 0xE8206074, + 0xEBDDE7EB, + 0x5C5C5C5C, + 0x5C5C5C5C, + 0x6E6D6C6C, + 0x7171706E, + 0x64726E6D, + 0x1B52727A, + 0xE6E4EBE2, + 0x182BC8EB, + 0x554C4245, + 0x6E5D4A4C, + 0x21324644, + 0xE3D37515, + 0x4CE5EBEB, + 0x55516056, + 0x5D5B5653, + 0x595A5B5C, + 0x49545D62, + 0x2B2E353E, + 0x877B7574, + 0x828A9290, + 0x81818181, + 0x84838281, + 0x7A7C7D7E, + 0x77777879, + 0x74747576, + 0x78777574, + 0x87888989, + 0x81808183, + 0x8C87817B, + 0x8A8B8C8D, + 0x84858787, + 0x89878684, + 0x878B8D8D, + 0x7C7E8184, + 0x6B717A82, + 0x756E6868, + 0x817C7774, + 0x82838584, + 0x82818284, + 0x8D8D8A87, + 0x6F757D83, + 0x6E6E6E6D, + 0x7F7C7B7A, + 0x88878481, + 0x8E8B8784, + 0x898C8E90, + 0x85868788, + 0x918E8A87, + 0x767A848C, + 0x87847F79, + 0x8F87878A, + 0x969B9E99, + 0x6D737A7F, + 0x68676768, + 0x7978746E, + 0x74797B7A, + 0x6C6B6E6F, + 0x7A79746F, + 0x686E767C, + 0x68686666, + 0x6D6C6660, + 0x7A746D6B, + 0x6E7B7F79, + 0x817B7068, + 0x7A7B8185, + 0x7A7B7C7B, + 0x817D7A7A, + 0x7A7F8485, + 0x7C787575, + 0x757A7E7F, + 0x7D7D7F80, + 0x797A7D7E, + 0x6A6C6F72, + 0x7B776F6B, + 0x7E7A7776, + 0x87878783, + 0x7B7F8386, + 0x7A7A7979, + 0x6F747576, + 0x6766676A, + 0x8F908A7F, + 0x71697387, + 0x85838180, + 0x81828485, + 0x88898B8D, + 0x81848788, + 0x747A7A77, + 0x79716B6C, + 0x99999894, + 0x8F969A9A, + 0x746C6D7D, + 0x8F877A74, + 0x7C848889, + 0x7B767374, + 0x93908880, + 0x81889193, + 0x91878382, + 0xA5A6A59C, + 0x96959493, + 0x90929395, + 0x7E818890, + 0x8F87817E, + 0x989F9F9B, + 0x8886868D, + 0x87888D91, + 0x85878887, + 0x83848687, + 0x908D8985, + 0x8785878A, + 0x7E858B8B, + 0x63697176, + 0x5C5D5F61, + 0x595C5D5E, + 0x53545657, + 0x52535353, + 0x52525252, + 0x50515353, + 0x6B625750, + 0x817F756D, + 0x7D7A797C, + 0x817B7A7F, + 0x85818184, + 0x807D7C7E, + 0x89848181, + 0x86878681, + 0x81888B88, + 0x73747A80, + 0x8387877C, + 0x8E817A7D, + 0x8C8F9598, + 0x827E7D88, + 0x7174747A, + 0x6B615C62, + 0x7E6F686E, + 0x8B8D8A83, + 0x767F8687, + 0x7B777271, + 0x66646A75, + 0x9A8E7A74, + 0x8F918F94, + 0x75797E83, + 0x6F727474, + 0x76767474, + 0x7B7A7776, + 0x74787B7D, + 0x7A767372, + 0x7A797776, + 0x7A7A7B7B, + 0x88878481, + 0x86868687, + 0x88878584, + 0x84858788, + 0x84838383, + 0x85858584, + 0x747A8083, + 0x71707071, + 0x716F7174, + 0x77797975, + 0x73737577, + 0x79797875, + 0x72747678, + 0x78767472, + 0x77777778, + 0x7A797878, + 0x7E7E7A78, + 0x78787A7C, + 0x7A787675, + 0x7A7A7A7A, + 0x787A7674, + 0x6B6B6E73, + 0x867C7471, + 0x747C878B, + 0x7173777A, + 0x7C797471, + 0x7F7C7A79, + 0x81818181, + 0x7A7C7F81, + 0x817F7C7A, + 0x81808080, + 0x71767D81, + 0x736E6967, + 0x81807C78, + 0x81828383, + 0x82828181, + 0x747B8184, + 0x80797270, + 0x93908B88, + 0x888C9093, + 0x8286898C, + 0x72757A7F, + 0x686B6E71, + 0x60616264, + 0x706B6865, + 0x7C7A7874, + 0x5F6E797F, + 0x57535054, + 0x807B7169, + 0x7C7B7C7F, + 0x737A7B81, + 0x5F5D585F, + 0x68676360, + 0x6C6B6969, + 0x81756F70, + 0x83818386, + 0x6A6E7A84, + 0x7D7B776F, + 0x6C686D72, + 0x69707573, + 0x68746D61, + 0x64564B54, + 0x60616262, + 0x75706862, + 0x7C7A7878, + 0x74787B7E, + 0x87838589, + 0x878D908D, + 0x81818283, + 0x87868482, + 0x72798185, + 0x7D78726F, + 0x8787847D, + 0x77808787, + 0x79727072, + 0x80838581, + 0x777D8386, + 0x87807774, + 0x7C818587, + 0x7F7B7979, + 0x68686F79, + 0x706E6D6B, + 0x8A937E64, + 0x8E776671, + 0x80838586, + 0x7475787C, + 0x6970767A, + 0x5C5D5F63, + 0x747A7263, + 0x787F7D74, + 0x7F81807A, + 0x81848480, + 0x87848281, + 0x7E818587, + 0x80848381, + 0x85797075, + 0x8C8D8C8C, + 0x87888A8B, + 0x87878787, + 0x87878787, + 0x8D808085, + 0x74899D9E, + 0x7E776C62, + 0x85828181, + 0x818A8C8A, + 0x6E6E7076, + 0x73716E6C, + 0x7A787574, + 0x68696F77, + 0x62626468, + 0x746C6662, + 0x9591887F, + 0x8E8C867F, + 0x8A88888B, + 0x93939494, + 0x85878C8F, + 0x74757E89, + 0x7C7A7978, + 0x8A827B7A, + 0x73757E89, + 0x7D7F8080, + 0x676B7178, + 0x6E747471, + 0x7676736D, + 0x827C7875, + 0x898A8A87, +}; + +static gctUINT32 ppuMem5[] = +{ + 0x7E83898D, + 0x807E7B7B, + 0x84817F7F, + 0x5C687A83, + 0x7E766C66, + 0x616A777F, + 0x5C5B5856, + 0x625F5C5C, + 0x52515A62, + 0x52585C58, + 0x60585554, + 0x70716F69, + 0x71696A6E, + 0x787F827D, + 0x72747D87, + 0x6D6D6E71, + 0x877F736A, + 0x6A737F87, + 0x6B686868, + 0x7A78746E, + 0x767A7B7C, + 0x67696E72, + 0x716E6E6E, + 0x686E7274, + 0x7A75706C, + 0x7D7D7D7C, + 0x7477797A, + 0x6E6E6E70, + 0x72716F6E, + 0x74747473, + 0x75747474, + 0x75757575, + 0x72747475, + 0x70707071, + 0x6E6A6868, + 0x76767572, + 0x78757678, + 0x7D7F7F7C, + 0x81807D7A, + 0x686E787F, + 0x625E6062, + 0x67696B68, + 0x62625C55, + 0x5352555C, + 0x5C5C5B59, + 0x5052565A, + 0x56504F50, + 0x68625E5C, + 0x7B7E7468, + 0x6260626E, + 0x59565B62, + 0x726B645E, + 0x7D818283, + 0x76757679, + 0x72747472, + 0x726F6E6E, + 0x73727170, + 0x87817A75, + 0x7C74757A, + 0x747F8786, + 0x706A686E, + 0x747B7872, + 0x78747475, + 0x6F747A7B, + 0x706D6C6C, + 0x72737473, + 0x74797874, + 0x66626269, + 0x6A6A6B6B, + 0x6D6C6A6A, + 0x807B7168, + 0x5C636F7A, + 0x62636566, + 0x65646362, + 0x61516277, + 0xE0226E5C, + 0xE5EAE6E2, + 0x48627ACA, + 0x4C514837, + 0x4E4E4A46, + 0x78575350, + 0xE610687C, + 0xDFE2DBE0, + 0x504E58EB, + 0x1026109F, + 0xEBE6BD38, + 0x7483AEEB, + 0x5E5A5561, + 0x716D645C, + 0x1834566C, + 0xE8EBE2E6, + 0x181531D3, + 0x5B5D6162, + 0x605D5C5A, + 0xD1154469, + 0xEBE8E8EB, + 0xCDEBDCEB, + 0xEBDDEBDC, + 0x5DE6E8EB, + 0x47594A56, + 0x5C5C5550, + 0x5D71564A, + 0xEB10616A, + 0xE3EBD5EB, + 0x3E524456, + 0x64645C56, + 0x8C716370, + 0x2E5C4E55, + 0xE7E8E9EB, + 0x6788B7D9, + 0x50535B60, + 0x605C5651, + 0x5C5D5E5F, + 0x52545659, + 0x57565554, + 0x4B4E5256, + 0x4A705252, + 0xEBD8173F, + 0xCDDFEBD4, + 0xE5EBDCEB, + 0xE8EBE2EB, + 0x4A57E5EB, + 0x4E4C4B4B, + 0x5251504F, + 0x3B105F60, + 0xEBC93914, + 0x5DDFCBEB, + 0x4B58522C, + 0x6259504A, + 0x314A6369, + 0xEBCECA29, + 0x1043E4D6, + 0x4F483E5C, + 0x685E5D3A, + 0x565B5C5C, + 0x4E4D4D50, + 0x50504E4E, + 0x4D4E5050, + 0xDC193F49, + 0xEBE3EAE2, + 0x6F7457C9, + 0x50465B4B, + 0x5860686E, + 0x53535254, + 0xE715402F, + 0xE0EBEBE9, + 0x385662DF, + 0x29403755, + 0xDDEBEB16, + 0x5F3FE7EB, + 0x553D4245, + 0x2A4D4853, + 0x446F233E, + 0xD9C93E3B, + 0xC5EBE5E8, + 0x434F4C71, + 0x4547494A, + 0x5D564E47, + 0x504F5256, + 0x4E515554, + 0x56105012, + 0xC4EBE8DB, + 0x314B87BB, + 0x565A523D, + 0x524A5648, + 0x8725235A, + 0xCBEBE6EB, + 0x23331A53, + 0x5B51394C, + 0xE8103F5C, + 0xD9E2EBE5, + 0x504C293C, + 0x4A544B40, + 0x513E3D40, + 0xE9E11948, + 0x5CE9DEEB, + 0x615D5957, + 0x67676664, + 0x4D84534D, + 0x38584348, + 0x5E3E595A, + 0xDE16627A, + 0xE1EBD4E9, + 0x52607CD6, + 0x5D63686C, + 0x5A585758, + 0x6D5F6552, + 0xE619767C, + 0xEBEBE6E3, + 0x7E626FDE, + 0x8E938083, + 0x31315410, + 0xE8EAEBE8, + 0x84875FD3, + 0x686C7174, + 0x6F6D6967, + 0x5C5A5E5E, + 0x60636A68, + 0x76666462, + 0x74876868, + 0x857A627F, + 0x836B5C93, + 0x695F6462, + 0x124D515B, + 0xDB28121D, + 0xE4E3E9E6, + 0x4A4A4A4A, + 0x4A4A4A4A, + 0x8B626B68, + 0x5458807A, + 0x7878736F, + 0x145D526A, + 0xD8EBEAB7, + 0x648DCADE, + 0x4A544A61, + 0x5D56474F, + 0x3B476A43, + 0xE8EB123C, + 0x4DE2EBE6, + 0x55536059, + 0x55555454, + 0x59585756, + 0x45555C5C, + 0x3B322D34, + 0x8078726F, + 0x81858786, + 0x7F808080, + 0x8181807F, + 0x7C7D7E7E, + 0x7C7C7C7C, + 0x7A7A7A7B, + 0x7D7C7A7A, + 0x83878787, + 0x7A7A7B7F, + 0x8B867E79, + 0x8C8C8D8D, + 0x84868789, + 0x87868484, + 0x86878989, + 0x7A7B7F82, + 0x696D767F, + 0x756E6968, + 0x7A777574, + 0x80807E7C, + 0x817F8081, + 0x8B8A8884, + 0x7A7E8286, + 0x71737578, + 0x807D7B7A, + 0x88878582, + 0x8F8D8887, + 0x888B8D8F, + 0x87878889, + 0x8E8C8987, + 0x74777E85, + 0x89878179, + 0x938D8B8B, + 0x9A9B9B99, + 0x787E858A, + 0x74747474, + 0x6F737472, + 0x6D6F706E, + 0x67656668, + 0x74736F6A, + 0x686A6E72, + 0x65666767, + 0x74736D66, + 0x817A7474, + 0x707A7E7C, + 0x7B746C69, + 0x73737475, + 0x74747474, + 0x7B787676, + 0x74797E7F, + 0x75727171, + 0x73757878, + 0x76747474, + 0x78797A79, + 0x6F747574, + 0x7C756E6C, + 0x7B787675, + 0x8181817F, + 0x7A7C7E80, + 0x79787879, + 0x73777A7A, + 0x69696A6E, + 0x93948D80, + 0x776E778B, + 0x85878582, + 0x86838182, + 0x85858687, + 0x80828485, + 0x70777A7A, + 0x756F696A, + 0xA3A29F9B, + 0x989EA4A4, + 0x77717382, + 0x90897D77, + 0x7E858B8D, + 0x817E7A79, + 0x94948F88, + 0x747E8890, + 0x7A737274, + 0x9C999387, + 0x90929496, + 0x95939290, + 0x81848C93, + 0x8B857F7F, + 0x8D91918E, + 0x89858285, + 0x8B8D9093, + 0x8B8C8D8C, + 0x81828384, + 0x86858382, + 0x85818184, + 0x79808788, + 0x60646B6F, + 0x5A5B5C5D, + 0x585A5B5B, + 0x55555657, + 0x51525253, + 0x50505051, + 0x484C5051, + 0x5B544B47, + 0x78756A5F, + 0x8D827876, + 0x817C8188, + 0x787A8083, + 0x7B787A80, + 0x8D878280, + 0x8E93938F, + 0x82878B8C, + 0x77777D81, + 0x8A8E8C81, + 0x978A8688, + 0x96999F9F, + 0x9593939D, + 0x7A7C7E88, + 0x6D646269, + 0x7D6F686D, + 0x858A8781, + 0x6F757B80, + 0x76736D6B, + 0x61606671, + 0x98887571, + 0x92949395, + 0x75797E81, + 0x70727474, + 0x77777675, + 0x817E7A78, + 0x7A7E8182, + 0x79777576, + 0x807E7D7C, + 0x80818181, + 0x85858280, + 0x81818284, + 0x85848382, + 0x82838485, + 0x83828181, + 0x87868584, + 0x777A7F81, + 0x76757474, + 0x74737374, + 0x76777775, + 0x74747576, + 0x77787876, + 0x71727474, + 0x74747271, + 0x74747474, + 0x76767574, + 0x7F7F7B79, + 0x78797A7D, + 0x76757474, + 0x77777777, + 0x7A7B7B7A, + 0x7B7A7A7A, + 0x79706E71, + 0x78808683, + 0x6F727579, + 0x7975726F, + 0x7C7A7877, + 0x80807F7E, + 0x76787A7C, + 0x7C7A7876, + 0x83817F7F, + 0x7D818485, + 0x7A777574, + 0x7F7E7D7B, + 0x81828383, + 0x81818181, + 0x777B8082, + 0x837F7976, + 0x8F8E8D8C, + 0x8B8C8D8F, + 0x82868A8D, + 0x73767A7F, + 0x65696E71, + 0x5F5F6062, + 0x6863615F, + 0x73716E6B, + 0x69717474, + 0x5C5A5A60, + 0x7E7A716A, + 0x7B7A7B7D, + 0x7277767C, + 0x63625C62, + 0x6E6A6662, + 0x7372706F, + 0x887F7979, + 0x8686898D, + 0x6467737E, + 0x7979746B, + 0x67666C74, + 0x666C706E, + 0x75796857, + 0x5B545462, + 0x5F5C5C5D, + 0x74716B64, + 0x7C7A7877, + 0x777A7D7E, + 0x807A7A7E, + 0x868A8D87, + 0x83818386, + 0x8B8B8986, + 0x76777C81, + 0x7C7D7C79, + 0x7A7F817F, + 0x777B7C7A, + 0x7A747172, + 0x7B808481, + 0x71747577, + 0x7C787471, + 0x7A7B7D7F, + 0x7F7E7B7A, + 0x696B7178, + 0x69666568, + 0x898B7C6C, + 0x93867A7E, + 0x84888B8C, + 0x76787B80, + 0x6E737679, + 0x61626568, + 0x73796F5E, + 0x787B7770, + 0x7E7F7D79, + 0x85878680, + 0x8C888789, + 0x898D908F, + 0x8B8F8D8C, + 0x827A7780, + 0x8F8E8E8E, + 0x9090908F, + 0x84848687, + 0x84858585, + 0x81797E87, + 0x7585928F, + 0x7F786C63, + 0x7F7F7F81, + 0x71747675, + 0x71737371, + 0x7474716E, + 0x7B797775, + 0x6868717A, + 0x66666868, + 0x69666362, + 0x7E7B756F, + 0x8C8B8580, + 0x86858689, + 0x8B898887, + 0x8C8C8C8C, + 0x7A7A818A, + 0x7F7E7E7D, + 0x91877D7A, + 0x6E758391, + 0x78797877, + 0x6E707476, + 0x6E747673, + 0x696C6C6B, + 0x8178706C, + 0x8D8D8D88, + 0x7D82878B, + 0x7F7C7A7A, + 0x918D8887, + 0x747D8990, + 0x817F7A78, + 0x686F7980, + 0x65626263, + 0x6C6E6E6A, + 0x5B5B6065, + 0x575C5E5D, + 0x635C5653, + 0x7474716B, + 0x76757473, + 0x88837C78, + 0x6C6E747E, + 0x6A696B6D, + 0x817B746E, + 0x6B717A80, + 0x6F6F6F70, + 0x74737170, + 0x74747575, + 0x6F707173, + 0x79726F70, + 0x71798080, + 0x76746F6D, + 0x7A7A7A79, + 0x72747778, + 0x6D6C6D6E, + 0x6E6D6C6B, + 0x6E6E6E6E, + 0x6E6E6E6E, + 0x6F6F6E6E, + 0x73747475, + 0x6E6F7072, + 0x6D6A6A6A, + 0x73747370, + 0x7A757271, + 0x8383827F, + 0x77787A7D, + 0x686D7275, + 0x5F5E6164, + 0x5B5E6262, + 0x66635D57, + 0x5C5C5E62, + 0x5B595858, + 0x5155595C, + 0x56504E50, + 0x67625D5B, + 0x747A746D, + 0x68626168, + 0x5B575B62, + 0x746E6862, + 0x75797C7E, + 0x7F7A7674, + 0x75797A7C, + 0x74737272, + 0x827E7874, + 0x82828383, + 0x7E78787A, + 0x7A818785, + 0x73727075, + 0x767A746F, + 0x7A787675, + 0x70747A7C, + 0x73706E6E, + 0x70727475, + 0x7074706B, + 0x6C686669, + 0x696A6C6E, + 0x6467696A, + 0x74706C69, + 0x62666E73, + 0x5F606162, + 0x6261605F, + 0x695D6671, + 0xC7216E61, + 0xEAEBE6DF, + 0x35567ACD, + 0x50565147, + 0x4D51514D, + 0x7367574A, + 0xE912505B, + 0xE8EBE8EB, + 0x755850EB, + 0xE0D12B6C, + 0xE4EBEBD6, + 0x5637252C, + 0x52535860, + 0x68676462, + 0x4C5A666A, + 0xD6A81F1C, + 0xEAE2C5EB, + 0x595B5E61, + 0x605D5B58, + 0xD7356073, + 0xE8E5EBEB, + 0x2BCAEBE1, + 0xCEEBCF1F, + 0x5CE5E8EB, + 0x45584854, + 0x5759534F, + 0x4A624D44, + 0xE52D6867, + 0xE0DCDCEB, + 0x5559505C, + 0x775D4F56, + 0x6351767D, + 0x235E5679, + 0x23201310, + 0x6E553726, + 0x484D5256, + 0x55504A47, + 0x57595A5A, + 0x51525456, + 0x54545352, + 0x4A4C5052, + 0x556B4A47, + 0xE6DC3356, + 0xEBEBE5EA, + 0x1922EBCA, + 0xE8EBE2EB, + 0x4A57E5EB, + 0x504F4E4D, + 0x52525150, + 0xD03C5F54, + 0xE1EBCAD2, + 0x443116E0, + 0x3946403B, + 0x4D4C4E4E, + 0x5D625F56, + 0xDF251610, + 0xE1D5EBE5, + 0x4B505CB5, + 0x4F4D4B41, + 0x53555554, + 0x504F4E50, + 0x504F4E4D, + 0x4E4F5050, + 0xEB254868, + 0xEAD1DFEB, + 0x5A444DEB, + 0x472F4B4E, + 0x54585958, + 0x514F4D4F, + 0xEB1E5555, + 0xE0E3D0DE, + 0x444F5CEB, + 0x2E513B5D, + 0xC9D0E627, + 0x5442E3E7, + 0x5151543D, + 0x4A5E4442, + 0x2B50453D, + 0x1E16102A, + 0x351E1018, + 0x48565444, + 0x44454849, + 0x4E4A4543, + 0x51505357, + 0x50545656, + 0xE0E8EA18, + 0x2EC8E8EB, + 0x69614A36, + 0x53525662, + 0x4D565B54, + 0x2B3D4E50, + 0xEBE4BC42, + 0x5EC3C1D7, + 0x605D4338, + 0xEB153D5D, + 0xE8E8EBE2, + 0x4B4C2F38, + 0x5650444D, + 0x525B5750, + 0xE0E83052, + 0x55E4EBE5, + 0x5A565250, + 0x5E5E5E5C, + 0x4B6B415C, + 0x5852434A, + 0x52395056, + 0xEB326068, + 0xEBEADCE8, + 0x683A6CEB, + 0x585A5C5C, + 0x56565657, + 0x6A5C524C, + 0xCF216E62, + 0xEBEBE9EA, + 0x816E7EE8, + 0x7C69637A, + 0xEBD7C72D, + 0xEBE3E0E9, + 0x7C8768E9, + 0x6E747A80, + 0x76736E6C, + 0x314F7280, + 0x937B5B3A, + 0x7C616168, + 0x54736673, + 0x8C766E6B, + 0x545D7887, + 0x665D625F, + 0x10484A55, + 0xE9C6EBEB, + 0xD6EBE7D5, + 0x69696969, + 0x69696969, + 0x6B6E686A, + 0x725A4D5D, + 0x67656568, + 0x2C695661, + 0x19181110, + 0x7F644125, + 0x63626367, + 0x50564C59, + 0x5348624B, + 0xEBDD1348, + 0x6DDED8E2, + 0x4E444F64, + 0x4E505152, + 0x4A4A4B4C, + 0x434E514F, + 0x38312E35, + 0x7D7A7571, + 0x8482807F, + 0x7C7E7F80, + 0x7B7B7B7C, + 0x807F7E7D, + 0x83828181, + 0x81818182, + 0x81818181, + 0x7F838585, + 0x7474767A, + 0x89837B76, + 0x8C8C8C8C, + 0x8386888A, + 0x81818181, + 0x81828282, + 0x75787B7F, + 0x66676E78, + 0x76716C68, + 0x74747475, + 0x7F7C7A77, + 0x7E7C7C7D, + 0x88878682, + 0x8D8D8D8D, + 0x8083888B, + 0x817D7A7A, + 0x87878683, + 0x8F8D8A87, + 0x878A8D8F, + 0x88898A8B, + 0x8A898988, + 0x79797E83, + 0x8E8C877F, + 0x93918E8C, + 0x98979594, + 0x7D82898E, + 0x7D7D7C7B, + 0x69717778, + 0x65676765, + 0x62626264, + 0x69696865, + 0x6F6D6B6A, + 0x686B6F70, + 0x7D7A736B, + 0x85807A7A, + 0x73797C80, + 0x746D686C, + 0x6D6C6A69, + 0x706E6E6D, + 0x7A777474, + 0x71767C7D, + 0x6D6C6D6E, + 0x6F70706E, + 0x706C6A69, + 0x79797874, + 0x767B7A76, + 0x7B746E6F, + 0x76747474, + 0x7A7A7A7A, + 0x76767676, + 0x76767676, + 0x767D8182, + 0x6667696E, + 0x91938B7B, + 0x7A707687, + 0x84878582, + 0x827F7D7F, + 0x7E7C7B7C, + 0x7E808180, + 0x6D73797C, + 0x736E6968, + 0xA7A6A39F, + 0x9BA2A8A9, + 0x7C767987, + 0x938E827C, + 0x81878D93, + 0x87868381, + 0x9093928D, + 0x7079838B, + 0x746E6D6E, + 0x928F897F, + 0x888D9398, + 0x9D978F89, + 0x878C939A, + 0x88838184, + 0x80818180, + 0x8B86817F, + 0x8A8C8E91, + 0x8B8B8C8B, + 0x81818181, + 0x7D7E7F81, + 0x7E7A7A7B, + 0x6F767E81, + 0x5B5E6367, + 0x58595959, + 0x56575758, + 0x55555656, + 0x50515152, + 0x4D4E4F50, + 0x42474B4C, + 0x4E48413E, + 0x6D6A5F54, + 0x9787756D, + 0x7E7A818C, + 0x84878986, + 0x7A75777C, + 0x9C948A82, + 0x969E9F9E, + 0x81858A8F, + 0x79787C80, + 0x91938F83, + 0x9A908C8D, + 0x999DA1A2, + 0x9B999399, + 0x8483828D, + 0x6E696A71, + 0x7D6F686D, + 0x80878781, + 0x696C6F76, + 0x74706A66, + 0x5F60666F, + 0x8C7C6965, + 0x8588878A, + 0x76797D80, + 0x70727474, + 0x75757574, + 0x86817B77, + 0x81848585, + 0x7E7C7C7E, + 0x8281807F, + 0x82828382, + 0x83838180, + 0x7F7F7F81, + 0x81818181, + 0x81818181, + 0x83818181, + 0x87878584, + 0x7A7C7E80, + 0x7D7C7A7A, + 0x76777877, + 0x75747474, + 0x77757575, + 0x74767879, + 0x6F6F6F6F, + 0x6F6F6F6F, + 0x72717070, + 0x74747473, + 0x80807C7A, + 0x78797A7D, + 0x75757575, + 0x78777675, + 0x837F7B7A, + 0x87888987, + 0x6962676E, + 0x7B818178, + 0x6C6E7274, + 0x74726E6C, + 0x7A777574, + 0x7E7D7D7B, + 0x7476797A, + 0x7A797674, + 0x83807E7E, + 0x85878787, + 0x81818282, + 0x7C7D7F80, + 0x81828282, + 0x81818181, + 0x7C7B7D7F, + 0x89878480, + 0x8C8D8E8F, + 0x8D8C8C8B, + 0x8185898D, + 0x74767A7E, + 0x61676D70, + 0x5E5D5C5D, + 0x625E5C5B, + 0x6E6C6865, + 0x7577726B, + 0x6463666E, + 0x7D7A746E, + 0x79797A7C, + 0x7576747A, + 0x6A696468, + 0x78746E6A, + 0x7B7A7A7A, + 0x8C837E7C, + 0x84868B8E, + 0x5F616E7A, + 0x78787468, + 0x63646E76, + 0x64696C68, + 0x7C7A6855, + 0x5A585E6E, + 0x645D5C5C, + 0x7675736C, + 0x7C7A7877, + 0x7A7D7F7F, + 0x7B747477, + 0x83878A85, + 0x807E8287, + 0x8F8F8D87, + 0x7F7E8388, + 0x81858784, + 0x68727A7E, + 0x73716B66, + 0x7C747170, + 0x767C8382, + 0x676A6F73, + 0x6B6A6867, + 0x76727273, + 0x8181817C, + 0x7176797A, + 0x625E5F68, + 0x7D77706C, + 0x8D8A8681, + 0x84888B8D, + 0x77797C80, + 0x6E707273, + 0x6466686B, + 0x747A705F, + 0x7778746E, + 0x79787774, + 0x8686827C, + 0x8C88898C, + 0x92949592, + 0x8E949697, + 0x817B7A83, + 0x8A888787, + 0x8F8E8D8C, + 0x80818487, + 0x7F818181, + 0x72727F8D, + 0x7A81837C, + 0x8480766F, + 0x787A7D82, + 0x69696B6B, + 0x7276766F, + 0x7A787574, + 0x807E7B7A, + 0x6666707C, + 0x68696B6A, + 0x63656869, + 0x6C696764, + 0x89898681, + 0x81818186, + 0x8481807F, + 0x8E8D8A87, + 0x7F7B8188, + 0x80808182, + 0x93887E7A, + 0x67748794, + 0x72716F6E, + 0x73747473, + 0x6F757674, + 0x6164676A, + 0x7C716761, + 0x8F8E8C86, + 0x7B818689, + 0x7D7B7A79, + 0x88878481, + 0x8B8A8988, + 0x8386888B, + 0x767A7E81, + 0x6E686C71, + 0x767C7F79, + 0x666B6E6F, + 0x5E5D5F62, + 0x6F68615C, + 0x7D7B7874, + 0x80827D76, + 0x8F857B7A, + 0x6A6A6F77, + 0x6A69696B, + 0x7975716E, + 0x7174777A, + 0x7477797A, + 0x6A6B6E71, + 0x6F6D6C6C, + 0x7A787572, + 0x8177767A, + 0x7A858E8D, + 0x72717070, + 0x78777574, + 0x6F727577, + 0x6A6A6B6D, + 0x68696A6B, + 0x62636466, + 0x63636262, + 0x64646463, + 0x73747373, + 0x6E6E7072, + 0x6C6B6C6D, + 0x6E6E6F6E, + 0x78716A65, + 0x8B88847F, + 0x6C727C85, + 0x66686A6A, + 0x5D5E6164, + 0x55585C5E, + 0x67625C59, + 0x65666868, + 0x57555658, + 0x54585C5C, + 0x56504E50, + 0x645F5C59, + 0x6C747470, + 0x6E665E61, + 0x5C565C64, + 0x706E6A65, + 0x6D6F7476, + 0x8881766E, + 0x8D8D8F90, + 0x8184888B, + 0x8B867E77, + 0x7D81868A, + 0x7F7B7A7A, + 0x7F818281, + 0x7A7F7D81, + 0x76756D6D, + 0x82817C79, + 0x74767B80, +}; + +static gctUINT32 ppuMem6[] = +{ + 0x7573706F, + 0x6C707476, + 0x6E6E6A64, + 0x706B6869, + 0x67666768, + 0x61646868, + 0x6868696A, + 0x65666868, + 0x5D5E5F5F, + 0x5F5F5E5D, + 0x5C65635C, + 0xBF245040, + 0xD5DEE0E1, + 0x415C7BBA, + 0x54575652, + 0x4E565A56, + 0x5A47464E, + 0xE3246557, + 0xE4E6E9EA, + 0x715A58E7, + 0xEBE71F6A, + 0xEBE9DFDE, + 0x625D5954, + 0x5C535662, + 0x5D626869, + 0x6264625E, + 0xEBDE254E, + 0xD6E8D9E3, + 0x56595C5F, + 0x5D5C5856, + 0xAB355D5A, + 0xDED5D3C6, + 0x46BBEBDA, + 0xD4EBE019, + 0x5AE5E8EA, + 0x44574752, + 0x5155514F, + 0x3150433D, + 0xB7191D10, + 0xE8E1EBEA, + 0x74655437, + 0x5F575C5D, + 0x694F6365, + 0x43627A7C, + 0x504D5054, + 0x61626059, + 0x4C505456, + 0x56514B49, + 0x54555656, + 0x51515253, + 0x50515151, + 0x4A4C4D4F, + 0x435C5665, + 0xC0B72E45, + 0xEBE4E7EB, + 0x1F46EBD9, + 0xE8EBE2EB, + 0x4A57E5EB, + 0x51515050, + 0x53525252, + 0xD0104F5F, + 0xEBEBEBEB, + 0x25565FBB, + 0x524A6E59, + 0x4A4C4B49, + 0x625E564D, + 0xDD102568, + 0xEBE5E1D2, + 0x45445EEB, + 0x464C454B, + 0x52535352, + 0x54525050, + 0x504F4D4D, + 0x50505050, + 0xC526445B, + 0xEBD6D6D6, + 0x5B594FB7, + 0x3D364A44, + 0x51514A44, + 0x4E4B4A4D, + 0xE7206347, + 0xEAE8D9E5, + 0x3E3D41E8, + 0x25421036, + 0xEBE9EA1D, + 0x6C4CCAE0, + 0x5F4E5344, + 0x505B4D5C, + 0x6E705548, + 0x38434762, + 0x45414848, + 0x4A424A51, + 0x44464747, + 0x4A484444, + 0x52505458, + 0x50545756, + 0xD9EBE910, + 0x47E6E8DC, + 0x3A273956, + 0x4D687863, + 0x4A46474B, + 0x34495652, + 0xEBE7E317, + 0x43E5EBEB, + 0x68605944, + 0xD0125D82, + 0xEBE0E2E9, + 0x3C5C5B4C, + 0x3833444C, + 0x3842504D, + 0xEBE81024, + 0x61C9DAE5, + 0x5758595B, + 0x5E5C5A58, + 0x122A104B, + 0x45251010, + 0x4D455D6A, + 0xB5305453, + 0xE4EBE1EB, + 0x484565C2, + 0x56514E4D, + 0x565A5C5B, + 0x62504E63, + 0xDF45825C, + 0xDEDCE8EB, + 0x807179DD, + 0x5E546893, + 0xEBE6D121, + 0xEBE8E9EB, + 0x988F6DDD, + 0x6F767F84, + 0x77746E6D, + 0x55576081, + 0x626D5646, + 0x805C6172, + 0x2C5D667B, + 0x29102012, + 0x64676E2E, + 0x62595E5A, + 0x10444550, + 0xEBD2E0E2, + 0xD6E2D0EB, + 0x57575757, + 0x57575757, + 0x5A746F61, + 0x7E70554F, + 0x5C56585D, + 0x4977615D, + 0x68594F5B, + 0x6374726A, + 0x615E665C, + 0x4D594B51, + 0x5554672B, + 0xEBDA317A, + 0x4EDFEBEB, + 0x4459553E, + 0x44484B4D, + 0x3A3B3D40, + 0x3F45433E, + 0x38323036, + 0x7777726D, + 0x827B7574, + 0x7A7D8081, + 0x75767779, + 0x817F7D7B, + 0x87878583, + 0x85868787, + 0x82828384, + 0x7D818282, + 0x73737478, + 0x88827B75, + 0x88898A8A, + 0x81848788, + 0x7A7B7C7E, + 0x7C7C7C7B, + 0x7274777A, + 0x6462676E, + 0x79746F6A, + 0x79797A7A, + 0x817F7C7A, + 0x7F7D7D7E, + 0x88888783, + 0x93918F8E, + 0x8C8F9394, + 0x817E7B7A, + 0x87878684, + 0x8D8C8887, + 0x888A8D8E, + 0x8B8C8C8C, + 0x8787888A, + 0x7F7D8184, + 0x92908C85, + 0x8D8D8D8E, + 0x8D8D8E8D, + 0x7A7D848A, + 0x80807D7A, + 0x6E777B7B, + 0x6468696A, + 0x62626466, + 0x61626362, + 0x77726C68, + 0x6E72787A, + 0x817F766E, + 0x817D7A7D, + 0x74757980, + 0x6F68666E, + 0x66676563, + 0x6C686564, + 0x847E7A77, + 0x767D8487, + 0x686B6E71, + 0x6E6C6A68, + 0x706C6969, + 0x797A7975, + 0x797B7A77, + 0x7A767374, + 0x716F6E6F, + 0x75767674, + 0x71706F6F, + 0x78767473, + 0x747B7F81, + 0x6566686E, + 0x82878171, + 0x766A6D7A, + 0x8283817F, + 0x7374797E, + 0x76727070, + 0x7E7E7D7A, + 0x6B70777C, + 0x73706D6A, + 0xA2A19D99, + 0x969DA3A4, + 0x7F7A7A86, + 0x98948780, + 0x86878D92, + 0x87898A88, + 0x878A8986, + 0x7F848787, + 0x938D8987, + 0x999B9B98, + 0x82889198, + 0xA2998D84, + 0x898D939A, + 0x83808085, + 0x827F7E7D, + 0x918E8A86, + 0x81838486, + 0x7E7F8081, + 0x82817E7C, + 0x7A7C8081, + 0x74747477, + 0x656B7274, + 0x57595D60, + 0x57575757, + 0x54555656, + 0x52525354, + 0x4E505050, + 0x4A4A4B4D, + 0x41454848, + 0x4E48413F, + 0x64625B54, + 0x8D806F67, + 0x7C798087, + 0x93928F87, + 0x83818081, + 0xA2978C87, + 0x93999FA3, + 0x7C82898E, + 0x7876797A, + 0x92938F82, + 0x9C938D8C, + 0x969BA2A3, + 0x97938B8E, + 0x807D7B87, + 0x6F6D6F75, + 0x7E726B6E, + 0x7C858682, + 0x6564676F, + 0x736F6761, + 0x6062686F, + 0x8A7D6860, + 0x797B7B83, + 0x76797B7E, + 0x71727374, + 0x73737374, + 0x87817A74, + 0x87878583, + 0x86858586, + 0x86858584, + 0x87878787, + 0x85868584, + 0x80808182, + 0x80818181, + 0x81818180, + 0x83828282, + 0x85858484, + 0x7E7D7E7E, + 0x8382817F, + 0x767C7E7F, + 0x74716F71, + 0x7A777574, + 0x7074797A, + 0x6E6E6D6B, + 0x6B6D6E6E, + 0x74737271, + 0x77777675, + 0x7F7F7C7A, + 0x7576797C, + 0x73747475, + 0x76757474, + 0x857E7976, + 0x747A8387, + 0x615D626A, + 0x7A7B776D, + 0x68696C6E, + 0x726F6B68, + 0x77747372, + 0x7C7B7A79, + 0x73747678, + 0x78767473, + 0x807E7D7C, + 0x84848381, + 0x84868787, + 0x7C7D8081, + 0x81818181, + 0x7E7F8081, + 0x807B7A7B, + 0x8D8D8C87, + 0x8A8C8D8E, + 0x8B8B8989, + 0x7F82878A, + 0x7274797B, + 0x5D646B6F, + 0x5D5C5A5A, + 0x65625F5E, + 0x74716E68, + 0x7C7C756D, + 0x6E6C6E74, + 0x7B7A7774, + 0x74757679, + 0x7B77737A, + 0x73716E72, + 0x81807B78, + 0x7E7F8081, + 0x8B847E7B, + 0x83878C8E, + 0x60616E7B, + 0x797A756A, + 0x62636E79, + 0x686B6C67, + 0x76766C60, + 0x6865656D, + 0x70686565, + 0x7C7F807A, + 0x7D7A7A7A, + 0x7B7D7F7F, + 0x7C767578, + 0x81878985, + 0x76757D85, + 0x8E8D8980, + 0x85878D92, + 0x85878786, + 0x5F6A767D, + 0x6E685F5B, + 0x7C746E6D, + 0x737A8283, + 0x5F636B72, + 0x65656360, + 0x746B6767, + 0x8386857F, + 0x81868481, + 0x635F6371, + 0x70686769, + 0x8083847C, + 0x7C7F8182, + 0x7575777A, + 0x72727170, + 0x6B6D6F71, + 0x767B766A, + 0x74787673, + 0x706F6E6E, + 0x807E7A74, + 0x85838383, + 0x8D8D8B87, + 0x81878D93, + 0x7A747279, + 0x82828181, + 0x7C7D8081, + 0x7C7C8185, + 0x7D7F817F, + 0x686F8292, + 0x7F7E786E, + 0x87888581, + 0x72757A82, + 0x74787773, + 0x70767975, + 0x7E7B7976, + 0x87858180, + 0x6B687380, + 0x6B6E7271, + 0x68676768, + 0x7E7A746D, + 0x87888784, + 0x7D7D7F83, + 0x7A7A7B7B, + 0x83817F7C, + 0x807B7D83, + 0x7C7E8183, + 0x8B817B7A, + 0x6371838D, + 0x6E6D6C6C, + 0x7271706E, + 0x6E737372, + 0x62636669, + 0x756C625D, + 0x8D89847D, + 0x7B808487, + 0x7C7A7979, + 0x75797A7A, + 0x93887B74, + 0x81858D92, + 0x8482817F, + 0x7A75787C, + 0x81878984, + 0x6F797D7D, + 0x63605E63, + 0x817C746E, + 0x8A878583, + 0x8785807B, + 0x86858687, + 0x7271757B, + 0x706F7072, + 0x75726F6D, + 0x7A7A7978, + 0x767A7C7D, + 0x62656B71, + 0x69666463, + 0x807B756F, + 0x847A7D84, + 0x7E8A9491, + 0x70717475, + 0x77767472, + 0x6D707477, + 0x68696A6B, + 0x63686C6E, + 0x56575A5E, + 0x59585858, + 0x5B5B5A5A, + 0x72706E6D, + 0x6E6F7172, + 0x6C6C6E6F, + 0x696B6D6D, + 0x716B645F, + 0x8A847C76, + 0x666F7F8B, + 0x5F626263, + 0x605E5F61, + 0x5C5E6161, + 0x645E5B59, + 0x67696B69, + 0x5251575D, + 0x55595B58, + 0x55504F50, + 0x625D5A58, + 0x676F7270, + 0x71675D5D, + 0x5B565C66, + 0x69696863, + 0x686A6E70, + 0x8B82756C, + 0xA09E9B9A, + 0x8A929BA0, + 0x81817D7A, + 0x7C7C7D80, + 0x7E7F7C7A, + 0x82807C7C, + 0x828C8A8B, + 0x716E676D, + 0x85847D76, + 0x74757A80, + 0x76736F6E, + 0x6A6E7477, + 0x6E706C67, + 0x6B676468, + 0x65646362, + 0x68676665, + 0x67696A69, + 0x64626263, + 0x62626262, + 0x63636262, + 0x644F5468, + 0x2A10827B, + 0x2D211F20, + 0x5350443E, + 0x5A58544F, + 0x50585E5C, + 0x6B615447, + 0xEA104450, + 0xEBE9EBE1, + 0x575F79EB, + 0xE5D9106C, + 0xE2EBE5E4, + 0x5063746E, + 0x66534D4F, + 0x5B626666, + 0x56585756, + 0xEBEB1A69, + 0xE3EBEBD8, + 0x54585D61, + 0x59565453, + 0x30165A5A, + 0x10101B21, + 0x492D1F1C, + 0xE2E0DB26, + 0x59E6E9EA, + 0x43584850, + 0x4E51504E, + 0x1C443F3B, + 0xEBD9E9E8, + 0x1531C7E7, + 0x6758683B, + 0x4C5E694B, + 0x62595C64, + 0x626C4C45, + 0x56494A50, + 0x46576865, + 0x4F525659, + 0x5755504E, + 0x52535354, + 0x52525252, + 0x50505151, + 0x4E4E4E4F, + 0x5C5C3F39, + 0x10301252, + 0x12101E10, + 0x15392A30, + 0xE8EBE2EB, + 0x4A57E5EB, + 0x53535353, + 0x53535353, + 0xE010544E, + 0xEAE3EBEA, + 0x5A533CEB, + 0x3E464447, + 0x4E4F4B47, + 0x4D4C4B4C, + 0xD6184E4F, + 0xE8E5E6DC, + 0x47304AE4, + 0x4D524C4A, + 0x50515252, + 0x51505050, + 0x4F4E4D4D, + 0x50505050, + 0x35114B4F, + 0x1019251F, + 0x637F4C48, + 0x434E513C, + 0x544F463F, + 0x4D4E5053, + 0xDD256E3D, + 0xDEEBEBEB, + 0x584F47EA, + 0xE6D02543, + 0xE2EBEBB9, + 0x323C3126, + 0x4C284458, + 0x30333C5F, + 0x4949243C, + 0x3A573E4A, + 0x464F6056, + 0x58373D4F, + 0x49484645, + 0x5955504B, + 0x51515559, + 0x4C505554, + 0xDEE0E842, + 0x51E8E6E7, + 0x5A514842, + 0x4B515A5D, + 0x3C34494F, + 0x623E4453, + 0xD3D9EB1C, + 0x3EDFD1DC, + 0x50555F38, + 0xEB2F6071, + 0xE9E3DAE6, + 0x31433F2D, + 0x59585647, + 0x3A3D4253, + 0xEAE71666, + 0x87E7E5E8, + 0x5A5F666A, + 0x615E5A58, + 0xEBD1335E, + 0xB2DCE6EB, + 0x515E7380, + 0x491C4B4A, + 0x2A2C1310, + 0x3654442C, + 0x50494648, + 0x4F565B59, + 0x7E989D95, + 0xE8103F47, + 0xEBE9EBE2, + 0x78717AE8, + 0x615A6E94, + 0xE4E3D624, + 0x2A29ABEB, + 0x84784C2C, + 0x757B8186, + 0x7A787474, + 0x5A535B70, + 0x896F5C5B, + 0x775E6978, + 0x15576876, + 0xE1E2EBEB, + 0x4F6BA3BB, + 0x695C6260, + 0x1250565E, + 0xEBE8E8EB, + 0x102A4DDE, + 0x5B5B5B5B, + 0x5B5B5B5B, + 0x66595D4F, + 0x4E56695B, + 0x4E48494B, + 0x3D5C4D4A, + 0x666C583E, + 0x61767564, + 0x2F4C5B68, + 0x5A553528, + 0x30445953, + 0xDFEB183F, + 0x59D3E3DE, + 0x3E3D4147, + 0x3E424547, + 0x3334373A, + 0x3B3E3833, + 0x3E383436, + 0x6E6D6761, + 0x8078706E, + 0x7A7E8182, + 0x73747477, + 0x817F7C7A, + 0x87878684, + 0x86878787, + 0x81818284, + 0x7D818181, + 0x75747679, + 0x87827C77, + 0x83848687, + 0x7D808284, + 0x7475777A, + 0x77777675, + 0x70727476, + 0x68626268, + 0x7D79746E, + 0x83828180, + 0x86868584, + 0x86838383, + 0x8D8D8C89, + 0x8B89898A, + 0x888A8C8C, + 0x82807E7D, + 0x87878684, + 0x8D8B8886, + 0x8A8B8D8D, + 0x8C8D8D8C, + 0x8787898B, + 0x827F8081, + 0x9493918A, + 0x86878C92, + 0x81868988, + 0x74767D83, + 0x82817E79, + 0x7B81817E, + 0x686E7477, + 0x63636567, + 0x64656665, + 0x7A746E6A, + 0x6E747A7D, + 0x82817A73, + 0x7D7A7A7D, + 0x7473767D, + 0x6E686971, + 0x61626362, + 0x68645F5E, + 0x8D867E7A, + 0x7C858D91, + 0x686E7477, + 0x6E6B6867, + 0x726F6E6E, + 0x77787875, + 0x75757677, + 0x75767776, + 0x6C696869, + 0x7374736F, + 0x6E6C6C6C, + 0x7B797471, + 0x7075797A, + 0x6565676B, + 0x747C7A6C, + 0x7367656D, + 0x81807D7B, + 0x656D777F, + 0x716C6868, + 0x7E7E7B77, + 0x6F72777C, + 0x77767470, + 0x99999590, + 0x8F969B9B, + 0x7F79767F, + 0x96958A81, + 0x8987878B, + 0x81878D8D, + 0x7E7F7F7D, + 0x93928B82, + 0xA8A5A2A1, + 0xA6A8ABAB, + 0x80858D94, + 0xA2998D82, + 0x85898F95, + 0x7C7A7A81, + 0x88828181, + 0x93949490, + 0x7A7B7A7A, + 0x71727478, + 0x807C7976, + 0x7A7B7F81, + 0x6C6F7478, + 0x6063686A, + 0x5556595C, + 0x56565656, + 0x51535454, + 0x4D4E4F50, + 0x4B4D4E4E, + 0x4848494A, + 0x44474847, + 0x504A4442, + 0x5E5B5857, + 0x78736B63, + 0x83807E7D, + 0x86898A87, + 0x8C8E8B88, + 0x968B8185, + 0x898C949D, + 0x787F878A, + 0x7A777878, + 0x90938E83, + 0xA098908A, + 0x949BA3A5, + 0x999A9396, + 0x71717385, + 0x72707175, + 0x7E746E70, + 0x767E807F, + 0x605D5F69, + 0x746F655C, + 0x62666C71, + 0x93897166, + 0x7C7C7C87, + 0x77797A7B, + 0x72727374, + 0x72737475, + 0x85807874, + 0x8A888683, + 0x87878889, + 0x8C8C8C8C, + 0x8D8D8D8C, + 0x898A8A89, + 0x84848486, + 0x82828384, + 0x84838282, + 0x85858686, + 0x82838384, + 0x807F7D7D, + 0x85848381, + 0x767E8385, + 0x74706E6F, + 0x7C797574, + 0x6D72797C, + 0x716E6C69, + 0x696C6E71, + 0x7A787574, + 0x7C7C7C7B, + 0x7D7D7B79, + 0x7374767A, + 0x70717273, + 0x7271706F, + 0x78777676, + 0x5C656F76, + 0x62616367, + 0x74716C66, + 0x64636566, + 0x716E6A66, + 0x74727070, + 0x7B7A7876, + 0x70727476, + 0x76747270, + 0x7B7A7A79, + 0x81807E7C, + 0x81818181, + 0x7D7E8081, + 0x7F807F7F, + 0x7A7B7D7F, + 0x817A7877, + 0x8D8E8E89, + 0x898A8A8A, + 0x87888889, + 0x7B7F8487, + 0x70737578, + 0x5C62696E, + 0x5E5C5958, + 0x6D686664, + 0x7C7A7671, + 0x7C7F7B76, + 0x74717175, + 0x76777675, + 0x6F6F7174, + 0x7E746E76, + 0x7C7B777A, + 0x86878583, + 0x7A7A7D81, + 0x8A857E7A, + 0x868B8E8E, + 0x6365727E, + 0x7778746C, + 0x5F616B75, + 0x696C6C65, + 0x71736E6A, + 0x78736E6E, + 0x7E777474, + 0x82878986, + 0x7E7C7B7B, + 0x797B7F80, + 0x7A737274, + 0x81868884, + 0x6D6E7781, + 0x89878175, + 0x8D908E8C, + 0x82828489, + 0x676F797E, + 0x6A656060, + 0x7A706A68, + 0x727A8181, + 0x6666686B, + 0x68696B69, + 0x74686261, + 0x85878781, + 0x8C8F8C88, + 0x69676D7D, + 0x716C6C6E, + 0x7A7D7E79, + 0x73737474, + 0x76757474, + 0x7B7A7776, + 0x78797A7B, + 0x777A7B78, + 0x6F767A77, + 0x6C6A6A6B, + 0x7674706E, + 0x7E7E7A77, + 0x86827E7D, + 0x7B7E8287, + 0x68686D75, + 0x7A7A7A79, + 0x6E717478, + 0x7A77797A, + 0x8182817E, + 0x68728391, + 0x807A7168, + 0x81858787, + 0x6F71757A, + 0x838B8476, + 0x7276787A, + 0x7D7A7674, + 0x89878380, + 0x736F7884, + 0x6E737979, + 0x72696462, + 0x9F988C7E, + 0x84878787, + 0x7B7C7E81, + 0x7475787A, + 0x76757473, + 0x817B7B80, + 0x797C8185, + 0x7A777778, + 0x67717B7E, + 0x6C6B6B6C, + 0x71706E6D, + 0x6A6E6F71, + 0x63626266, + 0x6E696461, + 0x84807973, + 0x7A7E8285, + 0x7A7A7979, + 0x7A80817E, + 0x90857A76, + 0x7A81898F, + 0x83817D7A, + 0x84818182, + 0x8A8B8A87, + 0x717D8384, + 0x6C656165, + 0x8B867E78, + 0x94928E8D, + 0x8680848B, + 0x7C879290, + 0x7D7D8085, + 0x7877787C, + 0x7473706E, + 0x7A797877, + 0x74777979, + 0x5E62686E, + 0x63605E5E, + 0x7B787169, + 0x7E777B83, + 0x818B918B, + 0x7072777B, + 0x78777472, + 0x6B6E7477, + 0x68696A6A, + 0x60666A6D, + 0x5052565A, + 0x53525151, + 0x56555554, + 0x706D6A68, + 0x70717271, + 0x6D6E6F71, + 0x686A6C6D, + 0x69686664, + 0x7A746E6A, + 0x646C7982, + 0x5C5E6061, + 0x64626060, + 0x63656666, + 0x625D5C5C, + 0x66696B68, + 0x50525C64, + 0x55575754, + 0x55505051, + 0x605C5857, + 0x676D6D6A, + 0x6E675F5F, + 0x5A545B64, + 0x68696863, + 0x69696C6D, + 0x857E746C, + 0x928F8F8F, + 0x848A9093, + 0x71757A7E, + 0x7F7A736F, + 0x8082807B, + 0x847F7A7A, + 0x86918E8E, + 0x6868636E, + 0x7F7B726A, + 0x7776777B, + 0x78746F6D, + 0x6C71777A, + 0x6E74736F, + 0x625F5E65, + 0x62656461, + 0x66615C5D, + 0x6D6E6862, + 0x63606065, + 0x68686867, + 0x69696968, + 0x585F5652, + 0x76466A54, + 0x565A6671, + 0x7372715F, + 0x645F5449, + 0x52585F63, + 0x64444043, + 0xEB115C68, + 0xE2DCEBE2, + 0x665766D8, + 0xEBEB1369, + 0xE5EBE9E8, + 0x50545543, + 0x5350585A, + 0x5E605D58, + 0x5C5D5D5C, + 0xE0E8106E, + 0xEBE2EBDD, + 0x53596064, + 0x53515050, + 0x4A3E604D, + 0x6C66624F, + 0x594D4F4B, + 0xE6EBEA1D, + 0x58E7EBEB, + 0x43594950, + 0x4E4F4F4E, + 0x1344443F, + 0xE6EBEAEB, + 0x6A68E8E3, + 0x2C105058, + 0x12182512, + 0x15101918, + 0x52581C1A, + 0x4D565550, + 0x6B594744, + 0x484A5157, + 0x4D4D4C4A, + 0x50505152, + 0x50504F4F, + 0x50505151, + 0x53525150, + 0x56565660, + 0x64694B5B, + 0x5F656E5D, + 0x374B484A, + 0xE8EBE2EB, + 0x4A57E5EB, + 0x54545454, + 0x53535353, + 0xEB2D6C44, + 0xEBE5EBE2, + 0x304547DA, + 0x48394743, +}; + +static gctUINT32 ppuMem7[] = +{ + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, +}; + +#define PATCH_OFFSET_0 29 +#define PATCH_OFFSET_1 31 +#define PATCH_OFFSET_2 83 +/* Buffer[3] is not used. */ +#define PATCH_OFFSET_3 +#define PATCH_OFFSET_4 11 +#define PATCH_OFFSET_5 17 +#define PATCH_OFFSET_6 23 +#define PATCH_OFFSET_7 33 +#endif + +#if gcdRESET_USC +static gctUINT32 nnBuffer0[] = { + 0x8010010c, + 0x07383fc2, + 0xc1000000, + 0x00a01000, + 0x08e00008, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000800, + 0x40000000, + 0x00e700ff, + 0x00000040, + 0x00000000, + 0x03ffffff, + 0x00000000, + 0x03ffffff, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000 +}; + +static gctUINT32 nnBuffer1[] = { + 0x8040010c, + 0x07383fd5, + 0x01000000, + 0x00a00e00, + 0x08700008, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000800, + 0x00000000, + 0x00e701fe, + 0x00000070, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000 +}; + +static gctUINT32 nnBuffer2[] = { + 0x8080010c, + 0x07383fd5, + 0x01000000, + 0x00a01000, + 0x09000008, + 0x00000000, + 0x00000000, + 0x00000000 +}; + +#define NN_BUFFER_IDX 0 +#define KERNEL_BUFFER_IDX 1 +#define INPUT_BUFFER_IDX 2 +#define RESULT_BUFFER_IDX 3 + +#define PATCH_KERNEL_OFFSET 5 +#define PATCH_INPUT_OFFSET 6 +#define PATCH_RESULT_OFFSET 7 + +static gctUINT32 instBuffer[] = { + 0x04021009, + 0x00200000, + 0x80000000, + 0x20000048, + 0x02021009, + 0x00200000, + 0x80000000, + 0x20154048, + 0x07801009, + 0x00200000, + 0x80000000, + 0x20390008, + 0x07801033, + 0x3fe02800, + 0x81540140, + 0x00390008, + 0x02021001, + 0x2aa02800, + 0x80000000, + 0x202a8048, + 0x07801033, + 0x3fe02800, + 0x81540140, + 0x00390008, + 0x02021001, + 0x2aa02800, + 0x80000000, + 0x202a8048, + 0x07801033, + 0x3fe02800, + 0x81540140, + 0x00390008, + 0x02021001, + 0x2aa02800, + 0x80000000, + 0x202a8048, + 0x07801033, + 0x3fe02800, + 0x81540140, + 0x00390008, + 0x02021001, + 0x2aa02800, + 0x80000000, + 0x202a8048, + 0x07801033, + 0x3fe02800, + 0x81540140, + 0x00390008, + 0x02021001, + 0x2aa02800, + 0x80000000, + 0x202a8048, + 0x07801033, + 0x3fe02800, + 0x81540140, + 0x00390008 +}; + +#define INST_BUFFER_IDX 0 +#define OUTPUT_BUFFER_IDX 1 +#endif + +#define _GC_OBJ_ZONE gcvZONE_HARDWARE + +#define gcmSEMAPHORESTALL(buffer) \ + do \ + { \ + /* Arm the PE-FE Semaphore. */ \ + *buffer++ \ + = gcmSETFIELDVALUE(0, AQ_COMMAND_LOAD_STATE_COMMAND, OPCODE, LOAD_STATE) \ + | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, COUNT, 1) \ + | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, ADDRESS, 0x0E02); \ + \ + *buffer++ \ + = gcmSETFIELDVALUE(0, AQ_SEMAPHORE, SOURCE, FRONT_END) \ + | gcmSETFIELDVALUE(0, AQ_SEMAPHORE, DESTINATION, PIXEL_ENGINE);\ + \ + /* STALL FE until PE is done flushing. */ \ + *buffer++ \ + = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \ + \ + *buffer++ \ + = gcmSETFIELDVALUE(0, STALL_STALL, SOURCE, FRONT_END) \ + | gcmSETFIELDVALUE(0, STALL_STALL, DESTINATION, PIXEL_ENGINE); \ + } while(0) + +static gceSTATUS +_FuncExecute(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + return gckHARDWARE_ExecuteFunctions(Execution); +} + +static gceSTATUS +_FuncValidate_MMU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + if ((hardware->mmuVersion > 0) && + hardware->options.enableMMU && + (hardware->options.secureMode != gcvSECURE_IN_TA)) + { + Execution->valid = gcvTRUE; + } + else + { + Execution->valid = gcvFALSE; + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncRelease_MMU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + if (Execution->funcVidMem) + { + if (Execution->logical) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvFALSE, + gcvFALSE + )); + Execution->logical = gcvNULL; + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->funcVidMem + )); + Execution->funcVidMem = gcvNULL; + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_ProgramMMUStates( + IN gckHARDWARE Hardware, + IN gckMMU Mmu, + IN gceMMU_MODE Mode, + IN gctPOINTER Logical, + IN OUT gctUINT32 * Bytes + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 config, address; + gctUINT32 extMtlb, extSafeAddress, configEx = 0; + gctPHYS_ADDR_T physical; + gctUINT32_PTR buffer; + gctBOOL ace; + gctUINT32 reserveBytes = 0; + + gctBOOL config2D; + + gcmkHEADER_ARG("Hardware=0x%x", Hardware); + + /* Verify the arguments. */ + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); + gcmkVERIFY_ARGUMENT(Hardware->mmuVersion != 0); + + ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE); + + switch (Hardware->options.secureMode) + { + case gcvSECURE_IN_NORMAL: + reserveBytes = 8 + 4 * 4; + break; + case gcvSECURE_NONE: + reserveBytes = 16 + 4 * 4; + if (ace) + { + reserveBytes += 8; + } + break; + case gcvSECURE_IN_TA: + default: + gcmkASSERT(gcvFALSE); + gcmkPRINT("%s(%d): secureMode is wrong", __FUNCTION__, __LINE__); + break; + } + + config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D) + && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D); + + if (config2D) + { + reserveBytes += + /* Pipe Select. */ + 4 * 4 + /* Configure MMU States. */ + + 4 * 4 + /* Semaphore stall */ + + 4 * 8; + + if (ace) + { + reserveBytes += 8; + } + } + + reserveBytes += 8; + + physical = Mmu->mtlbPhysical; + + config = (gctUINT32)(physical & 0xFFFFFFFF); + extMtlb = (gctUINT32)(physical >> 32); + + /* more than 40bit physical address */ + if (extMtlb & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + physical = Mmu->safePagePhysical; + + address = (gctUINT32)(physical & 0xFFFFFFFF); + extSafeAddress = (gctUINT32)(physical >> 32); + + if (address & 0x3F) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + /* more than 40bit physical address */ + if (extSafeAddress & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + if (ace) + { + configEx = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:0) - (0 ? + 7:0) + 1))))))) << (0 ? + 7:0))) | (((gctUINT32) ((gctUINT32) (extSafeAddress) & ((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:16) - (0 ? + 23:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 23:16) - (0 ? + 23:16) + 1))))))) << (0 ? + 23:16))) | (((gctUINT32) ((gctUINT32) (extMtlb) & ((gctUINT32) ((((1 ? + 23:16) - (0 ? + 23:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))); + } + + switch (Mode) + { + case gcvMMU_MODE_1K: + if (config & 0x3FF) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + break; + + case gcvMMU_MODE_4K: + if (config & 0xFFF) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + break; + + default: + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + if (Logical != gcvNULL) + { + buffer = (gctUINT32_PTR)Logical; + + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) + { + gcsMMU_TABLE_ARRAY_ENTRY * entry; + entry = (gcsMMU_TABLE_ARRAY_ENTRY *) Hardware->pagetableArray.logical; + + /* Setup page table array entry. */ + if (Hardware->bigEndian) + { + entry->low = gcmBSWAP32(config); + entry->high = gcmBSWAP32(extMtlb); + } + else + { + entry->low = config; + entry->high = extMtlb; + } + + gcmkDUMP(Mmu->os, "#[mmu: page table array]"); + + gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", + (unsigned long long)Hardware->pagetableArray.address, entry->low, 4); + + gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", + (unsigned long long)Hardware->pagetableArray.address + 4, entry->high, 4); + + gcmkVERIFY_OK(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + Hardware->pagetableArray.videoMem, + 0, + entry, + 8 + )); + + /* Setup command buffer to load index 0 of page table array. */ + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ + = (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) &((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)))); + } + else + { + gcmkASSERT(Hardware->options.secureMode == gcvSECURE_NONE); + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = config; + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = address; + + if (ace) + { + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ + = configEx; + } + } + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E12) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))); + + do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0); +; + + + if (config2D) + { + /* LoadState(AQPipeSelect, 1), pipe. */ + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = 0x1; + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = config; + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = address; + + if (ace) + { + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ + = configEx; + } + + do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0); +; + + + /* LoadState(AQPipeSelect, 1), pipe. */ + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = 0x0; + + do{*buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8)));} while(0); +; + + } + + } + + if (Bytes != gcvNULL) + { + *Bytes = reserveBytes; + } + + /* Return the status. */ + gcmkFOOTER_NO(); + return status; + +OnError: + /* Return the status. */ + gcmkFOOTER(); + return status; +} + +static gceSTATUS +_ProgramMMUStatesMCFE( + IN gckHARDWARE Hardware, + IN gckMMU Mmu, + IN gceMMU_MODE Mode, + IN gctPOINTER Logical, + IN OUT gctUINT32 * Bytes + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 config, address; + gctUINT32 extMtlb, extSafeAddress, configEx = 0; + gctPHYS_ADDR_T physical; + gctUINT32_PTR buffer; + gctBOOL ace; + gctUINT32 reserveBytes = 0; + + gcmkHEADER_ARG("Hardware=0x%x", Hardware); + + /* Verify the arguments. */ + gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE); + gcmkVERIFY_ARGUMENT(Hardware->mmuVersion != 0); + + ace = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_ACE); + + switch (Hardware->options.secureMode) + { + case gcvSECURE_IN_NORMAL: + reserveBytes = 8; + reserveBytes += 8; + break; + case gcvSECURE_NONE: + reserveBytes = 16;; + if (ace) + { + reserveBytes += 8; + reserveBytes += 8; + } + break; + case gcvSECURE_IN_TA: + default: + gcmkASSERT(gcvFALSE); + gcmkPRINT("%s(%d): secureMode is wrong", __FUNCTION__, __LINE__); + break; + } + + physical = Mmu->mtlbPhysical; + + config = (gctUINT32)(physical & 0xFFFFFFFF); + extMtlb = (gctUINT32)(physical >> 32); + + /* more than 40bit physical address */ + if (extMtlb & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + physical = Mmu->safePagePhysical; + + address = (gctUINT32)(physical & 0xFFFFFFFF); + extSafeAddress = (gctUINT32)(physical >> 32); + + if (address & 0x3F) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + /* more than 40bit physical address */ + if (extSafeAddress & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + if (ace) + { + configEx = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:0) - (0 ? + 7:0) + 1))))))) << (0 ? + 7:0))) | (((gctUINT32) ((gctUINT32) (extSafeAddress) & ((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:16) - (0 ? + 23:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 23:16) - (0 ? + 23:16) + 1))))))) << (0 ? + 23:16))) | (((gctUINT32) ((gctUINT32) (extMtlb) & ((gctUINT32) ((((1 ? + 23:16) - (0 ? + 23:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))); + } + + switch (Mode) + { + case gcvMMU_MODE_1K: + if (config & 0x3FF) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + break; + + case gcvMMU_MODE_4K: + if (config & 0xFFF) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + config |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + break; + + default: + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + if (Logical != gcvNULL) + { + buffer = Logical; + + if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL) + { + gcsMMU_TABLE_ARRAY_ENTRY * entry; + entry = (gcsMMU_TABLE_ARRAY_ENTRY *) Hardware->pagetableArray.logical; + + /* Setup page table array entry. */ + if (Hardware->bigEndian) + { + entry->low = gcmBSWAP32(config); + entry->high = gcmBSWAP32(extMtlb); + } + else + { + entry->low = config; + entry->high = extMtlb; + } + + gcmkDUMP(Mmu->os, "#[mmu: page table array]"); + + gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", + (unsigned long long)Hardware->pagetableArray.address, entry->low, 4); + + gcmkDUMP(Mmu->os, "@[physical.fill 0x%010llX 0x%08X 0x%08X]", + (unsigned long long)Hardware->pagetableArray.address + 4, entry->high, 4); + + gcmkVERIFY_OK(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + Hardware->pagetableArray.videoMem, + 0, + entry, + 8 + )); + + /* Setup command buffer to load index 0 of page table array. */ + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ + = (((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) &((((gctUINT32) (~0U)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)))); + + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + } + else + { + gcmkASSERT(Hardware->options.secureMode == gcvSECURE_NONE); + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = config; + + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = address; + + if (ace) + { + *buffer++ + = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0068) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + *buffer++ = configEx; + + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + *buffer++ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x03 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + } + } + } + + if (Bytes != gcvNULL) + { + *Bytes = reserveBytes; + } + + /* Return the status. */ + gcmkFOOTER_NO(); + return status; + +OnError: + /* Return the status. */ + gcmkFOOTER(); + return status; +} + +static gceSTATUS +_FuncInit_MMU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status; + gctUINT32 mmuBytes = 0; + gctUINT32 tailBytes; + gctUINT32 flags = gcvALLOC_FLAG_CONTIGUOUS; + gceMMU_MODE mode; + gcePOOL pool; + gctPHYS_ADDR_T physical; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + +#if gcdENABLE_MMU_1KMODE + mode = gcvMMU_MODE_1K; +#else + mode = gcvMMU_MODE_4K; +#endif + + flags |= gcvALLOC_FLAG_4GB_ADDR; + +#if gcdENABLE_CACHEABLE_COMMAND_BUFFER + flags |= gcvALLOC_FLAG_CACHEABLE; +#endif + +#if !gcdCAPTURE_ONLY_MODE + pool = gcvPOOL_DEFAULT; +#else + pool = gcvPOOL_VIRTUAL; +#endif + + Execution->funcVidMemBytes = 1024; + /* Allocate mmu command buffer within 32bit space */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_COMMAND, + flags, + &Execution->funcVidMemBytes, + &pool, + &Execution->funcVidMem + )); + + /* Lock for kernel side CPU access. */ + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->funcVidMem, + gcvFALSE, + gcvFALSE, + &Execution->logical + )); + + /* Get CPU physical address. */ + gcmkONERROR(gckVIDMEM_NODE_GetPhysical( + hardware->kernel, + Execution->funcVidMem, + 0, + &physical + )); + + /* Convert to GPU physical address. */ + gcmkVERIFY_OK(gckOS_CPUPhysicalToGPUPhysical( + hardware->os, + physical, + &physical + )); + + if (physical & 0xFFFFFFFF00000000ULL) + { + gcmkFATAL("%s(%d): Command buffer physical address (0x%llx) for MMU setup exceeds 32bits, " + "please rebuild kernel with CONFIG_ZONE_DMA32=y or CONFIG_ZONE_DMA=y or both.", + __FUNCTION__, __LINE__, physical); + + gcmkFATAL("Some Archs, for ARM64, the setting is special:\n" + "kernel version ZONE_DMA ZONE_DMA32\n" + "3.7 - 3.14 no yes\n" + "3.15 - 4.15 yes no\n" + "4.16 - 5.4.5 no yes\n" + "5.5.rc1 - yes yes\n"); + + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + } + + gcmkSAFECASTPHYSADDRT(Execution->address, physical); + + if (hardware->mcFE) + { + gcmkONERROR(_ProgramMMUStatesMCFE( + hardware, + hardware->kernel->mmu, + mode, + Execution->logical, + &mmuBytes + )); + } + else + { + gcmkONERROR(_ProgramMMUStates( + hardware, + hardware->kernel->mmu, + mode, + Execution->logical, + &mmuBytes + )); + } + + Execution->endAddress = Execution->address + mmuBytes; + Execution->endLogical = (gctUINT8_PTR)Execution->logical + mmuBytes; + + if (hardware->wlFE) + { + tailBytes = (gctUINT32)(Execution->funcVidMemBytes - mmuBytes); + gcmkONERROR(gckWLFE_End(hardware, Execution->endLogical, Execution->endAddress, &tailBytes)); + } + else + { + tailBytes = 0; + } + + Execution->bytes = mmuBytes + tailBytes; + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + hardware->kernel, + Execution->funcVidMem, + 0, + Execution->logical, + Execution->bytes + )); + + return gcvSTATUS_OK; + +OnError: + _FuncRelease_MMU(Execution); + + return status; +} + +static gceSTATUS +_FuncExecute_MMU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 address = 0; + gctUINT32 idle; + gctUINT32 timer = 0, delay = 1; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gckMMU mmu = hardware->kernel->mmu; + + /* Prepared command sequence contains an END, + ** so update lastEnd and store executeCount to END command. + */ + gctUINT32_PTR endLogical = (gctUINT32_PTR)Execution->endLogical; + + hardware->lastEnd = Execution->endAddress; + + if (hardware->wlFE) + { + /* Append a executeCount in End command, MCFE does not support such End command. */ + *(endLogical + 1) = hardware->executeCount + 1; + } + + if (hardware->options.secureMode == gcvSECURE_IN_NORMAL) + { + gctUINT32 extSafeAddress; + /* Set up base address of page table array. */ + gcmkONERROR(gckOS_WriteRegisterEx( + hardware->os, + hardware->core, + 0x0038C, + (gctUINT32)(hardware->pagetableArray.address & 0xFFFFFFFF) + )); + + gcmkONERROR(gckOS_WriteRegisterEx( + hardware->os, + hardware->core, + 0x00390, + (gctUINT32)((hardware->pagetableArray.address >> 32) & 0xFFFFFFFF) + )); + + gcmkONERROR(gckOS_WriteRegisterEx( + hardware->os, + hardware->core, + 0x00394, + 1 + )); + + address = (gctUINT32)(mmu->safePagePhysical & 0xFFFFFFFF); + extSafeAddress = (gctUINT32)(mmu->safePagePhysical >> 32); + + if (address & 0x3F) + { + gcmkONERROR(gcvSTATUS_NOT_ALIGNED); + } + + /* more than 40bit physical address */ + if (extSafeAddress & 0xFFFFFF00) + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + gcmkONERROR(gckOS_WriteRegisterEx( + hardware->os, + hardware->core, + 0x0039C, + address + )); + + gcmkONERROR(gckOS_WriteRegisterEx( + hardware->os, + hardware->core, + 0x00398, + address + )); + + gcmkONERROR(gckOS_WriteRegisterEx( + hardware->os, + hardware->core, + 0x003A0, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:16) - (0 ? + 23:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 23:16) - (0 ? + 23:16) + 1))))))) << (0 ? + 23:16))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)extSafeAddress) & ((gctUINT32) ((((1 ? + 23:16) - (0 ? + 23:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? + 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:0) - (0 ? + 7:0) + 1))))))) << (0 ? + 7:0))) | (((gctUINT32) ((gctUINT32) ((gctUINT32)extSafeAddress) & ((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:15) - (0 ? + 15:15) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:15) - (0 ? + 15:15) + 1))))))) << (0 ? + 15:15))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 15:15) - (0 ? + 15:15) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) + )); + } + + gckFUNCTION_Dump(Execution); + + /* Execute prepared command sequence. */ + if (hardware->mcFE) + { + gcmkONERROR(gckMCFE_Execute( + hardware, + gcvFALSE, + 0, + Execution->address, + Execution->bytes + )); + } + else + { + gcmkONERROR(gckWLFE_Execute( + hardware, + Execution->address, + Execution->bytes + )); + } + +#if gcdLINK_QUEUE_SIZE + { + gcuQUEUEDATA data; + + gcmkVERIFY_OK(gckOS_GetProcessID(&data.linkData.pid)); + + data.linkData.start = Execution->address; + data.linkData.end = Execution->address + Execution->bytes; + data.linkData.linkLow = 0; + data.linkData.linkHigh = 0; + + gckQUEUE_Enqueue(&hardware->linkQueue, &data); + } +#endif + + /* Wait until MMU configure finishes. */ + do + { + gckOS_Delay(hardware->os, delay); + + gcmkONERROR(gckOS_ReadRegisterEx( + hardware->os, + hardware->core, + 0x00004, + &idle)); + + timer += delay; + delay *= 2; + +#if gcdGPU_TIMEOUT + if (timer >= hardware->kernel->timeOut) + { + gckHARDWARE_DumpGPUState(hardware); + + if (hardware->kernel->command) + { + gckCOMMAND_DumpExecutingBuffer(hardware->kernel->command); + } + + /* Even if hardware is not reset correctly, let software + ** continue to avoid software stuck. Software will timeout again + ** and try to recover GPU in next timeout. + */ + gcmkONERROR(gcvSTATUS_DEVICE); + } +#endif + } + while (!(((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) )); + + gcmkDUMP(hardware->os, "@[register.wait 0x%05X 0x%08X 0x%08X]", + 0x00004, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (~0U) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))), + idle); + +OnError: + return status; +} + +static gceSTATUS +_FuncValidate_Flush(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + Execution->valid = gcvTRUE; + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncRelease_Flush(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + if (Execution->funcVidMem) + { + if (Execution->address) + { + /* Synchroneous unlock. */ + gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvNULL + )); + Execution->address = 0; + } + + if (Execution->logical) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvFALSE, + gcvFALSE + )); + Execution->logical = gcvNULL; + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->funcVidMem + )); + + Execution->funcVidMem = gcvNULL; + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncInit_Flush(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 flushBytes = 0; + gctUINT32 offset = 0; + gctUINT32 endBytes = 0; + gctUINT32 address; + gctUINT32 allocFlag = 0; + gcePOOL pool; + gctUINT8_PTR logical; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + +#if !gcdCAPTURE_ONLY_MODE + pool = gcvPOOL_DEFAULT; +#else + pool = gcvPOOL_VIRTUAL; +#endif + +#if gcdENABLE_CACHEABLE_COMMAND_BUFFER + allocFlag = gcvALLOC_FLAG_CACHEABLE; +#endif + + Execution->funcVidMemBytes = 1024; + /* Allocate video memory node for aux functions. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_COMMAND, + allocFlag, + &Execution->funcVidMemBytes, + &pool, + &Execution->funcVidMem + )); + + /* Lock for GPU access. */ + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->funcVidMem, + &Execution->address + )); + + /* Lock for kernel side CPU access. */ + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->funcVidMem, + gcvFALSE, + gcvFALSE, + &Execution->logical + )); + /* + ** All cache flush command sequence. + */ + logical = (gctUINT8_PTR)Execution->logical; + address = Execution->address; + + /* Get the size of the flush command. */ + gcmkONERROR(gckHARDWARE_Flush(hardware, gcvFLUSH_ALL, gcvNULL, &flushBytes)); + + /* Append a flush. */ + gcmkONERROR(gckHARDWARE_Flush(hardware, gcvFLUSH_ALL, logical, &flushBytes)); + + offset += flushBytes; + logical += offset; + address += offset; + + if (hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(hardware, logical, address, &endBytes)); + } + + Execution->bytes = flushBytes + endBytes; + Execution->endAddress = Execution->address + flushBytes; + Execution->endLogical = (gctUINT8_PTR)Execution->logical + flushBytes; + + return gcvSTATUS_OK; +OnError: + _FuncRelease_Flush(Execution); + + return status; +} + +#if gcdINITIALIZE_PPU +static gceSTATUS +_FuncValidate_PPU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + Execution->valid = gcvFALSE; + if (!gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_EVIS2_FLOP_RESET_FIX)) + { + if (hardware->identity.customerID == 0x21 || + hardware->identity.customerID == 0x25 || + hardware->identity.customerID == 0x86 || + hardware->identity.customerID == 0xA0 + ) + { + Execution->valid = gcvTRUE; + } + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncRelease_PPU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gctUINT32 i; + + if (Execution->data) + { + for (i = 0; i < 8; i++) + { + if (Execution->data[i].bufVidMem) + { + if (Execution->data[i].logical) + { + gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvFALSE, + gcvFALSE + ); + Execution->data[i].logical = gcvNULL; + } + if (Execution->data[i].address) + { + gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvNULL + ); + Execution->data[i].address = 0; + } + + gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->data[i].bufVidMem + ); + } + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, Execution->data)); + Execution->data = gcvNULL; + } + + if (Execution->funcVidMem) + { + if (Execution->address) + { + /* Synchroneous unlock. */ + gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvNULL + )); + Execution->address = 0; + } + + if (Execution->logical) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvFALSE, + gcvFALSE + )); + Execution->logical = gcvNULL; + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->funcVidMem + )); + + Execution->funcVidMem = gcvNULL; + } + + return gcvSTATUS_OK; +} + +gceSTATUS +_PatchPPUBuffer( + IN gcsFUNCTION_EXECUTION_PTR Execution + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gcePOOL pool = gcvPOOL_DEFAULT; + gctUINT32_PTR command = (gctUINT32_PTR)Execution->logical; + gctUINT32 commandPatchOffsets[8]; + gctUINT32_PTR patchBuffers[8]; + gctSIZE_T patchBufferSizes[8]; + gctUINT32 i; + gctUINT32 allocFlag = 0; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gctPOINTER pointer = gcvNULL; + +#if gcdENABLE_CACHEABLE_COMMAND_BUFFER + allocFlag = gcvALLOC_FLAG_CACHEABLE; +#endif + + patchBuffers[0] = ppuMem0; + patchBuffers[1] = ppuMem1; + patchBuffers[2] = ppuMem2; + patchBuffers[3] = ppuMem3; + patchBuffers[4] = ppuMem4; + patchBuffers[5] = ppuMem5; + patchBuffers[6] = ppuMem6; + patchBuffers[7] = ppuMem7; + + patchBufferSizes[0] = gcmSIZEOF(ppuMem0); + patchBufferSizes[1] = gcmSIZEOF(ppuMem1); + patchBufferSizes[2] = gcmSIZEOF(ppuMem2); + patchBufferSizes[3] = gcmSIZEOF(ppuMem3); + patchBufferSizes[4] = gcmSIZEOF(ppuMem4); + patchBufferSizes[5] = gcmSIZEOF(ppuMem5); + patchBufferSizes[6] = gcmSIZEOF(ppuMem6); + patchBufferSizes[7] = gcmSIZEOF(ppuMem7); + + commandPatchOffsets[0] = PATCH_OFFSET_0; + commandPatchOffsets[1] = PATCH_OFFSET_1; + commandPatchOffsets[2] = PATCH_OFFSET_2; + commandPatchOffsets[4] = PATCH_OFFSET_4; + commandPatchOffsets[5] = PATCH_OFFSET_5; + commandPatchOffsets[6] = PATCH_OFFSET_6; + commandPatchOffsets[7] = PATCH_OFFSET_7; + + gcmkONERROR(gckOS_Allocate(hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * 8, + &pointer)); + + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * 8); + + Execution->data = (gcsFUNCTION_EXECUTION_DATA_PTR)pointer; + + for (i = 0; i < 8; i++) + { + if (i != 3) + { + /* Allocate memory for buffers. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_BITMAP, + allocFlag, + &patchBufferSizes[i], + &pool, + &Execution->data[i].bufVidMem + )); + + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + gcvFALSE, + gcvFALSE, + &Execution->data[i].logical + )); + + gckOS_MemCopy(Execution->data[i].logical, patchBuffers[i], patchBufferSizes[i]); + + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->data[i].bufVidMem, + &Execution->data[i].address + )); + + /* patch the buffer */ + command[commandPatchOffsets[i]] = Execution->data[i].address; + } + } + + return status; +OnError: + if (Execution->data) + { + for (i = 0; i < 8; i++) + { + if (Execution->data[i].bufVidMem) + { + if (Execution->data[i].logical) + { + gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvFALSE, + gcvFALSE + ); + Execution->data[i].logical = gcvNULL; + } + if (Execution->data[i].address) + { + gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvNULL + ); + Execution->data[i].address = 0; + } + + gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->data[i].bufVidMem + ); + } + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, Execution->data)); + Execution->data = gcvNULL; + } + + return status; +} + +gceSTATUS +_InitializePPU( + IN gcsFUNCTION_EXECUTION_PTR Execution, + IN OUT gctUINT32 * Bytes + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gctPOINTER logical = Execution->logical; + + gctUINT32 flushCommands[] = { + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x028A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000011, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E13) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000002, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x5580) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000002, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000701, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))), + 0x00000701, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD8000340, 0x00000080, 0x00800080, 0x444051F0, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x08) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD8004380, 0x00000040, 0x00400040, 0x444051F0, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x10) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD80053C0, 0x00000040, 0x00400040, 0x444051F0, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x18) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD8000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x19) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD8000040, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x1C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD8006400, 0x00000080, 0x00400040, 0x44405071, 0x00000003, 0x00002000, 0x00000000, 0x00000000, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x24) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x11111111, 0x00000000, 0x03020100, 0x07060504, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x28) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x22222222, 0x00000000, 0x00000000, 0x00000400, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x2C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x30) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0xFFFFFFFF, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x022C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x0000001F, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x02A4) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0420) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0403) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000005, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0416) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0409) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x021F) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0424) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x0000000F, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x040A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xD8000100, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x5580) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000002, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x021A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0425) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x0000000E, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0402) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00001F01, 0x00000005, 0x00000F00, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0228) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x02AA) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x028C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000100, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E07) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x040C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x020C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x0F3F0000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0201) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E22) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0412) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0240) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x03000002, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0249) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0247) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024D) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024F) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0256) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000008, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0257) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0258) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0250) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, 0x0000003F, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x000003FF, 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0248) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0xBADABEEB, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000C20, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000701, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))), + 0x00000701, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000C23, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000C23, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000001, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000C23, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E13) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))), + 0x00000000, + + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x02 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))), + 0x00000000, + }; + + *Bytes = gcmSIZEOF(flushCommands) - 8; + /* Patch the command. */ + if (logical) + { + gckOS_MemCopy(logical, flushCommands, *Bytes); + status = _PatchPPUBuffer(Execution); + } + + return status; +} + +static gceSTATUS +_FuncInit_PPU(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 ppuBytes = 0; + gctUINT32 offset = 0; + gctUINT32 endBytes = 0; + gctUINT32 address; + gctUINT32 allocFlag = 0; + gcePOOL pool; + gctUINT8_PTR logical; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + pool = gcvPOOL_DEFAULT; + +#if gcdENABLE_CACHEABLE_COMMAND_BUFFER + allocFlag = gcvALLOC_FLAG_CACHEABLE; +#endif + Execution->funcVidMemBytes = 1024; + /* Allocate video memory node for aux functions. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_COMMAND, + allocFlag, + &Execution->funcVidMemBytes, + &pool, + &Execution->funcVidMem + )); + + /* Lock for GPU access. */ + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->funcVidMem, + &Execution->address + )); + + /* Lock for kernel side CPU access. */ + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->funcVidMem, + gcvFALSE, + gcvFALSE, + &Execution->logical + )); + /* + ** All cache flush command sequence. + */ + logical = (gctUINT8_PTR)Execution->logical; + address = Execution->address; + /* Append a flush. */ + gcmkONERROR(_InitializePPU(Execution, &ppuBytes)); + + offset += ppuBytes; + logical += offset; + address += offset; + + if (hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(hardware, logical, address, &endBytes)); + } + + Execution->bytes = ppuBytes + endBytes; + Execution->endAddress = Execution->address + ppuBytes; + Execution->endLogical = (gctUINT8_PTR)Execution->logical + ppuBytes; + + return gcvSTATUS_OK; +OnError: + _FuncRelease_PPU(Execution); + + return status; +} +#endif + +#if gcdRESET_USC +gceSTATUS +_InitializeUSC( + IN gcsFUNCTION_EXECUTION_PTR Execution, + IN OUT gctUINT32 * Bytes + ) +{ + gctUINT32 i, idx = 0; + gcePOOL pool = gcvPOOL_DEFAULT; + gctUINT32 flushCommands[128] = {0}; + gctUINT32_PTR nnCommands = gcvNULL; + gctSIZE_T patchBufferSizes[4]; + gceSTATUS status = gcvSTATUS_OK; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gctUINT8_PTR logical = (gctUINT8_PTR)Execution->logical; + gctPOINTER pointer = gcvNULL; + + if (hardware->identity.customerID == 0x86) + { + patchBufferSizes[NN_BUFFER_IDX] = gcmSIZEOF(nnBuffer0); + nnCommands = nnBuffer0; + } + else if (hardware->identity.customerID == 0x25) + { + patchBufferSizes[NN_BUFFER_IDX] = gcmSIZEOF(nnBuffer1); + nnCommands = nnBuffer1; + } + else if (hardware->identity.customerID == 0x21) + { + patchBufferSizes[NN_BUFFER_IDX] = gcmSIZEOF(nnBuffer2); + nnCommands = nnBuffer2; + } + else + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + patchBufferSizes[INPUT_BUFFER_IDX] = + patchBufferSizes[KERNEL_BUFFER_IDX] = + patchBufferSizes[RESULT_BUFFER_IDX] = 1024 * 1024; + + gcmkONERROR(gckOS_Allocate(hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * 4, + &pointer)); + + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * 4); + + Execution->data = (gcsFUNCTION_EXECUTION_DATA_PTR)pointer; + + for (i = 0; i < 4; i++) + { + /* Allocate memory for buffers. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_BITMAP, + gcvALLOC_FLAG_NONE, + &patchBufferSizes[i], + &pool, + &Execution->data[i].bufVidMem + )); + + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + gcvFALSE, + gcvFALSE, + &Execution->data[i].logical + )); + + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->data[i].bufVidMem, + &Execution->data[i].address + )); + + gcmkONERROR(gckOS_ZeroMemory(Execution->data[i].logical, patchBufferSizes[i])); + } + + /* Patch NN command */ + nnCommands[PATCH_KERNEL_OFFSET] = Execution->data[KERNEL_BUFFER_IDX].address >> 6; + nnCommands[PATCH_INPUT_OFFSET] = Execution->data[INPUT_BUFFER_IDX].address; + nnCommands[PATCH_RESULT_OFFSET] = Execution->data[RESULT_BUFFER_IDX].address; + gckOS_MemCopy(Execution->data[NN_BUFFER_IDX].logical, nnCommands, patchBufferSizes[NN_BUFFER_IDX]); + + /* construct command */ + if (hardware->identity.customerID == 0x21) + { + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000040; + } + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0529) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0xfffffe7f; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0500) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x04011311; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0501) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0502) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x3f800000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0503) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x4b7fffff; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0504) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + if (hardware->identity.customerID == 0x21) + { + flushCommands[idx++] = 0x000a0000; + } + else + { + flushCommands[idx++] = 0x00000000; + } + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0520) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + if (hardware->identity.customerID == 0x21) + { + flushCommands[idx++] = 0x000a0000; + } + else + { + flushCommands[idx++] = 0x00000000; + } + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0505) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000500; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0506) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00070007; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x050B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x05102f0a; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E06) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x050C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0518) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x050D) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000500; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0300) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0301) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0302) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x43a00000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0303) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x43700000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0308) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x43a07800; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0309) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x4370f000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0595) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00400000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0380) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000004; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0515) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0516) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0518) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0520) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + + if (hardware->identity.customerID == 0x21) + { + flushCommands[idx++] = 0x000a0000; + } + else + { + flushCommands[idx++] = 0x00000000; + } + + if (hardware->identity.customerID == 0x86) + { + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E4C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x0000008c; + } + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0428) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = Execution->data[NN_BUFFER_IDX].address; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000040; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x02 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + flushCommands[idx++] = 0x00000000; + + *Bytes = idx * 4 - 8; + /* Copy command to command buffer */ + gckOS_MemCopy(logical, flushCommands, *Bytes); + + return status; + +OnError: + if (Execution->data) + { + for (i = 0; i < 4; i++) + { + if (Execution->data[i].bufVidMem) + { + if (Execution->data[i].logical) + { + gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvFALSE, + gcvFALSE + ); + Execution->data[i].logical = gcvNULL; + } + if (Execution->data[i].address) + { + gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvNULL + ); + Execution->data[i].address = 0; + } + + gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->data[i].bufVidMem + ); + } + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, Execution->data)); + Execution->data = gcvNULL; + } + + return status; +} + +static gceSTATUS +_FuncValidate_USC(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + Execution->valid = gcvFALSE; + if (!gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_USC_ASYNC_CP_RTN_FLOP_RESET_FIX)) + { + if (hardware->identity.customerID == 0x21 || + hardware->identity.customerID == 0x25 || + hardware->identity.customerID == 0x86 || + hardware->identity.customerID == 0xA0 + ) + { + Execution->valid = gcvTRUE; + } + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncRelease_USC(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gctUINT32 i; + + if (Execution->data) + { + for (i = 0; i < 4; i++) + { + if (Execution->data[i].bufVidMem) + { + if (Execution->data[i].logical) + { + gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvFALSE, + gcvFALSE + ); + Execution->data[i].logical = gcvNULL; + } + if (Execution->data[i].address) + { + gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvNULL + ); + Execution->data[i].address = 0; + } + + gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->data[i].bufVidMem + ); + } + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, Execution->data)); + Execution->data = gcvNULL; + } + + if (Execution->funcVidMem) + { + if (Execution->address) + { + /* Synchroneous unlock. */ + gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvNULL + )); + Execution->address = 0; + } + + if (Execution->logical) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvFALSE, + gcvFALSE + )); + Execution->logical = gcvNULL; + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->funcVidMem + )); + + Execution->funcVidMem = gcvNULL; + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncInit_USC(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 uscBytes = 0; + gctUINT32 offset = 0; + gctUINT32 endBytes = 0; + gctUINT32 address; + gctUINT32 allocFlag = 0; + gcePOOL pool; + gctPOINTER logical; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + pool = gcvPOOL_DEFAULT; + +#if gcdENABLE_CACHEABLE_COMMAND_BUFFER + allocFlag = gcvALLOC_FLAG_CACHEABLE; +#endif + + Execution->funcVidMemBytes = 1024; + /* Allocate video memory node for aux functions. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_COMMAND, + allocFlag, + &Execution->funcVidMemBytes, + &pool, + &Execution->funcVidMem + )); + + /* Lock for GPU access. */ + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->funcVidMem, + &Execution->address + )); + + /* Lock for kernel side CPU access. */ + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->funcVidMem, + gcvFALSE, + gcvFALSE, + &Execution->logical + )); + /* + ** All cache flush command sequence. + */ + logical = Execution->logical; + address = Execution->address; + /* Append a flush. */ + gcmkONERROR(_InitializeUSC(Execution, &uscBytes)); + + offset += uscBytes; + address += offset; + logical = (gctUINT8_PTR)logical + offset; + + if (hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(hardware, logical, address, &endBytes)); + } + + Execution->bytes = uscBytes + endBytes; + Execution->endAddress = Execution->address + uscBytes; + Execution->endLogical = (gctUINT8_PTR)Execution->logical + uscBytes; + + return gcvSTATUS_OK; +OnError: + _FuncRelease_USC(Execution); + + return status; +} + +gceSTATUS +_InitializeUSC2( + IN gcsFUNCTION_EXECUTION_PTR Execution, + IN OUT gctUINT32 * Bytes + ) +{ + gctUINT32 i, idx = 0; + gcePOOL pool = gcvPOOL_DEFAULT; + gctUINT32 flushCommands[80] = {0}; + gctSIZE_T patchBufferSizes[2]; + gceSTATUS status = gcvSTATUS_OK; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gctUINT8_PTR logical = (gctUINT8_PTR)Execution->logical; + gctPOINTER pointer = gcvNULL; + + patchBufferSizes[INST_BUFFER_IDX] = gcmSIZEOF(instBuffer); + patchBufferSizes[OUTPUT_BUFFER_IDX] = 1024; + + gcmkONERROR(gckOS_Allocate(hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * 2, + &pointer)); + + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * 2); + + Execution->data = (gcsFUNCTION_EXECUTION_DATA_PTR)pointer; + + for (i = 0; i < 2; i++) + { + /* Allocate memory for buffers. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_BITMAP, + gcvALLOC_FLAG_NONE, + &patchBufferSizes[i], + &pool, + &Execution->data[i].bufVidMem + )); + + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + gcvFALSE, + gcvFALSE, + &Execution->data[i].logical + )); + + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->data[i].bufVidMem, + &Execution->data[i].address + )); + + gcmkONERROR(gckOS_ZeroMemory(Execution->data[i].logical, patchBufferSizes[i])); + } + + gckOS_MemCopy(Execution->data[INST_BUFFER_IDX].logical, instBuffer, patchBufferSizes[INST_BUFFER_IDX]); + + /* construct command */ + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x0D & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | gcvCORE_3D_ALL_MASK; + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (0x14) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000001; + flushCommands[idx++] = 0x00000002; + flushCommands[idx++] = 0x075bcd15; + flushCommands[idx++] = 0x00001000; + flushCommands[idx++] = 0x00010000; + flushCommands[idx++] = 0x00020000; + flushCommands[idx++] = 0x00030000; + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000001; + flushCommands[idx++] = 0x00000002; + flushCommands[idx++] = 0x00000004; + flushCommands[idx++] = 0x0000000c; + flushCommands[idx++] = 0x00000003; + flushCommands[idx++] = 0x00000003; + flushCommands[idx++] = 0x0000000f; + flushCommands[idx++] = Execution->data[OUTPUT_BUFFER_IDX].address; + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000080; + flushCommands[idx++] = 0x00000001; + flushCommands[idx++] = 0xffffffff; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x0D & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | gcvCORE_3D_ALL_MASK; + flushCommands[idx++] = 0xf7f38c3c; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x021F) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0424) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x0000000e; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0402) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000001; + flushCommands[idx++] = 0x00000003; + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x040A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = Execution->data[INST_BUFFER_IDX].address; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0409) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x022C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000010; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x021A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000001; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x0D & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | gcvCORE_3D_ALL_MASK; + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E21) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x022E) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000300; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0240) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x02000001; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0247) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000001; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0249) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0250) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0253) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000000; + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024D) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000000; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0256) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000001; + flushCommands[idx++] = 0x00000001; + flushCommands[idx++] = 0x00000001; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000020; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0248) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000001; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x00000020; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E01) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + flushCommands[idx++] = 0x0000004f; + + flushCommands[idx++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x02 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + flushCommands[idx++] = 0x00000000; + + *Bytes = idx * 4 - 8; + /* Copy command to command buffer */ + gckOS_MemCopy(logical, flushCommands, *Bytes); + + return status; +OnError: + if (Execution->data) + { + for (i = 0; i < 2; i++) + { + if (Execution->data[i].bufVidMem) + { + if (Execution->data[i].logical) + { + gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvFALSE, + gcvFALSE + ); + Execution->data[i].logical = gcvNULL; + } + if (Execution->data[i].address) + { + gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvNULL + ); + Execution->data[i].address = 0; + } + + gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->data[i].bufVidMem + ); + } + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, Execution->data)); + Execution->data = gcvNULL; + } + + return status; +} + +static gceSTATUS +_FuncValidate_USC2(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + Execution->valid = gcvFALSE; + if (!gckHARDWARE_IsFeatureAvailable(hardware, gcvFEATURE_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX)) + { + if (hardware->identity.customerID == 0x21 || + hardware->identity.customerID == 0x25 || + hardware->identity.customerID == 0x86 || + hardware->identity.customerID == 0xA0 + ) + { + Execution->valid = gcvTRUE; + } + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncRelease_USC2(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + gctUINT32 i; + + if (Execution->data) + { + for (i = 0; i < 2; i++) + { + if (Execution->data[i].bufVidMem) + { + if (Execution->data[i].logical) + { + gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvFALSE, + gcvFALSE + ); + Execution->data[i].logical = gcvNULL; + } + if (Execution->data[i].address) + { + gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->data[i].bufVidMem, + 0, + gcvNULL + ); + Execution->data[i].address = 0; + } + + gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->data[i].bufVidMem + ); + } + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, Execution->data)); + Execution->data = gcvNULL; + } + + if (Execution->funcVidMem) + { + if (Execution->address) + { + /* Synchroneous unlock. */ + gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvNULL + )); + Execution->address = 0; + } + + if (Execution->logical) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + hardware->kernel, + Execution->funcVidMem, + 0, + gcvFALSE, + gcvFALSE + )); + Execution->logical = gcvNULL; + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + hardware->kernel, + Execution->funcVidMem + )); + + Execution->funcVidMem = gcvNULL; + } + + return gcvSTATUS_OK; +} + +static gceSTATUS +_FuncInit_USC2(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_OK; + gctUINT32 uscBytes = 0; + gctUINT32 offset = 0; + gctUINT32 endBytes = 0; + gctUINT32 address; + gctUINT32 allocFlag = 0; + gcePOOL pool; + gctPOINTER logical; + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + pool = gcvPOOL_DEFAULT; + +#if gcdENABLE_CACHEABLE_COMMAND_BUFFER + allocFlag = gcvALLOC_FLAG_CACHEABLE; +#endif + + Execution->funcVidMemBytes = 1024; + /* Allocate video memory node for aux functions. */ + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + hardware->kernel, + 64, + gcvVIDMEM_TYPE_COMMAND, + allocFlag, + &Execution->funcVidMemBytes, + &pool, + &Execution->funcVidMem + )); + + /* Lock for GPU access. */ + gcmkONERROR(gckVIDMEM_NODE_Lock( + hardware->kernel, + Execution->funcVidMem, + &Execution->address + )); + + /* Lock for kernel side CPU access. */ + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + hardware->kernel, + Execution->funcVidMem, + gcvFALSE, + gcvFALSE, + &Execution->logical + )); + /* + ** All cache flush command sequence. + */ + logical = Execution->logical; + address = Execution->address; + /* Append a flush. */ + gcmkONERROR(_InitializeUSC2(Execution, &uscBytes)); + + offset += uscBytes; + address += offset; + logical = (gctUINT8_PTR)logical + offset; + + if (hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(hardware, logical, address, &endBytes)); + } + + Execution->bytes = uscBytes + endBytes; + Execution->endAddress = Execution->address + uscBytes; + Execution->endLogical = (gctUINT8_PTR)Execution->logical + uscBytes; + + return gcvSTATUS_OK; + +OnError: + _FuncRelease_USC2(Execution); + + return status; +} + +#endif + +/******************************************************************************* +** +** gckFUNCTION_Construct +** +** Generate command buffer snippets which will be used by gckHARDWARE, by which +** gckHARDWARE can manipulate GPU by FE command without using gckCOMMAND to avoid +** race condition and deadlock. +** +** Notice: +** 1. Each snippet can only be executed when GPU is idle. +** 2. Execution is triggered by AHB (0x658) +** 3. Each snippet followed by END so software can sync with GPU by checking GPU +** idle +** 4. It is transparent to gckCOMMAND command buffer. +** +** Existing Snippets: +** 1. MMU Configure +** For new MMU, after GPU is reset, FE execute this command sequence to enable MMU. +*/ +gceSTATUS gckFUNCTION_Construct(IN gctPOINTER Hardware) +{ + gceSTATUS status = gcvSTATUS_OK; + gckHARDWARE hardware = (gckHARDWARE)Hardware; + gctPOINTER pointer = gcvNULL; + gctUINT i; + + gcmkHEADER_ARG("Hardware=0x%x", Hardware); + /* Verify the arguments. */ + gcmkVERIFY_ARGUMENT(Hardware != gcvNULL); + + /* Allocate the gcsFUNCTION_EXECUTION object. */ + gcmkONERROR(gckOS_Allocate(hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION) * gcvFUNCTION_EXECUTION_NUM, + &pointer)); + + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION) * gcvFUNCTION_EXECUTION_NUM); + + hardware->functions = (gcsFUNCTION_EXECUTION_PTR)pointer; + + for (i = 0; i < gcvFUNCTION_EXECUTION_NUM; i++) + { + gcsFUNCTION_EXECUTION_PTR func = &hardware->functions[i]; + + func->hardware = hardware; + func->funcId = (gceFUNCTION_EXECUTION)i; + + /* Init functions API pointer */ + switch (i) + { + case gcvFUNCTION_EXECUTION_MMU: + gckOS_MemCopy(func->funcName, "set mmu", 8); + func->funcExecution.init = _FuncInit_MMU; + func->funcExecution.validate = _FuncValidate_MMU; + func->funcExecution.execute = _FuncExecute_MMU; + func->funcExecution.release = _FuncRelease_MMU; + break; + + case gcvFUNCTION_EXECUTION_FLUSH: + gckOS_MemCopy(func->funcName, "flush", 6); + func->funcExecution.init = _FuncInit_Flush; + func->funcExecution.validate = _FuncValidate_Flush; + func->funcExecution.execute = _FuncExecute; + func->funcExecution.release = _FuncRelease_Flush; + break; + +#if gcdINITIALIZE_PPU + case gcvFUNCTION_EXECUTION_INITIALIZE_PPU: + gckOS_MemCopy(func->funcName, "init ppu", 9); + func->funcExecution.init = _FuncInit_PPU; + func->funcExecution.validate = _FuncValidate_PPU; + func->funcExecution.execute = _FuncExecute; + func->funcExecution.release = _FuncRelease_PPU; + break; +#endif +#if gcdRESET_USC + case gcvFUNCTION_EXECUTION_RESET_USC: + gckOS_MemCopy(func->funcName, "reset usc", 10); + func->funcExecution.init = _FuncInit_USC; + func->funcExecution.validate = _FuncValidate_USC; + func->funcExecution.execute = _FuncExecute; + func->funcExecution.release = _FuncRelease_USC; + break; + case gcvFUNCTION_EXECUTION_RESET_USC2: + gckOS_MemCopy(func->funcName, "reset usc2", 11); + func->funcExecution.init = _FuncInit_USC2; + func->funcExecution.validate = _FuncValidate_USC2; + func->funcExecution.execute = _FuncExecute; + func->funcExecution.release = _FuncRelease_USC2; + break; +#endif + + default: + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + } + + return gcvSTATUS_OK; +OnError: + if (pointer) + { + gcmkVERIFY_OK(gckOS_Free(hardware->os, pointer)); + } + + /* Return the status. */ + gcmkFOOTER(); + return status; +} +gceSTATUS gckFUNCTION_Destory(IN gctPOINTER Hardware) +{ + gceSTATUS status = gcvSTATUS_OK; + gckHARDWARE hardware = (gckHARDWARE)Hardware; + gctUINT i; + + gcmkHEADER_ARG("Hardware=0x%x", Hardware); + /* Verify the arguments. */ + gcmkVERIFY_ARGUMENT(Hardware != gcvNULL); + + for (i = 0; i < gcvFUNCTION_EXECUTION_NUM; i++) + { + gckFUNCTION_Release(&hardware->functions[i]); + } + + gcmkVERIFY_OK(gckOS_Free(hardware->os, hardware->functions)); + hardware->functions = gcvNULL; + + /* Return the status. */ + gcmkFOOTER(); + return status; +} + +gceSTATUS gckFUNCTION_Validate(IN gcsFUNCTION_EXECUTION_PTR Execution, + IN OUT gctBOOL_PTR Valid) +{ + gceSTATUS status = gcvSTATUS_NOT_SUPPORTED; + + gcmkHEADER_ARG("Execution=0x%x", Execution); + /* Verify the arguments. */ + gcmkVERIFY_ARGUMENT(Execution != gcvNULL); + gcmkVERIFY_ARGUMENT(Valid != gcvNULL); + + if (Execution->funcExecution.validate) + { + status = Execution->funcExecution.validate(Execution); + *Valid = Execution->valid; + } + + gcmkFOOTER(); + return status; +} + +gceSTATUS gckFUNCTION_Init(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_NOT_SUPPORTED; + + gcmkHEADER_ARG("Execution=0x%x", Execution); + /* Verify the arguments. */ + gcmkVERIFY_ARGUMENT(Execution != gcvNULL); + + Execution->inited = gcvTRUE; + if (Execution->funcExecution.init) + { + status = Execution->funcExecution.init(Execution); + } + + if (status != gcvSTATUS_OK) + { + Execution->inited = gcvFALSE; + } + + gcmkFOOTER(); + return status; +} + +gceSTATUS gckFUNCTION_Execute(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_NOT_SUPPORTED; + + gcmkHEADER_ARG("Execution=0x%x", Execution); + /* Verify the arguments. */ + gcmkVERIFY_ARGUMENT(Execution != gcvNULL); + + if (Execution->inited && Execution->funcExecution.execute) + { + status = Execution->funcExecution.execute(Execution); + } + + gcmkFOOTER(); + return status; +} + +gceSTATUS gckFUNCTION_Release(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ + gceSTATUS status = gcvSTATUS_NOT_SUPPORTED; + + gcmkHEADER_ARG("Execution=0x%x", Execution); + /* Verify the arguments. */ + gcmkVERIFY_ARGUMENT(Execution != gcvNULL); + + if (Execution->inited && Execution->funcExecution.release) + { + status = Execution->funcExecution.release(Execution); + } + + Execution->inited = gcvFALSE; + + gcmkFOOTER(); + return status; +} + +void +gckFUNCTION_Dump(IN gcsFUNCTION_EXECUTION_PTR Execution) +{ +#if gcdDUMP_IN_KERNEL + gckHARDWARE hardware = (gckHARDWARE)Execution->hardware; + + gcmkDUMP(hardware->os, "#[function: %s]", Execution->funcName); + gcmkDUMP_BUFFER( + hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + Execution->logical, + Execution->address, + Execution->bytes); +#endif +} + + diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.h b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.h new file mode 100644 index 00000000000000..043a6796cc35fe --- /dev/null +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_func.h @@ -0,0 +1,158 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_kernel_hardware_func_h_ +#define __gc_hal_kernel_hardware_func_h_ +#include "gc_hal.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define gcdINITIALIZE_PPU 0 +#define gcdRESET_USC 0 + +typedef struct _gcsFUNCTION_EXECUTION * gcsFUNCTION_EXECUTION_PTR; + +typedef enum { + gcvFUNCTION_EXECUTION_MMU, + gcvFUNCTION_EXECUTION_FLUSH, +#if gcdRESET_USC + gcvFUNCTION_EXECUTION_RESET_USC, + gcvFUNCTION_EXECUTION_RESET_USC2, +#endif +#if gcdINITIALIZE_PPU + gcvFUNCTION_EXECUTION_INITIALIZE_PPU, +#endif + + gcvFUNCTION_EXECUTION_NUM +} +gceFUNCTION_EXECUTION; + +typedef struct { + gckVIDMEM_NODE bufVidMem; + gctUINT32 address; + /* CPU address of the function. */ + gctPOINTER logical; +} +gcsFUNCTION_EXECUTION_DATA, *gcsFUNCTION_EXECUTION_DATA_PTR; + +typedef struct { + gceSTATUS (*validate)(IN gcsFUNCTION_EXECUTION_PTR Execution); + gceSTATUS (*init)(IN gcsFUNCTION_EXECUTION_PTR Execution); + gceSTATUS (*execute)(IN gcsFUNCTION_EXECUTION_PTR Execution); + gceSTATUS (*release)(IN gcsFUNCTION_EXECUTION_PTR Execution); +} +gcsFUNCTION_API, *gcsFUNCTION_API_PTR; + + +typedef struct _gcsFUNCTION_EXECUTION +{ + gctPOINTER hardware; + + /* Function name */ + gctCHAR funcName[16]; + + /* Function ID */ + gceFUNCTION_EXECUTION funcId; + + /* Function Vidmem object */ + gckVIDMEM_NODE funcVidMem; + + /* Total bytes of the function. */ + gctSIZE_T funcVidMemBytes; + + /* Entry of the function. */ + gctUINT32 address; + + /* CPU address of the function. */ + gctPOINTER logical; + + /* Actually bytes of the function. */ + gctUINT32 bytes; + + /* Hardware address of END in this function. */ + gctUINT32 endAddress; + + /* Logical of END in this function. */ + gctUINT8_PTR endLogical; + + /* Function private data */ + gcsFUNCTION_EXECUTION_DATA_PTR data; + + /* API of functions */ + gcsFUNCTION_API funcExecution; + + /* Need this function or not */ + gctBOOL valid; + + /* Function has inited */ + gctBOOL inited; +} +gcsFUNCTION_EXECUTION; + +gceSTATUS gckFUNCTION_Construct(IN gctPOINTER Hardware); +gceSTATUS gckFUNCTION_Destory(IN gctPOINTER Hardware); + +gceSTATUS gckFUNCTION_Validate(IN gcsFUNCTION_EXECUTION_PTR Execution, + IN OUT gctBOOL_PTR Valid); +gceSTATUS gckFUNCTION_Init(IN gcsFUNCTION_EXECUTION_PTR Execution); +gceSTATUS gckFUNCTION_Execute(IN gcsFUNCTION_EXECUTION_PTR Execution); +gceSTATUS gckFUNCTION_Release(IN gcsFUNCTION_EXECUTION_PTR Execution); +void gckFUNCTION_Dump(IN gcsFUNCTION_EXECUTION_PTR Execution); +#ifdef __cplusplus +} +#endif +#endif + diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_mc_fe.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_mc_fe.c index 76d9cf87f7d1c7..6d537d026ee0b3 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_mc_fe.c +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_mc_fe.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -203,6 +203,7 @@ _DestroyDescRingBuf( kernel, Channel->ringBufVideoMem, 0, + gcvFALSE, gcvFALSE )); @@ -834,4 +835,55 @@ gckMCFE_Execute( return gcvSTATUS_OK; } +gceSTATUS +gckMCFE_HardwareIdle( + IN gckHARDWARE Hardware, + OUT gctBOOL_PTR isIdle + ) +{ + gceSTATUS status; + gctUINT32 idle; + gctUINT32 regRBase; + gctUINT32 readPtr; + gctUINT32 ChannelId = 0; + gctBOOL Priority = gcvFALSE; + gcsMCFE_CHANNEL * channel = &Hardware->mcFE->channels[ChannelId]; + gcsMCFE_RING_BUF * ringBuf = Priority ? &channel->priRingBuf + : &channel->stdRingBuf; + + gcmkHEADER(); + + *isIdle = gcvTRUE; + + /* Read idle register. */ + gcmkONERROR( + gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00004, &idle)); + + /* Pipe must be idle. */ + if ((idle | (1 << 14)) != 0x7fffffff) + { + /* Something is busy. */ + *isIdle = gcvFALSE; + return status; + } + + regRBase = Priority ? 0x02B00 + : 0x02700; + + gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, + Hardware->core, + regRBase + ChannelId * 4, + &readPtr)); + + if (readPtr != ringBuf->writePtr) + { + *isIdle = gcvFALSE; + } + + gcmkFOOTER(); + +OnError: + return status; +} + diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_waitlink_fe.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_waitlink_fe.c index c57374a6691ffe..ef971ce1656c0a 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_waitlink_fe.c +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_hardware_waitlink_fe.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_recorder.c b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_recorder.c index 0cdfe236a8b194..0bdad09e0cd4b1 100644 --- a/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_recorder.c +++ b/drivers/amlogic/npu/kernel/arch/gc_hal_kernel_recorder.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/arch/makefile.linux b/drivers/amlogic/npu/kernel/arch/makefile.linux index 9d00bee84e9d8a..de550f3a1d1c47 100755 --- a/drivers/amlogic/npu/kernel/arch/makefile.linux +++ b/drivers/amlogic/npu/kernel/arch/makefile.linux @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2014 - 2019 Vivante Corporation +# Copyright (c) 2014 - 2020 Vivante Corporation # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ # # The GPL License (GPL) # -# Copyright (C) 2014 - 2019 Vivante Corporation +# Copyright (C) 2014 - 2020 Vivante Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -84,6 +84,7 @@ CFLAGS += $(INCLUDE) -Werror -ansi OBJECTS = $(OBJ_DIR)/gc_hal_kernel_context.o \ $(OBJ_DIR)/gc_hal_kernel_hardware.o \ + $(OBJ_DIR)/gc_hal_kernel_hardware_func.o \ $(OBJ_DIR)/gc_hal_kernel_hardware_async_fe.o \ $(OBJ_DIR)/gc_hal_kernel_hardware_mc_fe.o \ $(OBJ_DIR)/gc_hal_kernel_hardware_waitlink_fe.o diff --git a/drivers/amlogic/npu/kernel/cebuild/makefile b/drivers/amlogic/npu/kernel/cebuild/makefile index 42a4b0aa7bfd75..86642996693e39 100755 --- a/drivers/amlogic/npu/kernel/cebuild/makefile +++ b/drivers/amlogic/npu/kernel/cebuild/makefile @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2014 - 2019 Vivante Corporation +# Copyright (c) 2014 - 2020 Vivante Corporation # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ # # The GPL License (GPL) # -# Copyright (C) 2014 - 2019 Vivante Corporation +# Copyright (C) 2014 - 2020 Vivante Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/cebuild/sources b/drivers/amlogic/npu/kernel/cebuild/sources index 6358fd081b3914..d6ce135dfe44bf 100755 --- a/drivers/amlogic/npu/kernel/cebuild/sources +++ b/drivers/amlogic/npu/kernel/cebuild/sources @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2014 - 2019 Vivante Corporation +# Copyright (c) 2014 - 2020 Vivante Corporation # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ # # The GPL License (GPL) # -# Copyright (C) 2014 - 2019 Vivante Corporation +# Copyright (C) 2014 - 2020 Vivante Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel.c b/drivers/amlogic/npu/kernel/gc_hal_kernel.c index 2dcf09c5244122..93634cf86c6c33 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -59,6 +59,10 @@ #include "viv_dec300_main.h" #endif +#if gcdCAPTURE_ONLY_MODE +#include "arch/gc_hal_kernel_context.h" +#endif + #define _GC_OBJ_ZONE gcvZONE_KERNEL /******************************************************************************* @@ -392,6 +396,7 @@ gckKERNEL_Construct( gctUINT64 data; gctUINT32 recovery; gctUINT32 stuckDump; + gctUINT64 dynamicMap = 1; gcmkHEADER_ARG("Os=%p Context=%p", Os, Context); @@ -415,6 +420,7 @@ gckKERNEL_Construct( kernel->core = Core; kernel->device = Device; kernel->chipID = ChipID; + kernel->threadInitialized = gcvTRUE; #if gcdENABLE_TRUST_APPLICATION /* Connect to security service for this GPU. */ @@ -563,7 +569,8 @@ gckKERNEL_Construct( gcmkONERROR( gckMMU_SetupSRAM(kernel->mmu, kernel->hardware, kernel->device)); - if (kernel->hardware->mmuVersion && !kernel->mmu->dynamicAreaSetuped) + status = gckOS_QueryOption(Os, "mmuDynamicMap", &dynamicMap); + if (dynamicMap && kernel->hardware->mmuVersion && !kernel->mmu->dynamicAreaSetuped) { gcmkONERROR( gckMMU_SetupDynamicSpace(kernel->mmu)); @@ -692,6 +699,7 @@ gckKERNEL_Construct( return gcvSTATUS_OK; OnError: + gckOS_SetGPUPower(Os, kernel->core, gcvFALSE, gcvFALSE); *Kernel = gcvNULL; if (kernel != gcvNULL) @@ -1019,6 +1027,13 @@ gckKERNEL_AllocateVideoMemory( AllocateMemory: +#if gcdCAPTURE_ONLY_MODE + if (*Pool != gcvPOOL_VIRTUAL) + { + *Pool = gcvPOOL_SYSTEM; + } +#endif + /* Get initial pool. */ switch (pool = *Pool) { @@ -1157,6 +1172,7 @@ gckKERNEL_AllocateVideoMemory( videoMemory, pool, Type, + Flag, Alignment, (pool == gcvPOOL_SYSTEM || pool == gcvPOOL_INTERNAL_SRAM || @@ -1170,6 +1186,13 @@ gckKERNEL_AllocateVideoMemory( /* Memory allocated. */ break; } +#if gcdCAPTURE_ONLY_MODE + else + { + gcmkPRINT("Capture only mode: Out of Memory"); + } +#endif + } } @@ -1249,6 +1272,10 @@ gckKERNEL_AllocateVideoMemory( gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } +#if gcdCAPTURE_ONLY_MODE + nodeObject->captureSize = bytes; +#endif + /* Return node and pool used for allocation. */ *Pool = pool; *Bytes = bytes; @@ -1288,6 +1315,8 @@ _AllocateLinearMemory( gctUINT32 alignment = Interface->u.AllocateLinearVideoMemory.alignment; gceVIDMEM_TYPE type = (Interface->u.AllocateLinearVideoMemory.type & 0xFF); gctUINT32 flag = Interface->u.AllocateLinearVideoMemory.flag; + gctUINT64 mappingInOne = 1; + gctBOOL isContiguous; gcmkHEADER_ARG("Kernel=%p pool=%d bytes=%lu alignment=%lu type=%d", Kernel, pool, bytes, alignment, type); @@ -1304,6 +1333,15 @@ _AllocateLinearMemory( Kernel->extSRAMIndex = Interface->u.AllocateLinearVideoMemory.extSRAMIndex; } + gckOS_QueryOption(Kernel->os, "allMapInOne", &mappingInOne); + if (mappingInOne == 0) + { + /* TODO: it should page align if driver uses dynamic mapping for mapped user memory. + * it should be adjusted with different os. + */ + alignment = gcmALIGN(alignment, 4096); + } + /* Allocate video memory node. */ gcmkONERROR( gckKERNEL_AllocateVideoMemory(Kernel, @@ -1337,6 +1375,32 @@ _AllocateLinearMemory( gcvNULL, bytes)); + gcmkONERROR(gckVIDMEM_NODE_IsContiguous(Kernel, nodeObject, &isContiguous)); + + if (isContiguous) + { + /* Record in process db. */ + gcmkONERROR( + gckKERNEL_AddProcessDB(Kernel, + ProcessID, + gcvDB_CONTIGUOUS, + gcmINT2PTR(handle), + gcvNULL, + bytes)); + } + + if (type & gcvVIDMEM_TYPE_COMMAND) + { + /* Record in process db. */ + gcmkONERROR( + gckKERNEL_AddProcessDB(Kernel, + ProcessID, + gcvDB_COMMAND_BUFFER, + gcmINT2PTR(handle), + gcvNULL, + bytes)); + } + /* Return status. */ gcmkFOOTER_ARG("pool=%d node=0x%x", pool, handle); return gcvSTATUS_OK; @@ -1390,6 +1454,7 @@ _ReleaseVideoMemory( gceSTATUS status; gckVIDMEM_NODE nodeObject; gceDATABASE_TYPE type; + gctBOOL isContiguous; gcmkHEADER_ARG("Kernel=%p ProcessID=%d Handle=%d", Kernel, ProcessID, Handle); @@ -1407,6 +1472,24 @@ _ReleaseVideoMemory( type, gcmINT2PTR(Handle))); + gcmkONERROR(gckVIDMEM_NODE_IsContiguous(Kernel, nodeObject, &isContiguous)); + + if (isContiguous) + { + gckKERNEL_RemoveProcessDB(Kernel, + ProcessID, + gcvDB_CONTIGUOUS, + gcmINT2PTR(Handle)); + } + + if (nodeObject->type & gcvVIDMEM_TYPE_COMMAND) + { + gckKERNEL_RemoveProcessDB(Kernel, + ProcessID, + gcvDB_COMMAND_BUFFER, + gcmINT2PTR(Handle)); + } + gckVIDMEM_HANDLE_Dereference(Kernel, ProcessID, Handle); gckVIDMEM_NODE_Dereference(Kernel, nodeObject); @@ -1474,6 +1557,18 @@ _LockVideoMemory( gcmkONERROR(gckVIDMEM_NODE_Reference(Kernel, nodeObject)); referenced = gcvTRUE; +#if gcdCAPTURE_ONLY_MODE + if (Interface->u.LockVideoMemory.queryCapSize) + { + Interface->u.LockVideoMemory.captureSize = nodeObject->captureSize; + return gcvSTATUS_OK; + } + else + { + nodeObject->captureLogical = Interface->u.LockVideoMemory.captureLogical; + } +#endif + /* Lock for userspace CPU userspace. */ gcmkONERROR( gckVIDMEM_NODE_LockCPU(Kernel, @@ -1511,7 +1606,7 @@ _LockVideoMemory( OnError: if (logical) { - gckVIDMEM_NODE_UnlockCPU(Kernel, nodeObject, ProcessID, gcvTRUE); + gckVIDMEM_NODE_UnlockCPU(Kernel, nodeObject, ProcessID, gcvTRUE, gcvFALSE); } if (address) @@ -1569,6 +1664,7 @@ _UnlockVideoMemory( gcuVIDMEM_NODE_PTR node; gckVIDMEM_BLOCK vidMemBlock = gcvNULL; gctSIZE_T bytes; + gctUINT64 mappingInOne = 1; gcmkHEADER_ARG("Kernel=%p ProcessID=%d", Kernel, ProcessID); @@ -1583,9 +1679,10 @@ _UnlockVideoMemory( &nodeObject )); + gckOS_QueryOption(Kernel->os, "allMapInOne", &mappingInOne); /* Unlock CPU. */ gcmkONERROR(gckVIDMEM_NODE_UnlockCPU( - Kernel, nodeObject, ProcessID, gcvTRUE)); + Kernel, nodeObject, ProcessID, gcvTRUE, mappingInOne == 1)); /* Unlock video memory. */ gcmkONERROR(gckVIDMEM_NODE_Unlock( @@ -1617,6 +1714,10 @@ _UnlockVideoMemory( Interface->u.UnlockVideoMemory.pool = nodeObject->pool; Interface->u.UnlockVideoMemory.bytes = bytes; +#if gcdCAPTURE_ONLY_MODE + Interface->u.UnlockVideoMemory.captureLogical = nodeObject->captureLogical; +#endif + gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -2010,6 +2111,14 @@ gckKERNEL_QueryDatabase( gcvDB_NON_PAGED, &Interface->u.Database.nonPaged)); + /* Query contiguous memory. */ + gcmkONERROR( + gckKERNEL_QueryProcessDB(Kernel, + Interface->u.Database.processID, + !Interface->u.Database.validProcessID, + gcvDB_CONTIGUOUS, + &Interface->u.Database.contiguous)); + /* Query GPU idle time. */ gcmkONERROR( gckKERNEL_QueryProcessDB(Kernel, @@ -2318,7 +2427,14 @@ _Commit( } /* Determine the objects. */ - kernel = Device->map[HwType].kernels[subCommit->coreId]; + if (HwType == gcvHARDWARE_3D || HwType == gcvHARDWARE_3D2D || HwType == gcvHARDWARE_VIP) + { + kernel = Device->coreInfoArray[subCommit->coreId].kernel; + } + else + { + kernel = Device->map[HwType].kernels[subCommit->coreId]; + } if (Engine == gcvENGINE_BLT) { command = kernel->asyncCommand; @@ -2377,7 +2493,15 @@ _Commit( subCommit = &Commit->subCommit; userPtr = gcvNULL; - kernel = Device->map[HwType].kernels[subCommit->coreId]; + + if (HwType == gcvHARDWARE_3D || HwType == gcvHARDWARE_3D2D || HwType == gcvHARDWARE_VIP) + { + kernel = Device->coreInfoArray[subCommit->coreId].kernel; + } + else + { + kernel = Device->map[HwType].kernels[subCommit->coreId]; + } if (!kernel->hardware->options.gpuProfiler || !kernel->profileEnable) { @@ -2421,7 +2545,14 @@ _Commit( } } - kernel = Device->map[HwType].kernels[subCommit->coreId]; + if (HwType == gcvHARDWARE_3D || HwType == gcvHARDWARE_3D2D || HwType == gcvHARDWARE_VIP) + { + kernel = Device->coreInfoArray[subCommit->coreId].kernel; + } + else + { + kernel = Device->map[HwType].kernels[subCommit->coreId]; + } if ((kernel->hardware->options.gpuProfiler == gcvTRUE) && (kernel->profileEnable == gcvTRUE)) @@ -2636,6 +2767,7 @@ gckKERNEL_Dispatch( gctBOOL powerMutexAcquired = gcvFALSE; gctBOOL commitMutexAcquired = gcvFALSE; + gctBOOL idle = gcvFALSE; gcmkHEADER_ARG("Kernel=%p Interface=%p", Kernel, Interface); @@ -3198,9 +3330,7 @@ gckKERNEL_Dispatch( Interface->u.Version.build = gcvVERSION_BUILD; #if gcmIS_DEBUG(gcdDEBUG_TRACE) gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_KERNEL, - "KERNEL version %d.%d.%d build %u", - gcvVERSION_MAJOR, gcvVERSION_MINOR, - gcvVERSION_PATCH, gcvVERSION_BUILD); + "KERNEL version %s", gcvVERSION_STRING); #endif break; @@ -3214,6 +3344,44 @@ gckKERNEL_Dispatch( case gcvHAL_ATTACH: if (Kernel->command) { +#if gcdCAPTURE_ONLY_MODE + gckVIDMEM_NODE nodeObject = gcvNULL; + + if (Interface->u.Attach.queryCapSize) + { + /* Attach user process. */ + gcmkONERROR( + gckCOMMAND_Attach(Kernel->command, + &context, + &bytes, + &Interface->u.Attach.numStates, + processID)); + + Interface->u.Attach.maxState = bytes; + Interface->u.Attach.context = gcmPTR_TO_NAME(context); + + gcmkONERROR( + gckVIDMEM_HANDLE_Lookup(Kernel, processID, context->buffer->handle, &nodeObject)); + + Interface->u.Attach.captureSize = nodeObject->captureSize; + break; + } + else + { + gctUINT i = 0; + context = gcmNAME_TO_PTR(Interface->u.Attach.context); + + for (i = 0; i < gcdCONTEXT_BUFFER_NUM; ++i) + { + gcsCONTEXT_PTR buffer = context->buffer; + + gckOS_CopyToUserData(Kernel->os, buffer->logical, Interface->u.Attach.contextLogical[i], Interface->u.Attach.captureSize); + + buffer = buffer->next; + } + } + +#else /* Attach user process. */ gcmkONERROR( gckCOMMAND_Attach(Kernel->command, @@ -3224,15 +3392,27 @@ gckKERNEL_Dispatch( Interface->u.Attach.maxState = bytes; Interface->u.Attach.context = gcmPTR_TO_NAME(context); +#endif if (Interface->u.Attach.map) { if (context != gcvNULL) { +#if gcdCAPTURE_ONLY_MODE + gctUINT i = 0; + + for (i = 0; i < gcdCONTEXT_BUFFER_NUM; ++i) + { + Interface->u.Attach.logicals[i] = gcmPTR_TO_UINT64(Interface->u.Attach.contextLogical[i]); + } + + Interface->u.Attach.bytes = (gctUINT)context->totalSize; +#else gcmkVERIFY_OK( gckCONTEXT_MapBuffer(context, Interface->u.Attach.logicals, &Interface->u.Attach.bytes)); +#endif } else { @@ -3286,8 +3466,24 @@ gckKERNEL_Dispatch( case gcvHAL_SET_FSCALE_VALUE: #if gcdENABLE_FSCALE_VAL_ADJUST + /* Wait for HW idle, otherwise it is not safe. */ + gcmkONERROR(gckCOMMAND_Stall(Kernel->command, gcvFALSE)); + + for (;;) + { + gcmkONERROR(gckHARDWARE_QueryIdle(Kernel->hardware, &idle)); + + if (idle) + { + break; + } + + gcmkVERIFY_OK(gckOS_Delay(Kernel->os, 1)); + } + status = gckHARDWARE_SetFscaleValue(Kernel->hardware, - Interface->u.SetFscaleValue.value); + Interface->u.SetFscaleValue.value, + Interface->u.SetFscaleValue.shValue); #else status = gcvSTATUS_NOT_SUPPORTED; #endif @@ -3708,6 +3904,13 @@ gckKERNEL_AttachProcessEx( gcvBROADCAST_LAST_PROCESS)); } } + + if (Kernel->timeoutPID == PID) + { + Kernel->timeOut = Kernel->hardware->type == gcvHARDWARE_2D + ? gcdGPU_2D_TIMEOUT + : gcdGPU_TIMEOUT; + } } /* Success. */ @@ -4943,7 +5146,13 @@ gckFENCE_Create( ) { gceSTATUS status; + +#if !gcdCAPTURE_ONLY_MODE gcePOOL pool = gcvPOOL_DEFAULT; +#else + gcePOOL pool = gcvPOOL_VIRTUAL; +#endif + gckFENCE fence = gcvNULL; gctSIZE_T size = 8; gctUINT32 allocFlag = gcvALLOC_FLAG_CONTIGUOUS; @@ -5017,6 +5226,7 @@ gckFENCE_Destory( Fence->kernel, Fence->videoMem, 0, + gcvFALSE, gcvFALSE )); @@ -5117,6 +5327,7 @@ gckDEVICE_Construct( /* Initialize external SRAM. */ for (i = 0; i < gcvSRAM_EXT_COUNT; i++) { + device->extSRAMGPUBases[i] = gcvINVALID_PHYSICAL_ADDRESS; device->extSRAMBases[i] = gcvINVALID_PHYSICAL_ADDRESS; device->extSRAMSizes[i] = 0; } @@ -5267,6 +5478,8 @@ gckDEVICE_ChipInfo( { Interface->u.ChipInfo.types[i] = info[i].type; Interface->u.ChipInfo.ids[i] = info[i].chipID; + + Interface->u.ChipInfo.coreIndexs[i] = info[i].core; } Interface->u.ChipInfo.count = Device->coreNum; @@ -5287,9 +5500,7 @@ gckDEVICE_Version( Interface->u.Version.build = gcvVERSION_BUILD; #if gcmIS_DEBUG(gcdDEBUG_TRACE) gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_KERNEL, - "KERNEL version %d.%d.%d build %u", - gcvVERSION_MAJOR, gcvVERSION_MINOR, - gcvVERSION_PATCH, gcvVERSION_BUILD); + "KERNEL version %s", gcvVERSION_STRING); #endif return gcvSTATUS_OK; @@ -5337,14 +5548,28 @@ gckDEVICE_SetTimeOut( gctUINT i; gceHARDWARE_TYPE type = Interface->hardwareType; gcsCORE_LIST *coreList; + gctUINT32 processID = 0; + gcsCORE_INFO *info = Device->coreInfoArray; coreList = &Device->map[type]; - for (i = 0; i < coreList->num; i++) + /* Get the current process ID. */ + gckOS_GetProcessID(&processID); + + for (i = 0; i < Device->coreNum; i++) { - kernel = coreList->kernels[i]; + if (type == gcvHARDWARE_3D || type == gcvHARDWARE_3D2D || type == gcvHARDWARE_VIP) + { + kernel = info[i].kernel; + } + else + { + kernel = coreList->kernels[i]; + } kernel->timeOut = Interface->u.SetTimeOut.timeOut; + + kernel->timeoutPID = processID; } #endif @@ -5390,8 +5615,14 @@ gckDEVICE_Dispatch( else { /* Need go through gckKERNEL dispatch. */ - kernel = Device->map[type].kernels[coreIndex]; - + if (type == gcvHARDWARE_3D || type == gcvHARDWARE_3D2D || type == gcvHARDWARE_VIP) + { + kernel = Device->coreInfoArray[coreIndex].kernel; + } + else + { + kernel = Device->map[type].kernels[coreIndex]; + } { status = gckKERNEL_Dispatch(kernel, Device, Interface); diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel.h b/drivers/amlogic/npu/kernel/gc_hal_kernel.h index 41f5947ca7e42a..7f25279b0aa08b 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel.h +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -59,7 +59,7 @@ #include "gc_hal.h" #include "gc_hal_kernel_hardware.h" #include "gc_hal_kernel_hardware_fe.h" -#include "gc_hal_driver.h" +#include "shared/gc_hal_driver.h" #include "gc_hal_kernel_mutex.h" #include "gc_hal_metadata.h" @@ -228,12 +228,15 @@ extern "C" { typedef enum _gceDATABASE_TYPE { gcvDB_VIDEO_MEMORY = 1, /* Video memory created. */ + gcvDB_COMMAND_BUFFER, /* Command Buffer. */ gcvDB_NON_PAGED, /* Non paged memory. */ + gcvDB_CONTIGUOUS, /* Contiguous memory. */ gcvDB_SIGNAL, /* Signal. */ gcvDB_VIDEO_MEMORY_LOCKED, /* Video memory locked. */ gcvDB_CONTEXT, /* Context */ gcvDB_IDLE, /* GPU idle. */ gcvDB_MAP_MEMORY, /* Map memory */ + gcvDB_MAP_USER_MEMORY, /* Map user memory */ gcvDB_SHBUF, /* Shared buffer. */ gcvDB_NUM_TYPES, @@ -285,6 +288,8 @@ typedef struct _gcsDATABASE /* Sizes to query. */ gcsDATABASE_COUNTERS vidMem; gcsDATABASE_COUNTERS nonPaged; + gcsDATABASE_COUNTERS contiguous; + gcsDATABASE_COUNTERS mapUserMemory; gcsDATABASE_COUNTERS mapMemory; gcsDATABASE_COUNTERS vidMemType[gcvVIDMEM_TYPE_COUNT]; @@ -624,6 +629,9 @@ struct _gckKERNEL gctUINT32 sRAMSizes[gcvSRAM_INTER_COUNT]; gctBOOL sRAMPhysFaked[gcvSRAM_INTER_COUNT]; gctUINT64 sRAMLoopMode; + + gctUINT32 timeoutPID; + gctBOOL threadInitialized; }; struct _FrequencyHistory @@ -1087,13 +1095,11 @@ typedef union _gcuVIDMEM_NODE gctSIZE_T bytes; gctUINT32 alignment; -#ifdef __QNXNTO__ /* Client virtual address. */ gctPOINTER logical; /* Process ID owning this memory. */ gctUINT32 processID; -#endif /* Locked counter. */ gctINT32 locked; @@ -1104,6 +1110,9 @@ typedef union _gcuVIDMEM_NODE /* Kernel virtual address. */ gctPOINTER kvaddr; + /* mdl record pointer. */ + gctPHYS_ADDR physical; + } VidMem; @@ -1307,6 +1316,11 @@ typedef struct _gcsVIDMEM_NODE gctUINT32 tilingMode; gctUINT32 tsMode; gctUINT64 clearValue; + +#if gcdCAPTURE_ONLY_MODE + gctSIZE_T captureSize; + gctPOINTER captureLogical; +#endif } gcsVIDMEM_NODE; @@ -1381,14 +1395,18 @@ typedef struct _gcsDEVICE gctUINT32 sRAMBaseAddresses[gcvCORE_COUNT][gcvSRAM_INTER_COUNT]; gctBOOL sRAMPhysFaked[gcvCORE_COUNT][gcvSRAM_INTER_COUNT]; - /* Physical address of external SRAMs. */ + /* CPU physical address of external SRAMs. */ gctUINT64 extSRAMBases[gcvSRAM_EXT_COUNT]; + /* GPU physical address of external SRAMs. */ + gctUINT64 extSRAMGPUBases[gcvSRAM_EXT_COUNT]; /* External SRAMs' size. */ gctUINT32 extSRAMSizes[gcvSRAM_EXT_COUNT]; /* GPU/VIP virtual address of external SRAMs. */ gctUINT32 extSRAMBaseAddresses[gcvSRAM_EXT_COUNT]; /* MDL. */ gctPHYS_ADDR extSRAMPhysical[gcvSRAM_EXT_COUNT]; + /* IntegerId. */ + gctUINT32 extSRAMGPUPhysNames[gcvSRAM_EXT_COUNT]; /* Show SRAM mapping info or not. */ gctUINT showSRAMMapInfo; @@ -1464,6 +1482,7 @@ gckVIDMEM_NODE_AllocateLinear( IN gckVIDMEM VideoMemory, IN gcePOOL Pool, IN gceVIDMEM_TYPE Type, + IN gctUINT32 Flag, IN gctUINT32 Alignment, IN gctBOOL Specified, IN OUT gctSIZE_T * Bytes, @@ -1563,7 +1582,8 @@ gckVIDMEM_NODE_UnlockCPU( IN gckKERNEL Kernel, IN gckVIDMEM_NODE NodeObject, IN gctUINT32 ProcessID, - IN gctBOOL FromUser + IN gctBOOL FromUser, + IN gctBOOL Defer ); gceSTATUS @@ -1659,6 +1679,13 @@ gckVIDMEM_NODE_Find( OUT gctUINT32 * Offset ); +gceSTATUS +gckVIDMEM_NODE_IsContiguous( + IN gckKERNEL Kernel, + IN gckVIDMEM_NODE NodeObject, + OUT gctBOOL * Contiguous + ); + typedef struct _gcsADDRESS_AREA * gcsADDRESS_AREA_PTR; typedef struct _gcsADDRESS_AREA { @@ -1706,6 +1733,9 @@ struct _gckMMU /* mtlb physical address. */ gctPHYS_ADDR_T mtlbPhysical; + /* memory pool used for page table */ + gcePOOL pool; + gctPOINTER staticSTLB; gctBOOL enabled; diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_command.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_command.c index e1385f09fffad1..684e397b8b9ec1 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_command.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_command.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -1404,7 +1404,12 @@ gckCOMMAND_Construct( /* Pre-allocate the command queues. */ for (i = 0; i < gcdCOMMAND_QUEUES; ++i) { +#if !gcdCAPTURE_ONLY_MODE gcePOOL pool = gcvPOOL_DEFAULT; +#else + gcePOOL pool = gcvPOOL_VIRTUAL; +#endif + gctSIZE_T size = pageSize; gckVIDMEM_NODE videoMem = gcvNULL; gctUINT32 allocFlag = 0; @@ -1579,6 +1584,7 @@ gckCOMMAND_Destroy( Command->kernel, Command->queues[i].videoMem, 0, + gcvFALSE, gcvFALSE )); @@ -1887,12 +1893,16 @@ _StartWaitLinkFE( Command->kernel ); #else + +#if !gcdCAPTURE_ONLY_MODE /* Enable command processor. */ gcmkONERROR(gckWLFE_Execute( hardware, address, waitLinkBytes )); +#endif + #endif /* Command queue is running. */ @@ -2204,6 +2214,10 @@ _CommitWaitLinkOnce( gctUINT32 waitOffset; gctUINT32 waitSize; +#if gcdCAPTURE_ONLY_MODE + gctINT i; +#endif + #ifdef __QNXNTO__ gctPOINTER userCommandBufferLogical = gcvNULL; gctBOOL userCommandBufferLogicalMapped = gcvFALSE; @@ -2436,6 +2450,17 @@ _CommitWaitLinkOnce( &commandLinkHigh )); +#if gcdCAPTURE_ONLY_MODE + for (i = 0; i < gcdCONTEXT_BUFFER_NUM; ++i) + { + gcsCONTEXT_PTR buffer = contextBuffer; + + gckOS_CopyToUserData(Command->os, buffer->logical, CommandBuffer->contextLogical[i], Context->bufferSize); + + buffer = buffer->next; + } +#endif + gcmkONERROR(gckVIDMEM_NODE_CleanCache( Command->kernel, contextBuffer->videoMem, @@ -2665,7 +2690,7 @@ _CommitWaitLinkOnce( commandBufferSize - offset - 8 ); #else -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* * Skip link to entryAddress. * Instead, we directly link to final wait link position. @@ -2791,7 +2816,7 @@ _CommitWaitLinkOnce( waitLinkBytes ); -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE gcmkDUMP( Command->os, "#[null driver: below command skipped link to 0x%08X 0x%08X]", @@ -2857,6 +2882,7 @@ _CommitWaitLinkOnce( Command->kernel, commandBufferVideoMem, ProcessID, + gcvFALSE, gcvFALSE )); @@ -3001,7 +3027,7 @@ _CommitAsyncOnce( } } -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* Skip submit to hardware for NULL driver. */ gcmkDUMP(Command->os, "#[null driver: below command is skipped]"); #endif @@ -3132,7 +3158,7 @@ _CommitMultiChannelOnce( gckOS_AcquireMutex(Command->os, Command->mutexQueue, gcvINFINITE); acquired = gcvTRUE; -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* Skip submit to hardware for NULL driver. */ gcmkDUMP(Command->os, "#[null driver: below command is skipped]"); #endif @@ -3582,7 +3608,7 @@ gckCOMMAND_Execute( )); } -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* * Skip link to execAddress. * Instead, we directly link to final wait link position. @@ -3642,7 +3668,7 @@ gckCOMMAND_Execute( execBytes ); -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE gcmkDUMP(Command->os, "#[null driver: below command skipped link to 0x%08X 0x%08X]", execAddress, @@ -3748,7 +3774,7 @@ gckCOMMAND_ExecuteAsync( } } -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* Skip submit to hardware for NULL driver. */ gcmkDUMP(Command->os, "#[null driver: below command is skipped]"); #endif @@ -3841,7 +3867,7 @@ gckCOMMAND_ExecuteMultiChannel( )); } -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* Skip submit to hardware for NULL driver. */ gcmkDUMP(Command->os, "#[null driver: below command is skipped]"); #endif @@ -4382,6 +4408,7 @@ gckCOMMAND_DumpExecutingBuffer( kernel, nodeObject, 0, + gcvFALSE, gcvFALSE )); } @@ -4461,6 +4488,7 @@ gckCOMMAND_DumpExecutingBuffer( kernel, nodeObject, 0, + gcvFALSE, gcvFALSE )); } diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_db.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_db.c index 5c7443066b8ce0..a0a68bd8a1889f 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_db.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_db.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -610,12 +610,20 @@ gckKERNEL_CreateProcessDB( database->vidMem.bytes = 0; database->vidMem.maxBytes = 0; database->vidMem.totalBytes = 0; + database->vidMem.freeCount = 0; + database->vidMem.allocCount = 0; + database->nonPaged.bytes = 0; database->nonPaged.maxBytes = 0; database->nonPaged.totalBytes = 0; + database->nonPaged.freeCount = 0; + database->nonPaged.allocCount = 0; + database->mapMemory.bytes = 0; database->mapMemory.maxBytes = 0; database->mapMemory.totalBytes = 0; + database->mapMemory.freeCount = 0; + database->mapMemory.allocCount = 0; for (i = 0; i < gcmCOUNTOF(database->list); i++) { @@ -627,6 +635,8 @@ gckKERNEL_CreateProcessDB( database->vidMemType[i].bytes = 0; database->vidMemType[i].maxBytes = 0; database->vidMemType[i].totalBytes = 0; + database->vidMemType[i].freeCount = 0; + database->vidMemType[i].allocCount = 0; } for (i = 0; i < gcvPOOL_NUMBER_OF_POOLS; i++) @@ -634,6 +644,8 @@ gckKERNEL_CreateProcessDB( database->vidMemPool[i].bytes = 0; database->vidMemPool[i].maxBytes = 0; database->vidMemPool[i].totalBytes = 0; + database->vidMemPool[i].freeCount = 0; + database->vidMemPool[i].allocCount = 0; } gcmkASSERT(database->refs == gcvNULL); @@ -822,10 +834,18 @@ gckKERNEL_AddProcessDB( count = &database->nonPaged; break; + case gcvDB_CONTIGUOUS: + count = &database->contiguous; + break; + case gcvDB_MAP_MEMORY: count = &database->mapMemory; break; + case gcvDB_MAP_USER_MEMORY: + count = &database->mapUserMemory; + break; + default: count = gcvNULL; break; @@ -961,11 +981,21 @@ gckKERNEL_RemoveProcessDB( database->nonPaged.freeCount++; break; + case gcvDB_CONTIGUOUS: + database->contiguous.bytes -= bytes; + database->contiguous.freeCount++; + break; + case gcvDB_MAP_MEMORY: database->mapMemory.bytes -= bytes; database->mapMemory.freeCount++; break; + case gcvDB_MAP_USER_MEMORY: + database->mapUserMemory.bytes -= bytes; + database->mapUserMemory.freeCount++; + break; + default: break; } @@ -1120,6 +1150,10 @@ gckKERNEL_DestroyProcessDB( gcmkONERROR(gcvSTATUS_NOT_FOUND); } +#if gcdCAPTURE_ONLY_MODE + gcmkPRINT("Capture only mode: The max allocation from System Pool is %llu bytes", database->vidMemPool[gcvPOOL_SYSTEM].maxBytes); +#endif + /* Cannot remove the database from the hash list ** since later records deinit need to access from the hash */ @@ -1226,7 +1260,7 @@ gckKERNEL_DestroyProcessDB( /* Unlock CPU. */ gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( - record->kernel, nodeObject, ProcessID, gcvTRUE)); + record->kernel, nodeObject, ProcessID, gcvTRUE, gcvFALSE)); /* Unlock what we still locked */ status = gckVIDMEM_NODE_Unlock(record->kernel, @@ -1308,6 +1342,8 @@ gckKERNEL_DestroyProcessDB( } } + gcmkONERROR(gckKERNEL_DestroyProcessReservedUserMap(Kernel, ProcessID)); + /* Acquire the database mutex. */ gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE)); acquired = gcvTRUE; @@ -1446,6 +1482,12 @@ gckKERNEL_QueryProcessDB( gcmSIZEOF(database->vidMem)); break; + case gcvDB_CONTIGUOUS: + gckOS_MemCopy(&Info->counters, + &database->contiguous, + gcmSIZEOF(database->vidMem)); + break; + case gcvDB_IDLE: Info->time = Kernel->db->idleTime; Kernel->db->idleTime = 0; diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_debug.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_debug.c index 474fd12dbbbedb..290f608fb81315 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_debug.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_debug.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_event.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_event.c index 76a33053a03489..9f12fea6c22ce9 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_event.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_event.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -1454,7 +1454,7 @@ gckEVENT_Submit( gcmkONERROR(gckCOMMAND_ExecuteMultiChannel(command, 0, 0, executeBytes)); } -#if gcdNULL_DRIVER +#if gcdNULL_DRIVER || gcdCAPTURE_ONLY_MODE /* Notify immediately on infinite hardware. */ gcmkONERROR(gckEVENT_Interrupt(Event, 1 << id)); diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_heap.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_heap.c index 325cdd74c733c4..1e5005063ddef7 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_heap.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_heap.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_mmu.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_mmu.c index 60da4eba708e58..714ff28dedd01c 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_mmu.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_mmu.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -57,8 +57,6 @@ #define _GC_OBJ_ZONE gcvZONE_MMU -#define gcdMMU_PGTABLE_POOL gcvPOOL_VIRTUAL - typedef enum _gceMMU_TYPE { gcvMMU_USED = (0 << 4), @@ -632,6 +630,25 @@ _GetMtlbFreeSpace( return status; } +static gcePOOL _GetPageTablePool(IN gckOS Os) +{ + gcePOOL pool = gcvPOOL_DEFAULT; + gctUINT64 data = 0; + gceSTATUS status; + + status = gckOS_QueryOption(Os, "mmuPageTablePool", &data); + + if (status == gcvSTATUS_OK) + { + if (data == 1) + { + pool = gcvPOOL_VIRTUAL; + } + } + + return pool; +} + static gceSTATUS _FillFlatMapping( IN gckMMU Mmu, @@ -936,7 +953,7 @@ _FillFlatMapping( /* Need allocate a new chunk of stlbs */ if (totalNewStlbs) { - gcePOOL pool = gcdMMU_PGTABLE_POOL; + gcePOOL pool = Mmu->pool; gctUINT32 allocFlag = gcvALLOC_FLAG_CONTIGUOUS; gcmkONERROR( @@ -1249,7 +1266,7 @@ _ConstructDynamicStlb( gctBOOL acquired = gcvFALSE; gckKERNEL kernel = Mmu->hardware->kernel; gctUINT32 allocFlag = gcvALLOC_FLAG_CONTIGUOUS; - gcePOOL pool = gcdMMU_PGTABLE_POOL; + gcePOOL pool = Mmu->pool; gctUINT32 address; gctUINT32 mtlbEntry; gctUINT32 i; @@ -1621,7 +1638,7 @@ _Construct( mmu->enabled = gcvFALSE; mmu->dynamicAreaSetuped = gcvFALSE; - + mmu->pool = _GetPageTablePool(mmu->os); gcsLIST_Init(&mmu->hardwareList); /* Use 4K page size for MMU version 0. */ @@ -1645,7 +1662,7 @@ _Construct( area->mapLogical = pointer; - pool = gcdMMU_PGTABLE_POOL; + pool = mmu->pool; #if gcdENABLE_CACHEABLE_COMMAND_BUFFER allocFlag |= gcvALLOC_FLAG_CACHEABLE; @@ -1722,7 +1739,7 @@ _Construct( { mmu->mtlbSize = gcdMMU_MTLB_SIZE; - pool = gcdMMU_PGTABLE_POOL; + pool = mmu->pool; #if gcdENABLE_CACHEABLE_COMMAND_BUFFER allocFlag |= gcvALLOC_FLAG_CACHEABLE; @@ -1787,6 +1804,7 @@ _Construct( gcmkONERROR(_FillFlatMapping(mmu, gpuAddress, physSize, gcvFALSE, gcvFALSE, gcvNULL)); } +#if !(0 || gcdCAPTURE_ONLY_MODE) if (!_ReadPageEntry(mmu->mtlbLogical + 0)) { gctUINT32 mtlbEntry; @@ -1813,6 +1831,7 @@ _Construct( mmu->gpuAddressRanges[mmu->gpuAddressRangeCount].flag = gcvFLATMAP_DIRECT; mmu->gpuAddressRangeCount++; } +#endif status = gckOS_QueryOption(mmu->os, "contiguousBase", &contiguousBase); @@ -1867,14 +1886,14 @@ _Construct( /* A 64 byte for safe address, we use 256 here. */ mmu->safePageSize = 256; - pool = gcdMMU_PGTABLE_POOL; + pool = mmu->pool; /* Allocate safe page from video memory. */ gcmkONERROR(gckKERNEL_AllocateVideoMemory( Kernel, 256, gcvVIDMEM_TYPE_COMMAND, - gcvALLOC_FLAG_CONTIGUOUS | gcvALLOC_FLAG_4K_PAGES, + gcvALLOC_FLAG_CONTIGUOUS | gcvALLOC_FLAG_4K_PAGES | gcvALLOC_FLAG_4GB_ADDR, &mmu->safePageSize, &pool, &mmu->safePageVideoMem @@ -3136,6 +3155,8 @@ gckMMU_SetupSRAM( reservedBase = Device->sRAMBases[i][j]; reservedSize = Device->sRAMSizes[i][j]; + Device->sRAMBaseAddresses[i][j] = 0; + needMapInternalSRAM = reservedSize && (reservedBase != gcvINVALID_PHYSICAL_ADDRESS); /* Map the internal SRAM. */ @@ -3154,9 +3175,6 @@ gckMMU_SetupSRAM( * Default gpu virtual base = 0. * It can be specified if not conflict with existing mapping. */ - - Device->sRAMBaseAddresses[i][j] = 0; - gcmkONERROR(gckOS_CPUPhysicalToGPUPhysical( Mmu->os, reservedBase, @@ -3190,7 +3208,9 @@ gckMMU_SetupSRAM( Device->sRAMPhysFaked[i][j] = gcvTRUE; } - Hardware->options.sRAMGPUVirtAddrs[j] = Device->sRAMBaseAddresses[i][j]; +#if gcdCAPTURE_ONLY_MODE + Device->sRAMPhysFaked[i][j] = gcvTRUE; +#endif } } @@ -3203,42 +3223,24 @@ gckMMU_SetupSRAM( Device->extSRAMBaseAddresses[i] = 0; - Hardware->options.extSRAMCPUPhysAddrs[i] = Device->extSRAMBases[i]; - gcmkONERROR(gckOS_CPUPhysicalToGPUPhysical( Mmu->os, Device->extSRAMBases[i], - &Device->extSRAMBases[i] + &Device->extSRAMGPUBases[i] )); - Hardware->options.extSRAMGPUPhysAddrs[i] = Device->extSRAMBases[i]; - gcmkONERROR(_FillFlatMapping( Mmu, - Device->extSRAMBases[i], + Device->extSRAMGPUBases[i], Device->extSRAMSizes[i], gcvFALSE, gcvTRUE, &Device->extSRAMBaseAddresses[i] )); - kernel->extSRAMBaseAddresses[i] = Device->extSRAMBaseAddresses[i]; - - Hardware->options.extSRAMGPUVirtAddrs[i] = Device->extSRAMBaseAddresses[i]; - Hardware->options.extSRAMSizes[i] = Device->extSRAMSizes[i]; - - if (Device->showSRAMMapInfo) - { - gcmkPRINT("Galcore Info: MMU mapped external shared SRAM[%d] CPU base=0x%llx GPU virtual address=0x%x size=0x%x", - i, - Device->extSRAMBases[i], - kernel->extSRAMBaseAddresses[i], - Device->extSRAMSizes[i] - ); - } + Device->extSRAMGPUPhysNames[i] = gckKERNEL_AllocateNameFromPointer(kernel, Device->extSRAMPhysical[i]); } } - Mmu->sRAMMapped = gcvTRUE; } @@ -3246,13 +3248,14 @@ gckMMU_SetupSRAM( for (i = gcvSRAM_INTERNAL0; i < gcvSRAM_INTER_COUNT; i++) { if (Device->sRAMSizes[Hardware->core][i] && - (Device->sRAMBases[Hardware->core][i] != gcvINVALID_PHYSICAL_ADDRESS)) + (Device->sRAMBaseAddresses[Hardware->core][i])) { kernel->sRAMBaseAddresses[i] = Device->sRAMBaseAddresses[Hardware->core][i]; kernel->sRAMSizes[i] = Hardware->options.sRAMSizes[i] = Device->sRAMSizes[Hardware->core][i]; kernel->sRAMPhysFaked[i] = Device->sRAMPhysFaked[Hardware->core][i]; + Hardware->options.sRAMGPUVirtAddrs[i] = Device->sRAMBaseAddresses[Hardware->core][i]; /* If the internal SRAM usage is reserve. */ if (kernel->sRAMPhysFaked[i]) @@ -3299,6 +3302,32 @@ gckMMU_SetupSRAM( } } + for (i = gcvSRAM_EXTERNAL0; i < gcvSRAM_EXT_COUNT; i++) + { + if (Device->extSRAMSizes[i] && + (Device->extSRAMBases[i] != gcvINVALID_PHYSICAL_ADDRESS)) + { + kernel->extSRAMBaseAddresses[i] = Device->extSRAMBaseAddresses[i]; + + Hardware->options.extSRAMGPUVirtAddrs[i] = Device->extSRAMBaseAddresses[i]; + Hardware->options.extSRAMSizes[i] = Device->extSRAMSizes[i]; + Hardware->options.extSRAMCPUPhysAddrs[i] = Device->extSRAMBases[i]; + Hardware->options.extSRAMGPUPhysAddrs[i] = Device->extSRAMGPUBases[i]; + Hardware->options.extSRAMGPUPhysNames[i] = Device->extSRAMGPUPhysNames[i]; + + if (Device->showSRAMMapInfo) + { + gcmkPRINT("Galcore Info: MMU mapped external shared SRAM[%d] CPU view base=0x%llx GPU view base=0x%llx GPU virtual address=0x%x size=0x%x", + i, + Device->extSRAMBases[i], + Device->extSRAMGPUBases[i], + kernel->extSRAMBaseAddresses[i], + Device->extSRAMSizes[i] + ); + } + } + } + gcsLIST_Add(&Hardware->mmuHead, &Mmu->hardwareList); gcmkFOOTER_NO(); diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_power.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_power.c index 4eb3ecbc5e1b67..46f497fbdd7799 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_power.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_power.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_precomp.h b/drivers/amlogic/npu/kernel/gc_hal_kernel_precomp.h index 55b5fc78c3fdb5..0ce34955543088 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_precomp.h +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_precomp.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -57,7 +57,7 @@ #define __gc_hal_kernel_precomp_h_ #include "gc_hal.h" -#include "gc_hal_driver.h" +#include "shared/gc_hal_driver.h" #include "gc_hal_kernel.h" #endif /* __gc_hal_kernel_precomp_h_ */ diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_security.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_security.c index 683964d595662c..3c7898e0cdb0cd 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_security.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_security.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_security_v1.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_security_v1.c index 8167b7cd55d025..38361eacfc0e67 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_security_v1.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_security_v1.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/gc_hal_kernel_video_memory.c b/drivers/amlogic/npu/kernel/gc_hal_kernel_video_memory.c index c934268022c4f1..d7dd92b8afa4ce 100644 --- a/drivers/amlogic/npu/kernel/gc_hal_kernel_video_memory.c +++ b/drivers/amlogic/npu/kernel/gc_hal_kernel_video_memory.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -123,10 +123,8 @@ _Split( node->VidMem.locked = 0; node->VidMem.parent = Node->VidMem.parent; node->VidMem.pool = Node->VidMem.pool; -#ifdef __QNXNTO__ node->VidMem.processID = 0; node->VidMem.logical = gcvNULL; -#endif node->VidMem.kvaddr = gcvNULL; /* Insert node behind specified node. */ @@ -338,10 +336,8 @@ gckVIDMEM_Construct( node->VidMem.locked = 0; -#ifdef __QNXNTO__ node->VidMem.processID = 0; node->VidMem.logical = gcvNULL; -#endif node->VidMem.kvaddr = gcvNULL; @@ -726,6 +722,9 @@ _FindNode( ** gceVIDMEM_TYPE Type ** Type of surface to allocate (use by bank optimization). ** +** gctUINT32 Flag +** Flag of allocatetion. +** ** gctBOOL Specified ** If user must use this pool, it should set Specified to gcvTRUE, ** otherwise allocator may reserve some memory for other usage, such @@ -743,6 +742,7 @@ gckVIDMEM_AllocateLinear( IN gctSIZE_T Bytes, IN gctUINT32 Alignment, IN gceVIDMEM_TYPE Type, + IN gctUINT32 Flag, IN gctBOOL Specified, OUT gcuVIDMEM_NODE_PTR * Node ) @@ -752,6 +752,7 @@ gckVIDMEM_AllocateLinear( gctUINT32 alignment; gctINT bank, i; gctBOOL acquired = gcvFALSE; + gctUINT64 mappingInOne = 1; gcmkHEADER_ARG("Memory=0x%x Bytes=%lu Alignment=%u Type=%d", Memory, Bytes, Alignment, Type); @@ -866,10 +867,8 @@ gckVIDMEM_AllocateLinear( /* Fill in the information. */ node->VidMem.alignment = alignment; node->VidMem.parent = Memory; -#ifdef __QNXNTO__ node->VidMem.logical = gcvNULL; gcmkONERROR(gckOS_GetProcessID(&node->VidMem.processID)); -#endif /* Adjust the number of free bytes. */ Memory->freeBytes -= node->VidMem.bytes; @@ -879,6 +878,18 @@ gckVIDMEM_AllocateLinear( Memory->minFreeBytes = Memory->freeBytes; } + gckOS_QueryOption(Memory->os, "allMapInOne", &mappingInOne); + if (!mappingInOne) + { + gcmkONERROR(gckOS_RequestReservedMemory( + Memory->os, + Memory->physicalBase + node->VidMem.offset, + node->VidMem.bytes, + "gal reserved memory", + gcvTRUE, + &node->VidMem.physical + )); + } /* Release the mutex. */ gcmkVERIFY_OK(gckOS_ReleaseMutex(Memory->os, Memory->mutex)); @@ -1795,6 +1806,7 @@ gckVIDMEM_Free( gctBOOL mutexAcquired = gcvFALSE; gctBOOL vbMutexAcquired = gcvFALSE; gctBOOL vbListMutexAcquired = gcvFALSE; + gctUINT64 mappingInOne = 1; gcmkHEADER_ARG("Node=0x%x", Node); @@ -1824,10 +1836,15 @@ gckVIDMEM_Free( if (Node->VidMem.kvaddr) { +#if gcdCAPTURE_ONLY_MODE + gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Kernel->os, Node->VidMem.kvaddr)); +#else + gcmkONERROR( gckOS_DestroyKernelMapping(Kernel->os, Node->VidMem.parent->physical, Node->VidMem.kvaddr)); +#endif Node->VidMem.kvaddr = gcvNULL; } @@ -1838,6 +1855,8 @@ gckVIDMEM_Free( { gckKERNEL_UnmapVideoMemory( Kernel, + Node->VidMem.pool, + Node->VidMem.physical, Node->VidMem.logical, Node->VidMem.processID, Node->VidMem.bytes @@ -1906,6 +1925,13 @@ gckVIDMEM_Free( } } + gckOS_QueryOption(memory->os, "allMapInOne", &mappingInOne); + if (!mappingInOne) + { + gckOS_ReleaseReservedMemory(memory->os, Node->VidMem.physical); + Node->VidMem.physical = gcvNULL; + } + /* Release the mutex. */ gcmkVERIFY_OK(gckOS_ReleaseMutex(memory->os, memory->mutex)); @@ -1919,90 +1945,93 @@ gckVIDMEM_Free( } else if (vidMemBlock && vidMemBlock->object.type == gcvOBJ_VIDMEM_BLOCK) { - gckOS os = vidMemBlock->os; - - gcmkONERROR(gckOS_AcquireMutex(os, vidMemBlock->mutex, gcvINFINITE)); - vbMutexAcquired = gcvTRUE; - kernel = Node->VirtualChunk.kernel; + /* Acquire the vidMem block mutex */ + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->vidMemBlockMutex, gcvINFINITE)); + vbListMutexAcquired = gcvTRUE; - if (Node->VirtualChunk.kvaddr) + if (vidMemBlock) { - gcmkONERROR( - gckOS_DestroyKernelMapping(kernel->os, - vidMemBlock->physical, - Node->VirtualChunk.kvaddr)); + gckOS os = vidMemBlock->os; - Node->VirtualChunk.kvaddr = gcvNULL; - } + gcmkONERROR(gckOS_AcquireMutex(os, vidMemBlock->mutex, gcvINFINITE)); + vbMutexAcquired = gcvTRUE; + kernel = Node->VirtualChunk.kernel; - /* Handle the free chunk in the linked-list */ - { - /* Check if chunk is in free list. */ - if (Node->VirtualChunk.nextFree) + if (Node->VirtualChunk.kvaddr) { - /* Chunk is already freed. */ - gcmkONERROR(gcvSTATUS_INVALID_DATA); + gcmkONERROR( + gckOS_DestroyKernelMapping(kernel->os, + vidMemBlock->physical, + Node->VirtualChunk.kvaddr)); + + Node->VirtualChunk.kvaddr = gcvNULL; } - vidMemBlock->freeBytes += Node->VirtualChunk.bytes; + /* Handle the free chunk in the linked-list */ + { + /* Check if chunk is in free list. */ + if (Node->VirtualChunk.nextFree) + { + /* Chunk is already freed. */ + gcmkONERROR(gcvSTATUS_INVALID_DATA); + } - /* Find the next free chunk. */ - for (node = Node->VirtualChunk.next; - node != gcvNULL && node->VirtualChunk.nextFree == gcvNULL; - node = node->VirtualChunk.next); + vidMemBlock->freeBytes += Node->VirtualChunk.bytes; - if (node == gcvNULL) - { - gcmkONERROR(gcvSTATUS_INVALID_DATA); - } + /* Find the next free chunk. */ + for (node = Node->VirtualChunk.next; + node != gcvNULL && node->VirtualChunk.nextFree == gcvNULL; + node = node->VirtualChunk.next); - /* Insert this chunk in the free list. */ - Node->VirtualChunk.nextFree = node; - Node->VirtualChunk.prevFree = node->VirtualChunk.prevFree; + if (node == gcvNULL) + { + gcmkONERROR(gcvSTATUS_INVALID_DATA); + } - Node->VirtualChunk.prevFree->VirtualChunk.nextFree = - node->VirtualChunk.prevFree = Node; + /* Insert this chunk in the free list. */ + Node->VirtualChunk.nextFree = node; + Node->VirtualChunk.prevFree = node->VirtualChunk.prevFree; - /* Is the next chunk a free chunk. */ - if ((Node->VirtualChunk.next == Node->VirtualChunk.nextFree) - && (Node->VirtualChunk.next->VirtualChunk.bytes != 0) - ) - { - /* Merge this chunk with the next chunk. */ - gcmkONERROR(_MergeVirtualChunk(os, node = Node)); - gcmkASSERT(node->VirtualChunk.nextFree != node); - gcmkASSERT(node->VirtualChunk.prevFree != node); - } + Node->VirtualChunk.prevFree->VirtualChunk.nextFree = + node->VirtualChunk.prevFree = Node; - /* Is the previous chunk a free chunk. */ - if ((Node->VirtualChunk.prev == Node->VirtualChunk.prevFree) - && (Node->VirtualChunk.prev->VirtualChunk.bytes != 0) - ) - { - /* Merge this chunk with the previous chunk. */ - gcmkONERROR(_MergeVirtualChunk(os, node = Node->VirtualChunk.prev)); - gcmkASSERT(node->VirtualChunk.nextFree != node); - gcmkASSERT(node->VirtualChunk.prevFree != node); + /* Is the next chunk a free chunk. */ + if ((Node->VirtualChunk.next == Node->VirtualChunk.nextFree) + && (Node->VirtualChunk.next->VirtualChunk.bytes != 0) + ) + { + /* Merge this chunk with the next chunk. */ + gcmkONERROR(_MergeVirtualChunk(os, node = Node)); + gcmkASSERT(node->VirtualChunk.nextFree != node); + gcmkASSERT(node->VirtualChunk.prevFree != node); + } + + /* Is the previous chunk a free chunk. */ + if ((Node->VirtualChunk.prev == Node->VirtualChunk.prevFree) + && (Node->VirtualChunk.prev->VirtualChunk.bytes != 0) + ) + { + /* Merge this chunk with the previous chunk. */ + gcmkONERROR(_MergeVirtualChunk(os, node = Node->VirtualChunk.prev)); + gcmkASSERT(node->VirtualChunk.nextFree != node); + gcmkASSERT(node->VirtualChunk.prevFree != node); + } } - } - /* Release the mutex. */ - gcmkVERIFY_OK(gckOS_ReleaseMutex(os, vidMemBlock->mutex)); + /* Release the mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(os, vidMemBlock->mutex)); - /* Acquire the vidMem block mutex */ - gcmkONERROR(gckOS_AcquireMutex(os, kernel->vidMemBlockMutex, gcvINFINITE)); - vbListMutexAcquired = gcvTRUE; - - /* Only free the vidmem block when all the chunks are freed. */ - if (_IsVidMemBlockFree(vidMemBlock)) - { - gcmkONERROR(_RemoveFromBlockList(kernel, vidMemBlock)); + /* Only free the vidmem block when all the chunks are freed. */ + if (_IsVidMemBlockFree(vidMemBlock)) + { + gcmkONERROR(_RemoveFromBlockList(kernel, vidMemBlock)); - gcmkONERROR(gckVIDMEM_BLOCK_Destroy(kernel, vidMemBlock)); + gcmkONERROR(gckVIDMEM_BLOCK_Destroy(kernel, vidMemBlock)); + } } /* Release the vidMem block mutex. */ - gcmkVERIFY_OK(gckOS_ReleaseMutex(os, kernel->vidMemBlockMutex)); + gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->vidMemBlockMutex)); /* Success. */ gcmkFOOTER_NO(); @@ -2124,6 +2153,7 @@ gckVIDMEM_Lock( break; default: gcmkASSERT(Node->VidMem.pool == gcvPOOL_SYSTEM); + /*FALLTHRU*/ case gcvPOOL_SYSTEM: address = Kernel->contiguousBaseAddress + offset; break; @@ -2170,9 +2200,6 @@ gckVIDMEM_LockVirtual( 0, &physicalAddress)); - /* Expect 4096 aligned. */ - gcmkASSERT((physicalAddress & 0xFFF) == 0); - /* Increment the lock count. */ if (Node->Virtual.lockeds[hwType]++ == 0) @@ -2939,6 +2966,7 @@ gckVIDMEM_NODE_AllocateLinear( IN gckVIDMEM VideoMemory, IN gcePOOL Pool, IN gceVIDMEM_TYPE Type, + IN gctUINT32 Flag, IN gctUINT32 Alignment, IN gctBOOL Specified, IN OUT gctSIZE_T * Bytes, @@ -2959,6 +2987,7 @@ gckVIDMEM_NODE_AllocateLinear( bytes, Alignment, Type, + Flag, Specified, &node)); @@ -3441,41 +3470,39 @@ gckVIDMEM_NODE_LockCPU( if (FromUser) { - /* Map video memory pool to user space. */ -#ifdef __QNXNTO__ - if (node->VidMem.logical == gcvNULL) - { - gcmkONERROR( - gckKERNEL_MapVideoMemory(Kernel, - gcvTRUE, - node->VidMem.pool, - (gctUINT32)node->VidMem.offset, - (gctUINT32)node->VidMem.bytes, - &node->VidMem.logical)); - } - - logical = node->VidMem.logical; +#if gcdCAPTURE_ONLY_MODE + node->VidMem.logical = NodeObject->captureLogical; #else + /* Map video memory pool to user space. */ gcmkONERROR( gckKERNEL_MapVideoMemory(Kernel, gcvTRUE, node->VidMem.pool, + node->VidMem.physical, (gctUINT32)node->VidMem.offset, (gctUINT32)node->VidMem.bytes, - &logical)); + &node->VidMem.logical)); #endif + + logical = node->VidMem.logical; } else { /* Map video memory pool to kernel space. */ if (!node->VidMem.kvaddr) { +#if gcdCAPTURE_ONLY_MODE + gcmkONERROR(gckOS_Allocate(os, + node->VidMem.bytes, + &node->VidMem.kvaddr)); +#else gcmkONERROR( gckOS_CreateKernelMapping(os, node->VidMem.parent->physical, node->VidMem.offset, node->VidMem.bytes, &node->VidMem.kvaddr)); +#endif } logical = node->VidMem.kvaddr; @@ -3567,7 +3594,8 @@ gckVIDMEM_NODE_UnlockCPU( IN gckKERNEL Kernel, IN gckVIDMEM_NODE NodeObject, IN gctUINT32 ProcessID, - IN gctBOOL FromUser + IN gctBOOL FromUser, + IN gctBOOL Defer ) { gceSTATUS status; @@ -3586,7 +3614,29 @@ gckVIDMEM_NODE_UnlockCPU( { if (FromUser) { +#if gcdCAPTURE_ONLY_MODE || defined __QNXNTO__ /* Do nothing here. */ +#else + if (!Defer) + { + /* Unmap the video memory. */ + if (node->VidMem.logical != gcvNULL) + { + gckKERNEL_UnmapVideoMemory( + Kernel, + node->VidMem.pool, + node->VidMem.physical, + node->VidMem.logical, + node->VidMem.processID, + node->VidMem.bytes + ); + + node->VidMem.logical = gcvNULL; + } + /* Reset. */ + node->VidMem.processID = 0; + } +#endif } else { @@ -3914,6 +3964,7 @@ static void _dmabuf_release(struct dma_buf *dmabuf) gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference(nodeObject->kernel, nodeObject)); } +#if LINUX_VERSION_CODE <= KERNEL_VERSION(5,5,7) static void *_dmabuf_kmap(struct dma_buf *dmabuf, unsigned long offset) { gckVIDMEM_NODE nodeObject = dmabuf->priv; @@ -3977,6 +4028,7 @@ static void _dmabuf_kunmap(struct dma_buf *dmabuf, unsigned long offset, void *p gcmkVERIFY_OK(gckOS_DestroyKernelMapping( nodeObject->kernel->os, physical, (gctPOINTER*)&kvaddr)); } +#endif static struct dma_buf_ops _dmabuf_ops = { @@ -3984,7 +4036,8 @@ static struct dma_buf_ops _dmabuf_ops = .unmap_dma_buf = _dmabuf_unmap, .mmap = _dmabuf_mmap, .release = _dmabuf_release, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) +#if LINUX_VERSION_CODE > KERNEL_VERSION(5,5,7) +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0) .map = _dmabuf_kmap, .unmap = _dmabuf_kunmap, # elif LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0) @@ -4574,3 +4627,60 @@ gckVIDMEM_NODE_Find( return status; } + +gceSTATUS +gckVIDMEM_NODE_IsContiguous( + IN gckKERNEL Kernel, + IN gckVIDMEM_NODE NodeObject, + OUT gctBOOL * Contiguous + ) +{ + gceSTATUS status; + gckOS os = Kernel->os; + gctBOOL acquired = gcvFALSE; + gcuVIDMEM_NODE_PTR node = NodeObject->node; + gckVIDMEM_BLOCK vidMemBlock = node->VirtualChunk.parent; + + gcmkHEADER(); + + /* Grab the mutex. */ + gcmkONERROR(gckOS_AcquireMutex(os, NodeObject->mutex, gcvINFINITE)); + acquired = gcvTRUE; + + *Contiguous = gcvFALSE; + + if (node->VidMem.parent->object.type == gcvOBJ_VIDMEM) + { + *Contiguous = gcvTRUE; + } + else if (vidMemBlock && vidMemBlock->object.type == gcvOBJ_VIDMEM_BLOCK) + { + if (vidMemBlock->contiguous) + { + *Contiguous = gcvTRUE; + } + } + else + { + if (node->Virtual.contiguous) + { + *Contiguous = gcvTRUE; + } + } + + gcmkVERIFY_OK(gckOS_ReleaseMutex(os, NodeObject->mutex)); + + gcmkFOOTER(); + return gcvSTATUS_OK; + +OnError: + if (acquired) + { + /* Release the mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(os, NodeObject->mutex)); + } + + /* Return the status. */ + gcmkFOOTER(); + return status; +} diff --git a/drivers/amlogic/npu/kernel/inc/gc_feature_database.h b/drivers/amlogic/npu/kernel/inc/gc_feature_database.h index 648875032e03e8..ebd2585cfdeaba 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_feature_database.h +++ b/drivers/amlogic/npu/kernel/inc/gc_feature_database.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -53,7 +53,7 @@ *****************************************************************************/ -/*Auto created on 2019-09-26 14:56*/ +/*Auto created on 2020-03-26 14:34*/ #ifndef _gc_feature_database_h_ #define _gc_feature_database_h_ @@ -111,8 +111,17 @@ typedef struct gctUINT32 NNFP16_ZDP; gctUINT32 NN_LANES_PER_OUT_CYCLE; gctUINT32 MAX_OT_NUMBER; + gctUINT32 PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE; gctUINT32 EQUIVALENT_VIP_SRAM_WIDTH_INBYTE; gctUINT32 TP_ZRL_BITS; + gctUINT32 LATENCY_HIDING_AT_FULL_AXI_BW; + gctUINT32 AXI_BUS_WIDTH; + gctUINT32 NN_KERNEL_X_SIZE; + gctUINT32 NN_KERNEL_Y_SIZE; + gctUINT32 NN_KERNEL_Z_SIZE; + gctUINT32 NN_X_OFFSET; + gctUINT32 NN_Y_OFFSET; + gctUINT32 DDR_KERNEL_BURST_SIZE; gctUINT32 REG_FastClear:1; gctUINT32 REG_SpecialAntiAliasing:1; gctUINT32 REG_Pipe3D:1; @@ -342,6 +351,7 @@ typedef struct gctUINT32 REG_DEC:1; gctUINT32 REG_VSTileNV12:1; gctUINT32 REG_VSTileNV12_10BIT:1; + gctUINT32 REG_DisableVIP:1; gctUINT32 RenderTarget8:1; gctUINT32 TxLodFlowCorrection:1; gctUINT32 FaceLod:1; @@ -487,6 +497,14 @@ typedef struct gctUINT32 DE_2D_FAST_CLEAR:1; gctUINT32 TX_CLEAR_PENDING_FIX:1; gctUINT32 NO_HI1_L2:1; + gctUINT32 USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX:1; + gctUINT32 FORMAT_10BIT_CROSS_4K:1; + gctUINT32 FORMAT_P010LSB_I010:1; + gctUINT32 ENDIAN_CONTROL:1; + gctUINT32 G2D_DEC400EX:1; + gctUINT32 SH_VX2_FLOATING_MAD_FIX:1; + gctUINT32 TS_FC_VULKAN_SUPPORT:1; + gctUINT32 MSAA_FLOAT_64BIT:1; gctUINT32 VG_TS_CULLING:1; gctUINT32 VG_FP25:1; gctUINT32 VG_AYUV_INPUT_OUTPUT:1; @@ -513,6 +531,7 @@ typedef struct gctUINT32 DC_MMU:1; gctUINT32 DC_COMPRESSION:1; gctUINT32 DC_QOS:1; + gctUINT32 AI_GPU:1; gctUINT32 EVIS_NO_ABSDIFF:1; gctUINT32 EVIS_NO_BITREPLACE:1; gctUINT32 EVIS_NO_BOXFILTER:1; @@ -544,6 +563,7 @@ typedef struct gctUINT32 TF_QUANTIZATION:1; gctUINT32 TP_SIMPLE_INT16:1; gctUINT32 TP_REAL_INT16:1; + gctUINT32 TP_BFLOAT16:1; gctUINT32 NN_FIRST_PIXEL_POOLING:1; gctUINT32 SWTILING_PHASE2:1; gctUINT32 NN_STRIDE_SUPPORT:1; @@ -569,6 +589,7 @@ typedef struct gctUINT32 NN_SMALLBATCH_PHASE1:1; gctUINT32 TP_SMALLBATCH_PHASE1:1; gctUINT32 SCALER:1; + gctUINT32 SCALER_4K:1; gctUINT32 NN_REQ_SLOWARBITRATION_FIX:1; gctUINT32 IMAGE_PARTIAL_CACHE:1; gctUINT32 FULLCACHE_KERNELHEAD_FIX:1; @@ -599,10 +620,19 @@ typedef struct gctUINT32 IMG_POP_PIPELINE_PAUSE_FIX:1; gctUINT32 DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX:1; gctUINT32 OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX:1; - gctUINT32 NN_PER_CHANNEL_POST_MULTIPLY:1; + gctUINT32 SMALL_BATCH_FLOPS_RESET_FIX:1; + gctUINT32 SMALL_BATCH_DISBLE_FIX:1; + gctUINT32 NEGATIVE_POST_SHIFT_FIX:1; + gctUINT32 NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX:1; + gctUINT32 OCB_REMAP_PHYSICAL_ADDRESS:1; gctUINT32 NN_NO_Z_LOCATION_OFFSET:1; + gctUINT32 NN_LEAKY_RELU:1; gctUINT32 NN_PRELU:1; - gctUINT32 OCB_REMAP_PHYSICAL_ADDRESS:1; + gctUINT32 NN_PER_CHANNEL_QUANT:1; + gctUINT32 NN_PER_CHANNEL_QUANT_ASYM:1; + gctUINT32 NN_NATIVE_STRIDE_TWO:1; + gctUINT32 NN_TENSOR_ADD:1; + gctUINT32 NN_FLOAT_POST_MULT:1; gctUINT32 NN_SLICE_PADDING_TO_64BYTE_ALIGN:1; gctUINT32 NN_DW_1x1_CONV_MERGE:1; gctUINT32 NN_SLOW_OUTPUT:1; @@ -610,8 +640,35 @@ typedef struct gctUINT32 TP_NN_PROBE:1; gctUINT32 TP_23BITS_POST_MULTIPLIER:1; gctUINT32 NN_TRANSPOSE:1; + gctUINT32 EVIS2_FLOP_RESET_FIX:1; + gctUINT32 USC_ASYNC_CP_RTN_FLOP_RESET_FIX:1; + gctUINT32 DDR_BURST_LEN_256B:1; + gctUINT32 IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX:1; + gctUINT32 USE_SINGLE_PORT_VIPSRAM:1; + gctUINT32 NN_ASYMMETRIC_INT8:1; + gctUINT32 DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX:1; + gctUINT32 PRELU_LEAKLY_RELU_CLAMP:1; + gctUINT32 TP_FLOAT32_IO:1; + gctUINT32 NN_FLOAT32_IO:1; + gctUINT32 NN_SMALL_BATCH_PHASE2:1; + gctUINT32 TILE_ACCESS_CAPABILITY:1; + gctUINT32 FAST_DP3_PREPROCESSOR:1; + gctUINT32 NN_COMPRESSION_BYPASSS:1; + gctUINT32 BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX:1; + gctUINT32 TP_3_USC:1; + gctUINT32 TP_KERNEL_1BYTE_ALGIN:1; + gctUINT32 TPLITE_BFLOAT16:1; + gctUINT32 PREPROCESS_IMG_BUF_640BYTE_LIMIT:1; + gctUINT32 V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX:1; + gctUINT32 V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX:1; + gctUINT32 BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX:1; + gctUINT32 INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX:1; + gctUINT32 TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX:1; + gctUINT32 VIP_HW_FINAL_RELEASE:1; } gcsFEATURE_DATABASE; +#define FEATURE_BIT_START 63 +#define FEATURE_BIT_END 605 static gcsFEATURE_DATABASE gChipInfo[] = { /* vipnano-qi */ { @@ -666,8 +723,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x20, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x7, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x7, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -897,6 +963,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -1042,6 +1109,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -1068,6 +1143,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -1099,6 +1175,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x1, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x0, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x0, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x0, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ @@ -1124,6 +1201,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -1154,17 +1232,51 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x0, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ 0x0, /* gcFEATURE_BIT_NN_PRELU */ - 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x1, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x0, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, /* vipnano-qi */ { @@ -1219,8 +1331,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x20, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x7, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x7, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -1450,6 +1571,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -1595,6 +1717,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -1621,6 +1751,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -1652,6 +1783,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x1, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x0, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x0, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x0, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ @@ -1677,6 +1809,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -1707,17 +1840,51 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x0, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ 0x0, /* gcFEATURE_BIT_NN_PRELU */ - 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x1, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x0, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, /* vipnano-qi */ { @@ -1772,8 +1939,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x20, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0xf, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2003,6 +2179,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -2148,6 +2325,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -2174,6 +2359,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -2205,6 +2391,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ @@ -2230,6 +2417,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -2260,25 +2448,59 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x0, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ 0x0, /* gcFEATURE_BIT_NN_PRELU */ - 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x1, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x0, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, - /* vipnano-qi */ + /* vip9000nano-si */ { - 0x8000, /* ChipID */ - 0x7131, /* ChipRevision */ - 0x5000009, /* ProductID */ - 0x8000000, /* EcoID */ - 0xa1, /* CustomerID */ + 0x9000, /* ChipID */ + 0x8101, /* ChipRevision */ + 0x5090009, /* ProductID */ + 0x4000000, /* EcoID */ + 0xb9, /* CustomerID */ 0x0, /* PatchVersion */ "", /* ProductName */ 0x0, /* FormalRelease */ @@ -2294,7 +2516,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x1, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ 0x2, /* gcFEATURE_VALUE_USC_BANKS */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ @@ -2305,28 +2527,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ - 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x4, /* gcFEATURE_VALUE_NNCoreCount */ + 0x4, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x4, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ - 0xc, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x9, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x20, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x100000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x6, /* gcFEATURE_VALUE_TPEngine_CoreCount */ - 0x43f000, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ - 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ - 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ - 0x0, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x80000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x0, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ + 0x5, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x200, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x7, /* gcFEATURE_VALUE_TPLite_CoreCount */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ - 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ - 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ - 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x10, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x40, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x1f, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x1f, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x100, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2556,6 +2787,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -2701,6 +2933,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -2727,6 +2967,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -2758,14 +2999,15 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ - 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP6 */ 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ 0x1, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ @@ -2777,12 +3019,13 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ - 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x1, /* gcFEATURE_BIT_NN_XYDP0 */ 0x0, /* gcFEATURE_BIT_ZRL_7BIT */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -2790,48 +3033,82 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ - 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ - 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ - 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x1, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ - 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x1, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ - 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ - 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x1, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ 0x1, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ - 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ - 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ - 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ - 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ - 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ - 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ - 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ + 0x1, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ + 0x1, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ - 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ - 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ + 0x1, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ - 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x1, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x1, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x1, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, - /* vippico_v3 */ + /* vip9000nano-di */ { - 0x8000, /* ChipID */ - 0x7131, /* ChipRevision */ - 0x8000001, /* ProductID */ - 0x2000000, /* EcoID */ - 0x99, /* CustomerID */ + 0x9000, /* ChipID */ + 0x8102, /* ChipRevision */ + 0x5090009, /* ProductID */ + 0x8000000, /* EcoID */ + 0xbe, /* CustomerID */ 0x0, /* PatchVersion */ "", /* ProductName */ 0x0, /* FormalRelease */ @@ -2847,7 +3124,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ - 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x1, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ 0x2, /* gcFEATURE_VALUE_USC_BANKS */ 0x8, /* gcFEATURE_VALUE_Streams */ 0x10, /* gcFEATURE_VALUE_VaryingCount */ @@ -2858,28 +3135,37 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ - 0x2, /* gcFEATURE_VALUE_NNCoreCount */ - 0x2, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ - 0x0, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ - 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ - 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x9, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x20, /* gcFEATURE_VALUE_NNAccumBufferDepth */ 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ - 0x80000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ - 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x100000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x3, /* gcFEATURE_VALUE_TPEngine_CoreCount */ 0x0, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ - 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ - 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ - 0x7, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x5, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x200, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPLite_CoreCount */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ - 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ - 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ - 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x10, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x40, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x10, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0x1f, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0x1f, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x100, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -3109,6 +3395,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_REG_DEC */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ 0x0, /* gcFEATURE_BIT_RenderTarget8 */ 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ 0x0, /* gcFEATURE_BIT_FaceLod */ @@ -3254,6 +3541,14 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -3280,6 +3575,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_DC_MMU */ 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ @@ -3300,7 +3596,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TP_LRN */ 0x1, /* gcFEATURE_BIT_TP_MAX_POOLING_STRIDE1 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ - 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ + 0x1, /* gcFEATURE_BIT_NN_INT16_ALU */ 0x1, /* gcFEATURE_BIT_TP_ROI_POOLING */ 0x1, /* gcFEATURE_BIT_NN_ZDP3 */ 0x0, /* gcFEATURE_BIT_NN_ZDP6 */ @@ -3311,31 +3607,33 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ - 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP6 */ 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ - 0x0, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ - 0x0, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ - 0x0, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ + 0x1, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ + 0x1, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ 0x0, /* gcFEATURE_BIT_INPUT_4BIT */ 0x1, /* gcFEATURE_BIT_COEF_COMPRESSION_ENHANCEMENT */ - 0x0, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ - 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ - 0x1, /* gcFEATURE_BIT_ZRL_7BIT */ + 0x1, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x0, /* gcFEATURE_BIT_ZRL_7BIT */ 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ @@ -3343,40 +3641,1290 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ - 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ - 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ - 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x1, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ - 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x1, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ - 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ - 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x1, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ - 0x0, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ - 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ + 0x1, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ - 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ - 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ - 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ - 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_POST_MULTIPLY */ - 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ - 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x1, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ + 0x1, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ + 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ + 0x1, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_TP_NN_PROBE */ + 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ + 0x1, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x1, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x1, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x0, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ + }, + /* vipnano-qi */ + { + 0x8000, /* ChipID */ + 0x7131, /* ChipRevision */ + 0x5000009, /* ProductID */ + 0x8000000, /* EcoID */ + 0xa1, /* CustomerID */ + 0x0, /* PatchVersion */ + "", /* ProductName */ + 0x0, /* FormalRelease */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x1, /* gcFEATURE_VALUE_CoreCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ + 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x2, /* gcFEATURE_VALUE_USC_BANKS */ + 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x0, /* gcFEATURE_VALUE_BufferSize */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x8, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ + 0xc, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x100000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x6, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x43f000, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ + 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x0, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ + 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ + 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0xf, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ + 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_DebugMode */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 0x0, /* gcFEATURE_BIT_REG_DC */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_NoEZ */ + 0x0, /* gcFEATURE_BIT_REG_No422Texture */ + 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ + 0x0, /* gcFEATURE_BIT_REG_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ + 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ + 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ + 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */ + 0x0, /* gcFEATURE_BIT_REG_PipeVG */ + 0x0, /* gcFEATURE_BIT_REG_VGTS */ + 0x0, /* gcFEATURE_BIT_REG_FE20 */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ + 0x1, /* gcFEATURE_BIT_REG_FlipY */ + 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_Texture8K */ + 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ + 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ + 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ + 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x1, /* gcFEATURE_BIT_REG_Render8K */ + 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ + 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 0x0, /* gcFEATURE_BIT_REG_VG20 */ + 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_VGFilter */ + 0x0, /* gcFEATURE_BIT_REG_VG21 */ + 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x0, /* gcFEATURE_BIT_REG_VAA */ + 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_NewTexture */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ + 0x0, /* gcFEATURE_BIT_REG_TextureStride */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ + 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_New2D */ + 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ + 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ + 0x1, /* gcFEATURE_BIT_REG_Halti0 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ + 0x1, /* gcFEATURE_BIT_REG_MMU */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ + 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x1, /* gcFEATURE_BIT_REG_LineLoop */ + 0x1, /* gcFEATURE_BIT_REG_LogicOp */ + 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x0, /* gcFEATURE_BIT_REG_Composition */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ + 0x0, /* gcFEATURE_BIT_REG_RGB888 */ + 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x0, /* gcFEATURE_BIT_REG_TXFilter */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_Interleaver */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_OclOnly */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x1, /* gcFEATURE_BIT_REG_Generics */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ + 0x0, /* gcFEATURE_BIT_REG_WClip */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x1, /* gcFEATURE_BIT_REG_NewHZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ + 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ + 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ + 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ + 0x1, /* gcFEATURE_BIT_REG_EEZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ + 0x1, /* gcFEATURE_BIT_REG_Halti3 */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_Halti5 */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ + 0x0, /* gcFEATURE_BIT_REG_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ + 0x0, /* gcFEATURE_BIT_RenderTarget8 */ + 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ + 0x0, /* gcFEATURE_BIT_FaceLod */ + 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ + 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* gcFEATURE_BIT_ChipEnableLink */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ + 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ + 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ + 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ + 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ + 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_DXT */ + 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ + 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */ + 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ + 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */ + 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */ + 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ + 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */ + 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ + 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ + 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ + 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ + 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY */ + 0x1, /* gcFEATURE_BIT_ROBUSTNESS */ + 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ + 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ + 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ + 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */ + 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 0x1, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ + 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ + 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ + 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ + 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ + 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */ + 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ + 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ + 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ + 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ + 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ + 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + 0x0, /* gcFEATURE_BIT_TX_SEAMLESS_CUBE */ + 0x0, /* gcFEATURE_BIT_TX_SNORM_SUPPORT */ + 0x0, /* gcFEATURE_BIT_SH_SCATTER_GATHER */ + 0x0, /* gcFEATURE_BIT_HWMANAGED_LS */ + 0x0, /* gcFEATURE_BIT_SH_IMAGE_ENABLE_FIX */ + 0x1, /* gcFEATURE_BIT_MSAA_FRAGMENT_OPERATION */ + 0x0, /* gcFEATURE_BIT_PE_TILE_CACHE_FLUSH_FIX */ + 0x0, /* gcFEATURE_BIT_BLT_YUV_OUTPUT */ + 0x1, /* gcFEATURE_BIT_SH_IO_CG_FIX */ + 0x0, /* gcFEATURE_BIT_PE_SWIZZLE */ + 0x0, /* gcFEATURE_BIT_SH_ROBUSTNESS_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX2 */ + 0x0, /* gcFEATURE_BIT_PE_A8B8G8R8 */ + 0x0, /* gcFEATURE_BIT_MULTIVIEW_RENDER */ + 0x0, /* gcFEATURE_BIT_FE_DRAW_DIRECT */ + 0x0, /* gcFEATURE_BIT_TX_VKBORDER_MODE */ + 0x0, /* gcFEATURE_BIT_TX_UNNORMALIZED_COORD */ + 0x0, /* gcFEATURE_BIT_PA_LINECLIP_FIX */ + 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac_ROUNDING_FIX */ + 0x0, /* gcFEATURE_BIT_MP_ARCH */ + 0x0, /* gcFEATURE_BIT_TX_NO_FIXED_FILTER */ + 0x0, /* gcFEATURE_BIT_SHARE_Z */ + 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ + 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ + 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ + 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ + 0x0, /* gcFEATURE_BIT_VG_FP25 */ + 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ + 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ + 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */ + 0x0, /* gcFEATURE_BIT_VG_MMU */ + 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */ + 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ + 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ + 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_VG_IMAGE_16K */ + 0x0, /* gcFEATURE_BIT_VG_FORMAT_ARGB2222 */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ + 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ + 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_TP_LRN */ + 0x1, /* gcFEATURE_BIT_TP_MAX_POOLING_STRIDE1 */ + 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ + 0x1, /* gcFEATURE_BIT_NN_INT16_ALU */ + 0x1, /* gcFEATURE_BIT_TP_ROI_POOLING */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3 */ + 0x0, /* gcFEATURE_BIT_NN_ZDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP9 */ + 0x1, /* gcFEATURE_BIT_NN_INT8_SCALE */ + 0x1, /* gcFEATURE_BIT_NN_POWER_ISOLATION */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ + 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ + 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ + 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ + 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ + 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ + 0x1, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ + 0x1, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ + 0x0, /* gcFEATURE_BIT_INPUT_4BIT */ + 0x1, /* gcFEATURE_BIT_COEF_COMPRESSION_ENHANCEMENT */ + 0x1, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ + 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x0, /* gcFEATURE_BIT_ZRL_7BIT */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ + 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ + 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ + 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SINGLEPORT_ACCUMBUFFER */ + 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ + 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ + 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ + 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ + 0x1, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ + 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ + 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ + 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ + 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ + 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ + 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ + 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ + 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ + 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ + }, + /* vippico_v3 */ + { + 0x8000, /* ChipID */ + 0x7131, /* ChipRevision */ + 0x8000001, /* ProductID */ + 0x2000000, /* EcoID */ + 0x99, /* CustomerID */ + 0x0, /* PatchVersion */ + "", /* ProductName */ + 0x0, /* FormalRelease */ + 0x40, /* gcFEATURE_VALUE_TempRegisters */ + 0x100, /* gcFEATURE_VALUE_ThreadCount */ + 0x1, /* gcFEATURE_VALUE_NumShaderCores */ + 0x200, /* gcFEATURE_VALUE_InstructionCount */ + 0x140, /* gcFEATURE_VALUE_NumberOfConstants */ + 0x1, /* gcFEATURE_VALUE_CoreCount */ + 0x10, /* gcFEATURE_VALUE_LocalStorageSize */ + 0x10, /* gcFEATURE_VALUE_L1CacheSize */ + 0x200, /* gcFEATURE_VALUE_InstructionMemorySize */ + 0x14, /* gcFEATURE_VALUE_ShaderPCLength */ + 0x10, /* gcFEATURE_VALUE_USC_MAX_PAGES */ + 0x1, /* gcFEATURE_VALUE_NumPixelPipes */ + 0x2, /* gcFEATURE_VALUE_USC_CACHE_CONTROLLERS */ + 0x2, /* gcFEATURE_VALUE_USC_BANKS */ + 0x8, /* gcFEATURE_VALUE_Streams */ + 0x10, /* gcFEATURE_VALUE_VaryingCount */ + 0x400, /* gcFEATURE_VALUE_VertexOutputBufferSize */ + 0x0, /* gcFEATURE_VALUE_BufferSize */ + 0x10, /* gcFEATURE_VALUE_VertexCacheSize */ + 0x0, /* gcFEATURE_VALUE_NumResolvePipes */ + 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ + 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ + 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ + 0x2, /* gcFEATURE_VALUE_NNCoreCount */ + 0x2, /* gcFEATURE_VALUE_NNCoreCount_INT8 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_INT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_FLOAT16 */ + 0x0, /* gcFEATURE_VALUE_NNCoreCount_BFLOAT */ + 0x6, /* gcFEATURE_VALUE_NNInputBufferDepth */ + 0x40, /* gcFEATURE_VALUE_NNAccumBufferDepth */ + 0x400, /* gcFEATURE_VALUE_TPEngine_PwlLUTCount */ + 0x10, /* gcFEATURE_VALUE_TPEngine_PwlLUTSize */ + 0x80000, /* gcFEATURE_VALUE_VIP_SRAM_SIZE */ + 0x1, /* gcFEATURE_VALUE_TPEngine_CoreCount */ + 0x0, /* gcFEATURE_VALUE_AXI_SRAM_SIZE */ + 0x4, /* gcFEATURE_VALUE_NN_INIMAGE_OFFSET_BITS */ + 0x180, /* gcFEATURE_VALUE_TP_REORDER_INIMAGE_SIZE */ + 0x7, /* gcFEATURE_VALUE_TPLite_CoreCount */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_X */ + 0x1, /* gcFEATURE_VALUE_NNFP16_XYDP_Y */ + 0x1, /* gcFEATURE_VALUE_NNFP16_ZDP */ + 0x8, /* gcFEATURE_VALUE_NN_LANES_PER_OUT_CYCLE */ + 0x20, /* gcFEATURE_VALUE_MAX_OT_NUMBER */ + 0x40, /* gcFEATURE_VALUE_PHYSICAL_VIP_SRAM_WIDTH_IN_BYTE */ + 0x20, /* gcFEATURE_VALUE_EQUIVALENT_VIP_SRAM_WIDTH_INBYTE */ + 0x8, /* gcFEATURE_VALUE_TP_ZRL_BITS */ + 0x80, /* gcFEATURE_VALUE_LATENCY_HIDING_AT_FULL_AXI_BW */ + 0x10, /* gcFEATURE_VALUE_AXI_BUS_WIDTH */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_X_SIZE */ + 0xb, /* gcFEATURE_VALUE_NN_KERNEL_Y_SIZE */ + 0xfffff, /* gcFEATURE_VALUE_NN_KERNEL_Z_SIZE */ + 0xf, /* gcFEATURE_VALUE_NN_X_OFFSET */ + 0xf, /* gcFEATURE_VALUE_NN_Y_OFFSET */ + 0x40, /* gcFEATURE_VALUE_DDR_KERNEL_BURST_SIZE */ + 0x0, /* gcFEATURE_BIT_REG_FastClear */ + 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ + 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ + 0x1, /* gcFEATURE_BIT_REG_DXTTextureCompression */ + 0x0, /* gcFEATURE_BIT_REG_DebugMode */ + 0x1, /* gcFEATURE_BIT_REG_ZCompression */ + 0x0, /* gcFEATURE_BIT_REG_YUV420Filter */ + 0x1, /* gcFEATURE_BIT_REG_MSAA */ + 0x0, /* gcFEATURE_BIT_REG_DC */ + 0x0, /* gcFEATURE_BIT_REG_Pipe2D */ + 0x1, /* gcFEATURE_BIT_REG_ETC1TextureCompression */ + 0x1, /* gcFEATURE_BIT_REG_FastScaler */ + 0x1, /* gcFEATURE_BIT_REG_HighDynamicRange */ + 0x1, /* gcFEATURE_BIT_REG_YUV420Tiler */ + 0x1, /* gcFEATURE_BIT_REG_ModuleCG */ + 0x0, /* gcFEATURE_BIT_REG_MinArea */ + 0x0, /* gcFEATURE_BIT_REG_NoEZ */ + 0x0, /* gcFEATURE_BIT_REG_No422Texture */ + 0x0, /* gcFEATURE_BIT_REG_BufferInterleaving */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite2D */ + 0x0, /* gcFEATURE_BIT_REG_NoScaler */ + 0x1, /* gcFEATURE_BIT_REG_YUY2Averaging */ + 0x0, /* gcFEATURE_BIT_REG_HalfPECache */ + 0x0, /* gcFEATURE_BIT_REG_HalfTXCache */ + 0x0, /* gcFEATURE_BIT_REG_YUY2RenderTarget */ + 0x0, /* gcFEATURE_BIT_REG_Mem32BitSupport */ + 0x0, /* gcFEATURE_BIT_REG_PipeVG */ + 0x0, /* gcFEATURE_BIT_REG_VGTS */ + 0x0, /* gcFEATURE_BIT_REG_FE20 */ + 0x1, /* gcFEATURE_BIT_REG_ByteWrite3D */ + 0x1, /* gcFEATURE_BIT_REG_RsYuvTarget */ + 0x1, /* gcFEATURE_BIT_REG_FE20BitIndex */ + 0x1, /* gcFEATURE_BIT_REG_FlipY */ + 0x1, /* gcFEATURE_BIT_REG_DualReturnBus */ + 0x1, /* gcFEATURE_BIT_REG_EndiannessConfig */ + 0x1, /* gcFEATURE_BIT_REG_Texture8K */ + 0x1, /* gcFEATURE_BIT_REG_CorrectTextureConverter */ + 0x1, /* gcFEATURE_BIT_REG_SpecialMsaaLod */ + 0x1, /* gcFEATURE_BIT_REG_FastClearFlush */ + 0x1, /* gcFEATURE_BIT_REG_2DPE20 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectAutoDisable */ + 0x1, /* gcFEATURE_BIT_REG_Render8K */ + 0x1, /* gcFEATURE_BIT_REG_TileStatus2Bits */ + 0x1, /* gcFEATURE_BIT_REG_SeparateTileStatusWhenInterleaved */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiled32x32 */ + 0x0, /* gcFEATURE_BIT_REG_VG20 */ + 0x0, /* gcFEATURE_BIT_REG_TSExtendedCommands */ + 0x1, /* gcFEATURE_BIT_REG_CompressionFifoFixed */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions0 */ + 0x0, /* gcFEATURE_BIT_REG_VGFilter */ + 0x0, /* gcFEATURE_BIT_REG_VG21 */ + 0x1, /* gcFEATURE_BIT_REG_ShaderGetsW */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions1 */ + 0x1, /* gcFEATURE_BIT_REG_DefaultReg0 */ + 0x1, /* gcFEATURE_BIT_REG_MC20 */ + 0x0, /* gcFEATURE_BIT_REG_ShaderMSAASideband */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes0 */ + 0x0, /* gcFEATURE_BIT_REG_VAA */ + 0x0, /* gcFEATURE_BIT_REG_BypassInMSAA */ + 0x0, /* gcFEATURE_BIT_REG_HierarchicalZ */ + 0x0, /* gcFEATURE_BIT_REG_NewTexture */ + 0x0, /* gcFEATURE_BIT_REG_A8TargetSupport */ + 0x1, /* gcFEATURE_BIT_REG_CorrectStencil */ + 0x1, /* gcFEATURE_BIT_REG_EnhanceVR */ + 0x1, /* gcFEATURE_BIT_REG_RSUVSwizzle */ + 0x1, /* gcFEATURE_BIT_REG_V2Compression */ + 0x0, /* gcFEATURE_BIT_REG_VGDoubleBuffer */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes1 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes2 */ + 0x0, /* gcFEATURE_BIT_REG_TextureStride */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes3 */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisable1 */ + 0x0, /* gcFEATURE_BIT_REG_AutoRestartTS */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes4 */ + 0x0, /* gcFEATURE_BIT_REG_L2Windowing */ + 0x1, /* gcFEATURE_BIT_REG_HalfFloatPipe */ + 0x1, /* gcFEATURE_BIT_REG_PixelDither */ + 0x1, /* gcFEATURE_BIT_REG_TwoStencilReference */ + 0x1, /* gcFEATURE_BIT_REG_ExtendedPixelFormat */ + 0x1, /* gcFEATURE_BIT_REG_CorrectMinMaxDepth */ + 0x1, /* gcFEATURE_BIT_REG_DitherAndFilterPlusAlpha2D */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes5 */ + 0x0, /* gcFEATURE_BIT_REG_New2D */ + 0x1, /* gcFEATURE_BIT_REG_NewFloatingPointArithmetic */ + 0x1, /* gcFEATURE_BIT_REG_TextureHorizontalAlignmentSelect */ + 0x1, /* gcFEATURE_BIT_REG_NonPowerOfTwo */ + 0x1, /* gcFEATURE_BIT_REG_LinearTextureSupport */ + 0x1, /* gcFEATURE_BIT_REG_Halti0 */ + 0x0, /* gcFEATURE_BIT_REG_CorrectOverflowVG */ + 0x1, /* gcFEATURE_BIT_REG_NegativeLogFix */ + 0x1, /* gcFEATURE_BIT_REG_ResolveOffset */ + 0x1, /* gcFEATURE_BIT_REG_OkToGateAxiClock */ + 0x1, /* gcFEATURE_BIT_REG_MMU */ + 0x1, /* gcFEATURE_BIT_REG_WideLine */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes6 */ + 0x1, /* gcFEATURE_BIT_REG_FcFlushStall */ + 0x1, /* gcFEATURE_BIT_REG_LineLoop */ + 0x1, /* gcFEATURE_BIT_REG_LogicOp */ + 0x1, /* gcFEATURE_BIT_REG_SeamlessCubeMap */ + 0x1, /* gcFEATURE_BIT_REG_SuperTiledTexture */ + 0x1, /* gcFEATURE_BIT_REG_LinearPE */ + 0x1, /* gcFEATURE_BIT_REG_RectPrimitive */ + 0x0, /* gcFEATURE_BIT_REG_Composition */ + 0x1, /* gcFEATURE_BIT_REG_CorrectAutoDisableCountWidth */ + 0x1, /* gcFEATURE_BIT_REG_PESwizzle */ + 0x1, /* gcFEATURE_BIT_REG_EndEvent */ + 0x1, /* gcFEATURE_BIT_REG_S1S8 */ + 0x1, /* gcFEATURE_BIT_REG_Halti1 */ + 0x0, /* gcFEATURE_BIT_REG_RGB888 */ + 0x1, /* gcFEATURE_BIT_REG_TX_YUVAssembler */ + 0x1, /* gcFEATURE_BIT_REG_DynamicFrequencyScaling */ + 0x0, /* gcFEATURE_BIT_REG_TXFilter */ + 0x1, /* gcFEATURE_BIT_REG_FullDirectFB */ + 0x0, /* gcFEATURE_BIT_REG_OnePass2DFilter */ + 0x1, /* gcFEATURE_BIT_REG_ThreadWalkerInPS */ + 0x1, /* gcFEATURE_BIT_REG_TileFiller */ + 0x1, /* gcFEATURE_BIT_REG_YUVStandard */ + 0x0, /* gcFEATURE_BIT_REG_MultiSourceBlt */ + 0x0, /* gcFEATURE_BIT_REG_YUVConversion */ + 0x1, /* gcFEATURE_BIT_REG_FlushFixed2D */ + 0x1, /* gcFEATURE_BIT_REG_Interleaver */ + 0x1, /* gcFEATURE_BIT_REG_MixedStreams */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheFor2D420 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes7 */ + 0x0, /* gcFEATURE_BIT_REG_NoIndexPattern */ + 0x1, /* gcFEATURE_BIT_REG_TextureTileStatus */ + 0x1, /* gcFEATURE_BIT_REG_DecompressZ16 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes8 */ + 0x1, /* gcFEATURE_BIT_REG_DERotationStallFix */ + 0x0, /* gcFEATURE_BIT_REG_OclOnly */ + 0x1, /* gcFEATURE_BIT_REG_NewFeatures0 */ + 0x1, /* gcFEATURE_BIT_REG_InstructionCache */ + 0x0, /* gcFEATURE_BIT_REG_GeometryShader */ + 0x1, /* gcFEATURE_BIT_REG_TexCompressionSupertiled */ + 0x1, /* gcFEATURE_BIT_REG_Generics */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes9 */ + 0x0, /* gcFEATURE_BIT_REG_FastMSAA */ + 0x0, /* gcFEATURE_BIT_REG_WClip */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes10 */ + 0x1, /* gcFEATURE_BIT_REG_UnifiedSamplers */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes11 */ + 0x1, /* gcFEATURE_BIT_REG_PerformanceCounters */ + 0x1, /* gcFEATURE_BIT_REG_ExtraShaderInstructions2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes12 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes13 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_ACE */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_DEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes14 */ + 0x0, /* gcFEATURE_BIT_REG_PowerOptimizations0 */ + 0x1, /* gcFEATURE_BIT_REG_NewHZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes15 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements1 */ + 0x0, /* gcFEATURE_BIT_REG_DENoGamma */ + 0x0, /* gcFEATURE_BIT_REG_PAEnhancements2 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_PEEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_HIEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_FEEnhancements2 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes16 */ + 0x0, /* gcFEATURE_BIT_REG_DEEnhancements5 */ + 0x1, /* gcFEATURE_BIT_REG_TXEnhancements4 */ + 0x0, /* gcFEATURE_BIT_REG_PEEnhancements4 */ + 0x1, /* gcFEATURE_BIT_REG_MCEnhancements1 */ + 0x1, /* gcFEATURE_BIT_REG_Halti2 */ + 0x0, /* gcFEATURE_BIT_REG_DEMirrorRotate */ + 0x1, /* gcFEATURE_BIT_REG_SmallMSAA */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes17 */ + 0x0, /* gcFEATURE_BIT_REG_Rasterizer2 */ + 0x0, /* gcFEATURE_BIT_REG_DualPipeOPF */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2 */ + 0x0, /* gcFEATURE_BIT_REG_CSCV2 */ + 0x1, /* gcFEATURE_BIT_REG_PAEnhancements3 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes18 */ + 0x0, /* gcFEATURE_BIT_REG_Compression2D */ + 0x0, /* gcFEATURE_BIT_REG_Probe */ + 0x1, /* gcFEATURE_BIT_REG_MediumPrecision */ + 0x0, /* gcFEATURE_BIT_REG_DESupertile */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes19 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements6 */ + 0x1, /* gcFEATURE_BIT_REG_SHEnhancements7 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes20 */ + 0x0, /* gcFEATURE_BIT_REG_DEAddress40 */ + 0x0, /* gcFEATURE_BIT_REG_MiniMMUFix */ + 0x1, /* gcFEATURE_BIT_REG_EEZ */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes21 */ + 0x0, /* gcFEATURE_BIT_REG_ExtraVgCaps */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV15 */ + 0x1, /* gcFEATURE_BIT_REG_BugFixes22 */ + 0x1, /* gcFEATURE_BIT_REG_Halti3 */ + 0x0, /* gcFEATURE_BIT_REG_TessellationShaders */ + 0x0, /* gcFEATURE_BIT_REG_OPF9Tap */ + 0x0, /* gcFEATURE_BIT_REG_MultiSrcV2StrQuad */ + 0x0, /* gcFEATURE_BIT_REG_SeperateSRCAndDstCache */ + 0x1, /* gcFEATURE_BIT_REG_Halti4 */ + 0x1, /* gcFEATURE_BIT_REG_RAWriteDepth */ + 0x0, /* gcFEATURE_BIT_REG_AndroidOnly */ + 0x1, /* gcFEATURE_BIT_REG_HasChipProductReg */ + 0x0, /* gcFEATURE_BIT_REG_TXSupportDEC */ + 0x1, /* gcFEATURE_BIT_REG_S8MSAACompression */ + 0x1, /* gcFEATURE_BIT_REG_BugFixesIn544 */ + 0x0, /* gcFEATURE_BIT_REG_L2CacheRemove */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowRndVtxCnt */ + 0x0, /* gcFEATURE_BIT_REG_CubeMapFL28 */ + 0x1, /* gcFEATURE_BIT_REG_TX6bitFrac */ + 0x1, /* gcFEATURE_BIT_REG_FEAllowStallPrefetchEng */ + 0x0, /* gcFEATURE_BIT_REG_ThirdPartyCompression */ + 0x1, /* gcFEATURE_BIT_REG_RSS8 */ + 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ + 0x1, /* gcFEATURE_BIT_REG_Halti5 */ + 0x1, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_BltEngine */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ + 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ + 0x0, /* gcFEATURE_BIT_REG_DEC */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12 */ + 0x0, /* gcFEATURE_BIT_REG_VSTileNV12_10BIT */ + 0x0, /* gcFEATURE_BIT_REG_DisableVIP */ + 0x0, /* gcFEATURE_BIT_RenderTarget8 */ + 0x0, /* gcFEATURE_BIT_TxLodFlowCorrection */ + 0x0, /* gcFEATURE_BIT_FaceLod */ + 0x0, /* gcFEATURE_BIT_MultiCoreSemaphoreStallV2 */ + 0x1, /* gcFEATURE_BIT_VMSAA */ + 0x0, /* gcFEATURE_BIT_ChipEnableLink */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_1_5_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_MULTI_SRC_BLT_BILINEAR_FILTER */ + 0x1, /* gcFEATURE_BIT_RA_HZEZ_CLOCK_CONTROL */ + 0x1, /* gcFEATURE_BIT_CACHE128B256BPERLINE */ + 0x1, /* gcFEATURE_BIT_V4Compression */ + 0x0, /* gcFEATURE_BIT_PE2D_MAJOR_SUPER_TILE */ + 0x1, /* gcFEATURE_BIT_PE_32BPC_COLORMASK_FIX */ + 0x1, /* gcFEATURE_BIT_ALPHA_BLENDING_OPT */ + 0x1, /* gcFEATURE_BIT_NEW_GPIPE */ + 0x0, /* gcFEATURE_BIT_PIPELINE_32_ATTRIBUTES */ + 0x0, /* gcFEATURE_BIT_MSAA_SHADING */ + 0x0, /* gcFEATURE_BIT_NO_ANISTRO_FILTER */ + 0x1, /* gcFEATURE_BIT_NO_ASTC */ + 0x0, /* gcFEATURE_BIT_NO_DXT */ + 0x0, /* gcFEATURE_BIT_HWTFB */ + 0x1, /* gcFEATURE_BIT_RA_DEPTH_WRITE_MSAA1X_FIX */ + 0x1, /* gcFEATURE_BIT_EZHZ_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_FIX */ + 0x1, /* gcFEATURE_BIT_SH_HALFDEPENDENCY_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MCFILL_FIX */ + 0x1, /* gcFEATURE_BIT_TPG_TCPERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_MDFIFO_OVERFLOW_FIX */ + 0x1, /* gcFEATURE_BIT_SH_TEXLD_BARRIER_IN_CS_FIX */ + 0x1, /* gcFEATURE_BIT_RS_NEW_BASEADDR */ + 0x1, /* gcFEATURE_BIT_PE_8bpp_DUALPIPE_FIX */ + 0x0, /* gcFEATURE_BIT_SH_ADVANCED_INSTR */ + 0x1, /* gcFEATURE_BIT_SH_FLAT_INTERPOLATION_DUAL16_FIX */ + 0x1, /* gcFEATURE_BIT_USC_CONTINUOUS_FLUS_FIX */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_V4 */ + 0x0, /* gcFEATURE_BIT_SH_SUPPORT_ALPHA_KILL */ + 0x1, /* gcFEATURE_BIT_PE_NO_ALPHA_TEST */ + 0x0, /* gcFEATURE_BIT_TX_LOD_NEAREST_SELECT */ + 0x1, /* gcFEATURE_BIT_SH_FIX_LDEXP */ + 0x1, /* gcFEATURE_BIT_SUPPORT_MOVAI */ + 0x1, /* gcFEATURE_BIT_SH_SNAP2PAGE_MAXPAGES_FIX */ + 0x1, /* gcFEATURE_BIT_PE_RGBA16I_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_8bpp_256TILE_FC_FIX */ + 0x1, /* gcFEATURE_BIT_PE_64bit_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_USC_FULL_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_TX_YUV_ASSEMBLER_10BIT */ + 0x1, /* gcFEATURE_BIT_FE_32bit_INDEX_FIX */ + 0x1, /* gcFEATURE_BIT_BLT_64bpp_MASKED_CLEAR_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY */ + 0x1, /* gcFEATURE_BIT_ROBUSTNESS */ + 0x1, /* gcFEATURE_BIT_USC_ATOMIC_FIX */ + 0x1, /* gcFEATURE_BIT_SH_PSO_MSAA1x_FIX */ + 0x1, /* gcFEATURE_BIT_USC_VX_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_USC_GOS_ADDR_FIX */ + 0x1, /* gcFEATURE_BIT_TX_8bit_UVFrac */ + 0x1, /* gcFEATURE_BIT_TX_DESC_CACHE_CLOCKGATE_FIX */ + 0x1, /* gcFEATURE_BIT_RSBLT_MSAA_DECOMPRESSION */ + 0x0, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE */ + 0x1, /* gcFEATURE_BIT_DRAWID */ + 0x1, /* gcFEATURE_BIT_PSIO_SAMPLEMASK_IN_R0ZW_FIX */ + 0x1, /* gcFEATURE_BIT_TX_INTEGER_COORDINATE_V2 */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG */ + 0x0, /* gcFEATURE_BIT_SNAPPAGE_CMD */ + 0x1, /* gcFEATURE_BIT_SH_NO_INDEX_CONST_ON_A0 */ + 0x1, /* gcFEATURE_BIT_SH_NO_ONECONST_LIMIT */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_ON_TEMP */ + 0x1, /* gcFEATURE_BIT_COMPUTE_ONLY */ + 0x1, /* gcFEATURE_BIT_SH_IMG_LDST_CLAMP */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_ALLOC_COUNT_FIX */ + 0x1, /* gcFEATURE_BIT_SH_ICACHE_PREFETCH */ + 0x0, /* gcFEATURE_BIT_PE2D_SEPARATE_CACHE */ + 0x1, /* gcFEATURE_BIT_PE_MSAA_OQ_FIX */ + 0x1, /* gcFEATURE_BIT_PSIO_MSAA_CL_FIX */ + 0x1, /* gcFEATURE_BIT_USC_DEFER_FILL_FIX */ + 0x1, /* gcFEATURE_BIT_SH_CLOCK_GATE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_NEED_DUMMYDRAW */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_OUTPUT */ + 0x0, /* gcFEATURE_BIT_PE2D_LINEAR_YUV420_10BIT */ + 0x0, /* gcFEATURE_BIT_MULTI_CLUSTER */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK */ + 0x0, /* gcFEATURE_BIT_SH_DUAL16_SAMPLEMASK_ZW */ + 0x0, /* gcFEATURE_BIT_TPG_TRIVIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TX_ASTC_MULTISLICE_FIX */ + 0x0, /* gcFEATURE_BIT_FE_ROBUST_FIX */ + 0x0, /* gcFEATURE_BIT_SH_GPIPE_ACCESS_FULLTEMPS */ + 0x0, /* gcFEATURE_BIT_PSIO_INTERLOCK */ + 0x1, /* gcFEATURE_BIT_PA_WIDELINE_FIX */ + 0x0, /* gcFEATURE_BIT_WIDELINE_HELPER_FIX */ + 0x0, /* gcFEATURE_BIT_G2D_3rd_PARTY_COMPRESSION_1_1 */ + 0x0, /* gcFEATURE_BIT_TX_FLUSH_L1CACHE */ + 0x1, /* gcFEATURE_BIT_PE_DITHER_FIX2 */ + 0x0, /* gcFEATURE_BIT_SH_TEXLD_U_FIX */ + 0x0, /* gcFEATURE_BIT_MC_FCCACHE_BYTEMASK */ + 0x0, /* gcFEATURE_BIT_SH_MULTI_WG_PACK_FIX */ + 0x0, /* gcFEATURE_BIT_PE_ADVANCE_BLEND_PART0 */ + 0x0, /* gcFEATURE_BIT_FE_PATCHLIST_FETCH_FIX */ + 0x1, /* gcFEATURE_BIT_RA_CG_FIX */ + 0x0, /* gcFEATURE_BIT_DEC400 */ + 0x0, /* gcFEATURE_BIT_LS_SUPPORT_PERCOMP_DEPENDENCY */ + 0x0, /* gcFEATURE_BIT_MULTI_CORE_BLOCK_SET_CONFIG2 */ + 0x0, /* gcFEATURE_BIT_PE_VMSAA_COVERAGE_CACHE_FIX */ + 0x1, /* gcFEATURE_BIT_SECURITY_AHB */ + 0x0, /* gcFEATURE_BIT_MULTICORE_SEMAPHORESTALL_V3 */ + 0x0, /* gcFEATURE_BIT_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_SH_CMPLX */ + 0x0, /* gcFEATURE_BIT_SH_IDIV0_SWZL_EHS */ + 0x0, /* gcFEATURE_BIT_TX_LERP_LESS_BIT */ + 0x0, /* gcFEATURE_BIT_SH_GM_ENDIAN */ + 0x0, /* gcFEATURE_BIT_SH_GM_USC_UNALLOC */ + 0x0, /* gcFEATURE_BIT_SH_END_OF_BB */ + 0x0, /* gcFEATURE_BIT_TX_BORDER_CLAMP_FIX */ + 0x0, /* gcFEATURE_BIT_SH_IMG_LD_LASTPIXEL_FIX */ + 0x0, /* gcFEATURE_BIT_ASYNC_BLT */ + 0x0, /* gcFEATURE_BIT_ASYNC_FE_FENCE_FIX */ + 0x1, /* gcFEATURE_BIT_PSCS_THROTTLE */ + 0x0, /* gcFEATURE_BIT_SEPARATE_LS */ + 0x0, /* gcFEATURE_BIT_WIDELINE_TRIANGLE_EMU */ + 0x0, /* gcFEATURE_BIT_FENCE_32BIT */ + 0x0, /* gcFEATURE_BIT_FENCE_64BIT */ + 0x0, /* gcFEATURE_BIT_PE_DEPTH_ONLY_OQFIX */ + 0x0, /* gcFEATURE_BIT_TX_SEAMLESS_CUBE */ + 0x0, /* gcFEATURE_BIT_TX_SNORM_SUPPORT */ + 0x0, /* gcFEATURE_BIT_SH_SCATTER_GATHER */ + 0x0, /* gcFEATURE_BIT_HWMANAGED_LS */ + 0x0, /* gcFEATURE_BIT_SH_IMAGE_ENABLE_FIX */ + 0x1, /* gcFEATURE_BIT_MSAA_FRAGMENT_OPERATION */ + 0x0, /* gcFEATURE_BIT_PE_TILE_CACHE_FLUSH_FIX */ + 0x0, /* gcFEATURE_BIT_BLT_YUV_OUTPUT */ + 0x1, /* gcFEATURE_BIT_SH_IO_CG_FIX */ + 0x0, /* gcFEATURE_BIT_PE_SWIZZLE */ + 0x0, /* gcFEATURE_BIT_SH_ROBUSTNESS_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ATOMIC_FIX2 */ + 0x0, /* gcFEATURE_BIT_PE_A8B8G8R8 */ + 0x0, /* gcFEATURE_BIT_MULTIVIEW_RENDER */ + 0x0, /* gcFEATURE_BIT_FE_DRAW_DIRECT */ + 0x0, /* gcFEATURE_BIT_TX_VKBORDER_MODE */ + 0x0, /* gcFEATURE_BIT_TX_UNNORMALIZED_COORD */ + 0x0, /* gcFEATURE_BIT_PA_LINECLIP_FIX */ + 0x0, /* gcFEATURE_BIT_TX_8bit_UVFrac_ROUNDING_FIX */ + 0x0, /* gcFEATURE_BIT_MP_ARCH */ + 0x0, /* gcFEATURE_BIT_TX_NO_FIXED_FILTER */ + 0x0, /* gcFEATURE_BIT_SHARE_Z */ + 0x0, /* gcFEATURE_BIT_DE_2D_FAST_CLEAR */ + 0x0, /* gcFEATURE_BIT_TX_CLEAR_PENDING_FIX */ + 0x0, /* gcFEATURE_BIT_NO_HI1_L2 */ + 0x0, /* gcFEATURE_BIT_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_FORMAT_10BIT_CROSS_4K */ + 0x0, /* gcFEATURE_BIT_FORMAT_P010LSB_I010 */ + 0x0, /* gcFEATURE_BIT_ENDIAN_CONTROL */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400EX */ + 0x0, /* gcFEATURE_BIT_SH_VX2_FLOATING_MAD_FIX */ + 0x0, /* gcFEATURE_BIT_TS_FC_VULKAN_SUPPORT */ + 0x0, /* gcFEATURE_BIT_MSAA_FLOAT_64BIT */ + 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ + 0x0, /* gcFEATURE_BIT_VG_FP25 */ + 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ + 0x0, /* gcFEATURE_BIT_VG_DOUBLE_IMAGE */ + 0x0, /* gcFEATURE_BIT_VG_RECTANGLE_STRIPE_MODE */ + 0x0, /* gcFEATURE_BIT_VG_MMU */ + 0x0, /* gcFEATURE_BIT_VG_IM_FILTER */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_IM_YUV_PLANAR */ + 0x0, /* gcFEATURE_BIT_VG_PE_YUV_PACKET */ + 0x0, /* gcFEATURE_BIT_VG_COLOR_PRECISION_8_BIT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLVE_ENGINE */ + 0x0, /* gcFEATURE_BIT_VG_PE_COLOR_KEY */ + 0x0, /* gcFEATURE_BIT_VG_IM_INDEX_FORMAT */ + 0x0, /* gcFEATURE_BIT_VG_RESOLUTION_8K */ + 0x0, /* gcFEATURE_BIT_VG_IMAGE_16K */ + 0x0, /* gcFEATURE_BIT_VG_FORMAT_ARGB2222 */ + 0x0, /* gcFEATURE_BIT_G2D_DEC400 */ + 0x0, /* gcFEATURE_BIT_DC_OVERLAY_SCALING */ + 0x0, /* gcFEATURE_BIT_DC_SOURCE_ROTATION */ + 0x0, /* gcFEATURE_BIT_DC_TILED */ + 0x0, /* gcFEATURE_BIT_DC_YUV_L1 */ + 0x0, /* gcFEATURE_BIT_DC_D30_OUTPUT */ + 0x0, /* gcFEATURE_BIT_DC_MMU */ + 0x0, /* gcFEATURE_BIT_DC_COMPRESSION */ + 0x0, /* gcFEATURE_BIT_DC_QOS */ + 0x0, /* gcFEATURE_BIT_AI_GPU */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_DP32 */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_FILTER */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_IADD */ + 0x0, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ + 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ + 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ + 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x1, /* gcFEATURE_BIT_NN_FLOAT */ + 0x1, /* gcFEATURE_BIT_TP_ENGINE */ + 0x1, /* gcFEATURE_BIT_VIP_V7 */ + 0x0, /* gcFEATURE_BIT_MCFE */ + 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER */ + 0x1, /* gcFEATURE_BIT_TP_LRN */ + 0x1, /* gcFEATURE_BIT_TP_MAX_POOLING_STRIDE1 */ + 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ + 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ + 0x1, /* gcFEATURE_BIT_TP_ROI_POOLING */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3 */ + 0x0, /* gcFEATURE_BIT_NN_ZDP6 */ + 0x0, /* gcFEATURE_BIT_NN_XYDP9 */ + 0x1, /* gcFEATURE_BIT_NN_INT8_SCALE */ + 0x1, /* gcFEATURE_BIT_NN_POWER_ISOLATION */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TF_QUANTIZATION */ + 0x0, /* gcFEATURE_BIT_TP_SIMPLE_INT16 */ + 0x1, /* gcFEATURE_BIT_TP_REAL_INT16 */ + 0x0, /* gcFEATURE_BIT_TP_BFLOAT16 */ + 0x1, /* gcFEATURE_BIT_NN_FIRST_PIXEL_POOLING */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE2 */ + 0x1, /* gcFEATURE_BIT_NN_STRIDE_SUPPORT */ + 0x1, /* gcFEATURE_BIT_NN_XYDP6 */ + 0x1, /* gcFEATURE_BIT_TP_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONV1x1_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_NN_CACHELINE_MODE_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_NN_PER3DTILE_BUBBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_CONVOUT_FIFO_DEPTH_FIX */ + 0x1, /* gcFEATURE_BIT_SWTILING_PHASE3 */ + 0x0, /* gcFEATURE_BIT_USC_STAY_LRU */ + 0x0, /* gcFEATURE_BIT_NN_NONZERO_MIRROR_BORDER */ + 0x0, /* gcFEATURE_BIT_NN_COEF_DECOMPRESS_PERF2X */ + 0x0, /* gcFEATURE_BIT_INPUT_4BIT */ + 0x1, /* gcFEATURE_BIT_COEF_COMPRESSION_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ZDP3_NO_COMPRESS_FIX */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_PERF_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_COUNTER */ + 0x0, /* gcFEATURE_BIT_NN_XYDP0 */ + 0x1, /* gcFEATURE_BIT_ZRL_7BIT */ + 0x1, /* gcFEATURE_BIT_NN_ASYNC_COPY_MERGE_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SMALLBATCH_PHASE1 */ + 0x1, /* gcFEATURE_BIT_TP_SMALLBATCH_PHASE1 */ + 0x0, /* gcFEATURE_BIT_SCALER */ + 0x0, /* gcFEATURE_BIT_SCALER_4K */ + 0x0, /* gcFEATURE_BIT_NN_REQ_SLOWARBITRATION_FIX */ + 0x0, /* gcFEATURE_BIT_IMAGE_PARTIAL_CACHE */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNELHEAD_FIX */ + 0x1, /* gcFEATURE_BIT_NN_SINGLEPORT_ACCUMBUFFER */ + 0x0, /* gcFEATURE_BIT_NN_SMALLBATCH */ + 0x0, /* gcFEATURE_BIT_TP_SMALLBATCH */ + 0x1, /* gcFEATURE_BIT_ZRL_8BIT */ + 0x0, /* gcFEATURE_BIT_NN_DEPTHWISE_SUPPORT */ + 0x0, /* gcFEATURE_BIT_NN_WRITE_WITHOUT_USC */ + 0x0, /* gcFEATURE_BIT_NN_ZDP_INIMAGE_SIZE_FIX */ + 0x1, /* gcFEATURE_BIT_HI_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX */ + 0x0, /* gcFEATURE_BIT_TP_COEF_COMPRESSION_ENHANCEMENT */ + 0x0, /* gcFEATURE_BIT_VIP_DEC400 */ + 0x0, /* gcFEATURE_BIT_IMAGE_NOT_PACKED_IN_SRAM_FIX */ + 0x0, /* gcFEATURE_BIT_IDLE_BEFORE_FLUSH_COMPLETE_FIX */ + 0x1, /* gcFEATURE_BIT_NO_FLUSH_USC_FIX */ + 0x0, /* gcFEATURE_BIT_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX */ + 0x0, /* gcFEATURE_BIT_XY_OFFSET_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_USC_INVALIDATE_CACHE_LINE_FIX */ + 0x0, /* gcFEATURE_BIT_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX */ + 0x0, /* gcFEATURE_BIT_USC_BOTTLENECK_FIX */ + 0x0, /* gcFEATURE_BIT_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_FULLCACHE_KERNEL_INTERLEAVE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_REORDER_LAYER_SUSPEND_FIX */ + 0x1, /* gcFEATURE_BIT_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX */ + 0x1, /* gcFEATURE_BIT_IMG_POP_PIPELINE_PAUSE_FIX */ + 0x1, /* gcFEATURE_BIT_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX */ + 0x1, /* gcFEATURE_BIT_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX */ + 0x1, /* gcFEATURE_BIT_SMALL_BATCH_FLOPS_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_SMALL_BATCH_DISBLE_FIX */ + 0x1, /* gcFEATURE_BIT_NEGATIVE_POST_SHIFT_FIX */ + 0x0, /* gcFEATURE_BIT_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX */ + 0x1, /* gcFEATURE_BIT_OCB_REMAP_PHYSICAL_ADDRESS */ + 0x0, /* gcFEATURE_BIT_NN_NO_Z_LOCATION_OFFSET */ + 0x0, /* gcFEATURE_BIT_NN_LEAKY_RELU */ + 0x0, /* gcFEATURE_BIT_NN_PRELU */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT */ + 0x0, /* gcFEATURE_BIT_NN_PER_CHANNEL_QUANT_ASYM */ + 0x0, /* gcFEATURE_BIT_NN_NATIVE_STRIDE_TWO */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT_POST_MULT */ 0x0, /* gcFEATURE_BIT_NN_SLICE_PADDING_TO_64BYTE_ALIGN */ 0x0, /* gcFEATURE_BIT_NN_DW_1x1_CONV_MERGE */ 0x0, /* gcFEATURE_BIT_NN_SLOW_OUTPUT */ - 0x0, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ + 0x1, /* gcFEATURE_BIT_NO_NARROW_POST_PROCESS_PIPE */ 0x0, /* gcFEATURE_BIT_TP_NN_PROBE */ 0x0, /* gcFEATURE_BIT_TP_23BITS_POST_MULTIPLIER */ 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE */ + 0x0, /* gcFEATURE_BIT_EVIS2_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_USC_ASYNC_CP_RTN_FLOP_RESET_FIX */ + 0x0, /* gcFEATURE_BIT_DDR_BURST_LEN_256B */ + 0x0, /* gcFEATURE_BIT_IMG_CAHCE_MODE_MUST_0_IN_IMG_DIRECT_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_USE_SINGLE_PORT_VIPSRAM */ + 0x0, /* gcFEATURE_BIT_NN_ASYMMETRIC_INT8 */ + 0x1, /* gcFEATURE_BIT_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX */ + 0x0, /* gcFEATURE_BIT_PRELU_LEAKLY_RELU_CLAMP */ + 0x0, /* gcFEATURE_BIT_TP_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_FLOAT32_IO */ + 0x0, /* gcFEATURE_BIT_NN_SMALL_BATCH_PHASE2 */ + 0x0, /* gcFEATURE_BIT_TILE_ACCESS_CAPABILITY */ + 0x0, /* gcFEATURE_BIT_FAST_DP3_PREPROCESSOR */ + 0x0, /* gcFEATURE_BIT_NN_COMPRESSION_BYPASSS */ + 0x0, /* gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX */ + 0x0, /* gcFEATURE_BIT_TP_3_USC */ + 0x0, /* gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN */ + 0x0, /* gcFEATURE_BIT_TPLITE_BFLOAT16 */ + 0x0, /* gcFEATURE_BIT_PREPROCESS_IMG_BUF_640BYTE_LIMIT */ + 0x0, /* gcFEATURE_BIT_V8_ACCUMLATION_READ_OUT_HAS_BUBBLES_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_V8_SINGLE_PORT_ACCUMULATION_BUFFER_RW_CONFICT_ZERO_SKIP_PERF_FIX */ + 0x0, /* gcFEATURE_BIT_BURST_COLLECT_DUMMY_DATA_WASTE_CYCLES_FIX */ + 0x1, /* gcFEATURE_BIT_INIMG_NOT_64BYTE_ALIGN_CACHELINE_MODE_FIX */ + 0x0, /* gcFEATURE_BIT_TP_ACCESS_VIPSRAM_OT_IS_ONE_FIX */ + 0x1, /* gcFEATURE_BIT_VIP_HW_FINAL_RELEASE */ }, }; diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal.h b/drivers/amlogic/npu/kernel/inc/gc_hal.h index 00c806bc378714..231a80d55fcb7c 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -56,11 +56,11 @@ #ifndef __gc_hal_h_ #define __gc_hal_h_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_enum.h" #include "gc_hal_base.h" #include "gc_hal_profiler.h" -#include "gc_hal_driver.h" +#include "shared/gc_hal_driver.h" #if gcdENABLE_3D #include "gc_hal_statistics.h" #endif @@ -157,73 +157,8 @@ extern "C" { #define gcmGET_POST_ROTATION(rotate) \ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)) -/******************************************************************************\ -******************************** gcsOBJECT Object ******************************* -\******************************************************************************/ - -/* Type of objects. */ -typedef enum _gceOBJECT_TYPE -{ - gcvOBJ_UNKNOWN = 0, - gcvOBJ_2D = gcmCC('2','D',' ',' '), - gcvOBJ_3D = gcmCC('3','D',' ',' '), - gcvOBJ_ATTRIBUTE = gcmCC('A','T','T','R'), - gcvOBJ_BRUSHCACHE = gcmCC('B','R','U','$'), - gcvOBJ_BRUSHNODE = gcmCC('B','R','U','n'), - gcvOBJ_BRUSH = gcmCC('B','R','U','o'), - gcvOBJ_BUFFER = gcmCC('B','U','F','R'), - gcvOBJ_COMMAND = gcmCC('C','M','D',' '), - gcvOBJ_COMMANDBUFFER = gcmCC('C','M','D','B'), - gcvOBJ_CONTEXT = gcmCC('C','T','X','T'), - gcvOBJ_DEVICE = gcmCC('D','E','V',' '), - gcvOBJ_DUMP = gcmCC('D','U','M','P'), - gcvOBJ_EVENT = gcmCC('E','V','N','T'), - gcvOBJ_FUNCTION = gcmCC('F','U','N','C'), - gcvOBJ_HAL = gcmCC('H','A','L',' '), - gcvOBJ_HARDWARE = gcmCC('H','A','R','D'), - gcvOBJ_HEAP = gcmCC('H','E','A','P'), - gcvOBJ_INDEX = gcmCC('I','N','D','X'), - gcvOBJ_INTERRUPT = gcmCC('I','N','T','R'), - gcvOBJ_KERNEL = gcmCC('K','E','R','N'), - gcvOBJ_KERNEL_FUNCTION = gcmCC('K','F','C','N'), - gcvOBJ_MEMORYBUFFER = gcmCC('M','E','M','B'), - gcvOBJ_MMU = gcmCC('M','M','U',' '), - gcvOBJ_OS = gcmCC('O','S',' ',' '), - gcvOBJ_OUTPUT = gcmCC('O','U','T','P'), - gcvOBJ_PAINT = gcmCC('P','N','T',' '), - gcvOBJ_PATH = gcmCC('P','A','T','H'), - gcvOBJ_QUEUE = gcmCC('Q','U','E',' '), - gcvOBJ_SAMPLER = gcmCC('S','A','M','P'), - gcvOBJ_SHADER = gcmCC('S','H','D','R'), - gcvOBJ_VIR_SHADER = gcmCC('V','S','D','R'), - gcvOBJ_STREAM = gcmCC('S','T','R','M'), - gcvOBJ_SURF = gcmCC('S','U','R','F'), - gcvOBJ_TEXTURE = gcmCC('T','X','T','R'), - gcvOBJ_UNIFORM = gcmCC('U','N','I','F'), - gcvOBJ_VARIABLE = gcmCC('V','A','R','I'), - gcvOBJ_VERTEX = gcmCC('V','R','T','X'), - gcvOBJ_VIDMEM = gcmCC('V','M','E','M'), - gcvOBJ_VIDMEM_BLOCK = gcmCC('V','M','B','K'), - gcvOBJ_VG = gcmCC('V','G',' ',' '), - gcvOBJ_BUFOBJ = gcmCC('B','U','F','O'), - gcvOBJ_UNIFORM_BLOCK = gcmCC('U','B','L','K'), - gcvOBJ_CL = gcmCC('C','L',' ',' '), - gcvOBJ_STORAGE_BLOCK = gcmCC('S','B','L','K'), - gcvOBJ_IO_BLOCK = gcmCC('I','O','B','K'), -} -gceOBJECT_TYPE; - -/* gcsOBJECT object defintinon. */ -typedef struct _gcsOBJECT -{ - /* Type of an object. */ - gceOBJECT_TYPE type; -} -gcsOBJECT; - typedef struct _gckHARDWARE * gckHARDWARE; - #define gcdMAX_GPU_COUNT gcvCORE_COUNT #define gcdMAX_SURF_LAYERS 4 @@ -231,6 +166,10 @@ typedef struct _gckHARDWARE * gckHARDWARE; #define gcdMAX_DRAW_BUFFERS 16 #define gcdMAX_3DGPU_COUNT 8 + +#define gcdMAX_MAJOR_CORE_COUNT 8 + +#define gcdMAX_VERTEX_STREAM_COUNT 4 /******************************************************************************* ** ** gcmVERIFY_OBJECT @@ -1349,35 +1288,6 @@ gckOS_SetDebugFile( IN gctCONST_STRING FileName ); -/******************************************************************************* -** Broadcast interface. -*/ - -typedef enum _gceBROADCAST -{ - /* GPU might be idle. */ - gcvBROADCAST_GPU_IDLE, - - /* A commit is going to happen. */ - gcvBROADCAST_GPU_COMMIT, - - /* GPU seems to be stuck. */ - gcvBROADCAST_GPU_STUCK, - - /* First process gets attached. */ - gcvBROADCAST_FIRST_PROCESS, - - /* Last process gets detached. */ - gcvBROADCAST_LAST_PROCESS, - - /* AXI bus error. */ - gcvBROADCAST_AXI_BUS_ERROR, - - /* Out of memory. */ - gcvBROADCAST_OUT_OF_MEMORY, -} -gceBROADCAST; - gceSTATUS gckOS_Broadcast( IN gckOS Os, @@ -1602,42 +1512,6 @@ typedef struct _gcsDEVICE * gckDEVICE; struct _gcsHAL_INTERFACE; -/* Notifications. */ -typedef enum _gceNOTIFY -{ - gcvNOTIFY_INTERRUPT, - gcvNOTIFY_COMMAND_QUEUE, -} -gceNOTIFY; - -/* Flush flags. */ -typedef enum _gceKERNEL_FLUSH -{ - gcvFLUSH_COLOR = 0x01, - gcvFLUSH_DEPTH = 0x02, - gcvFLUSH_TEXTURE = 0x04, - gcvFLUSH_2D = 0x08, - gcvFLUSH_L2 = 0x10, - gcvFLUSH_TILE_STATUS = 0x20, - gcvFLUSH_ICACHE = 0x40, - gcvFLUSH_TXDESC = 0x80, - gcvFLUSH_FENCE = 0x100, - gcvFLUSH_VERTEX = 0x200, - gcvFLUSH_TFBHEADER = 0x400, - gcvFLUSH_ALL = gcvFLUSH_COLOR - | gcvFLUSH_DEPTH - | gcvFLUSH_TEXTURE - | gcvFLUSH_2D - | gcvFLUSH_L2 - | gcvFLUSH_TILE_STATUS - | gcvFLUSH_ICACHE - | gcvFLUSH_TXDESC - | gcvFLUSH_FENCE - | gcvFLUSH_VERTEX - | gcvFLUSH_TFBHEADER -} -gceKERNEL_FLUSH; - /* Construct a new gckKERNEL object. */ gceSTATUS gckKERNEL_Construct( @@ -1693,21 +1567,22 @@ gckKERNEL_MapVideoMemory( IN gckKERNEL Kernel, IN gctBOOL InUserSpace, IN gcePOOL Pool, + IN gctPHYS_ADDR Physical, IN gctUINT32 Offset, IN gctUINT32 Bytes, OUT gctPOINTER * Logical ); -#ifdef __QNXNTO__ /* Unmap dedicated video memory. */ gceSTATUS gckKERNEL_UnmapVideoMemory( IN gckKERNEL Kernel, + IN gcePOOL Pool, + IN gctPHYS_ADDR Physical, IN gctPOINTER Logical, IN gctUINT32 Pid, - IN gctUINT32 Bytes + IN gctSIZE_T Bytes ); -#endif /* Map memory. */ gceSTATUS @@ -1727,6 +1602,12 @@ gckKERNEL_UnmapMemory( IN gctPOINTER Logical, IN gctUINT32 ProcessID ); +/* Destroy reserved mem when destroy process*/ +gceSTATUS +gckKERNEL_DestroyProcessReservedUserMap( + IN gckKERNEL Kernel, + IN gctUINT32 Pid + ); /* Notification of events. */ gceSTATUS @@ -1990,6 +1871,14 @@ gckHARDWARE_ReadInterrupt( OUT gctUINT32_PTR IDs ); +/* +* State timer helper. +*/ +gceSTATUS +gckHARDWARE_StartTimerReset( + IN gckHARDWARE Hardware + ); + /* Power management. */ gceSTATUS gckHARDWARE_SetPowerState( @@ -2019,7 +1908,8 @@ gckHARDWARE_SetGpuProfiler( gceSTATUS gckHARDWARE_SetFscaleValue( IN gckHARDWARE Hardware, - IN gctUINT32 FscaleValue + IN gctUINT32 FscaleValue, + IN gctUINT32 ShaderFscaleValue ); gceSTATUS diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_base.h b/drivers/amlogic/npu/kernel/inc/gc_hal_base.h index 9c0c6986cb9762..863adb6243de62 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_base.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_base.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -57,8 +57,9 @@ #define __gc_hal_base_h_ #include "gc_hal_enum.h" -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_debug_zones.h" +#include "shared/gc_hal_base.h" #ifdef __cplusplus @@ -97,14 +98,6 @@ typedef void * gcoVG; typedef struct _gcoFENCE * gcoFENCE; typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR; -typedef enum { - gcvFENCE_TYPE_READ = 0x1, - gcvFENCE_TYPE_WRITE = 0x2, - gcvFENCE_TYPE_ALL = gcvFENCE_TYPE_READ | gcvFENCE_TYPE_WRITE, - gcvFNECE_TYPE_INVALID = 0x10000, -} -gceFENCE_TYPE; - typedef struct _gcsUSER_MEMORY_DESC * gcsUSER_MEMORY_DESC_PTR; /* Immuatable features from database */ @@ -136,8 +129,14 @@ typedef struct _gcsNN_FIXED_FEATURE gctUINT uscBanks; gctUINT nnLanesPerOutCycle; gctUINT maxOTNumber; + gctUINT physicalVipSramWidthInByte; gctUINT equivalentVipsramWidthInByte; gctUINT shaderCoreCount; + gctUINT latencyHidingAtFullAxiBw; + gctUINT axiBusWidth; + gctUINT nnMaxKXSize; + gctUINT nnMaxKYSize; + gctUINT nnMaxKZSize; } gcsNN_FIXED_FEATURE; /* Features can be customized from outside */ @@ -145,6 +144,9 @@ typedef struct _gcsNN_CUSTOMIZED_FEATURE { gctUINT vipSRAMSize; gctUINT axiSRAMSize; + gctUINT vipSRAMRemapStartAddr; + gctUINT axiSRAMRemapStartAddr; + gctUINT axiSRAMRemapEndAddr; gctFLOAT ddrReadBWLimit; gctFLOAT ddrWriteBWLimit; gctFLOAT ddrTotalBWLimit; @@ -162,6 +164,7 @@ typedef struct _gcsNN_CUSTOMIZED_FEATURE gctUINT nnWriteWithoutUSC; gctUINT depthWiseSupport; gctUINT vipVectorPrune; + gctUINT ddrKernelBurstSize; } gcsNN_CUSTOMIZED_FEATURE; /* Features are unified (hardcoded) for hardwares */ @@ -269,6 +272,7 @@ gcsSystemInfo; gcvNULL, /* VX context lock */ \ gcvPATCH_NOTINIT,/* global patchID */ \ gcvNULL, /* global fenceID*/ \ + gcvNULL, /* mainThreadHandle */ \ gcvFALSE, /* memory profile flag */ \ gcvNULL, /* profileLock; */ \ 0, /* allocCount; */ \ @@ -297,24 +301,12 @@ typedef struct _gcsDRIVER_TLS } gcsDRIVER_TLS; -typedef enum _gceTLS_KEY -{ - gcvTLS_KEY_EGL, - gcvTLS_KEY_OPENGL_ES, - gcvTLS_KEY_OPENVG, - gcvTLS_KEY_OPENGL, - gcvTLS_KEY_OPENCL, - gcvTLS_KEY_OPENVX, - - gcvTLS_KEY_COUNT -} -gceTLS_KEY; - typedef struct _gcsTLS * gcsTLS_PTR; typedef struct _gcsTLS { gceHARDWARE_TYPE currentType; + gceHARDWARE_TYPE targetType; /* To which core device control is called, * it is index in a hardware type. @@ -347,139 +339,6 @@ typedef struct _gcsTLS } gcsTLS; -/******************************************************************************\ -********************************* Enumerations ********************************* -\******************************************************************************/ - -typedef enum _gcePLS_VALUE -{ - gcePLS_VALUE_EGL_DISPLAY_INFO, - gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO, - gcePLS_VALUE_EGL_DESTRUCTOR_INFO, -} -gcePLS_VALUE; - -/* Video memory pool type. */ -typedef enum _gcePOOL -{ - gcvPOOL_UNKNOWN = 0, - gcvPOOL_DEFAULT, - gcvPOOL_LOCAL, - gcvPOOL_LOCAL_INTERNAL, - gcvPOOL_LOCAL_EXTERNAL, - gcvPOOL_UNIFIED, - gcvPOOL_SYSTEM, - gcvPOOL_SRAM, - gcvPOOL_VIRTUAL, - gcvPOOL_USER, - gcvPOOL_INTERNAL_SRAM, - gcvPOOL_EXTERNAL_SRAM, - - gcvPOOL_NUMBER_OF_POOLS -} -gcePOOL; - -#if gcdENABLE_3D -/* Blending functions. */ -typedef enum _gceBLEND_FUNCTION -{ - gcvBLEND_ZERO, - gcvBLEND_ONE, - gcvBLEND_SOURCE_COLOR, - gcvBLEND_INV_SOURCE_COLOR, - gcvBLEND_SOURCE_ALPHA, - gcvBLEND_INV_SOURCE_ALPHA, - gcvBLEND_TARGET_COLOR, - gcvBLEND_INV_TARGET_COLOR, - gcvBLEND_TARGET_ALPHA, - gcvBLEND_INV_TARGET_ALPHA, - gcvBLEND_SOURCE_ALPHA_SATURATE, - gcvBLEND_CONST_COLOR, - gcvBLEND_INV_CONST_COLOR, - gcvBLEND_CONST_ALPHA, - gcvBLEND_INV_CONST_ALPHA, -} -gceBLEND_FUNCTION; - -/* Blending modes. */ -typedef enum _gceBLEND_MODE -{ - gcvBLEND_ADD = 0, - gcvBLEND_SUBTRACT, - gcvBLEND_REVERSE_SUBTRACT, - gcvBLEND_MIN, - gcvBLEND_MAX, - gcvBLEND_MULTIPLY, - gcvBLEND_SCREEN, - gcvBLEND_OVERLAY, - gcvBLEND_DARKEN, - gcvBLEND_LIGHTEN, - gcvBLEND_COLORDODGE, - gcvBLEND_COLORBURN, - gcvBLEND_HARDLIGHT, - gcvBLEND_SOFTLIGHT, - gcvBLEND_DIFFERENCE, - gcvBLEND_EXCLUSION, - gcvBLEND_HSL_HUE, - gcvBLEND_HSL_SATURATION, - gcvBLEND_HSL_COLOR, - gcvBLEND_HSL_LUMINOSITY, - - gcvBLEND_TOTAL -} -gceBLEND_MODE; - -/* Depth modes. */ -typedef enum _gceDEPTH_MODE -{ - gcvDEPTH_NONE, - gcvDEPTH_Z, - gcvDEPTH_W, -} -gceDEPTH_MODE; -#endif /* gcdENABLE_3D */ - - -/* API flags. */ -typedef enum _gceAPI -{ - gcvAPI_D3D = 1, - gcvAPI_OPENGL_ES11, - gcvAPI_OPENGL_ES20, - gcvAPI_OPENGL_ES30, - gcvAPI_OPENGL_ES31, - gcvAPI_OPENGL_ES32, - gcvAPI_OPENGL, - gcvAPI_OPENVG, - gcvAPI_OPENCL, - gcvAPI_OPENVK, -} -gceAPI; - -typedef enum _gceWHERE -{ - gcvWHERE_COMMAND_PREFETCH = 0, - gcvWHERE_COMMAND, - gcvWHERE_RASTER, - gcvWHERE_PIXEL, - gcvWHERE_BLT, -} -gceWHERE; - -typedef enum _gceHOW -{ - gcvHOW_SEMAPHORE = 0x1, - gcvHOW_STALL = 0x2, - gcvHOW_SEMAPHORE_STALL = 0x3, -} -gceHOW; - -typedef enum _gceSignalHandlerType -{ - gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1, -} -gceSignalHandlerType; - typedef struct _gcsSURF_VIEW { gcoSURF surf; @@ -517,20 +376,6 @@ typedef struct _gcsHAL_CHIPIDENTITY } gcsHAL_CHIPIDENTITY; - -#define gcdEXTERNAL_MEMORY_NAME_MAX 32 -#define gcdEXTERNAL_MEMORY_DATA_MAX 8 - -typedef struct _gcsEXTERNAL_MEMORY_INFO -{ - /* Name of allocator used to attach this memory. */ - gctCHAR allocatorName[gcdEXTERNAL_MEMORY_NAME_MAX]; - - /* User defined data which will be passed to allocator. */ - gctUINT32 userData[gcdEXTERNAL_MEMORY_DATA_MAX]; -} -gcsEXTERNAL_MEMORY_INFO; - /******************************************************************************\ ********************************* gcoHAL Object ********************************* \******************************************************************************/ @@ -619,7 +464,10 @@ gcoHAL_GetProductName( gceSTATUS gcoHAL_SetFscaleValue( - IN gctUINT FscaleValue + IN gcoHAL Hal, + IN gctUINT CoreIndex, + IN gctUINT FscaleValue, + IN gctUINT ShaderFscaleValue ); gceSTATUS @@ -982,6 +830,24 @@ gcoHAL_GetCurrentCoreIndex( OUT gctUINT32 *Core ); +gceSTATUS +gcoHAL_ConvertCoreIndexGlobal( + IN gcoHAL Hal, + IN gceHARDWARE_TYPE Type, + IN gctUINT32 CoreCount, + IN gctUINT32 *LocalCoreIndexs, + OUT gctUINT32 *GlobalCoreIndexs + ); + +gceSTATUS +gcoHAL_ConvertCoreIndexLocal( + IN gcoHAL Hal, + IN gceHARDWARE_TYPE Type, + IN gctUINT32 CoreCount, + IN gctUINT32 *GlobalCoreIndexs, + OUT gctUINT32 *LocalCoreIndexs + ); + gceSTATUS gcoHAL_SelectChannel( IN gcoHAL Hal, @@ -1076,6 +942,14 @@ gcoHAL_UnlockVideoMemory( IN gceENGINE engine ); +gceSTATUS +gcoHAL_UnlockVideoMemoryEX( + IN gctUINT32 Node, + IN gceVIDMEM_TYPE Type, + IN gceENGINE Engine, + IN gctBOOL Sync + ); + gceSTATUS gcoHAL_ReleaseVideoMemory( IN gctUINT32 Node @@ -1331,17 +1205,6 @@ gcoOS_DeviceControl( #define gcdMAX_PATH 512 -typedef enum _gceFILE_MODE -{ - gcvFILE_CREATE = 0, - gcvFILE_APPEND, - gcvFILE_READ, - gcvFILE_CREATETEXT, - gcvFILE_APPENDTEXT, - gcvFILE_READTEXT, -} -gceFILE_MODE; - /* Open a file. */ gceSTATUS gcoOS_Open( @@ -1514,14 +1377,6 @@ gcoOS_Stat( OUT gctPOINTER Buffer ); -typedef enum _gceFILE_WHENCE -{ - gcvFILE_SEEK_SET, - gcvFILE_SEEK_CUR, - gcvFILE_SEEK_END -} -gceFILE_WHENCE; - /* Set the current position of a file. */ gceSTATUS gcoOS_Seek( @@ -2222,48 +2077,6 @@ typedef struct _gcsPIXEL /*----------------------------------------------------------------------------*/ /*------------------------------- gcoSURF Common ------------------------------*/ -/* Color format classes. */ -typedef enum _gceFORMAT_CLASS -{ - gcvFORMAT_CLASS_RGBA = 4500, - gcvFORMAT_CLASS_YUV, - gcvFORMAT_CLASS_INDEX, - gcvFORMAT_CLASS_LUMINANCE, - gcvFORMAT_CLASS_BUMP, - gcvFORMAT_CLASS_DEPTH, - gcvFORMAT_CLASS_ASTC, - gcvFORMAT_CLASS_COMPRESSED, - gcvFORMAT_CLASS_OTHER -} -gceFORMAT_CLASS; - -/* Color format data type */ -typedef enum _gceFORMAT_DATATYPE -{ - gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED, - gcvFORMAT_DATATYPE_SIGNED_NORMALIZED, - gcvFORMAT_DATATYPE_UNSIGNED_INTEGER, - gcvFORMAT_DATATYPE_SIGNED_INTEGER, - gcvFORMAT_DATATYPE_FLOAT16, - gcvFORMAT_DATATYPE_FLOAT32, - gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9, - gcvFORMAT_DATATYPE_FLOAT_B10G11R11F, - gcvFORMAT_DATATYPE_INDEX, - gcvFORMAT_DATATYPE_SRGB, - gcvFORMAT_DATATYPE_FLOAT32_UINT, -} -gceFORMAT_DATATYPE; - -/* Special enums for width field in gcsFORMAT_COMPONENT. */ -typedef enum _gceCOMPONENT_CONTROL -{ - gcvCOMPONENT_NOTPRESENT = 0x00, - gcvCOMPONENT_DONTCARE = 0x80, - gcvCOMPONENT_WIDTHMASK = 0x7F, - gcvCOMPONENT_ODD = 0x80 -} -gceCOMPONENT_CONTROL; - /* Color format component parameters. */ typedef struct _gcsFORMAT_COMPONENT { @@ -2416,14 +2229,6 @@ extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XX8X; extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_X8XX; extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_8XXX; -typedef enum _gceORIENTATION -{ - gcvORIENTATION_TOP_BOTTOM, - gcvORIENTATION_BOTTOM_TOP, -} -gceORIENTATION; - - /* Construct a new gcoSURF object. */ gceSTATUS gcoSURF_Construct( @@ -3490,18 +3295,6 @@ gcoOS_StackRemove( ** Text Optional text ** ... Optional arguments for text. */ -typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR; -typedef struct _gcsBINARY_TRACE_MESSAGE -{ - gctUINT32 signature; - gctUINT32 pid; - gctUINT32 tid; - gctUINT32 line; - gctUINT32 numArguments; - gctUINT8 payload; -} -gcsBINARY_TRACE_MESSAGE; - void gcoOS_BinaryTrace( IN gctCONST_STRING Function, @@ -3518,8 +3311,6 @@ gckOS_BinaryTrace( ... ); -#define gcdBINARY_TRACE_MESSAGE_SIZE 240 - #if gcdBINARY_TRACE # define gcmBINARY_TRACE gcoOS_BinaryTrace # define gcmkBINARY_TRACE gckOS_BinaryTrace @@ -3905,41 +3696,13 @@ gcoOS_Print( # define gcmkPRINT_VERSION() _gcmPRINT_VERSION(gcmk) # define _gcmPRINT_VERSION(prefix) \ prefix##TRACE(gcvLEVEL_ERROR, \ - "Vivante HAL version %d.%d.%d build %d", \ - gcvVERSION_MAJOR, gcvVERSION_MINOR, \ - gcvVERSION_PATCH, gcvVERSION_BUILD) + "Vivante HAL version %s", \ + gcvVERSION_STRING) #else # define gcmPRINT_VERSION() do { gcmSTACK_DUMP(); } while (gcvFALSE) # define gcmkPRINT_VERSION() do { } while (gcvFALSE) #endif -typedef enum _gceDUMP_BUFFER_TYPE -{ - gcvDUMP_BUFFER_USER_STRING, - gcvDUMP_BUFFER_VERIFY, - - gcvDUMP_BUFFER_MEMORY, - gcvDUMP_BUFFER_TEXTURE, - gcvDUMP_BUFFER_STREAM, - gcvDUMP_BUFFER_INDEX, - gcvDUMP_BUFFER_BUFOBJ, - gcvDUMP_BUFFER_IMAGE, - /* A type of command, but should not execute directly. */ - gcvDUMP_BUFFER_INSTRUCTION, - gcvDUMP_BUFFER_CONTEXT, - gcvDUMP_BUFFER_COMMAND, - gcvDUMP_BUFFER_ASYNC_COMMAND, - gcvDUMP_BUFFER_USER_TYPE_LAST = gcvDUMP_BUFFER_ASYNC_COMMAND, - - gcvDUMP_BUFFER_KERNEL_CONTEXT, - gcvDUMP_BUFFER_KERNEL_COMMAND, - - gcvDUMP_BUFFER_PHYSICAL_MEMORY, - - gcvDUMP_BUFFER_TYPE_COUNT, -} -gceDUMP_BUFFER_TYPE; - void gckOS_Dump( IN gckOS Os, @@ -4862,15 +4625,6 @@ gckOS_DebugStatus2Name( ****************************** User Debug Option ****************************** \******************************************************************************/ -/* User option. */ -typedef enum _gceDEBUG_MSG -{ - gcvDEBUG_MSG_NONE, - gcvDEBUG_MSG_ERROR, - gcvDEBUG_MSG_WARNING -} -gceDEBUG_MSG; - typedef struct _gcsUSER_DEBUG_OPTION { gceDEBUG_MSG debugMsg; @@ -5302,6 +5056,18 @@ gcoHAL_GetUserDebugOption( /*----------------------------------------------------------------------------*/ +#define gcmSETSINGLESTATE_DUMMY(StateDelta, CommandBuffer, Memory, FixedPoint, \ + Address, Data) \ + { \ + gctUINT32 __temp_data32__; \ + __temp_data32__ = Data ; \ + gcmVERIFYLOADSTATEALIGNED(CommandBuffer, Memory); \ + *Memory++ = \ + (gctUINT32)(0) | (0xFFFF & Address); \ + *Memory++ = __temp_data32__; \ + gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \ +} + #define gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \ Address, Data) \ { \ @@ -5918,8 +5684,8 @@ gcoHAL_GetUserDebugOption( } \ else \ { \ - attribBufSizeInKB -= 4; \ - L1cacheSize = 4; \ + attribBufSizeInKB -= 2; \ + L1cacheSize = 2; \ } \ } \ prefix##ASSERT(L1cacheSize); \ @@ -5976,7 +5742,6 @@ typedef struct _memory_profile_info } system_memory, gpu_memory; } memory_profile_info; - gceSTATUS gcoOS_GetMemoryProfileInfo( size_t size, diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_debug_zones.h b/drivers/amlogic/npu/kernel/inc/gc_hal_debug_zones.h index f0fbf9e29ebc41..6d56d0c537b22b 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_debug_zones.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_debug_zones.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_drm.h b/drivers/amlogic/npu/kernel/inc/gc_hal_drm.h index 6e0bb5dec3460b..1300c137b98b29 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_drm.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_drm.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -190,6 +190,11 @@ struct drm_viv_gem_ref_node { #define DRM_IOCTL_VIV_GEM_ATTACH_AUX DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_ATTACH_AUX, struct drm_viv_gem_attach_aux) #define DRM_IOCTL_VIV_GEM_REF_NODE DRM_IOWR(DRM_COMMAND_BASE + DRM_VIV_GEM_REF_NODE, struct drm_viv_gem_ref_node) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,4,0) +#define drm_gem_object_unreference_unlocked drm_gem_object_put_unlocked +#define drm_dev_unref drm_dev_put +#endif + #if defined(__cplusplus) } #endif diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_dump.h b/drivers/amlogic/npu/kernel/inc/gc_hal_dump.h index b8b8c1b484e6af..f64c0fe4a05ab7 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_dump.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_dump.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform.h b/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform.h index 5246100ecd6bb3..7655871e230cb8 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -56,7 +56,7 @@ #ifndef __gc_hal_eglplatform_h_ #define __gc_hal_eglplatform_h_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_base.h" #ifdef __cplusplus diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform_type.h b/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform_type.h index 22d2778f2270e7..4882df85d447a1 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform_type.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_eglplatform_type.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -60,148 +60,6 @@ extern "C" { #endif -/******************************************************************************* -** Events. ********************************************************************* -*/ - -typedef enum _halEventType -{ - /* Keyboard event. */ - HAL_KEYBOARD, - - /* Mouse move event. */ - HAL_POINTER, - - /* Mouse button event. */ - HAL_BUTTON, - - /* Application close event. */ - HAL_CLOSE, - - /* Application window has been updated. */ - HAL_WINDOW_UPDATE -} -halEventType; - -/* Scancodes for keyboard. */ -typedef enum _halKeys -{ - HAL_UNKNOWN = -1, - - HAL_BACKSPACE = 0x08, - HAL_TAB, - HAL_ENTER = 0x0D, - HAL_ESCAPE = 0x1B, - - HAL_SPACE = 0x20, - HAL_SINGLEQUOTE = 0x27, - HAL_PAD_ASTERISK = 0x2A, - HAL_COMMA = 0x2C, - HAL_HYPHEN, - HAL_PERIOD, - HAL_SLASH, - HAL_0, - HAL_1, - HAL_2, - HAL_3, - HAL_4, - HAL_5, - HAL_6, - HAL_7, - HAL_8, - HAL_9, - HAL_SEMICOLON = 0x3B, - HAL_EQUAL = 0x3D, - HAL_A = 0x41, - HAL_B, - HAL_C, - HAL_D, - HAL_E, - HAL_F, - HAL_G, - HAL_H, - HAL_I, - HAL_J, - HAL_K, - HAL_L, - HAL_M, - HAL_N, - HAL_O, - HAL_P, - HAL_Q, - HAL_R, - HAL_S, - HAL_T, - HAL_U, - HAL_V, - HAL_W, - HAL_X, - HAL_Y, - HAL_Z, - HAL_LBRACKET, - HAL_BACKSLASH, - HAL_RBRACKET, - HAL_BACKQUOTE = 0x60, - - HAL_F1 = 0x80, - HAL_F2, - HAL_F3, - HAL_F4, - HAL_F5, - HAL_F6, - HAL_F7, - HAL_F8, - HAL_F9, - HAL_F10, - HAL_F11, - HAL_F12, - - HAL_LCTRL, - HAL_RCTRL, - HAL_LSHIFT, - HAL_RSHIFT, - HAL_LALT, - HAL_RALT, - HAL_CAPSLOCK, - HAL_NUMLOCK, - HAL_SCROLLLOCK, - HAL_PAD_0, - HAL_PAD_1, - HAL_PAD_2, - HAL_PAD_3, - HAL_PAD_4, - HAL_PAD_5, - HAL_PAD_6, - HAL_PAD_7, - HAL_PAD_8, - HAL_PAD_9, - HAL_PAD_HYPHEN, - HAL_PAD_PLUS, - HAL_PAD_SLASH, - HAL_PAD_PERIOD, - HAL_PAD_ENTER, - HAL_SYSRQ, - HAL_PRNTSCRN, - HAL_BREAK, - HAL_UP, - HAL_LEFT, - HAL_RIGHT, - HAL_DOWN, - HAL_HOME, - HAL_END, - HAL_PGUP, - HAL_PGDN, - HAL_INSERT, - HAL_DELETE, - HAL_LWINDOW, - HAL_RWINDOW, - HAL_MENU, - HAL_POWER, - HAL_SLEEP, - HAL_WAKE -} -halKeys; - /* Structure that defined keyboard mapping. */ typedef struct _halKeyMap { diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_engine.h b/drivers/amlogic/npu/kernel/inc/gc_hal_engine.h index 69d3699d3c5ddc..e859bd71be4630 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_engine.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_engine.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -56,7 +56,7 @@ #ifndef __gc_hal_engine_h_ #define __gc_hal_engine_h_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_enum.h" @@ -122,33 +122,6 @@ typedef struct _gcoBUFOBJ * gcoBUFOBJ; #define gcdATTRIBUTE_COUNT 32 #define gcdVERTEXARRAY_POOL_CAPACITY 32 -typedef enum _gcePROGRAM_STAGE -{ - gcvPROGRAM_STAGE_VERTEX = 0x0, - gcvPROGRAM_STAGE_TCS = 0x1, - gcvPROGRAM_STAGE_TES = 0x2, - gcvPROGRAM_STAGE_GEOMETRY = 0x3, - gcvPROGRAM_STAGE_FRAGMENT = 0x4, - gcvPROGRAM_STAGE_GRAPHICS_COUNT = 0x5, - gcvPROGRAM_STAGE_COMPUTE = 0x5, - gcvPROGRAM_STAGE_OPENCL = 0x6, - gcvPROGRAM_STAGE_LAST -} -gcePROGRAM_STAGE; - -typedef enum _gcePROGRAM_STAGE_BIT -{ - gcvPROGRAM_STAGE_VERTEX_BIT = 1 << gcvPROGRAM_STAGE_VERTEX, - gcvPROGRAM_STAGE_TCS_BIT = 1 << gcvPROGRAM_STAGE_TCS, - gcvPROGRAM_STAGE_TES_BIT = 1 << gcvPROGRAM_STAGE_TES, - gcvPROGRAM_STAGE_GEOMETRY_BIT = 1 << gcvPROGRAM_STAGE_GEOMETRY, - gcvPROGRAM_STAGE_FRAGMENT_BIT = 1 << gcvPROGRAM_STAGE_FRAGMENT, - gcvPROGRAM_STAGE_COMPUTE_BIT = 1 << gcvPROGRAM_STAGE_COMPUTE, - gcvPROGRAM_STAGE_OPENCL_BIT = 1 << gcvPROGRAM_STAGE_OPENCL, -} -gcePROGRAM_STAGE_BIT; - - #define gcvPORGRAM_STAGE_GPIPE (gcvPROGRAM_STAGE_VERTEX_BIT | \ gcvPROGRAM_STAGE_TCS_BIT | \ gcvPROGRAM_STAGE_TES_BIT | \ @@ -221,12 +194,6 @@ gcoHAL_QueryStreamCaps( /*----------------------------------------------------------------------------*/ /*--------------------------------- gcoSURF 3D --------------------------------*/ -typedef enum _gceBLIT_FLAG -{ - gcvBLIT_FLAG_SKIP_DEPTH_WRITE = 1 << 0, - gcvBLIT_FLAG_SKIP_STENCIL_WRITE = 1 << 1, -} gceBLIT_FLAG; - typedef struct _gcsSURF_BLIT_ARGS { gcoSURF srcSurface; @@ -245,22 +212,6 @@ typedef struct _gcsSURF_BLIT_ARGS } gcsSURF_BLIT_ARGS; - - - -/* Clear flags. */ -typedef enum _gceCLEAR -{ - gcvCLEAR_COLOR = 0x1, - gcvCLEAR_DEPTH = 0x2, - gcvCLEAR_STENCIL = 0x4, - gcvCLEAR_HZ = 0x8, - gcvCLEAR_WITH_GPU_ONLY = 0x100, - gcvCLEAR_WITH_CPU_ONLY = 0x200, - gcvCLEAR_MULTI_SLICES = 0x400, -} -gceCLEAR; - typedef struct _gcsSURF_CLEAR_ARGS { /* @@ -303,33 +254,6 @@ typedef struct _gscSURF_BLITDRAW_BLIT gcsRECT scissor; }gscSURF_BLITDRAW_BLIT; - -typedef enum _gceBLITDRAW_TYPE -{ - gcvBLITDRAW_CLEAR = 0, - gcvBLITDRAW_BLIT = 1, - - /* last number, not a real type */ - gcvBLITDRAW_NUM_TYPE - } -gceBLITDRAW_TYPE; - -typedef enum _gceSPLIT_DRAW_TYPE -{ - gcvSPLIT_DRAW_UNKNOWN = 0x0, - gcvSPLIT_DRAW_1, - gcvSPLIT_DRAW_2, - gcvSPLIT_DRAW_3, - gcvSPLIT_DRAW_4, - gcvSPLIT_DRAW_XFB, - gcvSPLIT_DRAW_INDEX_FETCH, - gcvSPLIT_DRAW_TCS, - gcvSPLIT_DRAW_STIPPLE, - gcvSPLIT_DRAW_WIDE_LINE, - gcvSPLIT_DRAW_LAST -} -gceSPLIT_DRAW_TYPE; - typedef gceSTATUS (* gctSPLIT_DRAW_FUNC_PTR)( IN gctPOINTER gc, IN gctPOINTER instantDraw, @@ -469,7 +393,8 @@ depr_gcoSURF_ResolveRect( gceSTATUS gcoSURF_Resample( IN gcoSURF SrcSurf, - IN gcoSURF DstSurf + IN gcoSURF DstSurf, + IN gctBOOL sRGBDecode ); /* Resolve rectangular area of a surface. */ @@ -700,14 +625,6 @@ gcoCLHardware_Construct(void); ********************************** gco3D Object ********************************* \******************************************************************************/ -/* Blending targets. */ -typedef enum _gceBLEND_UNIT -{ - gcvBLEND_SOURCE, - gcvBLEND_TARGET, -} -gceBLEND_UNIT; - /* Construct a new gco3D object. */ gceSTATUS gco3D_Construct( @@ -1485,59 +1402,13 @@ gco3D_SetLogicOp( IN gctUINT8 Rop ); -typedef enum _gceXfbCmd -{ - gcvXFBCMD_BEGIN = 0, - gcvXFBCMD_PAUSE = 1, - gcvXFBCMD_RESUME = 2, - gcvXFBCMD_END = 3, - gcvXFBCMD_PAUSE_INCOMMIT = 4, - gcvXFBCMD_RESUME_INCOMMIT = 5, - gcvXFBCMD_INVALID = 6, -} -gceXfbCmd; - -typedef enum _gceXfbStatus -{ - gcvXFB_Disabled = 0, - gcvXFB_Paused, - gcvXFB_Enabled, -} -gceXfbStatus; - -typedef enum _gceQueryStatus -{ - gcvQUERY_Disabled = 0, - gcvQUERY_Paused = 1, - gcvQUERY_Enabled = 2, -} -gceQueryStatus; - -typedef enum _gceQueryCmd -{ - gcvQUERYCMD_BEGIN = 0, - gcvQUERYCMD_PAUSE = 1, - gcvQUERYCMD_RESUME = 2, - gcvQUERYCMD_END = 3, - gcvQUERYCMD_INVALID = 4, -} -gceQueryCmd; - -typedef enum _gceQueryType -{ - gcvQUERY_OCCLUSION = 0, - gcvQUERY_XFB_WRITTEN = 1, - gcvQUERY_PRIM_GENERATED = 2, - gcvQUERY_MAX_NUM = 3, -} -gceQueryType; - gceSTATUS gco3D_SetQuery( IN gco3D Engine, IN gctUINT32 QueryHeader, IN gceQueryType Type, - IN gctBOOL Enable + IN gctBOOL Enable, + IN gctUINT32 Index ); gceSTATUS @@ -1547,6 +1418,7 @@ gco3D_GetQuery( IN gcsSURF_NODE_PTR Node, IN gctUINT32 Size, IN gctPOINTER Locked, + IN gctUINT32 IndexedId, OUT gctINT32 * Index ); @@ -1981,19 +1853,6 @@ gco3D_SetAlphaTextureFunction( ******************************* gcoTEXTURE Object ******************************* \******************************************************************************/ -/* Cube faces. */ -typedef enum _gceTEXTURE_FACE -{ - gcvFACE_NONE = 0, - gcvFACE_POSITIVE_X, - gcvFACE_NEGATIVE_X, - gcvFACE_POSITIVE_Y, - gcvFACE_NEGATIVE_Y, - gcvFACE_POSITIVE_Z, - gcvFACE_NEGATIVE_Z, -} -gceTEXTURE_FACE; - typedef struct _gcsTEXTURE { /* Addressing modes. */ @@ -2025,6 +1884,8 @@ typedef struct _gcsTEXTURE gceTEXTURE_COMPARE_MODE compareMode; gceCOMPARE compareFunc; + gceTEXTURE_DS_TEX_MODE dsTextureMode; + gceTEXTURE_DS_MODE dsMode; /* sRGB decode */ @@ -2391,43 +2252,6 @@ gcoTEXTURE_GenerateMipMap( ******************************* gcoSTREAM Object ****************************** \******************************************************************************/ -typedef enum _gceVERTEX_FORMAT -{ - gcvVERTEX_BYTE, - gcvVERTEX_UNSIGNED_BYTE, - gcvVERTEX_SHORT, - gcvVERTEX_UNSIGNED_SHORT, - gcvVERTEX_INT, - gcvVERTEX_UNSIGNED_INT, - gcvVERTEX_FIXED, - gcvVERTEX_HALF, - gcvVERTEX_FLOAT, - gcvVERTEX_DOUBLE, - gcvVERTEX_UNSIGNED_INT_10_10_10_2, - gcvVERTEX_INT_10_10_10_2, - gcvVERTEX_UNSIGNED_INT_2_10_10_10_REV, - gcvVERTEX_INT_2_10_10_10_REV, - /* integer format */ - gcvVERTEX_INT8, - gcvVERTEX_INT16, - gcvVERTEX_INT32, -} -gceVERTEX_FORMAT; - -/* What the SW converting scheme to create temp attrib */ -typedef enum _gceATTRIB_SCHEME -{ - gcvATTRIB_SCHEME_KEEP = 0, - gcvATTRIB_SCHEME_2_10_10_10_REV_TO_FLOAT, - gcvATTRIB_SCHEME_BYTE_TO_IVEC4, - gcvATTRIB_SCHEME_SHORT_TO_IVEC4, - gcvATTRIB_SCHEME_INT_TO_IVEC4, - gcvATTRIB_SCHEME_UBYTE_TO_UVEC4, - gcvATTRIB_SCHEME_USHORT_TO_UVEC4, - gcvATTRIB_SCHEME_UINT_TO_UVEC4, - gcvATTRIB_SCHEME_DOUBLE_TO_FLOAT, -} gceATTRIB_SCHEME; - gceSTATUS gcoSTREAM_Construct( IN gcoHAL Hal, @@ -2810,32 +2634,6 @@ gcoHAL_DumpGPUProfile( /****************************************************************************** **********************gcoBUFOBJ object***************************************** *******************************************************************************/ -typedef enum _gceBUFOBJ_TYPE -{ - gcvBUFOBJ_TYPE_ARRAY_BUFFER = 1, - gcvBUFOBJ_TYPE_ELEMENT_ARRAY_BUFFER = 2, - gcvBUFOBJ_TYPE_GENERIC_BUFFER = 100 - -} gceBUFOBJ_TYPE; - -typedef enum _gceBUFOBJ_USAGE -{ - gcvBUFOBJ_USAGE_STREAM_DRAW = 1, - gcvBUFOBJ_USAGE_STREAM_READ, - gcvBUFOBJ_USAGE_STREAM_COPY, - gcvBUFOBJ_USAGE_STATIC_DRAW, - gcvBUFOBJ_USAGE_STATIC_READ, - gcvBUFOBJ_USAGE_STATIC_COPY, - gcvBUFOBJ_USAGE_DYNAMIC_DRAW, - gcvBUFOBJ_USAGE_DYNAMIC_READ, - gcvBUFOBJ_USAGE_DYNAMIC_COPY, - - /* special patch for optimaize performance, - ** no fence and duplicate stream to ensure data correct - */ - gcvBUFOBJ_USAGE_DISABLE_FENCE_DYNAMIC_STREAM = 256 -} gceBUFOBJ_USAGE; - /* Construct a new gcoBUFOBJ object. */ gceSTATUS gcoBUFOBJ_Construct( diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_engine_vg.h b/drivers/amlogic/npu/kernel/inc/gc_hal_engine_vg.h index 6c4f1c43b17a4f..2558725bc83af9 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_engine_vg.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_engine_vg.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -60,317 +60,7 @@ extern "C" { #endif -#include "gc_hal_types.h" - -/******************************************************************************\ -******************************** VG Enumerations ******************************* -\******************************************************************************/ - -/** -** @ingroup gcoVG -** -** @brief Tiling mode for painting and imagig. -** -** This enumeration defines the tiling modes supported by the HAL. This is -** in fact a one-to-one mapping of the OpenVG 1.1 tile modes. -*/ -typedef enum _gceTILE_MODE -{ - gcvTILE_FILL, - gcvTILE_PAD, - gcvTILE_REPEAT, - gcvTILE_REFLECT -} -gceTILE_MODE; - -/******************************************************************************/ -/** @ingroup gcoVG -** -** @brief The different paint modes. -** -** This enumeration lists the available paint modes. -*/ -typedef enum _gcePAINT_TYPE -{ - /** Solid color. */ - gcvPAINT_MODE_SOLID, - - /** Linear gradient. */ - gcvPAINT_MODE_LINEAR, - - /** Radial gradient. */ - gcvPAINT_MODE_RADIAL, - - /** Pattern. */ - gcvPAINT_MODE_PATTERN, - - /** Mode count. */ - gcvPAINT_MODE_COUNT -} -gcePAINT_TYPE; - -/** -** @ingroup gcoVG -** -** @brief Types of path data supported by HAL. -** -** This enumeration defines the types of path data supported by the HAL. -** This is in fact a one-to-one mapping of the OpenVG 1.1 path types. -*/ -typedef enum _gcePATHTYPE -{ - gcePATHTYPE_UNKNOWN = -1, - gcePATHTYPE_INT8, - gcePATHTYPE_INT16, - gcePATHTYPE_INT32, - gcePATHTYPE_FLOAT -} -gcePATHTYPE; - -/** -** @ingroup gcoVG -** -** @brief Supported path segment commands. -** -** This enumeration defines the path segment commands supported by the HAL. -*/ -typedef enum _gceVGCMD -{ - gcvVGCMD_END, /* 0: 0x00 */ - gcvVGCMD_CLOSE, /* 1: 0x01 */ - gcvVGCMD_MOVE, /* 2: 0x02 */ - gcvVGCMD_MOVE_REL, /* 3: 0x03 */ - gcvVGCMD_LINE, /* 4: 0x04 */ - gcvVGCMD_LINE_REL, /* 5: 0x05 */ - gcvVGCMD_QUAD, /* 6: 0x06 */ - gcvVGCMD_QUAD_REL, /* 7: 0x07 */ - gcvVGCMD_CUBIC, /* 8: 0x08 */ - gcvVGCMD_CUBIC_REL, /* 9: 0x09 */ - gcvVGCMD_BREAK, /* 10: 0x0A */ - gcvVGCMD_HLINE, /* 11: ******* R E S E R V E D *******/ - gcvVGCMD_HLINE_REL, /* 12: ******* R E S E R V E D *******/ - gcvVGCMD_VLINE, /* 13: ******* R E S E R V E D *******/ - gcvVGCMD_VLINE_REL, /* 14: ******* R E S E R V E D *******/ - gcvVGCMD_SQUAD, /* 15: ******* R E S E R V E D *******/ - gcvVGCMD_SQUAD_REL, /* 16: ******* R E S E R V E D *******/ - gcvVGCMD_SCUBIC, /* 17: ******* R E S E R V E D *******/ - gcvVGCMD_SCUBIC_REL, /* 18: ******* R E S E R V E D *******/ - gcvVGCMD_SCCWARC, /* 19: ******* R E S E R V E D *******/ - gcvVGCMD_SCCWARC_REL, /* 20: ******* R E S E R V E D *******/ - gcvVGCMD_SCWARC, /* 21: ******* R E S E R V E D *******/ - gcvVGCMD_SCWARC_REL, /* 22: ******* R E S E R V E D *******/ - gcvVGCMD_LCCWARC, /* 23: ******* R E S E R V E D *******/ - gcvVGCMD_LCCWARC_REL, /* 24: ******* R E S E R V E D *******/ - gcvVGCMD_LCWARC, /* 25: ******* R E S E R V E D *******/ - gcvVGCMD_LCWARC_REL, /* 26: ******* R E S E R V E D *******/ - - /* The width of the command recognized by the hardware on bits. */ - gcvVGCMD_WIDTH = 5, - - /* Hardware command mask. */ - gcvVGCMD_MASK = (1 << gcvVGCMD_WIDTH) - 1, - - /* Command modifiers. */ - gcvVGCMD_H_MOD = 1 << gcvVGCMD_WIDTH, /* = 32 */ - gcvVGCMD_V_MOD = 2 << gcvVGCMD_WIDTH, /* = 64 */ - gcvVGCMD_S_MOD = 3 << gcvVGCMD_WIDTH, /* = 96 */ - gcvVGCMD_ARC_MOD = 4 << gcvVGCMD_WIDTH, /* = 128 */ - - /* Emulated LINE commands. */ - gcvVGCMD_HLINE_EMUL = gcvVGCMD_H_MOD | gcvVGCMD_LINE, /* = 36 */ - gcvVGCMD_HLINE_EMUL_REL = gcvVGCMD_H_MOD | gcvVGCMD_LINE_REL, /* = 37 */ - gcvVGCMD_VLINE_EMUL = gcvVGCMD_V_MOD | gcvVGCMD_LINE, /* = 68 */ - gcvVGCMD_VLINE_EMUL_REL = gcvVGCMD_V_MOD | gcvVGCMD_LINE_REL, /* = 69 */ - - /* Emulated SMOOTH commands. */ - gcvVGCMD_SQUAD_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD, /* = 102 */ - gcvVGCMD_SQUAD_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD_REL, /* = 103 */ - gcvVGCMD_SCUBIC_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC, /* = 104 */ - gcvVGCMD_SCUBIC_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC_REL, /* = 105 */ - - /* Emulation ARC commands. */ - gcvVGCMD_ARC_LINE = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE, /* = 132 */ - gcvVGCMD_ARC_LINE_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE_REL, /* = 133 */ - gcvVGCMD_ARC_QUAD = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD, /* = 134 */ - gcvVGCMD_ARC_QUAD_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD_REL /* = 135 */ -} -gceVGCMD; -typedef enum _gceVGCMD * gceVGCMD_PTR; - -/** -** @ingroup gcoVG -** -** @brief Blending modes supported by the HAL. -** -** This enumeration defines the blending modes supported by the HAL. This is -** in fact a one-to-one mapping of the OpenVG 1.1 blending modes. -*/ -typedef enum _gceVG_BLEND -{ - gcvVG_BLEND_SRC, - gcvVG_BLEND_SRC_OVER, - gcvVG_BLEND_DST_OVER, - gcvVG_BLEND_SRC_IN, - gcvVG_BLEND_DST_IN, - gcvVG_BLEND_MULTIPLY, - gcvVG_BLEND_SCREEN, - gcvVG_BLEND_DARKEN, - gcvVG_BLEND_LIGHTEN, - gcvVG_BLEND_ADDITIVE, - gcvVG_BLEND_SUBTRACT, - gcvVG_BLEND_FILTER -} -gceVG_BLEND; - -/** -** @ingroup gcoVG -** -** @brief Image modes supported by the HAL. -** -** This enumeration defines the image modes supported by the HAL. This is -** in fact a one-to-one mapping of the OpenVG 1.1 image modes with the addition -** of NO IMAGE. -*/ -typedef enum _gceVG_IMAGE -{ - gcvVG_IMAGE_NONE, - gcvVG_IMAGE_NORMAL, - gcvVG_IMAGE_MULTIPLY, - gcvVG_IMAGE_STENCIL, - gcvVG_IMAGE_FILTER -} -gceVG_IMAGE; - -/** -** @ingroup gcoVG -** -** @brief Filter mode patterns and imaging. -** -** This enumeration defines the filter modes supported by the HAL. -*/ -typedef enum _gceIMAGE_FILTER -{ - gcvFILTER_POINT, - gcvFILTER_LINEAR, - gcvFILTER_BI_LINEAR -} -gceIMAGE_FILTER; - -/** -** @ingroup gcoVG -** -** @brief Primitive modes supported by the HAL. -** -** This enumeration defines the primitive modes supported by the HAL. -*/ -typedef enum _gceVG_PRIMITIVE -{ - gcvVG_SCANLINE, - gcvVG_RECTANGLE, - gcvVG_TESSELLATED, - gcvVG_TESSELLATED_TILED -} -gceVG_PRIMITIVE; - -/** -** @ingroup gcoVG -** -** @brief Rendering quality modes supported by the HAL. -** -** This enumeration defines the rendering quality modes supported by the HAL. -*/ -typedef enum _gceRENDER_QUALITY -{ - gcvVG_NONANTIALIASED, - gcvVG_2X2_MSAA, - gcvVG_2X4_MSAA, - gcvVG_4X4_MSAA -} -gceRENDER_QUALITY; - -/** -** @ingroup gcoVG -** -** @brief Fill rules supported by the HAL. -** -** This enumeration defines the fill rules supported by the HAL. -*/ -typedef enum _gceFILL_RULE -{ - gcvVG_EVEN_ODD, - gcvVG_NON_ZERO -} -gceFILL_RULE; - -/** -** @ingroup gcoVG -** -** @brief Cap styles supported by the HAL. -** -** This enumeration defines the cap styles supported by the HAL. -*/ -typedef enum _gceCAP_STYLE -{ - gcvCAP_BUTT, - gcvCAP_ROUND, - gcvCAP_SQUARE -} -gceCAP_STYLE; - -/** -** @ingroup gcoVG -** -** @brief Join styles supported by the HAL. -** -** This enumeration defines the join styles supported by the HAL. -*/ -typedef enum _gceJOIN_STYLE -{ - gcvJOIN_MITER, - gcvJOIN_ROUND, - gcvJOIN_BEVEL -} -gceJOIN_STYLE; - -/** -** @ingroup gcoVG -** -** @brief Channel mask values. -** -** This enumeration defines the values for channel mask used in image -** filtering. -*/ - -/* Base values for channel mask definitions. */ -#define gcvCHANNEL_X (0) -#define gcvCHANNEL_R (1 << 0) -#define gcvCHANNEL_G (1 << 1) -#define gcvCHANNEL_B (1 << 2) -#define gcvCHANNEL_A (1 << 3) - -typedef enum _gceCHANNEL -{ - gcvCHANNEL_XXXX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_XXXA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_XXBX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_XXBA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), - - gcvCHANNEL_XGXX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_XGXA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_XGBX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_XGBA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), - - gcvCHANNEL_RXXX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_RXXA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_RXBX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_RXBA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), - - gcvCHANNEL_RGXX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), - gcvCHANNEL_RGXA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), - gcvCHANNEL_RGBX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), - gcvCHANNEL_RGBA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), -} -gceCHANNEL; +#include "shared/gc_hal_types.h" /******************************************************************************\ ******************************** VG Structures ******************************* diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_enum.h b/drivers/amlogic/npu/kernel/inc/gc_hal_enum.h index 5a1655a69cefc9..e24750bb1dc9bf 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_enum.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_enum.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -57,582 +57,12 @@ #define __gc_hal_enum_h_ #include "gc_hal_options.h" +#include "shared/gc_hal_enum.h" #ifdef __cplusplus extern "C" { #endif -/* Chip models. */ -typedef enum _gceCHIPMODEL -{ - gcv200 = 0x0200, - gcv300 = 0x0300, - gcv320 = 0x0320, - gcv328 = 0x0328, - gcv350 = 0x0350, - gcv355 = 0x0355, - gcv400 = 0x0400, - gcv410 = 0x0410, - gcv420 = 0x0420, - gcv428 = 0x0428, - gcv450 = 0x0450, - gcv500 = 0x0500, - gcv520 = 0x0520, - gcv530 = 0x0530, - gcv600 = 0x0600, - gcv620 = 0x0620, - gcv700 = 0x0700, - gcv800 = 0x0800, - gcv860 = 0x0860, - gcv880 = 0x0880, - gcv900 = 0x0900, - gcv1000 = 0x1000, - gcv1500 = 0x1500, - gcv2000 = 0x2000, - gcv2100 = 0x2100, - gcv2200 = 0x2200, - gcv2500 = 0x2500, - gcv3000 = 0x3000, - gcv4000 = 0x4000, - gcv5000 = 0x5000, - gcv5200 = 0x5200, - gcv6400 = 0x6400, - gcv7000 = 0x7000, - gcv7400 = 0x7400, - gcv8000 = 0x8000, -} -gceCHIPMODEL; - -/* Chip features. */ -typedef enum _gceFEATURE -{ - gcvFEATURE_PIPE_2D = 0, - gcvFEATURE_PIPE_3D, - gcvFEATURE_PIPE_VG, - gcvFEATURE_DC, - gcvFEATURE_HIGH_DYNAMIC_RANGE, - gcvFEATURE_MODULE_CG, - gcvFEATURE_MIN_AREA, - gcvFEATURE_BUFFER_INTERLEAVING, - gcvFEATURE_BYTE_WRITE_2D, - gcvFEATURE_ENDIANNESS_CONFIG, - gcvFEATURE_DUAL_RETURN_BUS, - gcvFEATURE_DEBUG_MODE, - gcvFEATURE_YUY2_RENDER_TARGET, - gcvFEATURE_FRAGMENT_PROCESSOR, - gcvFEATURE_2DPE20, - gcvFEATURE_FAST_CLEAR, - gcvFEATURE_YUV420_TILER, - gcvFEATURE_YUY2_AVERAGING, - gcvFEATURE_FLIP_Y, - gcvFEATURE_EARLY_Z, - gcvFEATURE_COMPRESSION, - gcvFEATURE_MSAA, - gcvFEATURE_SPECIAL_ANTI_ALIASING, - gcvFEATURE_SPECIAL_MSAA_LOD, - gcvFEATURE_422_TEXTURE_COMPRESSION, - gcvFEATURE_DXT_TEXTURE_COMPRESSION, - gcvFEATURE_ETC1_TEXTURE_COMPRESSION, - gcvFEATURE_CORRECT_TEXTURE_CONVERTER, - gcvFEATURE_TEXTURE_8K, - gcvFEATURE_SCALER, - gcvFEATURE_YUV420_SCALER, - gcvFEATURE_SHADER_HAS_W, - gcvFEATURE_SHADER_HAS_SIGN, - gcvFEATURE_SHADER_HAS_FLOOR, - gcvFEATURE_SHADER_HAS_CEIL, - gcvFEATURE_SHADER_HAS_SQRT, - gcvFEATURE_SHADER_HAS_TRIG, - gcvFEATURE_HZ, - gcvFEATURE_CORRECT_STENCIL, - gcvFEATURE_VG20, - gcvFEATURE_VG_FILTER, - gcvFEATURE_VG21, - gcvFEATURE_VG_DOUBLE_BUFFER, - gcvFEATURE_VG_RESOLUTION_8K, - gcvFEATURE_MC20, - gcvFEATURE_SUPER_TILED, - gcvFEATURE_FAST_CLEAR_FLUSH, - gcvFEATURE_2D_FILTERBLIT_PLUS_ALPHABLEND, - gcvFEATURE_2D_DITHER, - gcvFEATURE_2D_A8_TARGET, - gcvFEATURE_2D_A8_NO_ALPHA, - gcvFEATURE_2D_FILTERBLIT_FULLROTATION, - gcvFEATURE_2D_BITBLIT_FULLROTATION, - gcvFEATURE_WIDE_LINE, - gcvFEATURE_FC_FLUSH_STALL, - gcvFEATURE_FULL_DIRECTFB, - gcvFEATURE_HALF_FLOAT_PIPE, - gcvFEATURE_LINE_LOOP, - gcvFEATURE_2D_YUV_BLIT, - gcvFEATURE_2D_TILING, - gcvFEATURE_NON_POWER_OF_TWO, - gcvFEATURE_3D_TEXTURE, - gcvFEATURE_TEXTURE_ARRAY, - gcvFEATURE_TILE_FILLER, - gcvFEATURE_LOGIC_OP, - gcvFEATURE_MIXED_STREAMS, - gcvFEATURE_2D_MULTI_SOURCE_BLT, - gcvFEATURE_END_EVENT, - gcvFEATURE_VERTEX_10_10_10_2, - gcvFEATURE_TEXTURE_10_10_10_2, - gcvFEATURE_TEXTURE_ANISOTROPIC_FILTERING, - gcvFEATURE_TEXTURE_FLOAT_HALF_FLOAT, - gcvFEATURE_2D_ROTATION_STALL_FIX, - gcvFEATURE_2D_MULTI_SOURCE_BLT_EX, - gcvFEATURE_BUG_FIXES10, - gcvFEATURE_2D_MINOR_TILING, - gcvFEATURE_TEX_COMPRRESSION_SUPERTILED, /* Supertiled compressed textures are supported. */ - gcvFEATURE_FAST_MSAA, - gcvFEATURE_BUG_FIXED_INDEXED_TRIANGLE_STRIP, - gcvFEATURE_TEXTURE_TILE_STATUS_READ, - gcvFEATURE_DEPTH_BIAS_FIX, - gcvFEATURE_RECT_PRIMITIVE, - gcvFEATURE_BUG_FIXES11, - gcvFEATURE_SUPERTILED_TEXTURE, - gcvFEATURE_2D_NO_COLORBRUSH_INDEX8, - gcvFEATURE_RS_YUV_TARGET, - gcvFEATURE_2D_FC_SOURCE, /* For tilestatus compression feature*/ - gcvFEATURE_2D_CC_NOAA_SOURCE, - gcvFEATURE_PE_DITHER_FIX, - gcvFEATURE_2D_YUV_SEPARATE_STRIDE, - gcvFEATURE_FRUSTUM_CLIP_FIX, - gcvFEATURE_TEXTURE_SWIZZLE, - gcvFEATURE_PRIMITIVE_RESTART, - gcvFEATURE_TEXTURE_LINEAR, - gcvFEATURE_TEXTURE_YUV_ASSEMBLER, - gcvFEATURE_LINEAR_RENDER_TARGET, - gcvFEATURE_SHADER_HAS_ATOMIC, - gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE, - gcvFEATURE_SHADER_ENHANCEMENTS2, - gcvFEATURE_BUG_FIXES7, - gcvFEATURE_SHADER_HAS_RTNE, - gcvFEATURE_SHADER_HAS_EXTRA_INSTRUCTIONS2, - gcvFEATURE_SHADER_ENHANCEMENTS3, - gcvFEATURE_DYNAMIC_FREQUENCY_SCALING, - gcvFEATURE_SINGLE_BUFFER, - gcvFEATURE_OCCLUSION_QUERY, - gcvFEATURE_2D_GAMMA, - gcvFEATURE_2D_COLOR_SPACE_CONVERSION, - gcvFEATURE_2D_SUPER_TILE_VERSION, - gcvFEATURE_HALTI0, - gcvFEATURE_HALTI1, - gcvFEATURE_HALTI2, - gcvFEATURE_SUPPORT_GCREGTX, - gcvFEATURE_2D_MIRROR_EXTENSION, - gcvFEATURE_TEXTURE_ASTC, - gcvFEATURE_TEXTURE_ASTC_DECODE_FIX, - gcvFEATURE_TEXTURE_ASTC_BASE_LOD_FIX, - gcvFEATURE_2D_SUPER_TILE_V1, - gcvFEATURE_2D_SUPER_TILE_V2, - gcvFEATURE_2D_SUPER_TILE_V3, - gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2, - gcvFEATURE_NEW_RA, - gcvFEATURE_BUG_FIXED_IMPLICIT_PRIMITIVE_RESTART, - gcvFEATURE_PE_MULTI_RT_BLEND_ENABLE_CONTROL, - gcvFEATURE_SMALL_MSAA, /* An upgraded version of Fast MSAA */ - gcvFEATURE_VERTEX_INST_ID_AS_ATTRIBUTE, - gcvFEATURE_DUAL_16, - gcvFEATURE_BRANCH_ON_IMMEDIATE_REG, - gcvFEATURE_2D_COMPRESSION, - gcvFEATURE_TPC_COMPRESSION, - gcvFEATURE_TPCV11_COMPRESSION, - gcvFEATURE_DEC_COMPRESSION, - gcvFEATURE_DEC300_COMPRESSION, - gcvFEATURE_DEC400_COMPRESSION, - gcvFEATURE_DEC_TPC_COMPRESSION, - gcvFEATURE_DEC_COMPRESSION_TILE_NV12_8BIT, - gcvFEATURE_DEC_COMPRESSION_TILE_NV12_10BIT, - gcvFEATURE_2D_OPF_YUV_OUTPUT, - gcvFEATURE_2D_FILTERBLIT_A8_ALPHA, - gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT, - gcvFEATURE_2D_MULTI_SRC_BLT_BILINEAR_FILTER, - gcvFEATURE_2D_MULTI_SRC_BLT_1_5_ENHANCEMENT, - gcvFEATURE_V2_COMPRESSION_Z16_FIX, - gcvFEATURE_VERTEX_INST_ID_AS_INTEGER, - gcvFEATURE_2D_YUV_MODE, - gcvFEATURE_2D_CACHE_128B256BPERLINE, - gcvFEATURE_2D_SEPARATE_CACHE, - gcvFEATURE_2D_MAJOR_SUPER_TILE, - gcvFEATURE_2D_V4COMPRESSION, - gcvFEATURE_2D_VMSAA, - gcvFEATURE_2D_10BIT_OUTPUT_LINEAR, - gcvFEATURE_2D_YUV420_OUTPUT_LINEAR, - gcvFEATURE_ACE, - gcvFEATURE_COLOR_COMPRESSION, - gcvFEATURE_32BPP_COMPONENT_TEXTURE_CHANNEL_SWIZZLE, - gcvFEATURE_64BPP_HW_CLEAR_SUPPORT, - gcvFEATURE_TX_LERP_PRECISION_FIX, - gcvFEATURE_COMPRESSION_V2, - gcvFEATURE_MMU, - gcvFEATURE_COMPRESSION_V3, - gcvFEATURE_TX_DECOMPRESSOR, - gcvFEATURE_MRT_TILE_STATUS_BUFFER, - gcvFEATURE_COMPRESSION_V1, - gcvFEATURE_V1_COMPRESSION_Z16_DECOMPRESS_FIX, - gcvFEATURE_RTT, - gcvFEATURE_GENERIC_ATTRIB, - gcvFEATURE_2D_ONE_PASS_FILTER, - gcvFEATURE_2D_ONE_PASS_FILTER_TAP, - gcvFEATURE_2D_POST_FLIP, - gcvFEATURE_2D_PIXEL_ALIGNMENT, - gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT, - gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT_WIDTH, - gcvFEATURE_8K_RT, - gcvFEATURE_HALTI3, - gcvFEATURE_EEZ, - gcvFEATURE_INTEGER_SIGNEXT_FIX, - gcvFEATURE_PSOUTPUT_MAPPING, - gcvFEATURE_8K_RT_FIX, - gcvFEATURE_TX_TILE_STATUS_MAPPING, - gcvFEATURE_SRGB_RT_SUPPORT, - gcvFEATURE_TEXTURE_16K, - gcvFEATURE_PA_FARZCLIPPING_FIX, - gcvFEATURE_PE_DITHER_COLORMASK_FIX, - gcvFEATURE_ZSCALE_FIX, - gcvFEATURE_MULTI_PIXELPIPES, - gcvFEATURE_PIPE_CL, - gcvFEATURE_BUG_FIXES18, - gcvFEATURE_UNIFIED_SAMPLERS, - gcvFEATURE_CL_PS_WALKER, - gcvFEATURE_NEW_HZ, - gcvFEATURE_TX_FRAC_PRECISION_6BIT, - gcvFEATURE_SH_INSTRUCTION_PREFETCH, - gcvFEATURE_PROBE, - gcvFEATURE_SINGLE_PIPE_HALTI1, - gcvFEATURE_BUG_FIXES8, /* This HW feature is wrong, we can't use this to check integer branch!!!*/ - gcvFEATURE_2D_ALL_QUAD, - gcvFEATURE_SEPARATE_SRC_DST, - gcvFEATURE_TX_HOR_ALIGN_SEL, - gcvFEATURE_HALTI4, - gcvFEATURE_MRT_FC_FIX, - gcvFEATURE_TESSELLATION, - gcvFEATURE_DRAW_INDIRECT, - gcvFEATURE_COMPUTE_INDIRECT, - gcvFEATURE_MSAA_TEXTURE, - gcvFEATURE_STENCIL_TEXTURE, - gcvFEATURE_S8_ONLY_RENDERING, - gcvFEATURE_D24S8_SAMPLE_STENCIL, - gcvFEATURE_ADVANCED_BLEND_MODE_PART0, - gcvFEATURE_RA_DEPTH_WRITE, - gcvFEATURE_RS_DS_DOWNSAMPLE_NATIVE_SUPPORT, - gcvFEATURE_S8_MSAA_COMPRESSION, - gcvFEATURE_MSAA_FRAGMENT_OPERATION, - gcvFEATURE_FE_START_VERTEX_SUPPORT, - gcvFEATURE_DIVISOR_STREAM_ADDR_FIX, - gcvFEATURE_ZERO_ATTRIB_SUPPORT, - gcvFEATURE_DANGLING_VERTEX_FIX, - gcvFEATURE_PE_DISABLE_COLOR_PIPE, - gcvFEATURE_FE_12bit_stride, - gcvFEATURE_TX_LOD_GUARDBAND, - gcvFEATURE_HAS_PRODUCTID, - gcvFEATURE_INTEGER32_FIX, - gcvFEATURE_TEXTURE_GATHER, - gcvFEATURE_IMG_INSTRUCTION, - gcvFEATURE_HELPER_INVOCATION, - gcvFEATURE_NO_USER_CSC, - gcvFEATURE_ANDROID_ONLY, - gcvFEATURE_V2_MSAA_COHERENCY_FIX, - gcvFEATURE_BLOCK_SIZE_16x16, - gcvFEATURE_TX_SUPPORT_DEC, - gcvFEATURE_RSBLT_MSAA_DECOMPRESSION, - gcvFEATURE_TILEFILLER_32TILE_ALIGNED, - gcvFEATURE_GEOMETRY_SHADER, - gcvFEATURE_HALTI5, - gcvFEATURE_PIPELINE_32_ATTRIBUTES, - gcvFEATURE_USC, - gcvFEATURE_CUBEMAP_ARRAY, - gcvFEATURE_TX_DESCRIPTOR, - gcvFEATURE_SEPARATE_RT_CTRL, - gcvFEATURE_RENDER_ARRAY, - gcvFEATURE_BLT_ENGINE, - gcvFEATURE_TEXTURE_BUFFER, - gcvFEATURE_GS_SUPPORT_EMIT, - gcvFEATURE_SAMPLER_BASE_OFFSET, - gcvFEATURE_IMAGE_OUT_BOUNDARY_FIX, - gcvFEATURE_TX_BORDER_CLAMP, - gcvFEATURE_MSAA_SHADING, - gcvFEATURE_ADVANCED_SH_INST, - gcvFEATURE_LOD_FIX_FOR_BASELEVEL, - gcvFEATURE_MULTIDRAW_INDIRECT, - gcvFEATURE_DRAW_ELEMENTS_BASE_VERTEX, - gcvFEATURE_NEW_STEERING_AND_ICACHE_FLUSH, /* Steering base on register base. Trigger-style Icache flush state. */ - gcvFEATURE_PE_DITHER_FIX2, - gcvFEATURE_INDEX_FETCH_FIX, - gcvFEATURE_TEX_BASELOD, - gcvFEATURE_TEX_SEAMLESS_CUBE, - gcvFEATURE_TEX_ETC2, - gcvFEATURE_TEX_CUBE_BORDER_LOD, - gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG, - gcvFEATURE_TX_8BPP_TS_FIX, - gcvFEATURE_HW_TFB, - gcvFEATURE_COMPRESSION_V4, - gcvFEATURE_FENCE_32BIT, - gcvFEATURE_FENCE_64BIT, - gcvFEATURE_R8_UNORM, - gcvFEATURE_TX_DEFAULT_VALUE_FIX, - gcvFEATURE_TX_8bit_UVFrac, - gcvFEATURE_TX_MIPFILTER_NONE_FIX, - gcvFEATURE_MC_STENCIL_CTRL, - gcvFEATURE_DEPTH_MATH_FIX, - gcvFEATURE_PE_B2B_PIXEL_FIX, - gcvFEATURE_TEXTURE_GATHER_OFFSETS, - gcvFEATURE_TEX_CACHE_FLUSH_FIX, - gcvFEATURE_WIDELINE_HELPER_FIX, - gcvFEATURE_LINE_DIAMOND_RULE_FIX, - gcvFEATURE_MULTIGPU_SYNC_V2, - gcvFEATURE_DRAW_ID, - gcvFEATURE_SNAPPAGE_CMD, - gcvFEATURE_COMMAND_PREFETCH, - gcvFEATURE_SAMPLEPOS_SWIZZLE_FIX, - gcvFEATURE_SELECTMAP_SRC0_SWIZZLE_FIX, - gcvFEATURE_LOADATTR_OOB_FIX, - gcvFEATURE_RA_DEPTH_WRITE_MSAA1X_FIX, - gcvFEATURE_MRT_8BIT_DUAL_PIPE_FIX, - gcvFEATURE_BUG_FIXES1, - gcvFEATURE_MULTI_SOURCE_BLT, - gcvFEATURE_ZCOMPRESSION, - gcvFEATURE_DITHER_AND_FILTER_PLUS_ALPHA_2D, - gcvFEATURE_ONE_PASS_2D_FILTER, - gcvFEATURE_TX_FILTER, - gcvFEATURE_CHIPENABLE_LINK, - gcvFEATURE_TEXTURE_BIAS_LOD_FIX, - gcvFEATURE_USE_GL_Z, - gcvFEATURE_SUPPORT_INTEGER, - /* PARTLY_SUPPORT_INTEGER_BRANCH: - ** chips can support all integer types for compare instructions, e.g, CMP, SELECT. - ** FULLLY_SUPPORT_INTEGER_BRANCH: - ** chips can support all integer types for JMP instruction. - ** If PARTLY_SUPPORT_INTEGER_BRANCH is TRUE but FULLLY_SUPPORT_INTEGER_BRANCH is FALSE, - ** then this chip can only support INT32/UINT32 JMP instruction. - */ - gcvFEATURE_PARTLY_SUPPORT_INTEGER_BRANCH, - gcvFEATURE_FULLLY_SUPPORT_INTEGER_BRANCH, - gcvFEATURE_SUPPORT_INTEGER_ATTRIBUTE, - gcvFEATURE_SUPPORT_MOVAI, - gcvFEATURE_NEED_FIX_FOR_CL_X, - gcvFEATURE_NEED_FIX_FOR_CL_XE, - gcvFEATURE_HAS_OUTPUT_COUNT_FIX, - gcvFEATURE_VARYING_PACKING_LIMITATION, - gcvFEATURE_HIGHP_VARYING_SHIFT, - gcvFEATURE_BUG_FIXES2, - gcvFEATURE_64K_L2_CACHE, - gcvFEATURE_128BTILE, - gcvFEATURE_ADVANCED_BLEND_OPT, - gcvFEATURE_SNAPPAGE_CMD_FIX, - gcvFEATURE_L2_CACHE_FOR_2D_420, - gcvFEATURE_TILE_STATUS_2BITS, - gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS0, - gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS1, - gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS2, - gcvFEATURE_MEDIUM_PRECISION, - gcvFEATURE_FE20_BIT_INDEX, - gcvFEATURE_BUG_FIXES4, - gcvFEATURE_BUG_FIXES12, - gcvFEATURE_VMSAA, - gcvFEATURE_ROBUST_ATOMIC, - gcvFEATURE_32F_COLORMASK_FIX, - gcvFEATURE_NEW_GPIPE, - gcvFEATURE_RS_NEW_BASEADDR, - gcvFEATURE_TX_DXT, - gcvFEATURE_SH_FLAT_INTERPOLATION_DUAL16_FIX, - gcvFEATURE_EVIS, - gcvFEATURE_SH_SUPPORT_V4, - gcvFEATURE_SH_SUPPORT_ALPHA_KILL, - gcvFEATURE_PE_NO_ALPHA_TEST, - gcvFEATURE_SH_SNAP2PAGE_MAXPAGES_FIX, - gcvFEATURE_USC_FULLCACHE_FIX, - gcvFEATURE_PE_64bit_FENCE_FIX, - gcvFEATURE_BLT_8bit_256TILE_FC_FIX, - gcvFEATURE_PE_RGBA16I_FIX, - gcvFEATURE_BLT_64bpp_MASKED_CLEAR_FIX, - gcvFEATURE_SH_PSO_MSAA1x_FIX, - gcvFEATURE_USC_ATOMIC_FIX, - gcvFEATURE_INDEX_CONST_ON_B0, - gcvFEATURE_SH_NO_ONECONST_LIMIT, - gcvFEATURE_EVIS_NO_ABSDIFF, - gcvFEATURE_EVIS_NO_BITREPLACE, - gcvFEATURE_EVIS_NO_BOXFILTER, - gcvFEATURE_EVIS_NO_CORDIAC, - gcvFEATURE_EVIS_NO_DP32, - gcvFEATURE_EVIS_NO_FILTER, - gcvFEATURE_EVIS_NO_IADD, - gcvFEATURE_EVIS_NO_SELECTADD, - gcvFEATURE_EVIS_LERP_7OUTPUT, - gcvFEATURE_EVIS_ACCSQ_8OUTPUT, - gcvFEATURE_ROBUSTNESS, - gcvFEATURE_SECURITY, - gcvFEATURE_TX_YUV_ASSEMBLER_10BIT, - gcvFEATURE_USC_GOS_ADDR_FIX, - gcvFEATURE_SUPPORT_MSAA2X, - gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX, - gcvFEATURE_TX_INTEGER_COORDINATE, - gcvFEATURE_PSIO_SAMPLEMASK_IN_R0ZW_FIX, - gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG, - gcvFEATURE_SH_IMG_LDST_ON_TEMP, - gcvFEATURE_TX_INTEGER_COORDINATE_V2, - gcvFEATURE_COMPUTE_ONLY, - gcvFEATURE_SH_IMG_LDST_CLAMP, - gcvFEATURE_SH_ICACHE_ALLOC_COUNT_FIX, - gcvFEATURE_MSAA_OQ_FIX, - gcvFEATURE_PE_ENHANCEMENTS2, - gcvFEATURE_PSIO_MSAA_CL_FIX, - gcvFEATURE_FE_NEED_DUMMYDRAW, - gcvFEATURE_MULTI_CLUSTER, - gcvFEATURE_PSIO_INTERLOCK, - gcvFEATURE_BLIT_COMPRESS_DEST, - gcvFEATURE_SH_MULTI_WG_PACK, - gcvFEATURE_FE_ROBUST_FIX, - gcvFEATURE_TX_ASTC_MULTISLICE_FIX, - gcvFEATURE_PSIO_DUAL16_32bpc_FIX, - gcvFEATURE_LS_SUPPORT_PER_COMP_DEPENDENCY, - gcvFEATURE_COMPRESSION_DEC400, - gcvFEATURE_SH_TEXLD_U_FIX, - gcvFEATURE_TX_FLUSH_L1CACHE, - gcvFEATURE_USC_DEFER_FILL_FIX, - gcvFEATURE_MC_FCCACHE_BYTEMASK, - gcvFEATURE_SH_MULTI_WG_PACK_FIX, - gcvFEATURE_FE_PATCHLIST_FETCH_FIX, - gcvFEATURE_RA_CG_FIX, - gcvFEATURE_EVIS_VX2, - gcvFEATURE_SH_HALF_DEPENDENCY_FIX, - gcvFEATURE_FE_BASEINSTANCE, - gcvFEATURE_FE_COMPUREINDIRECT_SKIP_UNIFORM, - gcvFEATURE_SH_CLOCK_GATE_FIX, - gcvFEATURE_GPIPE_CLOCK_GATE_FIX, - gcvFEATURE_TP_ENGINE, - gcvFEATURE_TX_BORDER_CLAMP_FIX, - gcvFEATURE_SH_IMAGE_LD_LAST_PIXEL_FIX, - gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG2, - gcvFEATURE_MULTIGPU_SYNC_V3, - gcvFEATURE_PE_VMSAA_COVERAGE_CACHE_FIX, - gcvFEATURE_SECURITY_AHB, - gcvFEATURE_TX_LERP_LESS_BIT, - gcvFEATURE_SMALL_BATCH, - gcvFEATURE_SH_IDIV0_SWZL_EHS, - gcvFEATURE_SH_CMPLX, - gcvFEATURE_VIP_V7, - gcvFEATURE_SH_GM_ENDIAN, - gcvFEATURE_SH_GM_USC_UNALLOC, - gcvFEATURE_SH_END_OF_BB, - gcvFEATURE_ASYNC_BLIT, - gcvFEATURE_ASYNC_FE_FENCE_FIX, - gcvFEATURE_PSCS_THROTTLE, - gcvFEATURE_SEPARATE_LS, - gcvFEATURE_PA_VARYING_COMPONENT_TOGGLE_FIX, - gcvFEATURE_TX_MULTISAMPLER_FC_FIX, - gcvFEATURE_WIDELINE_TRIANGLE_EMU, - gcvFEATURE_FENCE, - gcvFEATURE_MCFE, - gcvFEATURE_NN_INTERLEAVE8, - gcvFEATURE_TP_REORDER, - gcvFEATURE_TP_RTNE, - gcvFEATURE_TP_LRN, - gcvFEATURE_TP_ROI_POOLING, - gcvFEATURE_TP_MAX_POOLING_STRIDE1, - gcvFEATURE_NN_BRICK_MODE, - gcvFEATURE_NN_BORDER_MODE, - gcvFEATURE_NN_FP16_ALU, - gcvFEATURE_NN_BF16_ALU, - gcvFEATURE_NN_INT16_ALU, - gcvFEATURE_NN_ZDP3, - gcvFEATURE_NN_ZDP6, - gcvFEATURE_PE_DEPTH_ONLY_OQFIX, - gcvFEATURE_TX_SNORM_SUPPORT, - gcvFEATURE_HWMANAGED_LS, - gcvFEATURE_SH_SCATTER_GATHER, - gcvFEATURE_NN_POWER_ISOLATION, - gcvFEATURE_SWTILING_PHASE1, - gcvFEATURE_SWTILING_PHASE2, - gcvFEATURE_SWTILING_PHASE3, - gcvFEATURE_TF_QUANTIZATION, - gcvFEATURE_NN_XYDP9, - gcvFEATURE_TP_SIMPLE_INT16, - gcvFEATURE_TP_REAL_INT16, - gcvFEATURE_NN_FIRST_PIXEL_POOLING, - gcvFEATURE_NN_STRIDE_SUPPORT, - gcvFEATURE_NN_XYDP6, - gcvFEATURE_NN_XYDP0, - gcvFEATURE_TP_REORDER_FIX, - gcvFEATURE_NN_CONV1x1_PERF_FIX, - gcvFEATURE_NN_CACHELINE_MODE_PERF_FIX, - gcvFEATURE_NN_PER3DTILE_BUBBLE_FIX, - gcvFEATURE_SH_IO_CG_FIX, - gcvFEATURE_USC_STAY_LRU, - gcvFEATURE_NN_NONZERO_MIRROR_BORDER, - gcvFEATURE_NN_COEF_DECOMPRESS_PERF2X, - gcvFEATURE_4BIT_INPUT, - gcvFEATURE_COEF_COMPRESSION_ENHANCEMENT, - gcvFEATURE_NN_ZDP3_NO_COMPRESS_FIX, - gcvFEATURE_NN_ASYNC_COPY_PERF_FIX, - gcvFEATURE_OCB_COUNTER, - gcvFEATURE_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX, - gcvFEATURE_NN_FULLCACHE_KERNEL_INTERLEAVE_FIX, - gcvFEATURE_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX, - gcvFEATURE_USC_BOTTLENECK_FIX, - gcvFEATURE_OCB_REMAP_PHYSICAL_ADDRESS, - gcvFEATURE_NN_SLICE_PADDING_TO_64BYTE_ALIGN, - gcvFEATURE_NN_DW_1x1_CONV_MERGE, - gcvFEATURE_TP_REORDER_LAYER_SUSPEND_FIX, - gcvFEATURE_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX, - gcvFEATURE_IMG_POP_PIPELINE_PAUSE_FIX, - gcvFEATURE_NN_SLOW_OUTPUT, - gcvFEATURE_NO_NARROW_POST_PROCESS_PIPE, - gcvFEATURE_TP_NN_PROBE, - gcvFEATURE_TP_23BITS_POST_MULTIPLIER, - gcvFEATURE_NN_TRANSPOSE, - - gcvFEATURE_IMAGE_LS_NO_FULLMASK_FIX, - gcvFEATURE_BLT_YUV_OUTPUT, - gcvFEATURE_PE_TILE_CACHE_FLUSH_FIX, - gcvFEATURE_SH_ROBUSTNESS_FIX, - gcvFEATURE_USC_ATOMIC_FIX2, - gcvFEATURE_MULTIVIEW_RENDER, - gcvFEATURE_FE_DRAW_DIRECT, - gcvFEATURE_TX_VKBORDER_MODE, - gcvFEATURE_TX_UNNORMALIZED_COORD, - gcvFEATURE_VG_IMAGE_16K, - gcvFEATURE_MULTICORE_CONFIG, - gcvFEATURE_PA_LINECLIP_FIX, - gcvFEATURE_NN_ENGINE, - gcvFEATURE_NN_ASYNC_COPY_MERGE_FIX, - gcvFEATURE_NN_CONVOUT_FIFO_DEPTH_FIX, - gcvFEATURE_NN_SMALLBATCH_PHASE1, - gcvFEATURE_TP_SMALLBATCH_PHASE1, - gcvFEATURE_VIP_SCALER, - gcvFEATURE_TX_8bit_UVFrac_ROUNDING_FIX, - gcvFEATURE_NN_REQ_SLOWARBITRATION_FIX, - gcvFEATUER_IMAGE_PARTIAL_CACHE, - gcvFEATURE_FULLCACHE_KERNELHEAD_FIX, - gcvFEATURE_NN_SINGLEPORT_ACCUMBUFFER, - gcvFEATURE_NN_SMALLBATCH, - gcvFEATURE_TP_SMALLBATCH, - gcvFEATURE_NN_ZDP_INIMAGE_SIZE_FIX, - gcvFEATURE_HI_REORDER_FIX, - gcvFEATURE_TP_COEF_COMPRESSION_ENHANCEMENT, - gcvFEATURE_NN_DEPTHWISE_SUPPORT, - gcvFEATURE_IMAGE_NOT_PACKED_IN_SRAM_FIX, - gcvFEATURE_IDLE_BEFORE_FLUSH_COMPLETE_FIX, - gcvFEATURE_NO_FLUSH_USC_FIX, - gcvFEATURE_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX, - gcvFEATURE_XY_OFFSET_LIMITATION_FIX, - gcvFEATURE_USC_INVALIDATE_CACHE_LINE_FIX, - gcvFEATURE_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX, - gcvFEATURE_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX, - gcvFEATURE_NN_PER_CHANNEL_POST_MULTIPLY, - gcvFEATURE_NN_NO_Z_LOCATION_OFFSET, - gcvFEATURE_NN_PRELU, - gcvFEATURE_NN_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX, - gcvFEATURE_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX, - gcvFEATURE_VIP_DEC400, - gcvFEATURE_MAX_POINTSIZE_CLAMP, - gcvFEATURE_2D_FAST_CLEAR, /* For tilestatus Fast Clear feature*/ - - /* Insert features above this comment only. */ - gcvFEATURE_COUNT /* Not a feature. */ -} -gceFEATURE; - /* dummy draw type.*/ typedef enum _gceDUMMY_DRAW_TYPE { @@ -678,6 +108,7 @@ typedef enum _gceOPTION gcvOPTION_OVX_ENABLE_NN_STRIDE, gcvOPTION_OVX_USE_MULTI_DEVICES, gcvOPTION_OVX_ENABLE_NN_DDR_BURST_SIZE_256B, + gcvOPTION_OVX_ENABLE_NN_DDR_BURST_SIZE_64B, #endif /* Insert option above this comment only */ gcvOPTION_COUNT /* Not a OPTION*/ @@ -712,127 +143,6 @@ typedef enum _gceFRAMEINFO_OP } gceFRAMEINFO_OP; - -/* Chip Power Status. */ -typedef enum _gceCHIPPOWERSTATE -{ - gcvPOWER_INVALID = -1, - - /* Global/base states. */ - gcvPOWER_ON = 0, - gcvPOWER_IDLE, - gcvPOWER_SUSPEND, - gcvPOWER_OFF, - - /* Power on but not global or broadcast. */ - gcvPOWER_ON_AUTO, - - /* Broadcast states. */ - gcvPOWER_FLAG_BROADCAST = 0x10, - gcvPOWER_IDLE_BROADCAST = gcvPOWER_IDLE | gcvPOWER_FLAG_BROADCAST, - gcvPOWER_SUSPEND_BROADCAST = gcvPOWER_SUSPEND | gcvPOWER_FLAG_BROADCAST, - gcvPOWER_OFF_BROADCAST = gcvPOWER_OFF | gcvPOWER_FLAG_BROADCAST, - - - /* Timeout states. */ - gcvPOWER_FLAG_TIMEOUT = 0x20, - gcvPOWER_IDLE_TIMEOUT = gcvPOWER_IDLE | gcvPOWER_FLAG_TIMEOUT, - gcvPOWER_SUSPEND_TIMEOUT = gcvPOWER_SUSPEND | gcvPOWER_FLAG_TIMEOUT, - gcvPOWER_OFF_TIMEOUT = gcvPOWER_OFF | gcvPOWER_FLAG_TIMEOUT, - -} -gceCHIPPOWERSTATE; - -/* CPU cache operations */ -typedef enum _gceCACHEOPERATION -{ - gcvCACHE_CLEAN = 0x01, /* Flush CPU cache to mem */ - gcvCACHE_INVALIDATE = 0x02, /* Invalidte CPU cache */ - gcvCACHE_FLUSH = gcvCACHE_CLEAN | gcvCACHE_INVALIDATE, /* Both flush & invalidate */ - gcvCACHE_MEMORY_BARRIER = 0x04 -} -gceCACHEOPERATION; - -/* Surface types. */ -typedef enum _gceSURF_TYPE -{ - gcvSURF_TYPE_UNKNOWN = 0, - gcvSURF_INDEX, - gcvSURF_VERTEX, - gcvSURF_TEXTURE, - gcvSURF_RENDER_TARGET, - gcvSURF_DEPTH, - gcvSURF_BITMAP, - gcvSURF_TILE_STATUS, - gcvSURF_IMAGE, - gcvSURF_MASK, - gcvSURF_SCISSOR, - gcvSURF_HIERARCHICAL_DEPTH, - gcvSURF_ICACHE, - gcvSURF_TXDESC, - gcvSURF_FENCE, - gcvSURF_TFBHEADER, - gcvSURF_NUM_TYPES, /* Make sure this is the last one! */ - - /* Combinations. */ - gcvSURF_NO_TILE_STATUS = 0x100, - gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node. - In Android, vidmem node is allocated by another process. */ - gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */ - gcvSURF_TILE_RLV_FENCE = 0x800, /* create texture fence as tile */ - gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */ - gcvSURF_LINEAR = 0x2000, - gcvSURF_CREATE_AS_TEXTURE = 0x4000, /* create it as a texture */ - gcvSURF_PROTECTED_CONTENT = 0x8000, /* create it as content protected */ - gcvSURF_CREATE_AS_DISPLAYBUFFER = 0x10000, /*create it as a display buffer surface */ - gcvSURF_CONTIGUOUS = 0x20000, /*create it as contiguous */ - gcvSURF_NO_COMPRESSION = 0x40000, /* Create it as no compression, valid on when it has tile status. */ - gcvSURF_DEC = 0x80000, /* Surface is DEC compressed */ - gcvSURF_NO_HZ = 0x100000, - gcvSURF_3D = 0x200000, /* It's 3d surface */ - gcvSURF_DMABUF_EXPORTABLE = 0x400000, /* master node can be exported as dma-buf fd */ - gcvSURF_CACHE_MODE_128 = 0x800000, - - gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE - | gcvSURF_LINEAR, - - gcvSURF_RENDER_TARGET_LINEAR = gcvSURF_RENDER_TARGET - | gcvSURF_LINEAR, - - gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET - | gcvSURF_NO_TILE_STATUS, - - gcvSURF_RENDER_TARGET_NO_COMPRESSION = gcvSURF_RENDER_TARGET - | gcvSURF_NO_COMPRESSION, - - gcvSURF_RENDER_TARGET_TS_DIRTY = gcvSURF_RENDER_TARGET - | gcvSURF_TILE_STATUS_DIRTY, - - gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH - | gcvSURF_NO_TILE_STATUS, - - gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH - | gcvSURF_TILE_STATUS_DIRTY, - - /* Supported surface types with no vidmem node. */ - gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP - | gcvSURF_NO_VIDMEM, - - gcvSURF_TEXTURE_NO_VIDMEM = gcvSURF_TEXTURE - | gcvSURF_NO_VIDMEM, - - /* Cacheable surface types with no vidmem node. */ - gcvSURF_CACHEABLE_BITMAP_NO_VIDMEM = gcvSURF_BITMAP_NO_VIDMEM - | gcvSURF_CACHEABLE, - - gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP - | gcvSURF_CACHEABLE, - - gcvSURF_TEXTURE_3D = gcvSURF_TEXTURE - | gcvSURF_3D -} -gceSURF_TYPE; - typedef enum _gceSURF_USAGE { gcvSURF_USAGE_UNKNOWN, @@ -896,421 +206,6 @@ typedef enum _gceMIPMAP_IMAGE_FORMAT } gceMIPMAP_IMAGE_FORMAT; -/* Surface formats. -** Name rules is from MSB->LSB. -*/ -typedef enum _gceSURF_FORMAT -{ - /* Unknown format. */ - gcvSURF_UNKNOWN = 0, - - /* Palettized formats. */ - gcvSURF_INDEX1 = 100, - gcvSURF_INDEX4, - gcvSURF_INDEX8, -#if gcdVG_ONLY - gcvSURF_INDEX2, -#endif - - /* RGB formats. */ - gcvSURF_A2R2G2B2 = 200, - gcvSURF_R3G3B2, - gcvSURF_A8R3G3B2, - gcvSURF_X4R4G4B4, - gcvSURF_A4R4G4B4, - gcvSURF_R4G4B4A4, - gcvSURF_X1R5G5B5, - gcvSURF_A1R5G5B5, - gcvSURF_R5G5B5A1, - gcvSURF_R5G6B5, - gcvSURF_R8G8B8, - gcvSURF_X8R8G8B8, - gcvSURF_A8R8G8B8, - gcvSURF_R8G8B8A8, - gcvSURF_G8R8G8B8, - gcvSURF_R8G8B8G8, - gcvSURF_X2R10G10B10, - gcvSURF_A2R10G10B10, - gcvSURF_R10G10B10A2, - gcvSURF_X12R12G12B12, - gcvSURF_A12R12G12B12, - gcvSURF_X16R16G16B16, - gcvSURF_A16R16G16B16, - gcvSURF_A32R32G32B32, - gcvSURF_R8G8B8X8, - gcvSURF_R5G5B5X1, - gcvSURF_R4G4B4X4, - gcvSURF_X16R16G16B16_2_A8R8G8B8, - gcvSURF_A16R16G16B16_2_A8R8G8B8, - gcvSURF_A32R32G32B32_2_G32R32F, - gcvSURF_A32R32G32B32_4_A8R8G8B8, - /* BGR formats. */ - gcvSURF_A4B4G4R4 = 300, - gcvSURF_A1B5G5R5, - gcvSURF_B5G6R5, - gcvSURF_B8G8R8, - gcvSURF_B16G16R16, - gcvSURF_X8B8G8R8, - gcvSURF_A8B8G8R8, - gcvSURF_A2B10G10R10, - gcvSURF_X16B16G16R16, - gcvSURF_A16B16G16R16, - gcvSURF_B32G32R32, - gcvSURF_X32B32G32R32, - gcvSURF_A32B32G32R32, - gcvSURF_B4G4R4A4, - gcvSURF_B5G5R5A1, - gcvSURF_B8G8R8X8, - gcvSURF_B8G8R8A8, - gcvSURF_B10G10R10A2, - gcvSURF_X4B4G4R4, - gcvSURF_X1B5G5R5, - gcvSURF_B4G4R4X4, - gcvSURF_B5G5R5X1, - gcvSURF_X2B10G10R10, - gcvSURF_B8G8R8_SNORM, - gcvSURF_X8B8G8R8_SNORM, - gcvSURF_A8B8G8R8_SNORM, - gcvSURF_A8B12G12R12_2_A8R8G8B8, - - /* Compressed formats. */ - gcvSURF_DXT1 = 400, - gcvSURF_DXT2, - gcvSURF_DXT3, - gcvSURF_DXT4, - gcvSURF_DXT5, - gcvSURF_CXV8U8, - gcvSURF_ETC1, - gcvSURF_R11_EAC, - gcvSURF_SIGNED_R11_EAC, - gcvSURF_RG11_EAC, - gcvSURF_SIGNED_RG11_EAC, - gcvSURF_RGB8_ETC2, - gcvSURF_SRGB8_ETC2, - gcvSURF_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, - gcvSURF_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, - gcvSURF_RGBA8_ETC2_EAC, - gcvSURF_SRGB8_ALPHA8_ETC2_EAC, - - /* YUV formats. */ - gcvSURF_YUY2 = 500, - gcvSURF_UYVY, - gcvSURF_YV12, - gcvSURF_I420, - gcvSURF_NV12, - gcvSURF_NV21, - gcvSURF_NV16, - gcvSURF_NV61, - gcvSURF_YVYU, - gcvSURF_VYUY, - gcvSURF_AYUV, - gcvSURF_YUV420_10_ST, - gcvSURF_YUV420_TILE_ST, - gcvSURF_YUV420_TILE_10_ST, - gcvSURF_NV12_10BIT, - gcvSURF_NV21_10BIT, - gcvSURF_NV16_10BIT, - gcvSURF_NV61_10BIT, - gcvSURF_P010, -#if gcdVG_ONLY - gcvSURF_AYUY2, - gcvSURF_ANV12, - gcvSURF_ANV16, - gcvSURF_AUYVY, - gcvSURF_YV16, -#endif - - /* Depth formats. */ - gcvSURF_D16 = 600, - gcvSURF_D24S8, - gcvSURF_D32, - gcvSURF_D24X8, - gcvSURF_D32F, - gcvSURF_S8D32F, - gcvSURF_S8D32F_1_G32R32F, - gcvSURF_S8D32F_2_A8R8G8B8, - gcvSURF_D24S8_1_A8R8G8B8, - gcvSURF_S8, - gcvSURF_X24S8, - gcvSURF_X24S8_1_A8R8G8B8, - - /* Alpha formats. */ - gcvSURF_A4 = 700, - gcvSURF_A8, - gcvSURF_A12, - gcvSURF_A16, - gcvSURF_A32, - gcvSURF_A1, - - /* Luminance formats. */ - gcvSURF_L4 = 800, - gcvSURF_L8, - gcvSURF_L12, - gcvSURF_L16, - gcvSURF_L32, - gcvSURF_L1, - gcvSURF_L8_RAW, - - /* Alpha/Luminance formats. */ - gcvSURF_A4L4 = 900, - gcvSURF_A2L6, - gcvSURF_A8L8, - gcvSURF_A4L12, - gcvSURF_A12L12, - gcvSURF_A16L16, - - gcvSURF_A8L8_1_A8R8G8B8, - - gcvSURF_A8L8_RAW, - - /* Bump formats. */ - gcvSURF_L6V5U5 = 1000, - gcvSURF_V8U8, - gcvSURF_X8L8V8U8, - gcvSURF_Q8W8V8U8, - gcvSURF_A2W10V10U10, - gcvSURF_V16U16, - gcvSURF_Q16W16V16U16, - - /* R/RG/RA formats. */ - gcvSURF_R8 = 1100, - gcvSURF_X8R8, - gcvSURF_G8R8, - gcvSURF_X8G8R8, - gcvSURF_A8R8, - gcvSURF_R16, - gcvSURF_X16R16, - gcvSURF_G16R16, - gcvSURF_X16G16R16, - gcvSURF_A16R16, - gcvSURF_R32, - gcvSURF_X32R32, - gcvSURF_G32R32, - gcvSURF_X32G32R32, - gcvSURF_A32R32, - gcvSURF_RG16, - gcvSURF_R8_SNORM, - gcvSURF_G8R8_SNORM, - - gcvSURF_R8_1_X8R8G8B8, - gcvSURF_G8R8_1_X8R8G8B8, - - /* Floating point formats. */ - gcvSURF_R16F = 1200, - gcvSURF_X16R16F, - gcvSURF_G16R16F, - gcvSURF_X16G16R16F, - gcvSURF_B16G16R16F, - gcvSURF_X16B16G16R16F, - gcvSURF_A16B16G16R16F, - gcvSURF_R32F, - gcvSURF_X32R32F, - gcvSURF_G32R32F, - gcvSURF_X32G32R32F, - gcvSURF_B32G32R32F, - gcvSURF_X32B32G32R32F, - gcvSURF_A32B32G32R32F, - gcvSURF_A16F, - gcvSURF_L16F, - gcvSURF_A16L16F, - gcvSURF_A16R16F, - gcvSURF_A32F, - gcvSURF_L32F, - gcvSURF_A32L32F, - gcvSURF_A32R32F, - gcvSURF_E5B9G9R9, - gcvSURF_B10G11R11F, - - gcvSURF_X16B16G16R16F_2_A8R8G8B8, - gcvSURF_A16B16G16R16F_2_A8R8G8B8, - gcvSURF_A16B16G16R16F_2_G16R16F, - gcvSURF_G32R32F_2_A8R8G8B8, - gcvSURF_X32B32G32R32F_2_G32R32F, - gcvSURF_A32B32G32R32F_2_G32R32F, - gcvSURF_X32B32G32R32F_4_A8R8G8B8, - gcvSURF_A32B32G32R32F_4_A8R8G8B8, - - gcvSURF_R16F_1_A4R4G4B4, - gcvSURF_G16R16F_1_A8R8G8B8, - gcvSURF_B16G16R16F_2_A8R8G8B8, - - gcvSURF_R32F_1_A8R8G8B8, - gcvSURF_B32G32R32F_3_A8R8G8B8, - gcvSURF_B10G11R11F_1_A8R8G8B8, - - gcvSURF_A32F_1_R32F, - gcvSURF_L32F_1_R32F, - gcvSURF_A32L32F_1_G32R32F, - - - - /* sRGB format. */ - gcvSURF_SBGR8 = 1400, - gcvSURF_A8_SBGR8, - gcvSURF_X8_SBGR8, - gcvSURF_A8_SRGB8, - gcvSURF_X8_SRGB8, - - /* Integer formats. */ - gcvSURF_R8I = 1500, - gcvSURF_R8UI, - gcvSURF_R16I, - gcvSURF_R16UI, - gcvSURF_R32I, - gcvSURF_R32UI, - gcvSURF_X8R8I, - gcvSURF_G8R8I, - gcvSURF_X8R8UI, - gcvSURF_G8R8UI, - gcvSURF_X16R16I, - gcvSURF_G16R16I, - gcvSURF_X16R16UI, - gcvSURF_G16R16UI, - gcvSURF_X32R32I, - gcvSURF_G32R32I, - gcvSURF_X32R32UI, - gcvSURF_G32R32UI, - gcvSURF_X8G8R8I, - gcvSURF_B8G8R8I, - gcvSURF_X8G8R8UI, - gcvSURF_B8G8R8UI, - gcvSURF_X16G16R16I, - gcvSURF_B16G16R16I, - gcvSURF_X16G16R16UI, - gcvSURF_B16G16R16UI, - gcvSURF_X32G32R32I, - gcvSURF_B32G32R32I, - gcvSURF_X32G32R32UI, - gcvSURF_B32G32R32UI, - gcvSURF_X8B8G8R8I, - gcvSURF_A8B8G8R8I, - gcvSURF_X8B8G8R8UI, - gcvSURF_A8B8G8R8UI, - gcvSURF_X16B16G16R16I, - gcvSURF_A16B16G16R16I, - gcvSURF_X16B16G16R16UI, - gcvSURF_A16B16G16R16UI, - gcvSURF_X32B32G32R32I, - gcvSURF_A32B32G32R32I, - gcvSURF_X32B32G32R32UI, - gcvSURF_A32B32G32R32UI, - gcvSURF_A2B10G10R10UI, - gcvSURF_G32R32I_2_A8R8G8B8, - gcvSURF_G32R32I_1_G32R32F, - gcvSURF_G32R32UI_2_A8R8G8B8, - gcvSURF_G32R32UI_1_G32R32F, - gcvSURF_X16B16G16R16I_2_A8R8G8B8, - gcvSURF_X16B16G16R16I_1_G32R32F, - gcvSURF_A16B16G16R16I_2_A8R8G8B8, - gcvSURF_A16B16G16R16I_1_G32R32F, - gcvSURF_X16B16G16R16UI_2_A8R8G8B8, - gcvSURF_X16B16G16R16UI_1_G32R32F, - gcvSURF_A16B16G16R16UI_2_A8R8G8B8, - gcvSURF_A16B16G16R16UI_1_G32R32F, - gcvSURF_X32B32G32R32I_2_G32R32I, - gcvSURF_A32B32G32R32I_2_G32R32I, - gcvSURF_A32B32G32R32I_2_G32R32F, - gcvSURF_X32B32G32R32I_3_A8R8G8B8, - gcvSURF_A32B32G32R32I_4_A8R8G8B8, - gcvSURF_X32B32G32R32UI_2_G32R32UI, - gcvSURF_A32B32G32R32UI_2_G32R32UI, - gcvSURF_A32B32G32R32UI_2_G32R32F, - gcvSURF_X32B32G32R32UI_3_A8R8G8B8, - gcvSURF_A32B32G32R32UI_4_A8R8G8B8, - gcvSURF_A2B10G10R10UI_1_A8R8G8B8, - gcvSURF_A8B8G8R8I_1_A8R8G8B8, - gcvSURF_A8B8G8R8UI_1_A8R8G8B8, - gcvSURF_R8I_1_A4R4G4B4, - gcvSURF_R8UI_1_A4R4G4B4, - gcvSURF_R16I_1_A4R4G4B4, - gcvSURF_R16UI_1_A4R4G4B4, - gcvSURF_R32I_1_A8R8G8B8, - gcvSURF_R32UI_1_A8R8G8B8, - gcvSURF_X8R8I_1_A4R4G4B4, - gcvSURF_X8R8UI_1_A4R4G4B4, - gcvSURF_G8R8I_1_A4R4G4B4, - gcvSURF_G8R8UI_1_A4R4G4B4, - gcvSURF_X16R16I_1_A4R4G4B4, - gcvSURF_X16R16UI_1_A4R4G4B4, - gcvSURF_G16R16I_1_A8R8G8B8, - gcvSURF_G16R16UI_1_A8R8G8B8, - gcvSURF_X32R32I_1_A8R8G8B8, - gcvSURF_X32R32UI_1_A8R8G8B8, - gcvSURF_X8G8R8I_1_A4R4G4B4, - gcvSURF_X8G8R8UI_1_A4R4G4B4, - gcvSURF_B8G8R8I_1_A8R8G8B8, - gcvSURF_B8G8R8UI_1_A8R8G8B8, - gcvSURF_B16G16R16I_2_A8R8G8B8, - gcvSURF_B16G16R16I_1_G32R32F, - gcvSURF_B16G16R16UI_2_A8R8G8B8, - gcvSURF_B16G16R16UI_1_G32R32F, - gcvSURF_B32G32R32I_3_A8R8G8B8, - gcvSURF_B32G32R32UI_3_A8R8G8B8, - gcvSURF_A16B16G16R16_2_A8R8G8B8, - gcvSURF_R8G8B8_1_A8R8G8B8, - gcvSURF_G16R16_1_A8R8G8B8, - gcvSURF_A2B10G10R10_1_A8R8G8B8, - gcvSURF_A2R10G10B10_1_A8R8G8B8, - gcvSURF_A2W10V10U10_1_A8R8G8B8, - - /* ASTC formats. */ - gcvSURF_ASTC4x4 = 1600, - gcvSURF_ASTC5x4, - gcvSURF_ASTC5x5, - gcvSURF_ASTC6x5, - gcvSURF_ASTC6x6, - gcvSURF_ASTC8x5, - gcvSURF_ASTC8x6, - gcvSURF_ASTC8x8, - gcvSURF_ASTC10x5, - gcvSURF_ASTC10x6, - gcvSURF_ASTC10x8, - gcvSURF_ASTC10x10, - gcvSURF_ASTC12x10, - gcvSURF_ASTC12x12, - gcvSURF_ASTC4x4_SRGB, - gcvSURF_ASTC5x4_SRGB, - gcvSURF_ASTC5x5_SRGB, - gcvSURF_ASTC6x5_SRGB, - gcvSURF_ASTC6x6_SRGB, - gcvSURF_ASTC8x5_SRGB, - gcvSURF_ASTC8x6_SRGB, - gcvSURF_ASTC8x8_SRGB, - gcvSURF_ASTC10x5_SRGB, - gcvSURF_ASTC10x6_SRGB, - gcvSURF_ASTC10x8_SRGB, - gcvSURF_ASTC10x10_SRGB, - gcvSURF_ASTC12x10_SRGB, - gcvSURF_ASTC12x12_SRGB, - - /* Recompile format*/ - gcvSURF_L16_1_A4R4G4B4 = 1700, - gcvSURF_V16U16_1_A8R8G8B8, - gcvSURF_Q8W8V8U8_1_A8R8G8B8, - gcvSURF_X8L8V8U8_1_A8R8G8B8, - gcvSURF_R3G3B2_1_A8R8G8B8, - gcvSURF_A8R3G3B2_1_A8R8G8B8, - gcvSURF_W11V11U10_1_A8R8G8B8, - gcvSURF_Q16W16V16U16_2_A8R8G8B8, - gcvSURF_W11V11U10, - gcvSURF_V8U8_1_A4R4G4B4, - gcvSURF_A8B8G8R8_1_A8R8G8B8, - gcvSURF_A32R32G32B32_1_A8R8G8B8, - gcvSURF_X16B16G16R16F_1_A8R8G8B8, - gcvSURF_A16B16G16R16F_1_A8R8G8B8, - gcvSURF_G32R32F_1_A8R8G8B8, - gcvSURF_X32B32G32R32F_1_A8R8G8B8, - gcvSURF_A32B32G32R32F_1_A8R8G8B8, - gcvSURF_G32R32I_1_A8R8G8B8, - gcvSURF_G32R32UI_1_A8R8G8B8, - gcvSURF_A32B32G32R32I_1_A8R8G8B8, - gcvSURF_A32B32G32R32UI_1_A8R8G8B8, - gcvSURF_Q16W16V16U16_1_A8R8G8B8, - gcvSURF_A16B16G16R16_1_A8R8G8B8, - gcvSURF_FORMAT_COUNT -} -gceSURF_FORMAT; - typedef enum _gceIMAGE_MEM_TYPE { gcvIMAGE_MEM_DEFAULT, @@ -1789,71 +684,12 @@ typedef enum _gce2D_SOURCE } gce2D_SOURCE; -/* Pipes. */ -typedef enum _gcePIPE_SELECT -{ - gcvPIPE_INVALID = ~0, - gcvPIPE_3D = 0, - gcvPIPE_2D -} -gcePIPE_SELECT; - -/* Hardware type. */ -typedef enum _gceHARDWARE_TYPE -{ - gcvHARDWARE_INVALID, - gcvHARDWARE_3D, - gcvHARDWARE_2D, - gcvHARDWARE_VG, - gcvHARDWARE_3D2D, - gcvHARDWARE_NUM_TYPES, -} -gceHARDWARE_TYPE; - -#define gcdCHIP_COUNT gcvCORE_COUNT - typedef enum _gceMMU_MODE { gcvMMU_MODE_1K, gcvMMU_MODE_4K, } gceMMU_MODE; -/* User signal command codes. */ -typedef enum _gceUSER_SIGNAL_COMMAND_CODES -{ - gcvUSER_SIGNAL_CREATE, - gcvUSER_SIGNAL_DESTROY, - gcvUSER_SIGNAL_SIGNAL, - gcvUSER_SIGNAL_WAIT, - gcvUSER_SIGNAL_MAP, - gcvUSER_SIGNAL_UNMAP, -} -gceUSER_SIGNAL_COMMAND_CODES; - -/* Shared buffer command codes. */ -typedef enum _gceSHBUF_COMMAND_CODES -{ - gcvSHBUF_CREATE, - gcvSHBUF_DESTROY, - gcvSHBUF_MAP, - gcvSHBUF_WRITE, - gcvSHBUF_READ, -} -gceSHBUF_COMMAND_CODES; - -/* Event locations. */ -typedef enum _gceKERNEL_WHERE -{ - gcvKERNEL_COMMAND, - gcvKERNEL_VERTEX, - gcvKERNEL_TRIANGLE, - gcvKERNEL_TEXTURE, - gcvKERNEL_PIXEL, - gcvKERNEL_BLT, -} -gceKERNEL_WHERE; - - /* gcdDUMP message type. */ typedef enum _gceDEBUG_MESSAGE_TYPE { @@ -2011,6 +847,15 @@ typedef enum _gceTEXTURE_DS_MODE gcvTEXTURE_DS_MODE_STENCIL = 2, }gceTEXTURE_DS_MODE; +typedef enum _gceTEXTURE_DS_TEX_MODE +{ + gcvTEXTURE_DS_TEXTURE_MODE_LUMINANCE = 0, + gcvTEXTURE_DS_TEXTURE_MODE_INTENSITY, + gcvTEXTURE_DS_TEXTURE_MODE_ALPHA, + gcvTEXTURE_DS_TEXTURE_MODE_RED, + + gcvTEXTURE_DS_TEXTURE_MODE_INVALID, +}gceTEXTURE_DS_TEX_MODE; /* Pixel output swizzle modes. */ typedef enum _gcePIXEL_SWIZZLE @@ -2060,28 +905,11 @@ typedef enum _gceMULTI_GPU_RENDERING_MODE gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_64x64, gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x64, gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED_128x128, + gcvMULTI_GPU_RENDERING_MODE_INTERLEAVED, gcvMULTI_GPU_RENDERING_MODE_INVALID } gceMULTI_GPU_RENDERING_MODE; -typedef enum _gceCORE_3D_MASK -{ - gcvCORE_3D_0_MASK = (1 << 0), - gcvCORE_3D_1_MASK = (1 << 1), - - gcvCORE_3D_ALL_MASK = (0xFFFF) -} -gceCORE_3D_MASK; - -typedef enum _gceCORE_3D_ID -{ - gcvCORE_3D_0_ID = 0, - gcvCORE_3D_1_ID = 1, - - gcvCORE_3D_ID_INVALID = ~0UL -} -gceCORE_3D_ID; - typedef enum _gceMULTI_GPU_MODE { gcvMULTI_GPU_MODE_COMBINED = 0, @@ -2118,169 +946,1164 @@ typedef enum _gceHAL_ARG_VERSION gceHAL_ARG_VERSION; -typedef enum _gceCHIP_FLAG +/** endian mode for each 2Bytes +* endian mode endian +*endian mode0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +*endian mode1: 1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14 +*endian mode2: 2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 +*endain mode3: 3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 +*endain mode4: 12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 +*endain mode5: 13 12 15 14 9 8 11 10 5 4 7 6 1 0 3 2 +*endain mode6: 14 15 12 13 10 11 8 9 6 7 4 5 2 3 0 1 +*endain mode7: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +**/ +typedef enum _gceENDIAN_MODE +{ + gcvENDIAN_MODE0 = 0x0, /* endian mode0 */ + gcvENDIAN_MODE1 = 0x1, /* endian mode1 */ + gcvENDIAN_MODE2 = 0x2, /* endian mode2 */ + gcvENDIAN_MODE3 = 0x3, /* endian mode3 */ + gcvENDIAN_MODE4 = 0x4, /* endian mode4 */ + gcvENDIAN_MODE5 = 0x5, /* endian mode5 */ + gcvENDIAN_MODE6 = 0x6, /* endian mode6 */ + gcvENDIAN_MODE7 = 0x7, /* endian mode7 */ +} +gceENDIAN_MODE; + +typedef enum _gceHW_FE_TYPE { - gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX = 1 << 0, - gcvCHIP_FLAG_GC2000_R2 = 1 << 1, - gcvCHIP_AXI_BUS128_BITS = 1 << 2, + gcvHW_FE_WAIT_LINK, + gcvHW_FE_ASYNC, + gcvHW_FE_MULTI_CHANNEL, } -gceCHIP_FLAG; +gceHW_FE_TYPE; -/* If different, choose render engine */ -#define PRIORITY_ENGINE(a, b) gcmMIN(a,b) +typedef enum _gceMCFE_CHANNEL_TYPE +{ + gcvMCFE_CHANNEL_NONE = 0, + gcvMCFE_CHANNEL_SYSTEM, + gcvMCFE_CHANNEL_SHADER, + gcvMCFE_CHANNEL_NN, + gcvMCFE_CHANNEL_TP, + + gcvMCFE_CHANNEL_3DBLIT = 128, +} +gceMCFE_CHANNEL_TYPE; -typedef enum +typedef enum _gcePAGE_TYPE { - gcvENGINE_RENDER = 0, - gcvENGINE_BLT = 1, - gcvENGINE_GPU_ENGINE_COUNT = 2, - gcvENGINE_CPU = gcvENGINE_GPU_ENGINE_COUNT, - gcvENGINE_ALL_COUNT = gcvENGINE_CPU + 1, - gcvENGINE_INVALID = gcvENGINE_ALL_COUNT + 0x100 + gcvPAGE_TYPE_1M, + gcvPAGE_TYPE_4K, } -gceENGINE; +gcePAGE_TYPE; -/* CORE enum. */ -typedef enum _gceCORE +typedef enum _gceAREA_TYPE { - gcvCORE_MAJOR, - gcvCORE_3D1, - gcvCORE_3D2, - gcvCORE_3D3, - gcvCORE_3D4, - gcvCORE_3D5, - gcvCORE_3D6, - gcvCORE_3D7, - gcvCORE_3D_MAX = gcvCORE_3D7, - gcvCORE_2D, - gcvCORE_VG, -#if gcdDEC_ENABLE_AHB - gcvCORE_DEC, -#endif - gcvCORE_COUNT + gcvAREA_TYPE_UNKNOWN = 0, + gcvAREA_TYPE_FLATMAP, + gcvAREA_TYPE_1M, + gcvAREA_TYPE_4K, } -gceCORE; +gceAREA_TYPE; + +/******************************************************************************* +** Broadcast interface. +*/ + +typedef enum _gceBROADCAST +{ + /* GPU might be idle. */ + gcvBROADCAST_GPU_IDLE, + + /* A commit is going to happen. */ + gcvBROADCAST_GPU_COMMIT, + + /* GPU seems to be stuck. */ + gcvBROADCAST_GPU_STUCK, + + /* First process gets attached. */ + gcvBROADCAST_FIRST_PROCESS, + /* Last process gets detached. */ + gcvBROADCAST_LAST_PROCESS, -typedef enum _gceSECURE_MODE + /* AXI bus error. */ + gcvBROADCAST_AXI_BUS_ERROR, + + /* Out of memory. */ + gcvBROADCAST_OUT_OF_MEMORY, +} +gceBROADCAST; + +/* Notifications. */ +typedef enum _gceNOTIFY { - /* For cores without gcvFEATURE_SECURITY. */ - gcvSECURE_NONE, + gcvNOTIFY_INTERRUPT, + gcvNOTIFY_COMMAND_QUEUE, +} +gceNOTIFY; - /* Use registers added in gcvFEATURE_SECURITY in normal driver, - ** In this mode, GPU always works under non secure mode and - ** should not touch secure buffer. It is used to test basic function. - */ - gcvSECURE_IN_NORMAL, +/* Flush flags. */ +typedef enum _gceKERNEL_FLUSH +{ + gcvFLUSH_COLOR = 0x01, + gcvFLUSH_DEPTH = 0x02, + gcvFLUSH_TEXTURE = 0x04, + gcvFLUSH_2D = 0x08, + gcvFLUSH_L2 = 0x10, + gcvFLUSH_TILE_STATUS = 0x20, + gcvFLUSH_ICACHE = 0x40, + gcvFLUSH_TXDESC = 0x80, + gcvFLUSH_FENCE = 0x100, + gcvFLUSH_VERTEX = 0x200, + gcvFLUSH_TFBHEADER = 0x400, + gcvFLUSH_ALL = gcvFLUSH_COLOR + | gcvFLUSH_DEPTH + | gcvFLUSH_TEXTURE + | gcvFLUSH_2D + | gcvFLUSH_L2 + | gcvFLUSH_TILE_STATUS + | gcvFLUSH_ICACHE + | gcvFLUSH_TXDESC + | gcvFLUSH_FENCE + | gcvFLUSH_VERTEX + | gcvFLUSH_TFBHEADER +} +gceKERNEL_FLUSH; - /* Make use of gcvFEATURE_SECURITY in trust application. */ - gcvSECURE_IN_TA +typedef enum _gceCOUNTER +{ + gcvCOUNTER_FRONT_END, + gcvCOUNTER_VERTEX_SHADER, + gcvCOUNTER_PRIMITIVE_ASSEMBLY, + gcvCOUNTER_SETUP, + gcvCOUNTER_RASTERIZER, + gcvCOUNTER_PIXEL_SHADER, + gcvCOUNTER_TEXTURE, + gcvCOUNTER_PIXEL_ENGINE, + gcvCOUNTER_MEMORY_CONTROLLER_COLOR, + gcvCOUNTER_MEMORY_CONTROLLER_DEPTH, + gcvCOUNTER_HOST_INTERFACE0, + gcvCOUNTER_HOST_INTERFACE1, + gcvCOUNTER_GPUL2_CACHE, + gcvCOUNTER_COUNT +} +gceCOUNTER; + +typedef enum _gceProfilerClient +{ + gcvCLIENT_OPENGLES11 = 1, + gcvCLIENT_OPENGLES, + gcvCLIENT_OPENGL, + gcvCLIENT_OPENVG, + gcvCLIENT_OPENCL, + gcvCLIENT_OPENVX, + gcvCLIENT_OPENVK, } -gceSECURE_MODE; +gceProfilerClient; -/* kernel driver compression option, as it's a system global option, -** it means kernel driver allows the options, NOT necessarily means it must be on. +typedef enum _gceCOUNTER_OPTYPE +{ + gcvCOUNTER_OP_DRAW = 0, + gcvCOUNTER_OP_BLT = 1, + gcvCOUNTER_OP_COMPUTE = 2, + gcvCOUNTER_OP_RS = 3, + gcvCOUNTER_OP_FINISH = 4, + gcvCOUNTER_OP_FRAME = 5, + gcvCOUNTER_OP_NONE = 6 +} +gceCOUNTER_OPTYPE; + +typedef enum _gceProbeStatus +{ + gcvPROBE_Disabled = 0, + gcvPROBE_Paused = 1, + gcvPROBE_Enabled = 2, +} +gceProbeStatus; + +typedef enum _gceProbeCmd +{ + gcvPROBECMD_BEGIN = 0, + gcvPROBECMD_PAUSE = 1, + gcvPROBECMD_RESUME = 2, + gcvPROBECMD_END = 3, +} +gceProbeCmd; + +/******************************************************************************* +** Events. ********************************************************************* */ -typedef enum _gceCOMPRESSION_OPTION + +typedef enum _halEventType +{ + /* Keyboard event. */ + HAL_KEYBOARD, + + /* Mouse move event. */ + HAL_POINTER, + + /* Mouse button event. */ + HAL_BUTTON, + + /* Application close event. */ + HAL_CLOSE, + + /* Application window has been updated. */ + HAL_WINDOW_UPDATE +} +halEventType; + +/* Scancodes for keyboard. */ +typedef enum _halKeys +{ + HAL_UNKNOWN = -1, + + HAL_BACKSPACE = 0x08, + HAL_TAB, + HAL_ENTER = 0x0D, + HAL_ESCAPE = 0x1B, + + HAL_SPACE = 0x20, + HAL_SINGLEQUOTE = 0x27, + HAL_PAD_ASTERISK = 0x2A, + HAL_COMMA = 0x2C, + HAL_HYPHEN, + HAL_PERIOD, + HAL_SLASH, + HAL_0, + HAL_1, + HAL_2, + HAL_3, + HAL_4, + HAL_5, + HAL_6, + HAL_7, + HAL_8, + HAL_9, + HAL_SEMICOLON = 0x3B, + HAL_EQUAL = 0x3D, + HAL_A = 0x41, + HAL_B, + HAL_C, + HAL_D, + HAL_E, + HAL_F, + HAL_G, + HAL_H, + HAL_I, + HAL_J, + HAL_K, + HAL_L, + HAL_M, + HAL_N, + HAL_O, + HAL_P, + HAL_Q, + HAL_R, + HAL_S, + HAL_T, + HAL_U, + HAL_V, + HAL_W, + HAL_X, + HAL_Y, + HAL_Z, + HAL_LBRACKET, + HAL_BACKSLASH, + HAL_RBRACKET, + HAL_BACKQUOTE = 0x60, + + HAL_F1 = 0x80, + HAL_F2, + HAL_F3, + HAL_F4, + HAL_F5, + HAL_F6, + HAL_F7, + HAL_F8, + HAL_F9, + HAL_F10, + HAL_F11, + HAL_F12, + + HAL_LCTRL, + HAL_RCTRL, + HAL_LSHIFT, + HAL_RSHIFT, + HAL_LALT, + HAL_RALT, + HAL_CAPSLOCK, + HAL_NUMLOCK, + HAL_SCROLLLOCK, + HAL_PAD_0, + HAL_PAD_1, + HAL_PAD_2, + HAL_PAD_3, + HAL_PAD_4, + HAL_PAD_5, + HAL_PAD_6, + HAL_PAD_7, + HAL_PAD_8, + HAL_PAD_9, + HAL_PAD_HYPHEN, + HAL_PAD_PLUS, + HAL_PAD_SLASH, + HAL_PAD_PERIOD, + HAL_PAD_ENTER, + HAL_SYSRQ, + HAL_PRNTSCRN, + HAL_BREAK, + HAL_UP, + HAL_LEFT, + HAL_RIGHT, + HAL_DOWN, + HAL_HOME, + HAL_END, + HAL_PGUP, + HAL_PGDN, + HAL_INSERT, + HAL_DELETE, + HAL_LWINDOW, + HAL_RWINDOW, + HAL_MENU, + HAL_POWER, + HAL_SLEEP, + HAL_WAKE +} +halKeys; + +/*! + @brief Command codes between kernel module and TrustZone + @discussion + Critical services must be done in TrustZone to avoid sensitive content leak. Most of kernel module is kept in non-Secure os to minimize + code in TrustZone. + */ +typedef enum kernel_packet_command { + KERNEL_START_COMMAND, + KERNEL_SUBMIT, + KERNEL_MAP_MEMORY, /* */ + KERNEL_UNMAP_MEMORY, + KERNEL_ALLOCATE_SECRUE_MEMORY, /*! Security memory management. */ + KERNEL_FREE_SECURE_MEMORY, + KERNEL_EXECUTE, /* Execute a command buffer. */ + KERNEL_DUMP_MMU_EXCEPTION, + KERNEL_HANDLE_MMU_EXCEPTION, + KERNEL_READ_MMU_EXCEPTION, +} kernel_packet_command_t; + +enum { + gcvTA_COMMAND_INIT, + gcvTA_COMMAND_DISPATCH, + + gcvTA_CALLBACK_ALLOC_SECURE_MEM, + gcvTA_CALLBACK_FREE_SECURE_MEM, +}; + +typedef enum { + gcvFENCE_TYPE_READ = 0x1, + gcvFENCE_TYPE_WRITE = 0x2, + gcvFENCE_TYPE_ALL = gcvFENCE_TYPE_READ | gcvFENCE_TYPE_WRITE, + gcvFNECE_TYPE_INVALID = 0x10000, +} +gceFENCE_TYPE; + +typedef enum _gceTLS_KEY +{ + gcvTLS_KEY_EGL, + gcvTLS_KEY_OPENGL_ES, + gcvTLS_KEY_OPENVG, + gcvTLS_KEY_OPENGL, + gcvTLS_KEY_OPENCL, + gcvTLS_KEY_OPENVX, + + gcvTLS_KEY_COUNT +} +gceTLS_KEY; + +typedef enum _gcePLS_VALUE +{ + gcePLS_VALUE_EGL_DISPLAY_INFO, + gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO, + gcePLS_VALUE_EGL_DESTRUCTOR_INFO, +} +gcePLS_VALUE; + +#if gcdENABLE_3D +/* Blending functions. */ +typedef enum _gceBLEND_FUNCTION +{ + gcvBLEND_ZERO, + gcvBLEND_ONE, + gcvBLEND_SOURCE_COLOR, + gcvBLEND_INV_SOURCE_COLOR, + gcvBLEND_SOURCE_ALPHA, + gcvBLEND_INV_SOURCE_ALPHA, + gcvBLEND_TARGET_COLOR, + gcvBLEND_INV_TARGET_COLOR, + gcvBLEND_TARGET_ALPHA, + gcvBLEND_INV_TARGET_ALPHA, + gcvBLEND_SOURCE_ALPHA_SATURATE, + gcvBLEND_CONST_COLOR, + gcvBLEND_INV_CONST_COLOR, + gcvBLEND_CONST_ALPHA, + gcvBLEND_INV_CONST_ALPHA, +} +gceBLEND_FUNCTION; + +/* Blending modes. */ +typedef enum _gceBLEND_MODE +{ + gcvBLEND_ADD = 0, + gcvBLEND_SUBTRACT, + gcvBLEND_REVERSE_SUBTRACT, + gcvBLEND_MIN, + gcvBLEND_MAX, + gcvBLEND_MULTIPLY, + gcvBLEND_SCREEN, + gcvBLEND_OVERLAY, + gcvBLEND_DARKEN, + gcvBLEND_LIGHTEN, + gcvBLEND_COLORDODGE, + gcvBLEND_COLORBURN, + gcvBLEND_HARDLIGHT, + gcvBLEND_SOFTLIGHT, + gcvBLEND_DIFFERENCE, + gcvBLEND_EXCLUSION, + gcvBLEND_HSL_HUE, + gcvBLEND_HSL_SATURATION, + gcvBLEND_HSL_COLOR, + gcvBLEND_HSL_LUMINOSITY, + + gcvBLEND_TOTAL +} +gceBLEND_MODE; + +/* Depth modes. */ +typedef enum _gceDEPTH_MODE +{ + gcvDEPTH_NONE, + gcvDEPTH_Z, + gcvDEPTH_W, +} +gceDEPTH_MODE; +#endif /* gcdENABLE_3D */ + +/* API flags. */ +typedef enum _gceAPI { - gcvCOMPRESSION_OPTION_NONE = 0x0, /* No any compression */ - gcvCOMPRESSION_OPTION_COLOR = 0x1, /* Compression for non-msaa color format */ - gcvCOMPRESSION_OPTION_DEPTH = 0x2, /* Compression for non-msaa depth format */ - gcvCOMPRESSION_OPTION_MSAA_COLOR = 0x4, /* Compression for msaa color */ - gcvCOMPRESSION_OPTION_MSAA_DEPTH = 0x8, /* Compression for msaa depth */ + gcvAPI_D3D = 1, + gcvAPI_OPENGL_ES11, + gcvAPI_OPENGL_ES20, + gcvAPI_OPENGL_ES30, + gcvAPI_OPENGL_ES31, + gcvAPI_OPENGL_ES32, + gcvAPI_OPENGL, + gcvAPI_OPENVG, + gcvAPI_OPENCL, + gcvAPI_OPENVK, +} +gceAPI; - /* default compressio option */ - gcvCOMPRESSION_OPTION_DEFAULT = gcvCOMPRESSION_OPTION_DEPTH | - gcvCOMPRESSION_OPTION_COLOR | - gcvCOMPRESSION_OPTION_MSAA_COLOR | - gcvCOMPRESSION_OPTION_MSAA_DEPTH, +typedef enum _gceWHERE +{ + gcvWHERE_COMMAND_PREFETCH = 0, + gcvWHERE_COMMAND, + gcvWHERE_RASTER, + gcvWHERE_PIXEL, + gcvWHERE_BLT, } -gceCOMPRESSION_OPTION; +gceWHERE; -typedef enum _gceHW_FE_TYPE +typedef enum _gceHOW { - gcvHW_FE_WAIT_LINK, - gcvHW_FE_ASYNC, - gcvHW_FE_MULTI_CHANNEL, + gcvHOW_SEMAPHORE = 0x1, + gcvHOW_STALL = 0x2, + gcvHOW_SEMAPHORE_STALL = 0x3, } -gceHW_FE_TYPE; +gceHOW; -typedef enum _gceMCFE_CHANNEL_TYPE +typedef enum _gceSignalHandlerType { - gcvMCFE_CHANNEL_NONE = 0, - gcvMCFE_CHANNEL_SYSTEM, - gcvMCFE_CHANNEL_SHADER, - gcvMCFE_CHANNEL_NN, - gcvMCFE_CHANNEL_TP, + gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1, +} +gceSignalHandlerType; - gcvMCFE_CHANNEL_3DBLIT = 128, +typedef enum _gceFILE_MODE +{ + gcvFILE_CREATE = 0, + gcvFILE_APPEND, + gcvFILE_READ, + gcvFILE_CREATETEXT, + gcvFILE_APPENDTEXT, + gcvFILE_READTEXT, } -gceMCFE_CHANNEL_TYPE; +gceFILE_MODE; -typedef enum _gceSRAM_INTERNAL +typedef enum _gceFILE_WHENCE { - gcvSRAM_INTERNAL0 = 0, - gcvSRAM_INTERNAL1, + gcvFILE_SEEK_SET, + gcvFILE_SEEK_CUR, + gcvFILE_SEEK_END +} +gceFILE_WHENCE; - gcvSRAM_INTER_COUNT +/* Color format classes. */ +typedef enum _gceFORMAT_CLASS +{ + gcvFORMAT_CLASS_RGBA = 4500, + gcvFORMAT_CLASS_YUV, + gcvFORMAT_CLASS_INDEX, + gcvFORMAT_CLASS_LUMINANCE, + gcvFORMAT_CLASS_BUMP, + gcvFORMAT_CLASS_DEPTH, + gcvFORMAT_CLASS_ASTC, + gcvFORMAT_CLASS_COMPRESSED, + gcvFORMAT_CLASS_OTHER } -gceSRAM_INTERNAL; +gceFORMAT_CLASS; -typedef enum _gceSRAM_EXTERNAL +/* Color format data type */ +typedef enum _gceFORMAT_DATATYPE { - gcvSRAM_EXTERNAL0 = 0, - gcvSRAM_EXTERNAL1, + gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED, + gcvFORMAT_DATATYPE_SIGNED_NORMALIZED, + gcvFORMAT_DATATYPE_UNSIGNED_INTEGER, + gcvFORMAT_DATATYPE_SIGNED_INTEGER, + gcvFORMAT_DATATYPE_FLOAT16, + gcvFORMAT_DATATYPE_FLOAT32, + gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9, + gcvFORMAT_DATATYPE_FLOAT_B10G11R11F, + gcvFORMAT_DATATYPE_INDEX, + gcvFORMAT_DATATYPE_SRGB, + gcvFORMAT_DATATYPE_FLOAT32_UINT, +} +gceFORMAT_DATATYPE; - gcvSRAM_EXT_COUNT +typedef enum _gceORIENTATION +{ + gcvORIENTATION_TOP_BOTTOM, + gcvORIENTATION_BOTTOM_TOP, } -gceSRAM_EXTERNAL; +gceORIENTATION; -typedef enum _gceFLATMAP_FLAG +/* Special enums for width field in gcsFORMAT_COMPONENT. */ +typedef enum _gceCOMPONENT_CONTROL { - gcvFLATMAP_DIRECT, - gcvFLATMAP_SHIFT, + gcvCOMPONENT_NOTPRESENT = 0x00, + gcvCOMPONENT_DONTCARE = 0x80, + gcvCOMPONENT_WIDTHMASK = 0x7F, + gcvCOMPONENT_ODD = 0x80 } -gceFLATMAP_FLAG; +gceCOMPONENT_CONTROL; -typedef enum _gcePAGE_TYPE +/* User option. */ +typedef enum _gceDEBUG_MSG { - gcvPAGE_TYPE_1M, - gcvPAGE_TYPE_4K, + gcvDEBUG_MSG_NONE, + gcvDEBUG_MSG_ERROR, + gcvDEBUG_MSG_WARNING } -gcePAGE_TYPE; +gceDEBUG_MSG; -typedef enum _gceAREA_TYPE +/* Compressed format now was defined same as dec400d, should be general. */ +typedef enum _VIV_COMPRESS_FMT { - gcvAREA_TYPE_UNKNOWN = 0, - gcvAREA_TYPE_FLATMAP, - gcvAREA_TYPE_1M, - gcvAREA_TYPE_4K, + _VIV_CFMT_ARGB8 = 0, + _VIV_CFMT_XRGB8, + _VIV_CFMT_AYUV, + _VIV_CFMT_UYVY, + _VIV_CFMT_YUY2, + _VIV_CFMT_YUV_ONLY, + _VIV_CFMT_UV_MIX, + _VIV_CFMT_ARGB4, + _VIV_CFMT_XRGB4, + _VIV_CFMT_A1R5G5B5, + _VIV_CFMT_X1R5G5B5, + _VIV_CFMT_R5G6B5, + _VIV_CFMT_Z24S8, + _VIV_CFMT_Z24, + _VIV_CFMT_Z16, + _VIV_CFMT_A2R10G10B10, + _VIV_CFMT_BAYER, + _VIV_CFMT_SIGNED_BAYER, + _VIV_CFMT_VAA16, + _VIV_CFMT_S8, + + _VIV_CFMT_MAX, +} _VIV_COMPRESS_FMT; + +typedef enum _gcePROGRAM_STAGE +{ + gcvPROGRAM_STAGE_VERTEX = 0x0, + gcvPROGRAM_STAGE_TCS = 0x1, + gcvPROGRAM_STAGE_TES = 0x2, + gcvPROGRAM_STAGE_GEOMETRY = 0x3, + gcvPROGRAM_STAGE_FRAGMENT = 0x4, + gcvPROGRAM_STAGE_GRAPHICS_COUNT = 0x5, + gcvPROGRAM_STAGE_COMPUTE = 0x5, + gcvPROGRAM_STAGE_OPENCL = 0x6, + gcvPROGRAM_STAGE_LAST } -gceAREA_TYPE; +gcePROGRAM_STAGE; + +typedef enum _gcePROGRAM_STAGE_BIT +{ + gcvPROGRAM_STAGE_VERTEX_BIT = 1 << gcvPROGRAM_STAGE_VERTEX, + gcvPROGRAM_STAGE_TCS_BIT = 1 << gcvPROGRAM_STAGE_TCS, + gcvPROGRAM_STAGE_TES_BIT = 1 << gcvPROGRAM_STAGE_TES, + gcvPROGRAM_STAGE_GEOMETRY_BIT = 1 << gcvPROGRAM_STAGE_GEOMETRY, + gcvPROGRAM_STAGE_FRAGMENT_BIT = 1 << gcvPROGRAM_STAGE_FRAGMENT, + gcvPROGRAM_STAGE_COMPUTE_BIT = 1 << gcvPROGRAM_STAGE_COMPUTE, + gcvPROGRAM_STAGE_OPENCL_BIT = 1 << gcvPROGRAM_STAGE_OPENCL, +} +gcePROGRAM_STAGE_BIT; + +typedef enum _gceBLIT_FLAG +{ + gcvBLIT_FLAG_SKIP_DEPTH_WRITE = 1 << 0, + gcvBLIT_FLAG_SKIP_STENCIL_WRITE = 1 << 1, +} gceBLIT_FLAG; + +/* Clear flags. */ +typedef enum _gceCLEAR +{ + gcvCLEAR_COLOR = 0x1, + gcvCLEAR_DEPTH = 0x2, + gcvCLEAR_STENCIL = 0x4, + gcvCLEAR_HZ = 0x8, + gcvCLEAR_WITH_GPU_ONLY = 0x100, + gcvCLEAR_WITH_CPU_ONLY = 0x200, + gcvCLEAR_MULTI_SLICES = 0x400, +} +gceCLEAR; + +typedef enum _gceBLITDRAW_TYPE +{ + gcvBLITDRAW_CLEAR = 0, + gcvBLITDRAW_BLIT = 1, + + /* last number, not a real type */ + gcvBLITDRAW_NUM_TYPE + } +gceBLITDRAW_TYPE; + +typedef enum _gceSPLIT_DRAW_TYPE +{ + gcvSPLIT_DRAW_UNKNOWN = 0x0, + gcvSPLIT_DRAW_1, + gcvSPLIT_DRAW_2, + gcvSPLIT_DRAW_3, + gcvSPLIT_DRAW_4, + gcvSPLIT_DRAW_XFB, + gcvSPLIT_DRAW_INDEX_FETCH, + gcvSPLIT_DRAW_TCS, + gcvSPLIT_DRAW_STIPPLE, + gcvSPLIT_DRAW_WIDE_LINE, + gcvSPLIT_DRAW_LAST +} +gceSPLIT_DRAW_TYPE; + +/* Blending targets. */ +typedef enum _gceBLEND_UNIT +{ + gcvBLEND_SOURCE, + gcvBLEND_TARGET, +} +gceBLEND_UNIT; + +typedef enum _gceXfbCmd +{ + gcvXFBCMD_BEGIN = 0, + gcvXFBCMD_PAUSE = 1, + gcvXFBCMD_RESUME = 2, + gcvXFBCMD_END = 3, + gcvXFBCMD_PAUSE_INCOMMIT = 4, + gcvXFBCMD_RESUME_INCOMMIT = 5, + gcvXFBCMD_INVALID = 6, +} +gceXfbCmd; + +typedef enum _gceXfbStatus +{ + gcvXFB_Disabled = 0, + gcvXFB_Paused, + gcvXFB_Enabled, +} +gceXfbStatus; + +typedef enum _gceQueryStatus +{ + gcvQUERY_Disabled = 0, + gcvQUERY_Paused = 1, + gcvQUERY_Enabled = 2, +} +gceQueryStatus; + +typedef enum _gceQueryCmd +{ + gcvQUERYCMD_BEGIN = 0, + gcvQUERYCMD_PAUSE = 1, + gcvQUERYCMD_RESUME = 2, + gcvQUERYCMD_END = 3, + gcvQUERYCMD_INVALID = 4, +} +gceQueryCmd; + +typedef enum _gceQueryType +{ + gcvQUERY_OCCLUSION = 0, + gcvQUERY_XFB_WRITTEN = 1, + gcvQUERY_PRIM_GENERATED = 2, + gcvQUERY_MAX_NUM = 3, +} +gceQueryType; + +/* Cube faces. */ +typedef enum _gceTEXTURE_FACE +{ + gcvFACE_NONE = 0, + gcvFACE_POSITIVE_X, + gcvFACE_NEGATIVE_X, + gcvFACE_POSITIVE_Y, + gcvFACE_NEGATIVE_Y, + gcvFACE_POSITIVE_Z, + gcvFACE_NEGATIVE_Z, +} +gceTEXTURE_FACE; + +typedef enum _gceVERTEX_FORMAT +{ + gcvVERTEX_BYTE, + gcvVERTEX_UNSIGNED_BYTE, + gcvVERTEX_SHORT, + gcvVERTEX_UNSIGNED_SHORT, + gcvVERTEX_INT, + gcvVERTEX_UNSIGNED_INT, + gcvVERTEX_FIXED, + gcvVERTEX_HALF, + gcvVERTEX_FLOAT, + gcvVERTEX_DOUBLE, + gcvVERTEX_UNSIGNED_INT_10_10_10_2, + gcvVERTEX_INT_10_10_10_2, + gcvVERTEX_UNSIGNED_INT_2_10_10_10_REV, + gcvVERTEX_INT_2_10_10_10_REV, + /* integer format */ + gcvVERTEX_INT8, + gcvVERTEX_INT16, + gcvVERTEX_INT32, +} +gceVERTEX_FORMAT; + +/* What the SW converting scheme to create temp attrib */ +typedef enum _gceATTRIB_SCHEME +{ + gcvATTRIB_SCHEME_KEEP = 0, + gcvATTRIB_SCHEME_2_10_10_10_REV_TO_FLOAT, + gcvATTRIB_SCHEME_BYTE_TO_IVEC4, + gcvATTRIB_SCHEME_SHORT_TO_IVEC4, + gcvATTRIB_SCHEME_INT_TO_IVEC4, + gcvATTRIB_SCHEME_UBYTE_TO_UVEC4, + gcvATTRIB_SCHEME_USHORT_TO_UVEC4, + gcvATTRIB_SCHEME_UINT_TO_UVEC4, + gcvATTRIB_SCHEME_DOUBLE_TO_FLOAT, +} gceATTRIB_SCHEME; + +typedef enum _gceBUFOBJ_TYPE +{ + gcvBUFOBJ_TYPE_ARRAY_BUFFER = 1, + gcvBUFOBJ_TYPE_ELEMENT_ARRAY_BUFFER = 2, + gcvBUFOBJ_TYPE_GENERIC_BUFFER = 100 + +} gceBUFOBJ_TYPE; + +typedef enum _gceBUFOBJ_USAGE +{ + gcvBUFOBJ_USAGE_STREAM_DRAW = 1, + gcvBUFOBJ_USAGE_STREAM_READ, + gcvBUFOBJ_USAGE_STREAM_COPY, + gcvBUFOBJ_USAGE_STATIC_DRAW, + gcvBUFOBJ_USAGE_STATIC_READ, + gcvBUFOBJ_USAGE_STATIC_COPY, + gcvBUFOBJ_USAGE_DYNAMIC_DRAW, + gcvBUFOBJ_USAGE_DYNAMIC_READ, + gcvBUFOBJ_USAGE_DYNAMIC_COPY, + + /* special patch for optimaize performance, + ** no fence and duplicate stream to ensure data correct + */ + gcvBUFOBJ_USAGE_DISABLE_FENCE_DYNAMIC_STREAM = 256 +} gceBUFOBJ_USAGE; + +/** +** @ingroup gcoVG +** +** @brief Channel mask values. +** +** This enumeration defines the values for channel mask used in image +** filtering. +*/ + +/******************************************************************************\ +******************************** VG Enumerations ******************************* +\******************************************************************************/ + +/** +** @ingroup gcoVG +** +** @brief Tiling mode for painting and imagig. +** +** This enumeration defines the tiling modes supported by the HAL. This is +** in fact a one-to-one mapping of the OpenVG 1.1 tile modes. +*/ +typedef enum _gceTILE_MODE +{ + gcvTILE_FILL, + gcvTILE_PAD, + gcvTILE_REPEAT, + gcvTILE_REFLECT +} +gceTILE_MODE; + +/******************************************************************************/ +/** @ingroup gcoVG +** +** @brief The different paint modes. +** +** This enumeration lists the available paint modes. +*/ +typedef enum _gcePAINT_TYPE +{ + /** Solid color. */ + gcvPAINT_MODE_SOLID, + + /** Linear gradient. */ + gcvPAINT_MODE_LINEAR, + + /** Radial gradient. */ + gcvPAINT_MODE_RADIAL, + + /** Pattern. */ + gcvPAINT_MODE_PATTERN, + + /** Mode count. */ + gcvPAINT_MODE_COUNT +} +gcePAINT_TYPE; -/* Video memory alloation type. */ -typedef enum _gceVIDMEM_TYPE -{ - gcvVIDMEM_TYPE_GENERIC = gcvSURF_TYPE_UNKNOWN, - gcvVIDMEM_TYPE_INDEX_BUFFER = gcvSURF_INDEX, - gcvVIDMEM_TYPE_VERTEX_BUFFER = gcvSURF_VERTEX, - gcvVIDMEM_TYPE_TEXTURE = gcvSURF_TEXTURE, - gcvVIDMEM_TYPE_COLOR_BUFFER = gcvSURF_RENDER_TARGET, - gcvVIDMEM_TYPE_DEPTH_BUFFER = gcvSURF_DEPTH, - gcvVIDMEM_TYPE_BITMAP = gcvSURF_BITMAP, - gcvVIDMEM_TYPE_TILE_STATUS = gcvSURF_TILE_STATUS, - gcvVIDMEM_TYPE_IMAGE = gcvSURF_IMAGE, - gcvVIDMEM_TYPE_MASK = gcvSURF_MASK, - gcvVIDMEM_TYPE_SCISSOR = gcvSURF_SCISSOR, - gcvVIDMEM_TYPE_HZ_BUFFER = gcvSURF_HIERARCHICAL_DEPTH, - gcvVIDMEM_TYPE_ICACHE = gcvSURF_ICACHE, - gcvVIDMEM_TYPE_TXDESC = gcvSURF_TXDESC, - gcvVIDMEM_TYPE_FENCE = gcvSURF_FENCE, - gcvVIDMEM_TYPE_TFBHEADER = gcvSURF_TFBHEADER, - gcvVIDMEM_TYPE_COMMAND, - gcvVIDMEM_TYPE_COUNT -} -gceVIDMEM_TYPE; +/** +** @ingroup gcoVG +** +** @brief Types of path data supported by HAL. +** +** This enumeration defines the types of path data supported by the HAL. +** This is in fact a one-to-one mapping of the OpenVG 1.1 path types. +*/ +typedef enum _gcePATHTYPE +{ + gcePATHTYPE_UNKNOWN = -1, + gcePATHTYPE_INT8, + gcePATHTYPE_INT16, + gcePATHTYPE_INT32, + gcePATHTYPE_FLOAT +} +gcePATHTYPE; + +/** +** @ingroup gcoVG +** +** @brief Supported path segment commands. +** +** This enumeration defines the path segment commands supported by the HAL. +*/ +typedef enum _gceVGCMD +{ + gcvVGCMD_END, /* 0: 0x00 */ + gcvVGCMD_CLOSE, /* 1: 0x01 */ + gcvVGCMD_MOVE, /* 2: 0x02 */ + gcvVGCMD_MOVE_REL, /* 3: 0x03 */ + gcvVGCMD_LINE, /* 4: 0x04 */ + gcvVGCMD_LINE_REL, /* 5: 0x05 */ + gcvVGCMD_QUAD, /* 6: 0x06 */ + gcvVGCMD_QUAD_REL, /* 7: 0x07 */ + gcvVGCMD_CUBIC, /* 8: 0x08 */ + gcvVGCMD_CUBIC_REL, /* 9: 0x09 */ + gcvVGCMD_BREAK, /* 10: 0x0A */ + gcvVGCMD_HLINE, /* 11: ******* R E S E R V E D *******/ + gcvVGCMD_HLINE_REL, /* 12: ******* R E S E R V E D *******/ + gcvVGCMD_VLINE, /* 13: ******* R E S E R V E D *******/ + gcvVGCMD_VLINE_REL, /* 14: ******* R E S E R V E D *******/ + gcvVGCMD_SQUAD, /* 15: ******* R E S E R V E D *******/ + gcvVGCMD_SQUAD_REL, /* 16: ******* R E S E R V E D *******/ + gcvVGCMD_SCUBIC, /* 17: ******* R E S E R V E D *******/ + gcvVGCMD_SCUBIC_REL, /* 18: ******* R E S E R V E D *******/ + gcvVGCMD_SCCWARC, /* 19: ******* R E S E R V E D *******/ + gcvVGCMD_SCCWARC_REL, /* 20: ******* R E S E R V E D *******/ + gcvVGCMD_SCWARC, /* 21: ******* R E S E R V E D *******/ + gcvVGCMD_SCWARC_REL, /* 22: ******* R E S E R V E D *******/ + gcvVGCMD_LCCWARC, /* 23: ******* R E S E R V E D *******/ + gcvVGCMD_LCCWARC_REL, /* 24: ******* R E S E R V E D *******/ + gcvVGCMD_LCWARC, /* 25: ******* R E S E R V E D *******/ + gcvVGCMD_LCWARC_REL, /* 26: ******* R E S E R V E D *******/ + + /* The width of the command recognized by the hardware on bits. */ + gcvVGCMD_WIDTH = 5, + + /* Hardware command mask. */ + gcvVGCMD_MASK = (1 << gcvVGCMD_WIDTH) - 1, + + /* Command modifiers. */ + gcvVGCMD_H_MOD = 1 << gcvVGCMD_WIDTH, /* = 32 */ + gcvVGCMD_V_MOD = 2 << gcvVGCMD_WIDTH, /* = 64 */ + gcvVGCMD_S_MOD = 3 << gcvVGCMD_WIDTH, /* = 96 */ + gcvVGCMD_ARC_MOD = 4 << gcvVGCMD_WIDTH, /* = 128 */ + + /* Emulated LINE commands. */ + gcvVGCMD_HLINE_EMUL = gcvVGCMD_H_MOD | gcvVGCMD_LINE, /* = 36 */ + gcvVGCMD_HLINE_EMUL_REL = gcvVGCMD_H_MOD | gcvVGCMD_LINE_REL, /* = 37 */ + gcvVGCMD_VLINE_EMUL = gcvVGCMD_V_MOD | gcvVGCMD_LINE, /* = 68 */ + gcvVGCMD_VLINE_EMUL_REL = gcvVGCMD_V_MOD | gcvVGCMD_LINE_REL, /* = 69 */ + + /* Emulated SMOOTH commands. */ + gcvVGCMD_SQUAD_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD, /* = 102 */ + gcvVGCMD_SQUAD_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD_REL, /* = 103 */ + gcvVGCMD_SCUBIC_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC, /* = 104 */ + gcvVGCMD_SCUBIC_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC_REL, /* = 105 */ + + /* Emulation ARC commands. */ + gcvVGCMD_ARC_LINE = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE, /* = 132 */ + gcvVGCMD_ARC_LINE_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE_REL, /* = 133 */ + gcvVGCMD_ARC_QUAD = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD, /* = 134 */ + gcvVGCMD_ARC_QUAD_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD_REL /* = 135 */ +} +gceVGCMD; +typedef enum _gceVGCMD * gceVGCMD_PTR; + +/** +** @ingroup gcoVG +** +** @brief Blending modes supported by the HAL. +** +** This enumeration defines the blending modes supported by the HAL. This is +** in fact a one-to-one mapping of the OpenVG 1.1 blending modes. +*/ +typedef enum _gceVG_BLEND +{ + gcvVG_BLEND_SRC, + gcvVG_BLEND_SRC_OVER, + gcvVG_BLEND_DST_OVER, + gcvVG_BLEND_SRC_IN, + gcvVG_BLEND_DST_IN, + gcvVG_BLEND_MULTIPLY, + gcvVG_BLEND_SCREEN, + gcvVG_BLEND_DARKEN, + gcvVG_BLEND_LIGHTEN, + gcvVG_BLEND_ADDITIVE, + gcvVG_BLEND_SUBTRACT, + gcvVG_BLEND_FILTER +} +gceVG_BLEND; + +/** +** @ingroup gcoVG +** +** @brief Image modes supported by the HAL. +** +** This enumeration defines the image modes supported by the HAL. This is +** in fact a one-to-one mapping of the OpenVG 1.1 image modes with the addition +** of NO IMAGE. +*/ +typedef enum _gceVG_IMAGE +{ + gcvVG_IMAGE_NONE, + gcvVG_IMAGE_NORMAL, + gcvVG_IMAGE_MULTIPLY, + gcvVG_IMAGE_STENCIL, + gcvVG_IMAGE_FILTER +} +gceVG_IMAGE; + +/** +** @ingroup gcoVG +** +** @brief Filter mode patterns and imaging. +** +** This enumeration defines the filter modes supported by the HAL. +*/ +typedef enum _gceIMAGE_FILTER +{ + gcvFILTER_POINT, + gcvFILTER_LINEAR, + gcvFILTER_BI_LINEAR +} +gceIMAGE_FILTER; + +/** +** @ingroup gcoVG +** +** @brief Primitive modes supported by the HAL. +** +** This enumeration defines the primitive modes supported by the HAL. +*/ +typedef enum _gceVG_PRIMITIVE +{ + gcvVG_SCANLINE, + gcvVG_RECTANGLE, + gcvVG_TESSELLATED, + gcvVG_TESSELLATED_TILED +} +gceVG_PRIMITIVE; + +/** +** @ingroup gcoVG +** +** @brief Rendering quality modes supported by the HAL. +** +** This enumeration defines the rendering quality modes supported by the HAL. +*/ +typedef enum _gceRENDER_QUALITY +{ + gcvVG_NONANTIALIASED, + gcvVG_2X2_MSAA, + gcvVG_2X4_MSAA, + gcvVG_4X4_MSAA +} +gceRENDER_QUALITY; + +/** +** @ingroup gcoVG +** +** @brief Fill rules supported by the HAL. +** +** This enumeration defines the fill rules supported by the HAL. +*/ +typedef enum _gceFILL_RULE +{ + gcvVG_EVEN_ODD, + gcvVG_NON_ZERO +} +gceFILL_RULE; + +/** +** @ingroup gcoVG +** +** @brief Cap styles supported by the HAL. +** +** This enumeration defines the cap styles supported by the HAL. +*/ +typedef enum _gceCAP_STYLE +{ + gcvCAP_BUTT, + gcvCAP_ROUND, + gcvCAP_SQUARE +} +gceCAP_STYLE; + +/** +** @ingroup gcoVG +** +** @brief Join styles supported by the HAL. +** +** This enumeration defines the join styles supported by the HAL. +*/ +typedef enum _gceJOIN_STYLE +{ + gcvJOIN_MITER, + gcvJOIN_ROUND, + gcvJOIN_BEVEL +} +gceJOIN_STYLE; + +/* Base values for channel mask definitions. */ +#define gcvCHANNEL_X (0) +#define gcvCHANNEL_R (1 << 0) +#define gcvCHANNEL_G (1 << 1) +#define gcvCHANNEL_B (1 << 2) +#define gcvCHANNEL_A (1 << 3) + +typedef enum _gceCHANNEL +{ + gcvCHANNEL_XXXX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_XXXA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_XXBX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_XXBA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), + + gcvCHANNEL_XGXX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_XGXA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_XGBX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_XGBA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), + + gcvCHANNEL_RXXX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_RXXA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_RXBX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_RXBA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A), + + gcvCHANNEL_RGXX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X), + gcvCHANNEL_RGXA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A), + gcvCHANNEL_RGBX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X), + gcvCHANNEL_RGBA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A), +} +gceCHANNEL; + +/* Defines the statistical data keys monitored by the statistics module */ +typedef enum _gceSTATISTICS +{ + gcvFRAME_FPS = 1, +} +gceSTATISTICS; + +/* Value types. */ +typedef enum _gceVALUE_TYPE +{ + gcvVALUE_UINT = 0x0, + gcvVALUE_FIXED, + gcvVALUE_FLOAT, + gcvVALUE_INT, + + /* + ** The value need be unsigned denormalized. clamp (0.0-1.0) should be done first. + */ + gcvVALUE_FLAG_UNSIGNED_DENORM = 0x00010000, + + /* + ** The value need be signed denormalized. clamp (-1.0-1.0) should be done first. + */ + gcvVALUE_FLAG_SIGNED_DENORM = 0x00020000, + + /* + ** The value need to gammar + */ + gcvVALUE_FLAG_GAMMAR = 0x00040000, + + /* + ** The value need to convert from float to float16 + */ + gcvVALUE_FLAG_FLOAT_TO_FLOAT16 = 0x0080000, + + /* + ** Mask for flag field. + */ + gcvVALUE_FLAG_MASK = 0xFFFF0000, +} +gceVALUE_TYPE; + +typedef enum _gceTRACEMODE +{ + gcvTRACEMODE_NONE = 0, + gcvTRACEMODE_FULL = 1, + gcvTRACEMODE_LOGGER = 2, + gcvTRACEMODE_ALLZONE = 3, + gcvTRACEMODE_PRE = 4, + gcvTRACEMODE_POST = 5, +} gceTRACEMODE; + +enum +{ + /* GPU can't issue more that 32bit physical address */ + gcvPLATFORM_FLAG_LIMIT_4G_ADDRESS = 1 << 0, + + gcvPLATFORM_FLAG_IMX_MM = 1 << 1, +}; /* No special needs. */ #define gcvALLOC_FLAG_NONE 0x00000000 @@ -2344,7 +2167,6 @@ gceVIDMEM_TYPE; /******************************************************************************\ ****************************** Object Declarations ***************************** \******************************************************************************/ - typedef struct _gckCONTEXT * gckCONTEXT; typedef struct _gcoCMDBUF * gcoCMDBUF; @@ -2355,7 +2177,6 @@ typedef struct _gcsHAL_INTERFACE * gcsHAL_INTERFACE_PTR; typedef struct _gcs2D_PROFILE * gcs2D_PROFILE_PTR; - #ifdef __cplusplus } #endif diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_kernel_buffer.h b/drivers/amlogic/npu/kernel/inc/gc_hal_kernel_buffer.h index 83a04ac0b2bce8..f6c517a48f05f5 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_kernel_buffer.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_kernel_buffer.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -65,7 +65,11 @@ extern "C" { \******************************************************************************/ /* The number of context buffers per user. */ +#if gcdCAPTURE_ONLY_MODE +#define gcdCONTEXT_BUFFER_COUNT 1 +#else #define gcdCONTEXT_BUFFER_COUNT 2 +#endif #define gcdRENDER_FENCE_LENGTH (6 * gcmSIZEOF(gctUINT32)) #define gcdBLT_FENCE_LENGTH (10 * gcmSIZEOF(gctUINT32)) diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_mem.h b/drivers/amlogic/npu/kernel/inc/gc_hal_mem.h index d533a42b719f63..aa0104aef959da 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_mem.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_mem.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_metadata.h b/drivers/amlogic/npu/kernel/inc/gc_hal_metadata.h index c59b03eac8124e..8eaa20f60937c9 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_metadata.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_metadata.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -66,33 +66,6 @@ extern "C" { #define VIV_VIDMEM_METADATA_MAGIC __FOURCC('v', 'i', 'v', 'm') -/* Compressed format now was defined same as dec400d, should be general. */ -typedef enum _VIV_COMPRESS_FMT -{ - _VIV_CFMT_ARGB8 = 0, - _VIV_CFMT_XRGB8, - _VIV_CFMT_AYUV, - _VIV_CFMT_UYVY, - _VIV_CFMT_YUY2, - _VIV_CFMT_YUV_ONLY, - _VIV_CFMT_UV_MIX, - _VIV_CFMT_ARGB4, - _VIV_CFMT_XRGB4, - _VIV_CFMT_A1R5G5B5, - _VIV_CFMT_X1R5G5B5, - _VIV_CFMT_R5G6B5, - _VIV_CFMT_Z24S8, - _VIV_CFMT_Z24, - _VIV_CFMT_Z16, - _VIV_CFMT_A2R10G10B10, - _VIV_CFMT_BAYER, - _VIV_CFMT_SIGNED_BAYER, - _VIV_CFMT_VAA16, - _VIV_CFMT_S8, - - _VIV_CFMT_MAX, -} _VIV_COMPRESS_FMT; - /* Metadata for cross-device fd share with additional (ts) info. */ typedef struct _VIV_VIDMEM_METADATA { diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_options.h b/drivers/amlogic/npu/kernel/inc/gc_hal_options.h index 9169bf2e736ea6..32d694d2e0d1fd 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_options.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_options.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -307,7 +307,7 @@ This define enables the use of VM for gckCommand and fence buffers. /* - gcdDEBUG_FORCE_CONTEXT_UPDATE + gcdDEBUG_OPTION_SPECIFY_POOL When set to 1, pool of each type surface can be specified by changing poolPerType[] in gcsSURF_NODE_Construct. */ @@ -326,6 +326,19 @@ This define enables the use of VM for gckCommand and fence buffers. # define gcdENABLE_FSCALE_VAL_ADJUST 1 #endif +/* + gcdCAPTURE_ONLY_MODE + When non-zero, driver is built with capture only mode. + 1) Set DDR address range in capture file with contiguousBase and contiguoutsSize. + Video memory allocation will go through reserved pool with capture only mode. + 2) Set SRAM address range in capture file with sRAMBases, sRAMSizes and extSRAMBases, extSRAMSizes. + Video memory querion will go through reserved pool with capture only mode. + 3) TODO: SRAM video memory allocation. +*/ +#ifndef gcdCAPTURE_ONLY_MODE +# define gcdCAPTURE_ONLY_MODE 0 +#endif + /* gcdNULL_DRIVER @@ -351,8 +364,12 @@ This define enables the use of VM for gckCommand and fence buffers. Number of bytes in a command buffer. */ #ifndef gcdCMD_BUFFER_SIZE +#if gcdCAPTURE_ONLY_MODE +# define gcdCMD_BUFFER_SIZE (4 << 10) +#else # define gcdCMD_BUFFER_SIZE (128 << 10) #endif +#endif /* gcdCMD_BLT_BUFFER_SIZE @@ -369,8 +386,12 @@ This define enables the use of VM for gckCommand and fence buffers. Number of command buffers to use per client. */ #ifndef gcdCMD_BUFFERS +#if gcdCAPTURE_ONLY_MODE +# define gcdCMD_BUFFERS 1 +#else # define gcdCMD_BUFFERS 2 #endif +#endif /* gcdMAX_CMD_BUFFERS @@ -532,8 +553,12 @@ This define enables the use of VM for gckCommand and fence buffers. between multiple sub-buffers. */ #ifndef gcdENABLE_BUFFER_ALIGNMENT +#if gcdCAPTURE_ONLY_MODE +# define gcdENABLE_BUFFER_ALIGNMENT 0 +#else # define gcdENABLE_BUFFER_ALIGNMENT 1 #endif +#endif /* gcdENABLE_BANK_ALIGNMENT @@ -542,9 +567,14 @@ This define enables the use of VM for gckCommand and fence buffers. _GetSurfaceBankAlignment() and _GetBankOffsetBytes() to define how different types of allocations are bank and channel aligned. When disabled (default), no bank alignment is done. + For CAPTURE ONLY MODE, should make sure that gcdENABLE_BANK_ALIGNMENT is disabled. */ #ifndef gcdENABLE_BANK_ALIGNMENT +#if gcdCAPTURE_ONLY_MODE # define gcdENABLE_BANK_ALIGNMENT 0 +#else +# define gcdENABLE_BANK_ALIGNMENT 0 +#endif #endif /* @@ -1013,11 +1043,15 @@ This define enables the use of VM for gckCommand and fence buffers. When it's not zero, partial fast clear is enabled. Depends on gcdHAL_3D_DRAWBLIT, if gcdHAL_3D_DRAWBLIT is not enabled, only available when scissor box is completely aligned. - Expremental, under test. + Expremental, under test only. Not ready for production. */ #ifndef gcdPARTIAL_FAST_CLEAR +#if defined(ANDROID) +# define gcdPARTIAL_FAST_CLEAR 0 +#else # define gcdPARTIAL_FAST_CLEAR 1 #endif +#endif /* gcdREMOVE_SURF_ORIENTATION @@ -1261,11 +1295,6 @@ This define enables the use of VM for gckCommand and fence buffers. #endif #endif -/* -VIV:gcdUSE_MMU_EXCEPTION - - When enabled, enable and check exception interrupt raised by MMU. -*/ #ifndef gcdUSE_MMU_EXCEPTION # define gcdUSE_MMU_EXCEPTION 1 #endif @@ -1355,6 +1384,25 @@ VIV:gcdUSE_MMU_EXCEPTION # define gcdKERNEL_QUERY_PERFORMANCE_COUNTER_V8 0 #endif +/* + gcdIGNORE_DRIVER_VERSIONS_MISMATCH + When enabled, driver will ignore user and kernel driver version mismatch. +*/ +#ifndef gcdIGNORE_DRIVER_VERSIONS_MISMATCH +# define gcdIGNORE_DRIVER_VERSIONS_MISMATCH 0 +#endif + +/* + gcdEXTERNAL_SRAM_DEFAULT_POOL + When enabled, external SRAM can be used for the initial command, + but the external SRAM base and size must be set by customer. + AXI-SRAM only can be used if pool type is speficied + with gcvSRAM_EXTERNAL[X] when allocating video memory. +*/ +#ifndef gcdEXTERNAL_SRAM_DEFAULT_POOL +# define gcdEXTERNAL_SRAM_DEFAULT_POOL 0 +#endif + #endif /* __gc_hal_options_h_ */ diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_profiler.h b/drivers/amlogic/npu/kernel/inc/gc_hal_profiler.h index 49e2cc46deb1f7..4db920ed6543a6 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_profiler.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_profiler.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -56,6 +56,8 @@ #ifndef __gc_hal_profiler_h_ #define __gc_hal_profiler_h_ +#include "shared/gc_hal_profiler.h" + #ifdef __cplusplus extern "C" { #endif @@ -813,263 +815,9 @@ extern "C" { } \ while (gcvFALSE) -typedef enum _gceCOUNTER -{ - gcvCOUNTER_FRONT_END, - gcvCOUNTER_VERTEX_SHADER, - gcvCOUNTER_PRIMITIVE_ASSEMBLY, - gcvCOUNTER_SETUP, - gcvCOUNTER_RASTERIZER, - gcvCOUNTER_PIXEL_SHADER, - gcvCOUNTER_TEXTURE, - gcvCOUNTER_PIXEL_ENGINE, - gcvCOUNTER_MEMORY_CONTROLLER_COLOR, - gcvCOUNTER_MEMORY_CONTROLLER_DEPTH, - gcvCOUNTER_HOST_INTERFACE0, - gcvCOUNTER_HOST_INTERFACE1, - gcvCOUNTER_GPUL2_CACHE, - gcvCOUNTER_COUNT -} -gceCOUNTER; - -typedef enum _gceProfilerClient -{ - gcvCLIENT_OPENGLES11 = 1, - gcvCLIENT_OPENGLES, - gcvCLIENT_OPENGL, - gcvCLIENT_OPENVG, - gcvCLIENT_OPENCL, - gcvCLIENT_OPENVX, - gcvCLIENT_OPENVK, -} -gceProfilerClient; - -/* HW profile information. */ -typedef struct _gcsPROFILER_COUNTERS_PART1 -{ - gctUINT32 gpuTotalRead64BytesPerFrame; - gctUINT32 gpuTotalWrite64BytesPerFrame; - - /* FE */ - gctUINT32 fe_draw_count; - gctUINT32 fe_out_vertex_count; - gctUINT32 fe_cache_miss_count; - gctUINT32 fe_cache_lk_count; - gctUINT32 fe_stall_count; - gctUINT32 fe_starve_count; - gctUINT32 fe_process_count; - - /* PE */ - gctUINT32 pe0_pixel_count_killed_by_color_pipe; - gctUINT32 pe0_pixel_count_killed_by_depth_pipe; - gctUINT32 pe0_pixel_count_drawn_by_color_pipe; - gctUINT32 pe0_pixel_count_drawn_by_depth_pipe; - gctUINT32 pe1_pixel_count_killed_by_color_pipe; - gctUINT32 pe1_pixel_count_killed_by_depth_pipe; - gctUINT32 pe1_pixel_count_drawn_by_color_pipe; - gctUINT32 pe1_pixel_count_drawn_by_depth_pipe; - - /* SH */ - gctUINT32 shader_cycle_count; - gctUINT32 vs_shader_cycle_count; - gctUINT32 ps_shader_cycle_count; - gctUINT32 ps_inst_counter; - gctUINT32 ps_rendered_pixel_counter; - gctUINT32 vs_inst_counter; - gctUINT32 vs_rendered_vertice_counter; - gctUINT32 vs_branch_inst_counter; - gctUINT32 vs_texld_inst_counter; - gctUINT32 ps_branch_inst_counter; - gctUINT32 ps_texld_inst_counter; - gctUINT32 vs_non_idle_starve_count; - gctUINT32 vs_starve_count; - gctUINT32 vs_stall_count; - gctUINT32 vs_process_count; - gctUINT32 ps_non_idle_starve_count; - gctUINT32 ps_starve_count; - gctUINT32 ps_stall_count; - gctUINT32 ps_process_count; - - /* PA */ - gctUINT32 pa_input_vtx_counter; - gctUINT32 pa_input_prim_counter; - gctUINT32 pa_output_prim_counter; - gctUINT32 pa_depth_clipped_counter; - gctUINT32 pa_trivial_rejected_counter; - gctUINT32 pa_culled_prim_counter; - gctUINT32 pa_droped_prim_counter; - gctUINT32 pa_frustum_clipped_prim_counter; - gctUINT32 pa_frustum_clipdroped_prim_counter; - gctUINT32 pa_non_idle_starve_count; - gctUINT32 pa_starve_count; - gctUINT32 pa_stall_count; - gctUINT32 pa_process_count; - - /* SE */ - gctUINT32 se_culled_triangle_count; - gctUINT32 se_culled_lines_count; - gctUINT32 se_clipped_triangle_count; - gctUINT32 se_clipped_line_count; - gctUINT32 se_starve_count; - gctUINT32 se_stall_count; - gctUINT32 se_receive_triangle_count; - gctUINT32 se_send_triangle_count; - gctUINT32 se_receive_lines_count; - gctUINT32 se_send_lines_count; - gctUINT32 se_process_count; - gctUINT32 se_trivial_rejected_line_count; - gctUINT32 se_non_idle_starve_count; - - /* RA */ - gctUINT32 ra_input_prim_count; - gctUINT32 ra_total_quad_count; - gctUINT32 ra_valid_quad_count_after_early_z; - gctUINT32 ra_valid_pixel_count_to_render; - gctUINT32 ra_output_valid_quad_count; - gctUINT32 ra_output_valid_pixel_count; - gctUINT32 ra_pipe_cache_miss_counter; - gctUINT32 ra_pipe_hz_cache_miss_counter; - gctUINT32 ra_prefetch_cache_miss_counter; - gctUINT32 ra_prefetch_hz_cache_miss_counter; - gctUINT32 ra_eez_culled_counter; - gctUINT32 ra_non_idle_starve_count; - gctUINT32 ra_starve_count; - gctUINT32 ra_stall_count; - gctUINT32 ra_process_count; - - /* TX */ - gctUINT32 tx_total_bilinear_requests; - gctUINT32 tx_total_trilinear_requests; - gctUINT32 tx_total_discarded_texture_requests; - gctUINT32 tx_total_texture_requests; - gctUINT32 tx_mc0_miss_count; - gctUINT32 tx_mc0_request_byte_count; - gctUINT32 tx_mc1_miss_count; - gctUINT32 tx_mc1_request_byte_count; - gctUINT32 tx_non_idle_starve_count; - gctUINT32 tx_starve_count; - gctUINT32 tx_stall_count; - gctUINT32 tx_process_count; -} -gcsPROFILER_COUNTERS_PART1; - -typedef struct _gcsPROFILER_COUNTERS_PART2 -{ - /* MCC */ - gctUINT32 mcc_total_read_req_8B_from_colorpipe; - gctUINT32 mcc_total_read_req_8B_sentout_from_colorpipe; - gctUINT32 mcc_total_write_req_8B_from_colorpipe; - gctUINT32 mcc_total_read_req_sentout_from_colorpipe; - gctUINT32 mcc_total_write_req_from_colorpipe; - gctUINT32 mcc_total_read_req_8B_from_depthpipe; - gctUINT32 mcc_total_read_req_8B_sentout_from_depthpipe; - gctUINT32 mcc_total_write_req_8B_from_depthpipe; - gctUINT32 mcc_total_read_req_sentout_from_depthpipe; - gctUINT32 mcc_total_write_req_from_depthpipe; - gctUINT32 mcc_total_read_req_8B_from_others; - gctUINT32 mcc_total_write_req_8B_from_others; - gctUINT32 mcc_total_read_req_from_others; - gctUINT32 mcc_total_write_req_from_others; - gctUINT32 mcc_axi_total_latency; - gctUINT32 mcc_axi_sample_count; - gctUINT32 mcc_axi_max_latency; - gctUINT32 mcc_axi_min_latency; - gctUINT32 mc_fe_read_bandwidth; - gctUINT32 mc_mmu_read_bandwidth; - gctUINT32 mc_blt_read_bandwidth; - gctUINT32 mc_sh0_read_bandwidth; - gctUINT32 mc_sh1_read_bandwidth; - gctUINT32 mc_pe_write_bandwidth; - gctUINT32 mc_blt_write_bandwidth; - gctUINT32 mc_sh0_write_bandwidth; - gctUINT32 mc_sh1_write_bandwidth; - - /* MCZ */ - gctUINT32 mcz_total_read_req_8B_from_colorpipe; - gctUINT32 mcz_total_read_req_8B_sentout_from_colorpipe; - gctUINT32 mcz_total_write_req_8B_from_colorpipe; - gctUINT32 mcz_total_read_req_sentout_from_colorpipe; - gctUINT32 mcz_total_write_req_from_colorpipe; - gctUINT32 mcz_total_read_req_8B_from_depthpipe; - gctUINT32 mcz_total_read_req_8B_sentout_from_depthpipe; - gctUINT32 mcz_total_write_req_8B_from_depthpipe; - gctUINT32 mcz_total_read_req_sentout_from_depthpipe; - gctUINT32 mcz_total_write_req_from_depthpipe; - gctUINT32 mcz_total_read_req_8B_from_others; - gctUINT32 mcz_total_write_req_8B_from_others; - gctUINT32 mcz_total_read_req_from_others; - gctUINT32 mcz_total_write_req_from_others; - gctUINT32 mcz_axi_total_latency; - gctUINT32 mcz_axi_sample_count; - gctUINT32 mcz_axi_max_latency; - gctUINT32 mcz_axi_min_latency; - - /* HI */ - gctUINT32 hi0_total_read_8B_count; - gctUINT32 hi0_total_write_8B_count; - gctUINT32 hi0_total_read_request_count; - gctUINT32 hi0_total_write_request_count; - gctUINT32 hi0_axi_cycles_read_request_stalled; - gctUINT32 hi0_axi_cycles_write_request_stalled; - gctUINT32 hi0_axi_cycles_write_data_stalled; - gctUINT32 hi1_total_read_8B_count; - gctUINT32 hi1_total_write_8B_count; - gctUINT32 hi1_total_read_request_count; - gctUINT32 hi1_total_write_request_count; - gctUINT32 hi1_axi_cycles_read_request_stalled; - gctUINT32 hi1_axi_cycles_write_request_stalled; - gctUINT32 hi1_axi_cycles_write_data_stalled; - gctUINT32 hi_total_cycle_count; - gctUINT32 hi_total_idle_cycle_count; - gctUINT32 hi_total_read_8B_count; - gctUINT32 hi_total_write_8B_count; - gctUINT32 hi_total_readOCB_16B_count; - gctUINT32 hi_total_writeOCB_16B_count; - - /* L2 */ - gctUINT32 l2_total_axi0_read_request_count; - gctUINT32 l2_total_axi1_read_request_count; - gctUINT32 l2_total_axi0_write_request_count; - gctUINT32 l2_total_axi1_write_request_count; - gctUINT32 l2_total_read_transactions_request_by_axi0; - gctUINT32 l2_total_read_transactions_request_by_axi1; - gctUINT32 l2_total_write_transactions_request_by_axi0; - gctUINT32 l2_total_write_transactions_request_by_axi1; - gctUINT32 l2_axi0_minmax_latency; - gctUINT32 l2_axi0_min_latency; - gctUINT32 l2_axi0_max_latency; - gctUINT32 l2_axi0_total_latency; - gctUINT32 l2_axi0_total_request_count; - gctUINT32 l2_axi1_minmax_latency; - gctUINT32 l2_axi1_min_latency; - gctUINT32 l2_axi1_max_latency; - gctUINT32 l2_axi1_total_latency; - gctUINT32 l2_axi1_total_request_count; -} -gcsPROFILER_COUNTERS_PART2; - -typedef struct _gcsPROFILER_COUNTERS -{ - gcsPROFILER_COUNTERS_PART1 counters_part1; - gcsPROFILER_COUNTERS_PART2 counters_part2; -} -gcsPROFILER_COUNTERS; - #define NumOfPerFrameBuf 16 #define NumOfPerDrawBuf 128 -typedef enum _gceCOUNTER_OPTYPE -{ - gcvCOUNTER_OP_DRAW = 0, - gcvCOUNTER_OP_BLT = 1, - gcvCOUNTER_OP_COMPUTE = 2, - gcvCOUNTER_OP_RS = 3, - gcvCOUNTER_OP_FINISH = 4, - gcvCOUNTER_OP_FRAME = 5, - gcvCOUNTER_OP_NONE = 6 -} -gceCOUNTER_OPTYPE; - typedef struct gcsCounterBuffer * gcsCounterBuffer_PTR; struct gcsCounterBuffer @@ -1118,23 +866,6 @@ struct _gcoPROFILER gctBOOL axiBus128bits; }; -typedef enum _gceProbeStatus -{ - gcvPROBE_Disabled = 0, - gcvPROBE_Paused = 1, - gcvPROBE_Enabled = 2, -} -gceProbeStatus; - -typedef enum _gceProbeCmd -{ - gcvPROBECMD_BEGIN = 0, - gcvPROBECMD_PAUSE = 1, - gcvPROBECMD_RESUME = 2, - gcvPROBECMD_END = 3, -} -gceProbeCmd; - typedef struct _gcsPROBESTATES { gceProbeStatus status; diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_raster.h b/drivers/amlogic/npu/kernel/inc/gc_hal_raster.h index 1aba11c2e20101..277a037f2a59ef 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_raster.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_raster.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -57,7 +57,7 @@ #define __gc_hal_raster_h_ #include "gc_hal_enum.h" -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #ifdef __cplusplus extern "C" { @@ -1099,6 +1099,20 @@ gco2D_NatureRotateTranslation( OUT gceSURF_ROTATION * DstRotation ); +/* Set source endian mode. */ +gceSTATUS +gco2D_SetSourceEndianMode( + IN gco2D Engine, + IN gceENDIAN_MODE eEndianMode + ); + +/* Set target endian mode. */ +gceSTATUS +gco2D_SetTargetEndianMode( + IN gco2D Engine, + IN gceENDIAN_MODE eEndianMode + ); + #ifdef __cplusplus } #endif diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_security_interface.h b/drivers/amlogic/npu/kernel/inc/gc_hal_security_interface.h index 1857b60838bc41..d5953dde64d860 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_security_interface.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_security_interface.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -55,25 +55,6 @@ #ifndef _GC_HAL_SECURITY_INTERFACE_H_ #define _GC_HAL_SECURITY_INTERFACE_H_ -/*! - @brief Command codes between kernel module and TrustZone - @discussion - Critical services must be done in TrustZone to avoid sensitive content leak. Most of kernel module is kept in non-Secure os to minimize - code in TrustZone. - */ -typedef enum kernel_packet_command { - KERNEL_START_COMMAND, - KERNEL_SUBMIT, - KERNEL_MAP_MEMORY, /* */ - KERNEL_UNMAP_MEMORY, - KERNEL_ALLOCATE_SECRUE_MEMORY, /*! Security memory management. */ - KERNEL_FREE_SECURE_MEMORY, - KERNEL_EXECUTE, /* Execute a command buffer. */ - KERNEL_DUMP_MMU_EXCEPTION, - KERNEL_HANDLE_MMU_EXCEPTION, - KERNEL_READ_MMU_EXCEPTION, -} kernel_packet_command_t; - struct kernel_start_command { kernel_packet_command_t command; /*! The command (always needs to be the first entry in a structure). */ gctUINT8 gpu; /*! Which GPU. */ @@ -173,14 +154,6 @@ typedef struct _gcsTA_INTERFACE { gceSTATUS result; } gcsTA_INTERFACE; -enum { - gcvTA_COMMAND_INIT, - gcvTA_COMMAND_DISPATCH, - - gcvTA_CALLBACK_ALLOC_SECURE_MEM, - gcvTA_CALLBACK_FREE_SECURE_MEM, -}; - #endif diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_statistics.h b/drivers/amlogic/npu/kernel/inc/gc_hal_statistics.h index 415b5645b15c8a..1f3ba068271d47 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_statistics.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_statistics.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -82,13 +82,6 @@ /* Multiplication factor for previous Hz off mode. Make it more than 1.0 to advertise HZ on.*/ #define VIV_STAT_EARLY_Z_FACTOR (1.05f) -/* Defines the statistical data keys monitored by the statistics module */ -typedef enum _gceSTATISTICS -{ - gcvFRAME_FPS = 1, -} -gceSTATISTICS; - /* HAL statistics information. */ typedef struct _gcsSTATISTICS_EARLYZ { diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_version.h b/drivers/amlogic/npu/kernel/inc/gc_hal_version.h index 94fb69116b01f6..3635cd9105419d 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_version.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_version.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -60,11 +60,11 @@ #define gcvVERSION_MINOR 4 -#define gcvVERSION_PATCH 0 +#define gcvVERSION_PATCH 2 -#define gcvVERSION_BUILD 229426 +#define gcvVERSION_BUILD 258160 -#define gcvVERSION_STRING "6.4.0.3.229426" +#define gcvVERSION_STRING "6.4.2.1.258160" #endif /* __gc_hal_version_h_ */ diff --git a/drivers/amlogic/npu/kernel/inc/gc_hal_vg.h b/drivers/amlogic/npu/kernel/inc/gc_hal_vg.h index 38753a26b60555..dcc10a53aafd77 100644 --- a/drivers/amlogic/npu/kernel/inc/gc_hal_vg.h +++ b/drivers/amlogic/npu/kernel/inc/gc_hal_vg.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -61,9 +61,10 @@ extern "C" { #endif -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_enum.h" #include "gc_hal_base.h" +#include "shared/gc_hal_vg.h" #ifdef __cplusplus diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_base.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_base.h new file mode 100644 index 00000000000000..dcb8e11ccd702b --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_base.h @@ -0,0 +1,105 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_base_shared_h_ +#define __gc_hal_base_shared_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define gcdEXTERNAL_MEMORY_NAME_MAX 32 +#define gcdEXTERNAL_MEMORY_DATA_MAX 8 + +typedef struct _gcsEXTERNAL_MEMORY_INFO +{ + /* Name of allocator used to attach this memory. */ + gctCHAR allocatorName[gcdEXTERNAL_MEMORY_NAME_MAX]; + + /* User defined data which will be passed to allocator. */ + gctUINT32 userData[gcdEXTERNAL_MEMORY_DATA_MAX]; +} +gcsEXTERNAL_MEMORY_INFO; + +#define gcdBINARY_TRACE_MESSAGE_SIZE 240 + +typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR; +typedef struct _gcsBINARY_TRACE_MESSAGE +{ + gctUINT32 signature; + gctUINT32 pid; + gctUINT32 tid; + gctUINT32 line; + gctUINT32 numArguments; + gctUINT8 payload; +} +gcsBINARY_TRACE_MESSAGE; + +/* gcsOBJECT object defintinon. */ +typedef struct _gcsOBJECT +{ + /* Type of an object. */ + gceOBJECT_TYPE type; +} +gcsOBJECT; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_base_shared_h_ */ + + + diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver.h new file mode 100644 index 00000000000000..d539507c073e2b --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver.h @@ -0,0 +1,1225 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_driver_h_ +#define __gc_hal_driver_h_ + +#include "gc_hal_enum.h" +#include "gc_hal_types.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* The number of context buffers per user. */ +#define gcdCONTEXT_BUFFER_NUM 2 + +/******************************************************************************\ +******************************* I/O Control Codes ****************************** +\******************************************************************************/ + +#define gcvHAL_CLASS "galcore" +#define IOCTL_GCHAL_INTERFACE 30000 +#define IOCTL_GCHAL_KERNEL_INTERFACE 30001 +#define IOCTL_GCHAL_TERMINATE 30002 + +/******************************************************************************\ +****************************** Interface Structure ***************************** +\******************************************************************************/ + +#define gcdMAX_PROFILE_FILE_NAME 128 +#define gcdMAX_FLAT_MAPPING_COUNT 16 + +/* gcvHAL_CHIP_INFO */ +typedef struct _gcsHAL_CHIP_INFO +{ + /* Chip count. */ + OUT gctINT32 count; + + /* Chip types. */ + OUT gceHARDWARE_TYPE types[gcdCHIP_COUNT]; + + /* Chip IDs. */ + OUT gctUINT32 ids[gcvCORE_COUNT]; + + OUT gctUINT32 coreIndexs[gcvCORE_COUNT]; +} +gcsHAL_CHIP_INFO; + +/* gcvHAL_VERSION */ +typedef struct _gcsHAL_VERSION +{ + /* version: ... */ + OUT gctINT32 major; + OUT gctINT32 minor; + OUT gctINT32 patch; + + /* Build version. */ + OUT gctUINT32 build; +} +gcsHAL_VERSION; + +/* gcvHAL_SET_TIMEOUT. */ +typedef struct _gcsHAL_SET_TIMEOUT +{ + gctUINT32 timeOut; +} +gcsHAL_SET_TIMEOUT; + +/* gcvHAL_QUERY_VIDEO_MEMORY */ +typedef struct _gcsHAL_QUERY_VIDEO_MEMORY +{ + /* Physical memory address of internal memory. Just a name. */ + OUT gctUINT32 internalPhysName; + /* Size in bytes of internal memory. */ + OUT gctUINT64 internalSize; + + /* Physical memory address of external memory. Just a name. */ + OUT gctUINT32 externalPhysName; + /* Size in bytes of external memory.*/ + OUT gctUINT64 externalSize; + + /* Physical memory address of contiguous memory. Just a name. */ + OUT gctUINT32 contiguousPhysName; + /* Size in bytes of contiguous memory.*/ + OUT gctUINT64 contiguousSize; +} +gcsHAL_QUERY_VIDEO_MEMORY; + +/* gcvHAL_QUERY_CHIP_IDENTITY */ +typedef struct _gcsHAL_QUERY_CHIP_IDENTITY * gcsHAL_QUERY_CHIP_IDENTITY_PTR; +typedef struct _gcsHAL_QUERY_CHIP_IDENTITY +{ + + /* Chip model. */ + gceCHIPMODEL chipModel; + + /* Revision value.*/ + gctUINT32 chipRevision; + + /* Chip date. */ + gctUINT32 chipDate; + + /* Supported feature fields. */ + gctUINT32 chipFeatures; + + /* Supported minor feature fields. */ + gctUINT32 chipMinorFeatures; + + /* Supported minor feature 1 fields. */ + gctUINT32 chipMinorFeatures1; + + /* Supported minor feature 2 fields. */ + gctUINT32 chipMinorFeatures2; + + /* Supported minor feature 3 fields. */ + gctUINT32 chipMinorFeatures3; + + /* Supported minor feature 4 fields. */ + gctUINT32 chipMinorFeatures4; + + /* Supported minor feature 5 fields. */ + gctUINT32 chipMinorFeatures5; + + /* Supported minor feature 6 fields. */ + gctUINT32 chipMinorFeatures6; + + /* Number of streams supported. */ + gctUINT32 streamCount; + + /* Number of pixel pipes. */ + gctUINT32 pixelPipes; + + /* Number of resolve pipes. */ + gctUINT32 resolvePipes; + + /* Number of instructions. */ + gctUINT32 instructionCount; + + /* Number of constants. */ + gctUINT32 numConstants; + + /* Number of varyings */ + gctUINT32 varyingsCount; + + /* Number of 3D GPUs */ + gctUINT32 gpuCoreCount; + + /* Physical mask of all AVAILABLE clusters in core.*/ + gctUINT32 clusterAvailMask; + + /* Product ID */ + gctUINT32 productID; + + /* Special chip flag bits */ + gceCHIP_FLAG chipFlags; + + /* ECO ID. */ + gctUINT32 ecoID; + + /* Customer ID. */ + gctUINT32 customerID; + + /* CPU view physical address and size of SRAMs. */ + gctUINT64 sRAMBases[gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMSizes[gcvSRAM_INTER_COUNT]; + + gctUINT64 platformFlagBits; +} +gcsHAL_QUERY_CHIP_IDENTITY; + +/* gcvHAL_QUERY_CHIP_OPTION. */ +typedef struct _gcsHAL_QUERY_CHIP_OPTIONS * gcsHAL_QUERY_CHIP_OPTIONS_PTR; +typedef struct _gcsHAL_QUERY_CHIP_OPTIONS +{ + gctBOOL gpuProfiler; + gctBOOL allowFastClear; + gctBOOL powerManagement; + /* Whether use new MMU. It is meaningless + ** for old MMU since old MMU is always enabled. + */ + gctBOOL enableMMU; + gceCOMPRESSION_OPTION allowCompression; + gctBOOL smallBatch; + gctUINT32 uscL1CacheRatio; + gctUINT32 uscAttribCacheRatio; + gctUINT32 userClusterMask; + + /* Internal SRAM. */ + gctUINT32 sRAMGPUVirtAddrs[gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMSizes[gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMCount; + + /* External SRAM. */ + gctPHYS_ADDR_T extSRAMCPUPhysAddrs[gcvSRAM_EXT_COUNT]; + gctPHYS_ADDR_T extSRAMGPUPhysAddrs[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMGPUVirtAddrs[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMGPUPhysNames[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMSizes[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMCount; + + gceSECURE_MODE secureMode; + gctBOOL enableNNTPParallel; + gctUINT enableSwtilingPhase1; +} +gcsHAL_QUERY_CHIP_OPTIONS; + +/* gcvHAL_QUERY_CHIP_FREQUENCY. */ +typedef struct _gcsHAL_QUERY_CHIP_FREQUENCY * gcsHAL_QUERY_CHIP_FREQUENCY_PTR; +typedef struct _gcsHAL_QUERY_CHIP_FREQUENCY +{ + OUT gctUINT32 mcClk; + OUT gctUINT32 shClk; +} +gcsHAL_QUERY_CHIP_FREQUENCY; + +/* Obsolete for userpace. */ +/* gcvHAL_ALLOCATE_NON_PAGED_MEMORY */ +typedef struct _gcsHAL_ALLOCATE_NON_PAGED_MEMORY +{ + /* Allocation flags. */ + IN gctUINT32 flags; + + /* Number of bytes to allocate. */ + IN OUT gctUINT64 bytes; + + /* Physical address of allocation. Just a name. */ + OUT gctUINT32 physName; + + /* Logical address of allocation. */ + OUT gctUINT64 logical; +} +gcsHAL_ALLOCATE_NON_PAGED_MEMORY; + +/* Obsolete for userpace. */ +/* gcvHAL_FREE_NON_PAGED_MEMORY */ +typedef struct _gcsHAL_FREE_NON_PAGED_MEMORY +{ + /* Number of bytes allocated. */ + IN gctUINT64 bytes; + + /* Physical address of allocation. Just a name. */ + IN gctUINT32 physName; + + /* Logical address of allocation. */ + IN gctUINT64 logical; +} +gcsHAL_FREE_NON_PAGED_MEMORY; + +/* Video memory allocation. */ +/* gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY */ +typedef struct _gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY +{ + /* Number of bytes to allocate. */ + IN OUT gctUINT64 bytes; + + /* Buffer alignment. */ + IN gctUINT32 alignment; + + /* Type of allocation, see gceVIDMEM_TYPE. */ + IN gctUINT32 type; + + /* Flag of allocation. */ + IN gctUINT32 flag; + + /* Memory pool to allocate from. */ + IN OUT gctUINT32 pool; + + /* Internal SRAM index. */ + IN gctINT32 sRAMIndex; + /* External SRAM index. */ + IN gctINT32 extSRAMIndex; + + /* Allocated video memory. */ + OUT gctUINT32 node; +} +gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY; + +typedef struct _gcsUSER_MEMORY_DESC +{ + /* Import flag. */ + gctUINT32 flag; + + /* gcvALLOC_FLAG_DMABUF */ + gctUINT32 handle; + gctUINT64 dmabuf; + + /* gcvALLOC_FLAG_USERMEMORY */ + gctUINT64 logical; + gctUINT64 physical; + gctUINT32 size; + + /* gcvALLOC_FLAG_EXTERNAL_MEMORY */ + gcsEXTERNAL_MEMORY_INFO externalMemoryInfo; +} +gcsUSER_MEMORY_DESC; + +/* gcvHAL_WRAP_USER_MEMORY. */ +typedef struct _gcsHAL_WRAP_USER_MEMORY +{ + /* Description of user memory. */ + IN gcsUSER_MEMORY_DESC desc; + + /* Video memory allocation type. */ + IN gctUINT32 type; + + /* Output video mmory node. */ + OUT gctUINT32 node; + + /* size of the node in bytes */ + OUT gctUINT64 bytes; +} +gcsHAL_WRAP_USER_MEMORY; + +/* gcvHAL_RELEASE_VIDEO_MEMORY */ +typedef struct _gcsHAL_RELEASE_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + +#ifdef __QNXNTO__ + /* Mapped logical address to unmap in user space. */ + OUT gctUINT64 memory; + + /* Number of bytes to allocated. */ + OUT gctUINT64 bytes; +#endif +} +gcsHAL_RELEASE_VIDEO_MEMORY; + +/* gcvHAL_LOCK_VIDEO_MEMORY */ +typedef struct _gcsHAL_LOCK_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Cache configuration. */ + /* Only gcvPOOL_VIRTUAL can be configured */ + IN gctBOOL cacheable; + + /* Hardware specific address. */ + OUT gctUINT32 address; + + /* Mapped logical address. */ + OUT gctUINT64 memory; + + /* Customer priviate handle*/ + OUT gctUINT32 gid; + + /* Bus address of a contiguous video node. */ + OUT gctUINT64 physicalAddress; + +#if gcdCAPTURE_ONLY_MODE + IN gctBOOL queryCapSize; + IN gctPOINTER captureLogical; + OUT gctSIZE_T captureSize; +#endif +} +gcsHAL_LOCK_VIDEO_MEMORY; + +/* gcvHAL_UNLOCK_VIDEO_MEMORY */ +typedef struct _gcsHAL_UNLOCK_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT64 node; + + /* Video memory allocation type. */ + IN gctUINT32 type; + + /* Pool of the unlock node */ + OUT gctUINT32 pool; + + /* Bytes of the unlock node */ + OUT gctUINT64 bytes; + + /* Flag to unlock surface asynchroneously. */ + IN OUT gctBOOL asynchroneous; + +#if gcdCAPTURE_ONLY_MODE + OUT gctPOINTER captureLogical; +#endif +} +gcsHAL_UNLOCK_VIDEO_MEMORY; + +/* gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY: */ +typedef struct _gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Video memory allocation type. */ + IN gctUINT32 type; +} +gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY; + +/* gcvHAL_EXPORT_VIDEO_MEMORY. */ +typedef struct _gcsHAL_EXPORT_VIDEO_MEMORY +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + /* Export flags */ + IN gctUINT32 flags; + + /* Exported dma_buf fd */ + OUT gctINT32 fd; +} +gcsHAL_EXPORT_VIDEO_MEMORY; + +/* gcvHAL_NAME_VIDEO_MEMORY. */ +typedef struct _gcsHAL_NAME_VIDEO_MEMORY +{ + IN gctUINT32 handle; + OUT gctUINT32 name; +} +gcsHAL_NAME_VIDEO_MEMORY; + +/* gcvHAL_IMPORT_VIDEO_MEMORY. */ +typedef struct _gcsHAL_IMPORT_VIDEO_MEMORY +{ + IN gctUINT32 name; + OUT gctUINT32 handle; +} +gcsHAL_IMPORT_VIDEO_MEMORY; + +/* gcvHAL_MAP_MEMORY */ +typedef struct _gcsHAL_MAP_MEMORY +{ + /* Physical memory address to map. Just a name on Linux/Qnx. */ + IN gctUINT32 physName; + + /* Number of bytes in physical memory to map. */ + IN gctUINT64 bytes; + + /* Address of mapped memory. */ + OUT gctUINT64 logical; +} +gcsHAL_MAP_MEMORY; + +/* gcvHAL_UNMAP_MEMORY */ +typedef struct _gcsHAL_UNMAP_MEMORY +{ + /* Physical memory address to unmap. Just a name on Linux/Qnx. */ + IN gctUINT32 physName; + + /* Number of bytes in physical memory to unmap. */ + IN gctUINT64 bytes; + + /* Address of mapped memory to unmap. */ + IN gctUINT64 logical; +} +gcsHAL_UNMAP_MEMORY; + +/* gcvHAL_CACHE */ +typedef struct _gcsHAL_CACHE +{ + IN gceCACHEOPERATION operation; + IN gctUINT64 process; + IN gctUINT64 logical; + IN gctUINT64 bytes; + IN gctUINT32 node; +} +gcsHAL_CACHE; + +/* gcvHAL_ATTACH */ +typedef struct _gcsHAL_ATTACH +{ + /* Handle of context buffer object. */ + OUT gctUINT32 context; + + /* Maximum state in the buffer. */ + OUT gctUINT64 maxState; + + /* Number of states in the buffer. */ + OUT gctUINT32 numStates; + + /* Map context buffer to user or not. */ + IN gctBOOL map; + + /* Physical of context buffer. */ + OUT gctUINT64 logicals[2]; + + /* Bytes of context buffer. */ + OUT gctUINT32 bytes; + +#if gcdCAPTURE_ONLY_MODE + IN gctBOOL queryCapSize; + IN gctPOINTER contextLogical[gcdCONTEXT_BUFFER_NUM]; + OUT gctSIZE_T captureSize; +#endif +} +gcsHAL_ATTACH; + +/* gcvHAL_DETACH */ +typedef struct _gcsHAL_DETACH +{ + /* Context buffer object gckCONTEXT. Just a name. */ + IN gctUINT32 context; +} +gcsHAL_DETACH; + + +/* gcvHAL_EVENT_COMMIT. */ +typedef struct _gcsHAL_EVENT_COMMIT +{ + /* Event queue in gcsQUEUE. */ + IN gctUINT64 queue; +} +gcsHAL_EVENT_COMMIT; + +typedef struct _gcsHAL_COMMAND_LOCATION +{ + gctUINT32 priority; + gctUINT32 channelId; + + gctUINT32 videoMemNode; + + gctUINT32 address; + gctUINT64 logical; + gctUINT32 startOffset; + /* size includes reservedHead and reservedTail. */ + gctUINT32 size; + + gctUINT32 reservedHead; + gctUINT32 reservedTail; + + /* Pointer to patch list. */ + gctUINT64 patchHead; + + /* + * Location index of exit commands, ie where to put the chipEnable/link back + * commands in the reservedTail area. + * It's used in fully shared command buffer for multiple cores. + */ + gctUINT32 exitIndex; + gctUINT32 entryPipe; + gctUINT32 exitPipe; + + /* struct _gcsHAL_COMMAND_LOCATION * next; */ + gctUINT64 next; +#if gcdCAPTURE_ONLY_MODE + gctPOINTER contextLogical[gcdCONTEXT_BUFFER_NUM]; +#endif +} +gcsHAL_COMMAND_LOCATION; + +typedef struct _gcsHAL_SUBCOMMIT +{ + gctUINT32 coreId; + + /* user gcsSTATE_DELTA_PTR. */ + gctUINT64 delta; + + /* Kernel gckCONTEXT. */ + gctUINT64 context; + + /* Event queue in user gcsQUEUE *. */ + gctUINT64 queue; + + /* Locate the commands. */ + gcsHAL_COMMAND_LOCATION commandBuffer; + + /* struct _gcsHAL_SUBCOMMIT * next; */ + gctUINT64 next; +} +gcsHAL_SUBCOMMIT; + +/* gcvHAL_COMMIT */ +typedef struct _gcsHAL_COMMIT +{ + gcsHAL_SUBCOMMIT subCommit; + + gctBOOL shared; + + gctBOOL contextSwitched; + + /* Commit stamp of this commit. */ + OUT gctUINT64 commitStamp; +} +gcsHAL_COMMIT; + + +typedef struct _gcsHAL_COMMIT_DONE +{ + IN gctUINT64 context; +} +gcsHAL_COMMIT_DONE; + +/* gcvHAL_USER_SIGNAL */ +typedef struct _gcsHAL_USER_SIGNAL +{ + /* Command. */ + gceUSER_SIGNAL_COMMAND_CODES command; + + /* Signal ID. */ + IN OUT gctINT32 id; + + /* Reset mode. */ + IN gctBOOL manualReset; + + /* Wait timedout. */ + IN gctUINT32 wait; + + /* State. */ + IN gctBOOL state; +} +gcsHAL_USER_SIGNAL; + +/* gcvHAL_SIGNAL. */ +typedef struct _gcsHAL_SIGNAL +{ + /* Signal handle to signal gctSIGNAL. */ + IN gctUINT64 signal; + + /* Reserved gctSIGNAL. */ + IN gctUINT64 auxSignal; + + /* Process owning the signal gctHANDLE. */ + IN gctUINT64 process; + +#if defined(__QNXNTO__) + /* Client pulse side-channel connection ID. Set by client in gcoOS_CreateSignal. */ + IN gctINT32 coid; + + /* Set by server. */ + IN gctINT32 rcvid; +#endif + /* Event generated from where of pipeline */ + IN gceKERNEL_WHERE fromWhere; +} +gcsHAL_SIGNAL; + +/* gcvHAL_WRITE_DATA. */ +typedef struct _gcsHAL_WRITE_DATA +{ + /* Address to write data to. */ + IN gctUINT32 address; + + /* Data to write. */ + IN gctUINT32 data; +} +gcsHAL_WRITE_DATA; + +/* gcvHAL_READ_REGISTER */ +typedef struct _gcsHAL_READ_REGISTER +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + /* Data read. */ + OUT gctUINT32 data; +} +gcsHAL_READ_REGISTER; + +/* gcvHAL_WRITE_REGISTER */ +typedef struct _gcsHAL_WRITE_REGISTER +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + /* Data read. */ + IN gctUINT32 data; +} +gcsHAL_WRITE_REGISTER; + +/* gcvHAL_READ_REGISTER_EX */ +typedef struct _gcsHAL_READ_REGISTER_EX +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + IN gctUINT32 coreSelect; + + /* Data read. */ + OUT gctUINT32 data[4]; +} +gcsHAL_READ_REGISTER_EX; + +/* gcvHAL_WRITE_REGISTER_EX */ +typedef struct _gcsHAL_WRITE_REGISTER_EX +{ + /* Logical address of memory to write data to. */ + IN gctUINT32 address; + + IN gctUINT32 coreSelect; + + /* Data read. */ + IN gctUINT32 data[4]; +} +gcsHAL_WRITE_REGISTER_EX; + +#if VIVANTE_PROFILER +/* gcvHAL_GET_PROFILE_SETTING */ +typedef struct _gcsHAL_GET_PROFILE_SETTING +{ + /* Enable profiling */ + OUT gctBOOL enable; +} +gcsHAL_GET_PROFILE_SETTING; + +/* gcvHAL_SET_PROFILE_SETTING */ +typedef struct _gcsHAL_SET_PROFILE_SETTING +{ + /* Enable profiling */ + IN gctBOOL enable; +} +gcsHAL_SET_PROFILE_SETTING; + +/* gcvHAL_READ_PROFILER_REGISTER_SETTING */ +typedef struct _gcsHAL_READ_PROFILER_REGISTER_SETTING +{ + /*Should Clear Register*/ + IN gctBOOL bclear; +} +gcsHAL_READ_PROFILER_REGISTER_SETTING; + +typedef struct _gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1 +{ + /* Context buffer object gckCONTEXT. Just a name. */ + IN gctUINT32 context; + + /* Data read. */ + OUT gcsPROFILER_COUNTERS_PART1 Counters; +} +gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1; + +typedef struct _gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2 +{ + /* Context buffer object gckCONTEXT. Just a name. */ + IN gctUINT32 context; + + /* Data read. */ + OUT gcsPROFILER_COUNTERS_PART2 Counters; +} +gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2; + +/* gcvHAL_PROFILE_REGISTERS_2D */ +typedef struct _gcsHAL_PROFILE_REGISTERS_2D +{ + /* Data read in gcs2D_PROFILE. */ + OUT gctUINT64 hwProfile2D; +} +gcsHAL_PROFILE_REGISTERS_2D; +#endif + +/* gcvHAL_SET_POWER_MANAGEMENT_STATE */ +typedef struct _gcsHAL_SET_POWER_MANAGEMENT +{ + /* Data read. */ + IN gceCHIPPOWERSTATE state; +} +gcsHAL_SET_POWER_MANAGEMENT; + +/* gcvHAL_QUERY_POWER_MANAGEMENT_STATE */ +typedef struct _gcsHAL_QUERY_POWER_MANAGEMENT +{ + /* Data read. */ + OUT gceCHIPPOWERSTATE state; + + /* Idle query. */ + OUT gctBOOL isIdle; +} +gcsHAL_QUERY_POWER_MANAGEMENT; + +/* gcvHAL_CONFIG_POWER_MANAGEMENT. */ +typedef struct _gcsHAL_CONFIG_POWER_MANAGEMENT +{ + IN gctBOOL enable; +} +gcsHAL_CONFIG_POWER_MANAGEMENT; + +typedef struct _gcsFLAT_MAPPING_RANGE +{ + gctUINT64 start; + gctUINT64 end; + gctUINT32 size; + gceFLATMAP_FLAG flag; +} +gcsFLAT_MAPPING_RANGE; + +/* gcvHAL_GET_BASE_ADDRESS */ +typedef struct _gcsHAL_GET_BASE_ADDRESS +{ + /* Physical memory address of internal memory. */ + OUT gctUINT32 baseAddress; + + OUT gctUINT32 flatMappingRangeCount; + + OUT gcsFLAT_MAPPING_RANGE flatMappingRanges[gcdMAX_FLAT_MAPPING_COUNT]; +} +gcsHAL_GET_BASE_ADDRESS; + +typedef struct _gcsHAL_SET_DEBUG_LEVEL_ZONE +{ + IN gctUINT32 level; + IN gctUINT32 zones; + IN gctBOOL enable; +} +gcsHAL_SET_DEBUG_LEVEL_ZONE; + +/* gcvHAL_DEBUG_DUMP. */ +typedef struct _gcsHAL_DEBUG_DUMP +{ + /* gceDUMP_BUFFER_TYPE type. */ + IN gctUINT32 type; + + IN gctUINT64 ptr; + IN gctUINT32 address; + IN gctUINT32 size; +} +gcsHAL_DEBUG_DUMP; + + +/* gcvHAL_TIMESTAMP */ +typedef struct _gcsHAL_TIMESTAMP +{ + /* Timer select. */ + IN gctUINT32 timer; + + /* Timer request type (0-stop, 1-start, 2-send delta). */ + IN gctUINT32 request; + + /* Result of delta time in microseconds. */ + OUT gctINT32 timeDelta; +} +gcsHAL_TIMESTAMP; + +/* gcvHAL_DATABASE */ +typedef struct _gcsHAL_DATABASE +{ + /* Set to gcvTRUE if you want to query a particular process ID. + ** Set to gcvFALSE to query the last detached process. */ + IN gctBOOL validProcessID; + + /* Process ID to query. */ + IN gctUINT32 processID; + + /* Information. */ + OUT gcuDATABASE_INFO vidMem; + OUT gcuDATABASE_INFO nonPaged; + OUT gcuDATABASE_INFO contiguous; + OUT gcuDATABASE_INFO gpuIdle; + + /* Detail information about video memory. */ + OUT gcuDATABASE_INFO vidMemPool[3]; +} +gcsHAL_DATABASE; + +/* gcvHAL_GET_FRAME_INFO. */ +typedef struct _gcsHAL_GET_FRAME_INFO +{ + /* gcsHAL_FRAME_INFO* */ + OUT gctUINT64 frameInfo; +} +gcsHAL_GET_FRAME_INFO; + + +typedef struct _gcsHAL_SET_FSCALE_VALUE +{ + IN gctUINT32 value; + IN gctUINT32 shValue; +} +gcsHAL_SET_FSCALE_VALUE; + +typedef struct _gcsHAL_GET_FSCALE_VALUE +{ + OUT gctUINT32 value; + OUT gctUINT32 minValue; + OUT gctUINT32 maxValue; +} +gcsHAL_GET_FSCALE_VALUE; + +/* gcvHAL_QUERY_RESET_TIME_STAMP. */ +typedef struct _gcsHAL_QUERY_RESET_TIME_STAMP +{ + OUT gctUINT64 timeStamp; + OUT gctUINT64 contextID; +} +gcsHAL_QUERY_RESET_TIME_STAMP; + +/* gcvHAL_CREATE_NATIVE_FENCE. */ +typedef struct _gcsHAL_CREATE_NATIVE_FENCE +{ + /* Signal id. */ + IN gctUINT64 signal; + + /* Native fence file descriptor. */ + OUT gctINT32 fenceFD; + +} +gcsHAL_CREATE_NATIVE_FENCE; + +/* gcvHAL_WAIT_NATIVE_FENCE. */ +typedef struct _gcsHAL_WAIT_NATIVE_FENCE +{ + /* Native fence file descriptor. */ + IN gctINT32 fenceFD; + + /* Wait timeout. */ + IN gctUINT32 timeout; +} +gcsHAL_WAIT_NATIVE_FENCE; + +/* gcvHAL_SHBUF. */ +typedef struct _gcsHAL_SHBUF +{ + gceSHBUF_COMMAND_CODES command; + + /* Shared buffer. */ + IN OUT gctUINT64 id; + + /* User data to be shared. */ + IN gctUINT64 data; + + /* Data size. */ + IN OUT gctUINT32 bytes; +} +gcsHAL_SHBUF; + +/* gcvHAL_GET_GRAPHIC_BUFFER_FD. */ +/* + * Fd representation of android graphic buffer contents. + * Currently, it is only to reference video nodes, signal, etc to avoid being + * destroyed when trasfering across processes. + */ +typedef struct _gcsHAL_GET_GRAPHIC_BUFFER_FD +{ + /* Max 3 video nodes, node handle here. */ + IN gctUINT32 node[3]; + + /* A shBuf. */ + IN gctUINT64 shBuf; + + /* A signal. */ + IN gctUINT64 signal; + + OUT gctINT32 fd; +} +gcsHAL_GET_GRAPHIC_BUFFER_FD; + +typedef struct _gcsHAL_VIDEO_MEMORY_METADATA +{ + /* Allocated video memory. */ + IN gctUINT32 node; + + IN gctUINT32 readback; + + INOUT gctINT32 ts_fd; + INOUT gctUINT32 fc_enabled; + INOUT gctUINT32 fc_value; + INOUT gctUINT32 fc_value_upper; + + INOUT gctUINT32 compressed; + INOUT gctUINT32 compress_format; +} +gcsHAL_VIDEO_MEMORY_METADATA; + +/* gcvHAL_GET_VIDEO_MEMORY_FD. */ +typedef struct _gcsHAL_GET_VIDEO_MEMORY_FD +{ + IN gctUINT32 handle; + OUT gctINT32 fd; +} +gcsHAL_GET_VIDEO_MEMORY_FD; + +/* gcvHAL_DESTROY_MMU. */ +typedef struct _gcsHAL_DESTROY_MMU +{ + /* Mmu object. */ + IN gctUINT64 mmu; +} +gcsHAL_DESTROY_MMU; + +/* gcvHAL_WAIT_FENCE. */ +typedef struct _gcsHAL_WAIT_FENCE +{ + IN gctUINT32 handle; + IN gctUINT32 timeOut; +} +gcsHAL_WAIT_FENCE; + +/* gcvHAL_DEVICE_MUTEX: */ +typedef struct _gcsHAL_DEVICE_MUTEX +{ + /* Lock or Release device mutex. */ + gctBOOL isMutexLocked; +} +gcsHAL_DEVICE_MUTEX; + + +#if gcdDEC_ENABLE_AHB +/* gcvHAL_DEC300_READ. */ +typedef struct _gcsHAL_DEC300_READ +{ + gctUINT32 enable; + gctUINT32 readId; + gctUINT32 format; + gctUINT32 strides[3]; + gctUINT32 is3D; + gctUINT32 isMSAA; + gctUINT32 clearValue; + gctUINT32 isTPC; + gctUINT32 isTPCCompressed; + gctUINT32 surfAddrs[3]; + gctUINT32 tileAddrs[3]; +} +DEC300Read; + +/* gcvHAL_DEC300_WRITE. */ +typedef struct _gcsHAL_DEC300_WRITE +{ + gctUINT32 enable; + gctUINT32 readId; + gctUINT32 writeId; + gctUINT32 format; + gctUINT32 surfAddr; + gctUINT32 tileAddr; +} +DEC300Write; + +/* gcvHAL_DEC300_FLUSH. */ +typedef struct _gcsHAL_DEC300_FLUSH +{ + IN gctUINT8 useless; +} +DEC300Flush; + +/* gcvHAL_DEC300_FLUSH_WAIT. */ +typedef struct _gcsHAL_DEC300_FLUSH_WAIT +{ + IN gctUINT32 done; +} +DEC300FlushWait; +#endif + + +typedef struct _gcsHAL_INTERFACE +{ + /* Command code. */ + gceHAL_COMMAND_CODES command; + + /* Hardware type. */ + gceHARDWARE_TYPE hardwareType; + + /* Core index for current hardware type. */ + gctUINT32 coreIndex; + + /* Status value. */ + gceSTATUS status; + + /* Engine */ + gceENGINE engine; + + /* Ignore information from TSL when doing IO control */ + gctBOOL ignoreTLS; + + /* The mutext already acquired */ + IN gctBOOL commitMutex; + + /* Union of command structures. */ + union _u + { + gcsHAL_CHIP_INFO ChipInfo; + gcsHAL_VERSION Version; + gcsHAL_SET_TIMEOUT SetTimeOut; + + gcsHAL_QUERY_VIDEO_MEMORY QueryVideoMemory; + gcsHAL_QUERY_CHIP_IDENTITY QueryChipIdentity; + gcsHAL_QUERY_CHIP_OPTIONS QueryChipOptions; + gcsHAL_QUERY_CHIP_FREQUENCY QueryChipFrequency; + + gcsHAL_ALLOCATE_NON_PAGED_MEMORY AllocateNonPagedMemory; + gcsHAL_FREE_NON_PAGED_MEMORY FreeNonPagedMemory; + + gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY AllocateLinearVideoMemory; + gcsHAL_WRAP_USER_MEMORY WrapUserMemory; + gcsHAL_RELEASE_VIDEO_MEMORY ReleaseVideoMemory; + + gcsHAL_LOCK_VIDEO_MEMORY LockVideoMemory; + gcsHAL_UNLOCK_VIDEO_MEMORY UnlockVideoMemory; + gcsHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY BottomHalfUnlockVideoMemory; + + gcsHAL_EXPORT_VIDEO_MEMORY ExportVideoMemory; + gcsHAL_NAME_VIDEO_MEMORY NameVideoMemory; + gcsHAL_IMPORT_VIDEO_MEMORY ImportVideoMemory; + + gcsHAL_MAP_MEMORY MapMemory; + gcsHAL_UNMAP_MEMORY UnmapMemory; + + gcsHAL_CACHE Cache; + + gcsHAL_ATTACH Attach; + gcsHAL_DETACH Detach; + + gcsHAL_EVENT_COMMIT Event; + gcsHAL_COMMIT Commit; + gcsHAL_COMMIT_DONE CommitDone; + + gcsHAL_USER_SIGNAL UserSignal; + gcsHAL_SIGNAL Signal; + + gcsHAL_WRITE_DATA WriteData; + gcsHAL_READ_REGISTER ReadRegisterData; + gcsHAL_WRITE_REGISTER WriteRegisterData; + gcsHAL_READ_REGISTER_EX ReadRegisterDataEx; + gcsHAL_WRITE_REGISTER_EX WriteRegisterDataEx; + +#if VIVANTE_PROFILER + gcsHAL_GET_PROFILE_SETTING GetProfileSetting; + gcsHAL_SET_PROFILE_SETTING SetProfileSetting; + gcsHAL_READ_PROFILER_REGISTER_SETTING SetProfilerRegisterClear; + gcsHAL_READ_ALL_PROFILE_REGISTERS_PART1 RegisterProfileData_part1; + gcsHAL_READ_ALL_PROFILE_REGISTERS_PART2 RegisterProfileData_part2; + gcsHAL_PROFILE_REGISTERS_2D RegisterProfileData2D; +#endif + + gcsHAL_SET_POWER_MANAGEMENT SetPowerManagement; + gcsHAL_QUERY_POWER_MANAGEMENT QueryPowerManagement; + gcsHAL_CONFIG_POWER_MANAGEMENT ConfigPowerManagement; + + gcsHAL_GET_BASE_ADDRESS GetBaseAddress; + + gcsHAL_SET_DEBUG_LEVEL_ZONE DebugLevelZone; + gcsHAL_DEBUG_DUMP DebugDump; + + gcsHAL_TIMESTAMP TimeStamp; + gcsHAL_DATABASE Database; + + gcsHAL_GET_FRAME_INFO GetFrameInfo; + + + /* gcsHAL_DUMP_GPU_STATE */ + /* gcsHAL_DUMP_EVENT */ + + gcsHAL_SET_FSCALE_VALUE SetFscaleValue; + gcsHAL_GET_FSCALE_VALUE GetFscaleValue; + + gcsHAL_QUERY_RESET_TIME_STAMP QueryResetTimeStamp; + + gcsHAL_CREATE_NATIVE_FENCE CreateNativeFence; + gcsHAL_WAIT_NATIVE_FENCE WaitNativeFence; + gcsHAL_SHBUF ShBuf; + gcsHAL_GET_GRAPHIC_BUFFER_FD GetGraphicBufferFd; + gcsHAL_VIDEO_MEMORY_METADATA SetVidMemMetadata; + gcsHAL_GET_VIDEO_MEMORY_FD GetVideoMemoryFd; + + gcsHAL_DESTROY_MMU DestroyMmu; + + gcsHAL_WAIT_FENCE WaitFence; + + /* gcvHAL_DEVICE_MUTEX: */ + gcsHAL_DEVICE_MUTEX DeviceMutex; + + +#if gcdDEC_ENABLE_AHB + gcsHAL_DEC300_READ DEC300Read; + gcsHAL_DEC300_WRITE DEC300Write; + gcsHAL_DEC300_FLUSH DEC300Flush; + gcsHAL_DEC300_FLUSH_WAIT DEC300FlushWait; +#endif + } + u; +} +gcsHAL_INTERFACE; + + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_driver_h_ */ + + diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver_vg.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver_vg.h new file mode 100644 index 00000000000000..b4e0bda27802a4 --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_driver_vg.h @@ -0,0 +1,264 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_driver_vg_h_ +#define __gc_hal_driver_vg_h_ + +#include "gc_hal_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************\ +******************************* I/O Control Codes ****************************** +\******************************************************************************/ + +#define gcvHAL_CLASS "galcore" +#define IOCTL_GCHAL_INTERFACE 30000 + +/******************************************************************************\ +********************* Command buffer information structure. ******************** +\******************************************************************************/ + +typedef struct _gcsCOMMAND_BUFFER_INFO * gcsCOMMAND_BUFFER_INFO_PTR; +typedef struct _gcsCOMMAND_BUFFER_INFO +{ + /* FE command buffer interrupt ID. */ + gctINT32 feBufferInt; + + /* TS overflow interrupt ID. */ + gctINT32 tsOverflowInt; + + /* Alignment and mask for the buffer address. */ + gctUINT addressMask; + gctUINT32 addressAlignment; + + /* Alignment for each command. */ + gctUINT32 commandAlignment; + + /* Number of bytes required by the STATE command. */ + gctUINT32 stateCommandSize; + + /* Number of bytes required by the RESTART command. */ + gctUINT32 restartCommandSize; + + /* Number of bytes required by the FETCH command. */ + gctUINT32 fetchCommandSize; + + /* Number of bytes required by the CALL command. */ + gctUINT32 callCommandSize; + + /* Number of bytes required by the RETURN command. */ + gctUINT32 returnCommandSize; + + /* Number of bytes required by the EVENT command. */ + gctUINT32 eventCommandSize; + + /* Number of bytes required by the END command. */ + gctUINT32 endCommandSize; + + /* Number of bytes reserved at the tail of a static command buffer. */ + gctUINT32 staticTailSize; + + /* Number of bytes reserved at the tail of a dynamic command buffer. */ + gctUINT32 dynamicTailSize; +} +gcsCOMMAND_BUFFER_INFO; + +/******************************************************************************\ +******************************** Task Structures ******************************* +\******************************************************************************/ + +typedef struct _gcsTASK_HEADER * gcsTASK_HEADER_PTR; +typedef struct _gcsTASK_HEADER +{ + /* Task ID. */ + IN gceTASK id; +} +gcsTASK_HEADER; + +typedef struct _gcsTASK_LINK * gcsTASK_LINK_PTR; +typedef struct _gcsTASK_LINK +{ + /* Task ID (gcvTASK_LINK). */ + IN gceTASK id; + + /* Pointer to the next task container. */ + IN gctPOINTER cotainer; + + /* Pointer to the next task from the next task container. */ + IN gcsTASK_HEADER_PTR task; +} +gcsTASK_LINK; + +typedef struct _gcsTASK_CLUSTER * gcsTASK_CLUSTER_PTR; +typedef struct _gcsTASK_CLUSTER +{ + /* Task ID (gcvTASK_CLUSTER). */ + IN gceTASK id; + + /* Number of tasks in the cluster. */ + IN gctUINT taskCount; +} +gcsTASK_CLUSTER; + +typedef struct _gcsTASK_INCREMENT * gcsTASK_INCREMENT_PTR; +typedef struct _gcsTASK_INCREMENT +{ + /* Task ID (gcvTASK_INCREMENT). */ + IN gceTASK id; + + /* Address of the variable to increment. */ + IN gctUINT32 address; +} +gcsTASK_INCREMENT; + +typedef struct _gcsTASK_DECREMENT * gcsTASK_DECREMENT_PTR; +typedef struct _gcsTASK_DECREMENT +{ + /* Task ID (gcvTASK_DECREMENT). */ + IN gceTASK id; + + /* Address of the variable to decrement. */ + IN gctUINT32 address; +} +gcsTASK_DECREMENT; + +typedef struct _gcsTASK_SIGNAL * gcsTASK_SIGNAL_PTR; +typedef struct _gcsTASK_SIGNAL +{ + /* Task ID (gcvTASK_SIGNAL). */ + IN gceTASK id; + + /* Process owning the signal. */ + IN gctHANDLE process; + + /* Signal handle to signal. */ + IN gctSIGNAL signal; + +#if defined(__QNXNTO__) + IN gctINT32 coid; + IN gctINT32 rcvid; +#endif +} +gcsTASK_SIGNAL; + +typedef struct _gcsTASK_LOCKDOWN * gcsTASK_LOCKDOWN_PTR; +typedef struct _gcsTASK_LOCKDOWN +{ + /* Task ID (gcvTASK_LOCKDOWN). */ + IN gceTASK id; + + /* Address of the user space counter. */ + IN gctUINT32 userCounter; + + /* Address of the kernel space counter. */ + IN gctUINT32 kernelCounter; + + /* Process owning the signal. */ + IN gctHANDLE process; + + /* Signal handle to signal. */ + IN gctSIGNAL signal; +} +gcsTASK_LOCKDOWN; + +typedef struct _gcsTASK_UNLOCK_VIDEO_MEMORY * gcsTASK_UNLOCK_VIDEO_MEMORY_PTR; +typedef struct _gcsTASK_UNLOCK_VIDEO_MEMORY +{ + /* Task ID (gcvTASK_UNLOCK_VIDEO_MEMORY). */ + IN gceTASK id; + + /* Allocated video memory. */ + IN gctUINT64 node; +} +gcsTASK_UNLOCK_VIDEO_MEMORY; + +typedef struct _gcsTASK_FREE_VIDEO_MEMORY * gcsTASK_FREE_VIDEO_MEMORY_PTR; +typedef struct _gcsTASK_FREE_VIDEO_MEMORY +{ + /* Task ID (gcvTASK_FREE_VIDEO_MEMORY). */ + IN gceTASK id; + + /* Allocated video memory. */ + IN gctUINT32 node; +} +gcsTASK_FREE_VIDEO_MEMORY; + +typedef struct _gcsTASK_FREE_CONTIGUOUS_MEMORY * gcsTASK_FREE_CONTIGUOUS_MEMORY_PTR; +typedef struct _gcsTASK_FREE_CONTIGUOUS_MEMORY +{ + /* Task ID (gcvTASK_FREE_CONTIGUOUS_MEMORY). */ + IN gceTASK id; + + /* Number of bytes allocated. */ + IN gctSIZE_T bytes; + + /* Physical address of allocation. */ + IN gctPHYS_ADDR physical; + + /* Logical address of allocation. */ + IN gctPOINTER logical; +} +gcsTASK_FREE_CONTIGUOUS_MEMORY; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_driver_h_ */ + + diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_enum.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_enum.h new file mode 100644 index 00000000000000..ab244e887ae5c8 --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_enum.h @@ -0,0 +1,1879 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_shared_enum_h_ +#define __gc_hal_shared_enum_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Chip models. */ +typedef enum _gceCHIPMODEL +{ + gcv200 = 0x0200, + gcv300 = 0x0300, + gcv320 = 0x0320, + gcv328 = 0x0328, + gcv350 = 0x0350, + gcv355 = 0x0355, + gcv400 = 0x0400, + gcv410 = 0x0410, + gcv420 = 0x0420, + gcv428 = 0x0428, + gcv450 = 0x0450, + gcv500 = 0x0500, + gcv520 = 0x0520, + gcv530 = 0x0530, + gcv600 = 0x0600, + gcv620 = 0x0620, + gcv700 = 0x0700, + gcv800 = 0x0800, + gcv860 = 0x0860, + gcv880 = 0x0880, + gcv900 = 0x0900, + gcv1000 = 0x1000, + gcv1500 = 0x1500, + gcv2000 = 0x2000, + gcv2100 = 0x2100, + gcv2200 = 0x2200, + gcv2500 = 0x2500, + gcv3000 = 0x3000, + gcv4000 = 0x4000, + gcv5000 = 0x5000, + gcv5200 = 0x5200, + gcv6400 = 0x6400, + gcv7000 = 0x7000, + gcv7400 = 0x7400, + gcv8000 = 0x8000, +} +gceCHIPMODEL; + +/* Chip features. */ +typedef enum _gceFEATURE +{ + gcvFEATURE_PIPE_2D = 0, + gcvFEATURE_PIPE_3D, + gcvFEATURE_PIPE_VG, + gcvFEATURE_DC, + gcvFEATURE_HIGH_DYNAMIC_RANGE, + gcvFEATURE_MODULE_CG, + gcvFEATURE_MIN_AREA, + gcvFEATURE_BUFFER_INTERLEAVING, + gcvFEATURE_BYTE_WRITE_2D, + gcvFEATURE_ENDIANNESS_CONFIG, + gcvFEATURE_DUAL_RETURN_BUS, + gcvFEATURE_DEBUG_MODE, + gcvFEATURE_YUY2_RENDER_TARGET, + gcvFEATURE_FRAGMENT_PROCESSOR, + gcvFEATURE_2DPE20, + gcvFEATURE_FAST_CLEAR, + gcvFEATURE_YUV420_TILER, + gcvFEATURE_YUY2_AVERAGING, + gcvFEATURE_FLIP_Y, + gcvFEATURE_EARLY_Z, + gcvFEATURE_COMPRESSION, + gcvFEATURE_MSAA, + gcvFEATURE_SPECIAL_ANTI_ALIASING, + gcvFEATURE_SPECIAL_MSAA_LOD, + gcvFEATURE_422_TEXTURE_COMPRESSION, + gcvFEATURE_DXT_TEXTURE_COMPRESSION, + gcvFEATURE_ETC1_TEXTURE_COMPRESSION, + gcvFEATURE_CORRECT_TEXTURE_CONVERTER, + gcvFEATURE_TEXTURE_8K, + gcvFEATURE_SCALER, + gcvFEATURE_YUV420_SCALER, + gcvFEATURE_SHADER_HAS_W, + gcvFEATURE_SHADER_HAS_SIGN, + gcvFEATURE_SHADER_HAS_FLOOR, + gcvFEATURE_SHADER_HAS_CEIL, + gcvFEATURE_SHADER_HAS_SQRT, + gcvFEATURE_SHADER_HAS_TRIG, + gcvFEATURE_HZ, + gcvFEATURE_CORRECT_STENCIL, + gcvFEATURE_VG20, + gcvFEATURE_VG_FILTER, + gcvFEATURE_VG21, + gcvFEATURE_VG_DOUBLE_BUFFER, + gcvFEATURE_VG_RESOLUTION_8K, + gcvFEATURE_MC20, + gcvFEATURE_SUPER_TILED, + gcvFEATURE_FAST_CLEAR_FLUSH, + gcvFEATURE_2D_FILTERBLIT_PLUS_ALPHABLEND, + gcvFEATURE_2D_DITHER, + gcvFEATURE_2D_A8_TARGET, + gcvFEATURE_2D_A8_NO_ALPHA, + gcvFEATURE_2D_FILTERBLIT_FULLROTATION, + gcvFEATURE_2D_BITBLIT_FULLROTATION, + gcvFEATURE_WIDE_LINE, + gcvFEATURE_FC_FLUSH_STALL, + gcvFEATURE_FULL_DIRECTFB, + gcvFEATURE_HALF_FLOAT_PIPE, + gcvFEATURE_LINE_LOOP, + gcvFEATURE_2D_YUV_BLIT, + gcvFEATURE_2D_TILING, + gcvFEATURE_NON_POWER_OF_TWO, + gcvFEATURE_3D_TEXTURE, + gcvFEATURE_TEXTURE_ARRAY, + gcvFEATURE_TILE_FILLER, + gcvFEATURE_LOGIC_OP, + gcvFEATURE_MIXED_STREAMS, + gcvFEATURE_2D_MULTI_SOURCE_BLT, + gcvFEATURE_END_EVENT, + gcvFEATURE_VERTEX_10_10_10_2, + gcvFEATURE_TEXTURE_10_10_10_2, + gcvFEATURE_TEXTURE_ANISOTROPIC_FILTERING, + gcvFEATURE_TEXTURE_FLOAT_HALF_FLOAT, + gcvFEATURE_2D_ROTATION_STALL_FIX, + gcvFEATURE_2D_MULTI_SOURCE_BLT_EX, + gcvFEATURE_BUG_FIXES10, + gcvFEATURE_2D_MINOR_TILING, + gcvFEATURE_TEX_COMPRRESSION_SUPERTILED, /* Supertiled compressed textures are supported. */ + gcvFEATURE_FAST_MSAA, + gcvFEATURE_BUG_FIXED_INDEXED_TRIANGLE_STRIP, + gcvFEATURE_TEXTURE_TILE_STATUS_READ, + gcvFEATURE_DEPTH_BIAS_FIX, + gcvFEATURE_RECT_PRIMITIVE, + gcvFEATURE_BUG_FIXES11, + gcvFEATURE_SUPERTILED_TEXTURE, + gcvFEATURE_2D_NO_COLORBRUSH_INDEX8, + gcvFEATURE_RS_YUV_TARGET, + gcvFEATURE_2D_FC_SOURCE, /* For tilestatus compression feature*/ + gcvFEATURE_2D_CC_NOAA_SOURCE, + gcvFEATURE_PE_DITHER_FIX, + gcvFEATURE_2D_YUV_SEPARATE_STRIDE, + gcvFEATURE_FRUSTUM_CLIP_FIX, + gcvFEATURE_TEXTURE_SWIZZLE, + gcvFEATURE_PRIMITIVE_RESTART, + gcvFEATURE_TEXTURE_LINEAR, + gcvFEATURE_TEXTURE_YUV_ASSEMBLER, + gcvFEATURE_LINEAR_RENDER_TARGET, + gcvFEATURE_SHADER_HAS_ATOMIC, + gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE, + gcvFEATURE_SHADER_ENHANCEMENTS2, + gcvFEATURE_BUG_FIXES7, + gcvFEATURE_SHADER_HAS_RTNE, + gcvFEATURE_SHADER_HAS_EXTRA_INSTRUCTIONS2, + gcvFEATURE_SHADER_ENHANCEMENTS3, + gcvFEATURE_DYNAMIC_FREQUENCY_SCALING, + gcvFEATURE_SINGLE_BUFFER, + gcvFEATURE_OCCLUSION_QUERY, + gcvFEATURE_2D_GAMMA, + gcvFEATURE_2D_COLOR_SPACE_CONVERSION, + gcvFEATURE_2D_SUPER_TILE_VERSION, + gcvFEATURE_HALTI0, + gcvFEATURE_HALTI1, + gcvFEATURE_HALTI2, + gcvFEATURE_SUPPORT_GCREGTX, + gcvFEATURE_2D_MIRROR_EXTENSION, + gcvFEATURE_TEXTURE_ASTC, + gcvFEATURE_TEXTURE_ASTC_DECODE_FIX, + gcvFEATURE_TEXTURE_ASTC_BASE_LOD_FIX, + gcvFEATURE_2D_SUPER_TILE_V1, + gcvFEATURE_2D_SUPER_TILE_V2, + gcvFEATURE_2D_SUPER_TILE_V3, + gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2, + gcvFEATURE_NEW_RA, + gcvFEATURE_BUG_FIXED_IMPLICIT_PRIMITIVE_RESTART, + gcvFEATURE_PE_MULTI_RT_BLEND_ENABLE_CONTROL, + gcvFEATURE_SMALL_MSAA, /* An upgraded version of Fast MSAA */ + gcvFEATURE_VERTEX_INST_ID_AS_ATTRIBUTE, + gcvFEATURE_DUAL_16, + gcvFEATURE_BRANCH_ON_IMMEDIATE_REG, + gcvFEATURE_2D_COMPRESSION, + gcvFEATURE_TPC_COMPRESSION, + gcvFEATURE_TPCV11_COMPRESSION, + gcvFEATURE_DEC_COMPRESSION, + gcvFEATURE_DEC300_COMPRESSION, + gcvFEATURE_DEC400_COMPRESSION, + /*Its a new core for DEC400 compression*/ + gcvFEATURE_DEC400EX_COMPRESSION, + gcvFEATURE_DEC_TPC_COMPRESSION, + gcvFEATURE_DEC_COMPRESSION_TILE_NV12_8BIT, + gcvFEATURE_DEC_COMPRESSION_TILE_NV12_10BIT, + gcvFEATURE_2D_OPF_YUV_OUTPUT, + gcvFEATURE_2D_FILTERBLIT_A8_ALPHA, + gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT, + gcvFEATURE_2D_MULTI_SRC_BLT_BILINEAR_FILTER, + gcvFEATURE_2D_MULTI_SRC_BLT_1_5_ENHANCEMENT, + gcvFEATURE_V2_COMPRESSION_Z16_FIX, + gcvFEATURE_VERTEX_INST_ID_AS_INTEGER, + gcvFEATURE_2D_YUV_MODE, + gcvFEATURE_2D_CACHE_128B256BPERLINE, + gcvFEATURE_2D_SEPARATE_CACHE, + gcvFEATURE_2D_MAJOR_SUPER_TILE, + gcvFEATURE_2D_V4COMPRESSION, + gcvFEATURE_2D_VMSAA, + gcvFEATURE_2D_10BIT_OUTPUT_LINEAR, + gcvFEATURE_2D_YUV420_OUTPUT_LINEAR, + gcvFEATURE_ACE, + gcvFEATURE_COLOR_COMPRESSION, + gcvFEATURE_32BPP_COMPONENT_TEXTURE_CHANNEL_SWIZZLE, + gcvFEATURE_64BPP_HW_CLEAR_SUPPORT, + gcvFEATURE_TX_LERP_PRECISION_FIX, + gcvFEATURE_COMPRESSION_V2, + gcvFEATURE_MMU, + gcvFEATURE_COMPRESSION_V3, + gcvFEATURE_TX_DECOMPRESSOR, + gcvFEATURE_MRT_TILE_STATUS_BUFFER, + gcvFEATURE_COMPRESSION_V1, + gcvFEATURE_V1_COMPRESSION_Z16_DECOMPRESS_FIX, + gcvFEATURE_RTT, + gcvFEATURE_GENERIC_ATTRIB, + gcvFEATURE_2D_ONE_PASS_FILTER, + gcvFEATURE_2D_ONE_PASS_FILTER_TAP, + gcvFEATURE_2D_POST_FLIP, + gcvFEATURE_2D_PIXEL_ALIGNMENT, + gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT, + gcvFEATURE_CORRECT_AUTO_DISABLE_COUNT_WIDTH, + gcvFEATURE_8K_RT, + gcvFEATURE_HALTI3, + gcvFEATURE_EEZ, + gcvFEATURE_INTEGER_SIGNEXT_FIX, + gcvFEATURE_PSOUTPUT_MAPPING, + gcvFEATURE_8K_RT_FIX, + gcvFEATURE_TX_TILE_STATUS_MAPPING, + gcvFEATURE_SRGB_RT_SUPPORT, + gcvFEATURE_TEXTURE_16K, + gcvFEATURE_PA_FARZCLIPPING_FIX, + gcvFEATURE_PE_DITHER_COLORMASK_FIX, + gcvFEATURE_ZSCALE_FIX, + gcvFEATURE_MULTI_PIXELPIPES, + gcvFEATURE_PIPE_CL, + gcvFEATURE_BUG_FIXES18, + gcvFEATURE_UNIFIED_SAMPLERS, + gcvFEATURE_CL_PS_WALKER, + gcvFEATURE_NEW_HZ, + gcvFEATURE_TX_FRAC_PRECISION_6BIT, + gcvFEATURE_SH_INSTRUCTION_PREFETCH, + gcvFEATURE_PROBE, + gcvFEATURE_SINGLE_PIPE_HALTI1, + gcvFEATURE_BUG_FIXES8, /* This HW feature is wrong, we can't use this to check integer branch!!!*/ + gcvFEATURE_2D_ALL_QUAD, + gcvFEATURE_SEPARATE_SRC_DST, + gcvFEATURE_TX_HOR_ALIGN_SEL, + gcvFEATURE_HALTI4, + gcvFEATURE_MRT_FC_FIX, + gcvFEATURE_TESSELLATION, + gcvFEATURE_DRAW_INDIRECT, + gcvFEATURE_COMPUTE_INDIRECT, + gcvFEATURE_MSAA_TEXTURE, + gcvFEATURE_STENCIL_TEXTURE, + gcvFEATURE_S8_ONLY_RENDERING, + gcvFEATURE_D24S8_SAMPLE_STENCIL, + gcvFEATURE_ADVANCED_BLEND_MODE_PART0, + gcvFEATURE_RA_DEPTH_WRITE, + gcvFEATURE_RS_DS_DOWNSAMPLE_NATIVE_SUPPORT, + gcvFEATURE_S8_MSAA_COMPRESSION, + gcvFEATURE_MSAA_FRAGMENT_OPERATION, + gcvFEATURE_FE_START_VERTEX_SUPPORT, + gcvFEATURE_DIVISOR_STREAM_ADDR_FIX, + gcvFEATURE_ZERO_ATTRIB_SUPPORT, + gcvFEATURE_DANGLING_VERTEX_FIX, + gcvFEATURE_PE_DISABLE_COLOR_PIPE, + gcvFEATURE_FE_12bit_stride, + gcvFEATURE_TX_LOD_GUARDBAND, + gcvFEATURE_HAS_PRODUCTID, + gcvFEATURE_INTEGER32_FIX, + gcvFEATURE_TEXTURE_GATHER, + gcvFEATURE_IMG_INSTRUCTION, + gcvFEATURE_HELPER_INVOCATION, + gcvFEATURE_NO_USER_CSC, + gcvFEATURE_ANDROID_ONLY, + gcvFEATURE_V2_MSAA_COHERENCY_FIX, + gcvFEATURE_BLOCK_SIZE_16x16, + gcvFEATURE_TX_SUPPORT_DEC, + gcvFEATURE_RSBLT_MSAA_DECOMPRESSION, + gcvFEATURE_TILEFILLER_32TILE_ALIGNED, + gcvFEATURE_GEOMETRY_SHADER, + gcvFEATURE_HALTI5, + gcvFEATURE_PIPELINE_32_ATTRIBUTES, + gcvFEATURE_USC, + gcvFEATURE_CUBEMAP_ARRAY, + gcvFEATURE_TX_DESCRIPTOR, + gcvFEATURE_SEPARATE_RT_CTRL, + gcvFEATURE_RENDER_ARRAY, + gcvFEATURE_BLT_ENGINE, + gcvFEATURE_TEXTURE_BUFFER, + gcvFEATURE_GS_SUPPORT_EMIT, + gcvFEATURE_SAMPLER_BASE_OFFSET, + gcvFEATURE_IMAGE_OUT_BOUNDARY_FIX, + gcvFEATURE_TX_BORDER_CLAMP, + gcvFEATURE_MSAA_SHADING, + gcvFEATURE_ADVANCED_SH_INST, + gcvFEATURE_LOD_FIX_FOR_BASELEVEL, + gcvFEATURE_MULTIDRAW_INDIRECT, + gcvFEATURE_DRAW_ELEMENTS_BASE_VERTEX, + gcvFEATURE_NEW_STEERING_AND_ICACHE_FLUSH, /* Steering base on register base. Trigger-style Icache flush state. */ + gcvFEATURE_PE_DITHER_FIX2, + gcvFEATURE_INDEX_FETCH_FIX, + gcvFEATURE_TEX_BASELOD, + gcvFEATURE_TEX_SEAMLESS_CUBE, + gcvFEATURE_TEX_ETC2, + gcvFEATURE_TEX_CUBE_BORDER_LOD, + gcvFEATURE_FE_ALLOW_STALL_PREFETCH_ENG, + gcvFEATURE_TX_8BPP_TS_FIX, + gcvFEATURE_HW_TFB, + gcvFEATURE_COMPRESSION_V4, + gcvFEATURE_FENCE_32BIT, + gcvFEATURE_FENCE_64BIT, + gcvFEATURE_R8_UNORM, + gcvFEATURE_TX_DEFAULT_VALUE_FIX, + gcvFEATURE_TX_8bit_UVFrac, + gcvFEATURE_TX_MIPFILTER_NONE_FIX, + gcvFEATURE_MC_STENCIL_CTRL, + gcvFEATURE_DEPTH_MATH_FIX, + gcvFEATURE_PE_B2B_PIXEL_FIX, + gcvFEATURE_TEXTURE_GATHER_OFFSETS, + gcvFEATURE_TEX_CACHE_FLUSH_FIX, + gcvFEATURE_WIDELINE_HELPER_FIX, + gcvFEATURE_LINE_DIAMOND_RULE_FIX, + gcvFEATURE_MULTIGPU_SYNC_V2, + gcvFEATURE_DRAW_ID, + gcvFEATURE_SNAPPAGE_CMD, + gcvFEATURE_COMMAND_PREFETCH, + gcvFEATURE_SAMPLEPOS_SWIZZLE_FIX, + gcvFEATURE_SELECTMAP_SRC0_SWIZZLE_FIX, + gcvFEATURE_LOADATTR_OOB_FIX, + gcvFEATURE_RA_DEPTH_WRITE_MSAA1X_FIX, + gcvFEATURE_MRT_8BIT_DUAL_PIPE_FIX, + gcvFEATURE_BUG_FIXES1, + gcvFEATURE_MULTI_SOURCE_BLT, + gcvFEATURE_ZCOMPRESSION, + gcvFEATURE_DITHER_AND_FILTER_PLUS_ALPHA_2D, + gcvFEATURE_ONE_PASS_2D_FILTER, + gcvFEATURE_TX_FILTER, + gcvFEATURE_CHIPENABLE_LINK, + gcvFEATURE_TEXTURE_BIAS_LOD_FIX, + gcvFEATURE_USE_GL_Z, + gcvFEATURE_SUPPORT_INTEGER, + /* PARTLY_SUPPORT_INTEGER_BRANCH: + ** chips can support all integer types for compare instructions, e.g, CMP, SELECT. + ** FULLLY_SUPPORT_INTEGER_BRANCH: + ** chips can support all integer types for JMP instruction. + ** If PARTLY_SUPPORT_INTEGER_BRANCH is TRUE but FULLLY_SUPPORT_INTEGER_BRANCH is FALSE, + ** then this chip can only support INT32/UINT32 JMP instruction. + */ + gcvFEATURE_PARTLY_SUPPORT_INTEGER_BRANCH, + gcvFEATURE_FULLLY_SUPPORT_INTEGER_BRANCH, + gcvFEATURE_SUPPORT_INTEGER_ATTRIBUTE, + gcvFEATURE_SUPPORT_MOVAI, + gcvFEATURE_NEED_FIX_FOR_CL_X, + gcvFEATURE_NEED_FIX_FOR_CL_XE, + gcvFEATURE_HAS_OUTPUT_COUNT_FIX, + gcvFEATURE_VARYING_PACKING_LIMITATION, + gcvFEATURE_HIGHP_VARYING_SHIFT, + gcvFEATURE_BUG_FIXES2, + gcvFEATURE_64K_L2_CACHE, + gcvFEATURE_128BTILE, + gcvFEATURE_ADVANCED_BLEND_OPT, + gcvFEATURE_SNAPPAGE_CMD_FIX, + gcvFEATURE_L2_CACHE_FOR_2D_420, + gcvFEATURE_TILE_STATUS_2BITS, + gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS0, + gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS1, + gcvFEATURE_EXTRA_SHADER_INSTRUCTIONS2, + gcvFEATURE_MEDIUM_PRECISION, + gcvFEATURE_FE20_BIT_INDEX, + gcvFEATURE_BUG_FIXES4, + gcvFEATURE_BUG_FIXES12, + gcvFEATURE_VMSAA, + gcvFEATURE_ROBUST_ATOMIC, + gcvFEATURE_32F_COLORMASK_FIX, + gcvFEATURE_NEW_GPIPE, + gcvFEATURE_RS_NEW_BASEADDR, + gcvFEATURE_TX_DXT, + gcvFEATURE_SH_FLAT_INTERPOLATION_DUAL16_FIX, + gcvFEATURE_EVIS, + gcvFEATURE_SH_SUPPORT_V4, + gcvFEATURE_SH_SUPPORT_ALPHA_KILL, + gcvFEATURE_PE_NO_ALPHA_TEST, + gcvFEATURE_SH_SNAP2PAGE_MAXPAGES_FIX, + gcvFEATURE_USC_FULLCACHE_FIX, + gcvFEATURE_PE_64bit_FENCE_FIX, + gcvFEATURE_BLT_8bit_256TILE_FC_FIX, + gcvFEATURE_PE_RGBA16I_FIX, + gcvFEATURE_BLT_64bpp_MASKED_CLEAR_FIX, + gcvFEATURE_SH_PSO_MSAA1x_FIX, + gcvFEATURE_USC_ATOMIC_FIX, + gcvFEATURE_INDEX_CONST_ON_B0, + gcvFEATURE_SH_NO_ONECONST_LIMIT, + gcvFEATURE_EVIS_NO_ABSDIFF, + gcvFEATURE_EVIS_NO_BITREPLACE, + gcvFEATURE_EVIS_NO_BOXFILTER, + gcvFEATURE_EVIS_NO_CORDIAC, + gcvFEATURE_EVIS_NO_DP32, + gcvFEATURE_EVIS_NO_FILTER, + gcvFEATURE_EVIS_NO_IADD, + gcvFEATURE_EVIS_NO_SELECTADD, + gcvFEATURE_EVIS_LERP_7OUTPUT, + gcvFEATURE_EVIS_ACCSQ_8OUTPUT, + gcvFEATURE_ROBUSTNESS, + gcvFEATURE_SECURITY, + gcvFEATURE_TX_YUV_ASSEMBLER_10BIT, + gcvFEATURE_USC_GOS_ADDR_FIX, + gcvFEATURE_SUPPORT_MSAA2X, + gcvFEATURE_TX_DESC_CACHE_CLOCKGATE_FIX, + gcvFEATURE_TX_INTEGER_COORDINATE, + gcvFEATURE_PSIO_SAMPLEMASK_IN_R0ZW_FIX, + gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG, + gcvFEATURE_SH_IMG_LDST_ON_TEMP, + gcvFEATURE_TX_INTEGER_COORDINATE_V2, + gcvFEATURE_COMPUTE_ONLY, + gcvFEATURE_SH_IMG_LDST_CLAMP, + gcvFEATURE_SH_ICACHE_ALLOC_COUNT_FIX, + gcvFEATURE_MSAA_OQ_FIX, + gcvFEATURE_PE_ENHANCEMENTS2, + gcvFEATURE_PSIO_MSAA_CL_FIX, + gcvFEATURE_FE_NEED_DUMMYDRAW, + gcvFEATURE_MULTI_CLUSTER, + gcvFEATURE_PSIO_INTERLOCK, + gcvFEATURE_BLIT_COMPRESS_DEST, + gcvFEATURE_SH_MULTI_WG_PACK, + gcvFEATURE_FE_ROBUST_FIX, + gcvFEATURE_TX_ASTC_MULTISLICE_FIX, + gcvFEATURE_PSIO_DUAL16_32bpc_FIX, + gcvFEATURE_LS_SUPPORT_PER_COMP_DEPENDENCY, + gcvFEATURE_COMPRESSION_DEC400, + gcvFEATURE_SH_TEXLD_U_FIX, + gcvFEATURE_TX_FLUSH_L1CACHE, + gcvFEATURE_USC_DEFER_FILL_FIX, + gcvFEATURE_MC_FCCACHE_BYTEMASK, + gcvFEATURE_SH_MULTI_WG_PACK_FIX, + gcvFEATURE_FE_PATCHLIST_FETCH_FIX, + gcvFEATURE_RA_CG_FIX, + gcvFEATURE_EVIS_VX2, + gcvFEATURE_SH_HALF_DEPENDENCY_FIX, + gcvFEATURE_FE_BASEINSTANCE, + gcvFEATURE_FE_COMPUREINDIRECT_SKIP_UNIFORM, + gcvFEATURE_SH_CLOCK_GATE_FIX, + gcvFEATURE_GPIPE_CLOCK_GATE_FIX, + gcvFEATURE_TP_ENGINE, + gcvFEATURE_TX_BORDER_CLAMP_FIX, + gcvFEATURE_SH_IMAGE_LD_LAST_PIXEL_FIX, + gcvFEATURE_MULTI_CORE_BLOCK_SET_CONFIG2, + gcvFEATURE_MULTIGPU_SYNC_V3, + gcvFEATURE_PE_VMSAA_COVERAGE_CACHE_FIX, + gcvFEATURE_SECURITY_AHB, + gcvFEATURE_TX_LERP_LESS_BIT, + gcvFEATURE_SMALL_BATCH, + gcvFEATURE_SH_IDIV0_SWZL_EHS, + gcvFEATURE_SH_CMPLX, + gcvFEATURE_VIP_V7, + gcvFEATURE_SH_GM_ENDIAN, + gcvFEATURE_SH_GM_USC_UNALLOC, + gcvFEATURE_SH_END_OF_BB, + gcvFEATURE_ASYNC_BLIT, + gcvFEATURE_ASYNC_FE_FENCE_FIX, + gcvFEATURE_PSCS_THROTTLE, + gcvFEATURE_SEPARATE_LS, + gcvFEATURE_PA_VARYING_COMPONENT_TOGGLE_FIX, + gcvFEATURE_TX_MULTISAMPLER_FC_FIX, + gcvFEATURE_WIDELINE_TRIANGLE_EMU, + gcvFEATURE_FENCE, + gcvFEATURE_MCFE, + gcvFEATURE_NN_INTERLEAVE8, + gcvFEATURE_TP_REORDER, + gcvFEATURE_TP_RTNE, + gcvFEATURE_TP_LRN, + gcvFEATURE_TP_ROI_POOLING, + gcvFEATURE_TP_MAX_POOLING_STRIDE1, + gcvFEATURE_NN_BRICK_MODE, + gcvFEATURE_NN_BORDER_MODE, + gcvFEATURE_NN_FP16_ALU, + gcvFEATURE_NN_BF16_ALU, + gcvFEATURE_NN_INT16_ALU, + gcvFEATURE_NN_ZDP3, + gcvFEATURE_NN_ZDP6, + gcvFEATURE_PE_DEPTH_ONLY_OQFIX, + gcvFEATURE_TX_SNORM_SUPPORT, + gcvFEATURE_HWMANAGED_LS, + gcvFEATURE_SH_SCATTER_GATHER, + gcvFEATURE_NN_POWER_ISOLATION, + gcvFEATURE_SWTILING_PHASE1, + gcvFEATURE_SWTILING_PHASE2, + gcvFEATURE_SWTILING_PHASE3, + gcvFEATURE_TF_QUANTIZATION, + gcvFEATURE_NN_XYDP9, + gcvFEATURE_TP_SIMPLE_INT16, + gcvFEATURE_TP_REAL_INT16, + gcvFEATURE_NN_FIRST_PIXEL_POOLING, + gcvFEATURE_NN_STRIDE_SUPPORT, + gcvFEATURE_NN_XYDP6, + gcvFEATURE_NN_XYDP0, + gcvFEATURE_TP_REORDER_FIX, + gcvFEATURE_NN_CONV1x1_PERF_FIX, + gcvFEATURE_NN_CACHELINE_MODE_PERF_FIX, + gcvFEATURE_NN_PER3DTILE_BUBBLE_FIX, + gcvFEATURE_SH_IO_CG_FIX, + gcvFEATURE_USC_STAY_LRU, + gcvFEATURE_NN_NONZERO_MIRROR_BORDER, + gcvFEATURE_NN_COEF_DECOMPRESS_PERF2X, + gcvFEATURE_4BIT_INPUT, + gcvFEATURE_COEF_COMPRESSION_ENHANCEMENT, + gcvFEATURE_NN_ZDP3_NO_COMPRESS_FIX, + gcvFEATURE_NN_ASYNC_COPY_PERF_FIX, + gcvFEATURE_OCB_COUNTER, + gcvFEATURE_NN_ZXDP3_KERNEL_READ_CONFLICT_FIX, + gcvFEATURE_NN_FULLCACHE_KERNEL_INTERLEAVE_FIX, + gcvFEATURE_DR_JD_DIFF_CONDITION_FOR_CACHELINE_MODE_PRE_FIX, + gcvFEATURE_USC_BOTTLENECK_FIX, + gcvFEATURE_OCB_REMAP_PHYSICAL_ADDRESS, + gcvFEATURE_NN_SLICE_PADDING_TO_64BYTE_ALIGN, + gcvFEATURE_NN_DW_1x1_CONV_MERGE, + gcvFEATURE_TP_REORDER_LAYER_SUSPEND_FIX, + gcvFEATURE_KERNEL_VIP_SRAM_READ_BW_LIMITATION_FIX, + gcvFEATURE_IMG_POP_PIPELINE_PAUSE_FIX, + gcvFEATURE_NN_SLOW_OUTPUT, + gcvFEATURE_NO_NARROW_POST_PROCESS_PIPE, + gcvFEATURE_TP_NN_PROBE, + gcvFEATURE_TP_23BITS_POST_MULTIPLIER, + gcvFEATURE_NN_TRANSPOSE, + gcvFEATURE_OUTIMAGE_X_BITWIDTH_LIMIT_FOR_NN_TRANSPOSE_FIX, + gcvFEATURE_TP_BFLOAT16, + gcvFEATURE_EVIS2_FLOP_RESET_FIX, + gcvFEATURE_USC_ASYNC_CP_RTN_FLOP_RESET_FIX, + gcvFEATURE_USC_EVICT_CTRL_FIFO_FLOP_RESET_FIX, + gcvFEATURE_NEGATIVE_POST_SHIFT_FIX, + gcvFEATURE_NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX, + gcvFEATURE_NN_LEAKY_RELU, + gcvFEATURE_NN_PRELU, + gcvFEATURE_NN_NATIVE_STRIDE_TWO, + gcvFEATURE_NN_TENSOR_ADD, + + gcvFEATURE_IMAGE_LS_NO_FULLMASK_FIX, + gcvFEATURE_BLT_YUV_OUTPUT, + gcvFEATURE_PE_TILE_CACHE_FLUSH_FIX, + gcvFEATURE_SH_ROBUSTNESS_FIX, + gcvFEATURE_USC_ATOMIC_FIX2, + gcvFEATURE_MULTIVIEW_RENDER, + gcvFEATURE_FE_DRAW_DIRECT, + gcvFEATURE_TX_VKBORDER_MODE, + gcvFEATURE_TX_UNNORMALIZED_COORD, + gcvFEATURE_VG_IMAGE_16K, + gcvFEATURE_MULTICORE_CONFIG, + gcvFEATURE_PA_LINECLIP_FIX, + gcvFEATURE_NN_ENGINE, + gcvFEATURE_NN_ASYNC_COPY_MERGE_FIX, + gcvFEATURE_NN_CONVOUT_FIFO_DEPTH_FIX, + gcvFEATURE_NN_SMALLBATCH_PHASE1, + gcvFEATURE_TP_SMALLBATCH_PHASE1, + gcvFEATURE_VIP_SCALER, + gcvFEATURE_VIP_SCALER_4K, + gcvFEATURE_TX_8bit_UVFrac_ROUNDING_FIX, + gcvFEATURE_NN_REQ_SLOWARBITRATION_FIX, + gcvFEATUER_IMAGE_PARTIAL_CACHE, + gcvFEATURE_FULLCACHE_KERNELHEAD_FIX, + gcvFEATURE_NN_SINGLEPORT_ACCUMBUFFER, + gcvFEATURE_NN_SMALLBATCH, + gcvFEATURE_TP_SMALLBATCH, + gcvFEATURE_NN_ZDP_INIMAGE_SIZE_FIX, + gcvFEATURE_HI_REORDER_FIX, + gcvFEATURE_TP_COEF_COMPRESSION_ENHANCEMENT, + gcvFEATURE_NN_DEPTHWISE_SUPPORT, + gcvFEATURE_IMAGE_NOT_PACKED_IN_SRAM_FIX, + gcvFEATURE_IDLE_BEFORE_FLUSH_COMPLETE_FIX, + gcvFEATURE_NO_FLUSH_USC_FIX, + gcvFEATURE_COEF_DELTA_CORD_OVERFLOW_ZRL_8BIT_FIX, + gcvFEATURE_XY_OFFSET_LIMITATION_FIX, + gcvFEATURE_USC_INVALIDATE_CACHE_LINE_FIX, + gcvFEATURE_LOW_EFFICIENCY_OF_ID_WRITE_IMGBUF_FIX, + gcvFEATURE_KERNEL_PER_CORE_LESS_THAN_THIRD_COEF_BUFF_DEPTH_FIX, + gcvFEATURE_NN_PER_CHANNEL_QUANT, + gcvFEATURE_NN_NO_Z_LOCATION_OFFSET, + gcvFEATURE_NN_KERNEL_SIZE_WASTE_IN_PARTIAL_MODE_FIX, + gcvFEATURE_INCORRECT_WR_REQ_TO_USC_BETWEEN_REORDER_AND_NORMAL_LAYER_FIX, + gcvFEATURE_VIP_DEC400, + gcvFEATURE_MAX_POINTSIZE_CLAMP, + gcvFEATURE_2D_FAST_CLEAR, /* For tilestatus Fast Clear feature*/ + gcvFEATURE_NN_PER_CHANNEL_QUANT_ASYM, + gcvFEATURE_SMALL_BATCH_FLOPS_RESET_FIX, + gcvFEATURE_SMALL_BATCH_DISBLE_FIX, + gcvFEATURE_FORMAT_10BIT_CROSS_4K, + gcvFEATURE_ENDIAN_CONTROL, + gcvFEATURE_SH_VX2_FLOATING_MAD_FIX, + gcvFEATURE_PE_A8B8G8R8, /* For PE support A8B8G8R8 format feature*/ + gcvFEATURE_DEPTHWISE_NEIGHBOR_IMG_DATA_TRANSFER_NOT_EFFICIENT_FIX, + + /* AIGPU feature. */ + gcvFEATURE_AI_GPU, + gcvFEATURE_NN_FAST_FIRST_PIXEL_POOLING, + gcvFEATURE_NN_FLOAT_POST_MULT, + + gcvFEATURE_FORMAT_YUV_I010, /*support YUVI010 & P010_LSB format*/ + + gcFEATURE_BIT_NN_COMPRESSION_BYPASSS, + gcFEATURE_BIT_BFLOAT_KERNEL_COMPRESSION_ZERO_SKIP_FIX, + gcFEATURE_BIT_TP_KERNEL_1BYTE_ALGIN, + gcFEATURE_PREPROCESS_IMG_BUF_640BYTE_LIMIT, + + gcvFEATURE_VIP_HW_FINAL_RELEASE, + /* Insert features above this comment only. */ + gcvFEATURE_COUNT /* Not a feature. */ +} +gceFEATURE; + +/* Chip Power Status. */ +typedef enum _gceCHIPPOWERSTATE +{ + gcvPOWER_INVALID = -1, + + /* Global/base states. */ + gcvPOWER_ON = 0, + gcvPOWER_IDLE, + gcvPOWER_SUSPEND, + gcvPOWER_OFF, + + /* Power on but not global or broadcast. */ + gcvPOWER_ON_AUTO, + + /* Broadcast states. */ + gcvPOWER_FLAG_BROADCAST = 0x10, + gcvPOWER_IDLE_BROADCAST = gcvPOWER_IDLE | gcvPOWER_FLAG_BROADCAST, + gcvPOWER_SUSPEND_BROADCAST = gcvPOWER_SUSPEND | gcvPOWER_FLAG_BROADCAST, + gcvPOWER_OFF_BROADCAST = gcvPOWER_OFF | gcvPOWER_FLAG_BROADCAST, + + + /* Timeout states. */ + gcvPOWER_FLAG_TIMEOUT = 0x20, + gcvPOWER_IDLE_TIMEOUT = gcvPOWER_IDLE | gcvPOWER_FLAG_TIMEOUT, + gcvPOWER_SUSPEND_TIMEOUT = gcvPOWER_SUSPEND | gcvPOWER_FLAG_TIMEOUT, + gcvPOWER_OFF_TIMEOUT = gcvPOWER_OFF | gcvPOWER_FLAG_TIMEOUT, + +} +gceCHIPPOWERSTATE; + +/* CPU cache operations */ +typedef enum _gceCACHEOPERATION +{ + gcvCACHE_CLEAN = 0x01, /* Flush CPU cache to mem */ + gcvCACHE_INVALIDATE = 0x02, /* Invalidte CPU cache */ + gcvCACHE_FLUSH = gcvCACHE_CLEAN | gcvCACHE_INVALIDATE, /* Both flush & invalidate */ + gcvCACHE_MEMORY_BARRIER = 0x04 +} +gceCACHEOPERATION; + +/* Surface types. */ +typedef enum _gceSURF_TYPE +{ + gcvSURF_TYPE_UNKNOWN = 0, + gcvSURF_INDEX, + gcvSURF_VERTEX, + gcvSURF_TEXTURE, + gcvSURF_RENDER_TARGET, + gcvSURF_DEPTH, + gcvSURF_BITMAP, + gcvSURF_TILE_STATUS, + gcvSURF_IMAGE, + gcvSURF_MASK, + gcvSURF_SCISSOR, + gcvSURF_HIERARCHICAL_DEPTH, + gcvSURF_ICACHE, + gcvSURF_TXDESC, + gcvSURF_FENCE, + gcvSURF_TFBHEADER, + gcvSURF_NUM_TYPES, /* Make sure this is the last one! */ + + /* Combinations. */ + gcvSURF_NO_TILE_STATUS = 0x100, + gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node. + In Android, vidmem node is allocated by another process. */ + gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */ + gcvSURF_TILE_RLV_FENCE = 0x800, /* create texture fence as tile */ + gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */ + gcvSURF_LINEAR = 0x2000, + gcvSURF_CREATE_AS_TEXTURE = 0x4000, /* create it as a texture */ + gcvSURF_PROTECTED_CONTENT = 0x8000, /* create it as content protected */ + gcvSURF_CREATE_AS_DISPLAYBUFFER = 0x10000, /*create it as a display buffer surface */ + gcvSURF_CONTIGUOUS = 0x20000, /*create it as contiguous */ + gcvSURF_NO_COMPRESSION = 0x40000, /* Create it as no compression, valid on when it has tile status. */ + gcvSURF_DEC = 0x80000, /* Surface is DEC compressed */ + gcvSURF_NO_HZ = 0x100000, + gcvSURF_3D = 0x200000, /* It's 3d surface */ + gcvSURF_DMABUF_EXPORTABLE = 0x400000, /* master node can be exported as dma-buf fd */ + gcvSURF_CACHE_MODE_128 = 0x800000, + + gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE + | gcvSURF_LINEAR, + + gcvSURF_RENDER_TARGET_LINEAR = gcvSURF_RENDER_TARGET + | gcvSURF_LINEAR, + + gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET + | gcvSURF_NO_TILE_STATUS, + + gcvSURF_RENDER_TARGET_NO_COMPRESSION = gcvSURF_RENDER_TARGET + | gcvSURF_NO_COMPRESSION, + + gcvSURF_RENDER_TARGET_TS_DIRTY = gcvSURF_RENDER_TARGET + | gcvSURF_TILE_STATUS_DIRTY, + + gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH + | gcvSURF_NO_TILE_STATUS, + + gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH + | gcvSURF_TILE_STATUS_DIRTY, + + /* Supported surface types with no vidmem node. */ + gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP + | gcvSURF_NO_VIDMEM, + + gcvSURF_TEXTURE_NO_VIDMEM = gcvSURF_TEXTURE + | gcvSURF_NO_VIDMEM, + + /* Cacheable surface types with no vidmem node. */ + gcvSURF_CACHEABLE_BITMAP_NO_VIDMEM = gcvSURF_BITMAP_NO_VIDMEM + | gcvSURF_CACHEABLE, + + gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP + | gcvSURF_CACHEABLE, + + gcvSURF_TEXTURE_3D = gcvSURF_TEXTURE + | gcvSURF_3D +} +gceSURF_TYPE; + +/* Surface formats. +** Name rules is from MSB->LSB. +*/ +typedef enum _gceSURF_FORMAT +{ + /* Unknown format. */ + gcvSURF_UNKNOWN = 0, + + /* Palettized formats. */ + gcvSURF_INDEX1 = 100, + gcvSURF_INDEX4, + gcvSURF_INDEX8, +#if gcdVG_ONLY + gcvSURF_INDEX2, +#endif + + /* RGB formats. */ + gcvSURF_A2R2G2B2 = 200, + gcvSURF_R3G3B2, + gcvSURF_A8R3G3B2, + gcvSURF_X4R4G4B4, + gcvSURF_A4R4G4B4, + gcvSURF_R4G4B4A4, + gcvSURF_X1R5G5B5, + gcvSURF_A1R5G5B5, + gcvSURF_R5G5B5A1, + gcvSURF_R5G6B5, + gcvSURF_R8G8B8, + gcvSURF_X8R8G8B8, + gcvSURF_A8R8G8B8, + gcvSURF_R8G8B8A8, + gcvSURF_G8R8G8B8, + gcvSURF_R8G8B8G8, + gcvSURF_X2R10G10B10, + gcvSURF_A2R10G10B10, + gcvSURF_R10G10B10A2, + gcvSURF_X12R12G12B12, + gcvSURF_A12R12G12B12, + gcvSURF_X16R16G16B16, + gcvSURF_A16R16G16B16, + gcvSURF_A32R32G32B32, + gcvSURF_R8G8B8X8, + gcvSURF_R5G5B5X1, + gcvSURF_R4G4B4X4, + gcvSURF_X16R16G16B16_2_A8R8G8B8, + gcvSURF_A16R16G16B16_2_A8R8G8B8, + gcvSURF_A32R32G32B32_2_G32R32F, + gcvSURF_A32R32G32B32_4_A8R8G8B8, + /* BGR formats. */ + gcvSURF_A4B4G4R4 = 300, + gcvSURF_A1B5G5R5, + gcvSURF_B5G6R5, + gcvSURF_B8G8R8, + gcvSURF_B16G16R16, + gcvSURF_X8B8G8R8, + gcvSURF_A8B8G8R8, + gcvSURF_A2B10G10R10, + gcvSURF_X16B16G16R16, + gcvSURF_A16B16G16R16, + gcvSURF_B32G32R32, + gcvSURF_X32B32G32R32, + gcvSURF_A32B32G32R32, + gcvSURF_B4G4R4A4, + gcvSURF_B5G5R5A1, + gcvSURF_B8G8R8X8, + gcvSURF_B8G8R8A8, + gcvSURF_B10G10R10A2, + gcvSURF_X4B4G4R4, + gcvSURF_X1B5G5R5, + gcvSURF_B4G4R4X4, + gcvSURF_B5G5R5X1, + gcvSURF_X2B10G10R10, + gcvSURF_B8G8R8_SNORM, + gcvSURF_X8B8G8R8_SNORM, + gcvSURF_A8B8G8R8_SNORM, + gcvSURF_A8B12G12R12_2_A8R8G8B8, + + /* Compressed formats. */ + gcvSURF_DXT1 = 400, + gcvSURF_DXT2, + gcvSURF_DXT3, + gcvSURF_DXT4, + gcvSURF_DXT5, + gcvSURF_CXV8U8, + gcvSURF_ETC1, + gcvSURF_R11_EAC, + gcvSURF_SIGNED_R11_EAC, + gcvSURF_RG11_EAC, + gcvSURF_SIGNED_RG11_EAC, + gcvSURF_RGB8_ETC2, + gcvSURF_SRGB8_ETC2, + gcvSURF_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, + gcvSURF_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, + gcvSURF_RGBA8_ETC2_EAC, + gcvSURF_SRGB8_ALPHA8_ETC2_EAC, + + /* YUV formats. */ + gcvSURF_YUY2 = 500, + gcvSURF_UYVY, + gcvSURF_YV12, + gcvSURF_I420, + gcvSURF_NV12, + gcvSURF_NV21, + gcvSURF_NV16, + gcvSURF_NV61, + gcvSURF_YVYU, + gcvSURF_VYUY, + gcvSURF_AYUV, + gcvSURF_YUV420_10_ST, + gcvSURF_YUV420_TILE_ST, + gcvSURF_YUV420_TILE_10_ST, + gcvSURF_NV12_10BIT, + gcvSURF_NV21_10BIT, + gcvSURF_NV16_10BIT, + gcvSURF_NV61_10BIT, + gcvSURF_P010, + gcvSURF_P010_LSB, + gcvSURF_I010, +#if gcdVG_ONLY + gcvSURF_AYUY2, + gcvSURF_ANV12, + gcvSURF_ANV16, + gcvSURF_AUYVY, + gcvSURF_YV16, +#endif + + /* Depth formats. */ + gcvSURF_D16 = 600, + gcvSURF_D24S8, + gcvSURF_D32, + gcvSURF_D24X8, + gcvSURF_D32F, + gcvSURF_S8D32F, + gcvSURF_S8D32F_1_G32R32F, + gcvSURF_S8D32F_2_A8R8G8B8, + gcvSURF_D24S8_1_A8R8G8B8, + gcvSURF_S8, + gcvSURF_X24S8, + gcvSURF_X24S8_1_A8R8G8B8, + + /* Alpha formats. */ + gcvSURF_A4 = 700, + gcvSURF_A8, + gcvSURF_A12, + gcvSURF_A16, + gcvSURF_A32, + gcvSURF_A1, + + /* Luminance formats. */ + gcvSURF_L4 = 800, + gcvSURF_L8, + gcvSURF_L12, + gcvSURF_L16, + gcvSURF_L32, + gcvSURF_L1, + gcvSURF_L8_RAW, + + /* Alpha/Luminance formats. */ + gcvSURF_A4L4 = 900, + gcvSURF_A2L6, + gcvSURF_A8L8, + gcvSURF_A4L12, + gcvSURF_A12L12, + gcvSURF_A16L16, + + gcvSURF_A8L8_1_A8R8G8B8, + + gcvSURF_A8L8_RAW, + + /* Bump formats. */ + gcvSURF_L6V5U5 = 1000, + gcvSURF_V8U8, + gcvSURF_X8L8V8U8, + gcvSURF_Q8W8V8U8, + gcvSURF_A2W10V10U10, + gcvSURF_V16U16, + gcvSURF_Q16W16V16U16, + + /* R/RG/RA formats. */ + gcvSURF_R8 = 1100, + gcvSURF_X8R8, + gcvSURF_G8R8, + gcvSURF_X8G8R8, + gcvSURF_A8R8, + gcvSURF_R16, + gcvSURF_X16R16, + gcvSURF_G16R16, + gcvSURF_X16G16R16, + gcvSURF_A16R16, + gcvSURF_R32, + gcvSURF_X32R32, + gcvSURF_G32R32, + gcvSURF_X32G32R32, + gcvSURF_A32R32, + gcvSURF_RG16, + gcvSURF_R8_SNORM, + gcvSURF_G8R8_SNORM, + + gcvSURF_R8_1_X8R8G8B8, + gcvSURF_G8R8_1_X8R8G8B8, + + /* Floating point formats. */ + gcvSURF_R16F = 1200, + gcvSURF_X16R16F, + gcvSURF_G16R16F, + gcvSURF_X16G16R16F, + gcvSURF_B16G16R16F, + gcvSURF_X16B16G16R16F, + gcvSURF_A16B16G16R16F, + gcvSURF_R32F, + gcvSURF_X32R32F, + gcvSURF_G32R32F, + gcvSURF_X32G32R32F, + gcvSURF_B32G32R32F, + gcvSURF_X32B32G32R32F, + gcvSURF_A32B32G32R32F, + gcvSURF_A16F, + gcvSURF_L16F, + gcvSURF_A16L16F, + gcvSURF_A16R16F, + gcvSURF_A32F, + gcvSURF_L32F, + gcvSURF_A32L32F, + gcvSURF_A32R32F, + gcvSURF_E5B9G9R9, + gcvSURF_B10G11R11F, + + gcvSURF_X16B16G16R16F_2_A8R8G8B8, + gcvSURF_A16B16G16R16F_2_A8R8G8B8, + gcvSURF_A16B16G16R16F_2_G16R16F, + gcvSURF_G32R32F_2_A8R8G8B8, + gcvSURF_X32B32G32R32F_2_G32R32F, + gcvSURF_A32B32G32R32F_2_G32R32F, + gcvSURF_X32B32G32R32F_4_A8R8G8B8, + gcvSURF_A32B32G32R32F_4_A8R8G8B8, + + gcvSURF_R16F_1_A4R4G4B4, + gcvSURF_G16R16F_1_A8R8G8B8, + gcvSURF_B16G16R16F_2_A8R8G8B8, + + gcvSURF_R32F_1_A8R8G8B8, + gcvSURF_B32G32R32F_3_A8R8G8B8, + gcvSURF_B10G11R11F_1_A8R8G8B8, + + gcvSURF_A32F_1_R32F, + gcvSURF_L32F_1_R32F, + gcvSURF_A32L32F_1_G32R32F, + + + + /* sRGB format. */ + gcvSURF_SBGR8 = 1400, + gcvSURF_A8_SBGR8, + gcvSURF_X8_SBGR8, + gcvSURF_A8_SRGB8, + gcvSURF_X8_SRGB8, + + /* Integer formats. */ + gcvSURF_R8I = 1500, + gcvSURF_R8UI, + gcvSURF_R16I, + gcvSURF_R16UI, + gcvSURF_R32I, + gcvSURF_R32UI, + gcvSURF_X8R8I, + gcvSURF_G8R8I, + gcvSURF_X8R8UI, + gcvSURF_G8R8UI, + gcvSURF_X16R16I, + gcvSURF_G16R16I, + gcvSURF_X16R16UI, + gcvSURF_G16R16UI, + gcvSURF_X32R32I, + gcvSURF_G32R32I, + gcvSURF_X32R32UI, + gcvSURF_G32R32UI, + gcvSURF_X8G8R8I, + gcvSURF_B8G8R8I, + gcvSURF_X8G8R8UI, + gcvSURF_B8G8R8UI, + gcvSURF_X16G16R16I, + gcvSURF_B16G16R16I, + gcvSURF_X16G16R16UI, + gcvSURF_B16G16R16UI, + gcvSURF_X32G32R32I, + gcvSURF_B32G32R32I, + gcvSURF_X32G32R32UI, + gcvSURF_B32G32R32UI, + gcvSURF_X8B8G8R8I, + gcvSURF_A8B8G8R8I, + gcvSURF_X8B8G8R8UI, + gcvSURF_A8B8G8R8UI, + gcvSURF_X16B16G16R16I, + gcvSURF_A16B16G16R16I, + gcvSURF_X16B16G16R16UI, + gcvSURF_A16B16G16R16UI, + gcvSURF_X32B32G32R32I, + gcvSURF_A32B32G32R32I, + gcvSURF_X32B32G32R32UI, + gcvSURF_A32B32G32R32UI, + gcvSURF_A2B10G10R10UI, + gcvSURF_G32R32I_2_A8R8G8B8, + gcvSURF_G32R32I_1_G32R32F, + gcvSURF_G32R32UI_2_A8R8G8B8, + gcvSURF_G32R32UI_1_G32R32F, + gcvSURF_X16B16G16R16I_2_A8R8G8B8, + gcvSURF_X16B16G16R16I_1_G32R32F, + gcvSURF_A16B16G16R16I_2_A8R8G8B8, + gcvSURF_A16B16G16R16I_1_G32R32F, + gcvSURF_X16B16G16R16UI_2_A8R8G8B8, + gcvSURF_X16B16G16R16UI_1_G32R32F, + gcvSURF_A16B16G16R16UI_2_A8R8G8B8, + gcvSURF_A16B16G16R16UI_1_G32R32F, + gcvSURF_X32B32G32R32I_2_G32R32I, + gcvSURF_A32B32G32R32I_2_G32R32I, + gcvSURF_A32B32G32R32I_2_G32R32F, + gcvSURF_X32B32G32R32I_3_A8R8G8B8, + gcvSURF_A32B32G32R32I_4_A8R8G8B8, + gcvSURF_X32B32G32R32UI_2_G32R32UI, + gcvSURF_A32B32G32R32UI_2_G32R32UI, + gcvSURF_A32B32G32R32UI_2_G32R32F, + gcvSURF_X32B32G32R32UI_3_A8R8G8B8, + gcvSURF_A32B32G32R32UI_4_A8R8G8B8, + gcvSURF_A2B10G10R10UI_1_A8R8G8B8, + gcvSURF_A8B8G8R8I_1_A8R8G8B8, + gcvSURF_A8B8G8R8UI_1_A8R8G8B8, + gcvSURF_R8I_1_A4R4G4B4, + gcvSURF_R8UI_1_A4R4G4B4, + gcvSURF_R16I_1_A4R4G4B4, + gcvSURF_R16UI_1_A4R4G4B4, + gcvSURF_R32I_1_A8R8G8B8, + gcvSURF_R32UI_1_A8R8G8B8, + gcvSURF_X8R8I_1_A4R4G4B4, + gcvSURF_X8R8UI_1_A4R4G4B4, + gcvSURF_G8R8I_1_A4R4G4B4, + gcvSURF_G8R8UI_1_A4R4G4B4, + gcvSURF_X16R16I_1_A4R4G4B4, + gcvSURF_X16R16UI_1_A4R4G4B4, + gcvSURF_G16R16I_1_A8R8G8B8, + gcvSURF_G16R16UI_1_A8R8G8B8, + gcvSURF_X32R32I_1_A8R8G8B8, + gcvSURF_X32R32UI_1_A8R8G8B8, + gcvSURF_X8G8R8I_1_A4R4G4B4, + gcvSURF_X8G8R8UI_1_A4R4G4B4, + gcvSURF_B8G8R8I_1_A8R8G8B8, + gcvSURF_B8G8R8UI_1_A8R8G8B8, + gcvSURF_B16G16R16I_2_A8R8G8B8, + gcvSURF_B16G16R16I_1_G32R32F, + gcvSURF_B16G16R16UI_2_A8R8G8B8, + gcvSURF_B16G16R16UI_1_G32R32F, + gcvSURF_B32G32R32I_3_A8R8G8B8, + gcvSURF_B32G32R32UI_3_A8R8G8B8, + gcvSURF_A16B16G16R16_2_A8R8G8B8, + gcvSURF_R8G8B8_1_A8R8G8B8, + gcvSURF_G16R16_1_A8R8G8B8, + gcvSURF_A2B10G10R10_1_A8R8G8B8, + gcvSURF_A2R10G10B10_1_A8R8G8B8, + gcvSURF_A2W10V10U10_1_A8R8G8B8, + + /* ASTC formats. */ + gcvSURF_ASTC4x4 = 1600, + gcvSURF_ASTC5x4, + gcvSURF_ASTC5x5, + gcvSURF_ASTC6x5, + gcvSURF_ASTC6x6, + gcvSURF_ASTC8x5, + gcvSURF_ASTC8x6, + gcvSURF_ASTC8x8, + gcvSURF_ASTC10x5, + gcvSURF_ASTC10x6, + gcvSURF_ASTC10x8, + gcvSURF_ASTC10x10, + gcvSURF_ASTC12x10, + gcvSURF_ASTC12x12, + gcvSURF_ASTC4x4_SRGB, + gcvSURF_ASTC5x4_SRGB, + gcvSURF_ASTC5x5_SRGB, + gcvSURF_ASTC6x5_SRGB, + gcvSURF_ASTC6x6_SRGB, + gcvSURF_ASTC8x5_SRGB, + gcvSURF_ASTC8x6_SRGB, + gcvSURF_ASTC8x8_SRGB, + gcvSURF_ASTC10x5_SRGB, + gcvSURF_ASTC10x6_SRGB, + gcvSURF_ASTC10x8_SRGB, + gcvSURF_ASTC10x10_SRGB, + gcvSURF_ASTC12x10_SRGB, + gcvSURF_ASTC12x12_SRGB, + + /* Recompile format*/ + gcvSURF_L16_1_A4R4G4B4 = 1700, + gcvSURF_V16U16_1_A8R8G8B8, + gcvSURF_Q8W8V8U8_1_A8R8G8B8, + gcvSURF_X8L8V8U8_1_A8R8G8B8, + gcvSURF_R3G3B2_1_A8R8G8B8, + gcvSURF_A8R3G3B2_1_A8R8G8B8, + gcvSURF_W11V11U10_1_A8R8G8B8, + gcvSURF_Q16W16V16U16_2_A8R8G8B8, + gcvSURF_W11V11U10, + gcvSURF_V8U8_1_A4R4G4B4, + gcvSURF_A8B8G8R8_1_A8R8G8B8, + gcvSURF_A32R32G32B32_1_A8R8G8B8, + gcvSURF_X16B16G16R16F_1_A8R8G8B8, + gcvSURF_A16B16G16R16F_1_A8R8G8B8, + gcvSURF_G32R32F_1_A8R8G8B8, + gcvSURF_X32B32G32R32F_1_A8R8G8B8, + gcvSURF_A32B32G32R32F_1_A8R8G8B8, + gcvSURF_G32R32I_1_A8R8G8B8, + gcvSURF_G32R32UI_1_A8R8G8B8, + gcvSURF_A32B32G32R32I_1_A8R8G8B8, + gcvSURF_A32B32G32R32UI_1_A8R8G8B8, + gcvSURF_Q16W16V16U16_1_A8R8G8B8, + gcvSURF_A16B16G16R16_1_A8R8G8B8, + + /* Integer formats (2)) */ + gcvSURF_R10G10B10A2UI = 1800, + gcvSURF_R5G6B5UI, + gcvSURF_B5G6R5UI, + gcvSURF_R3G3B2UI, + gcvSURF_B2G3R3UI, + gcvSURF_R4G4B4A4UI, + gcvSURF_A4B4G4R4UI, + gcvSURF_R5G5B5A1UI, + gcvSURF_A1B5G5R5UI, + gcvSURF_R8G8B8A8UI, + + /* GL4 formats */ + gcvSURF_G8 = 1900, + gcvSURF_B8, + gcvSURF_G32F, + gcvSURF_B32F, +} +gceSURF_FORMAT; + +/* Pipes. */ +typedef enum _gcePIPE_SELECT +{ + gcvPIPE_INVALID = ~0, + gcvPIPE_3D = 0, + gcvPIPE_2D +} +gcePIPE_SELECT; + +/* Hardware type. */ +typedef enum _gceHARDWARE_TYPE +{ + gcvHARDWARE_INVALID, + gcvHARDWARE_3D2D, + gcvHARDWARE_3D, + gcvHARDWARE_2D, + gcvHARDWARE_VIP, + gcvHARDWARE_VG, + gcvHARDWARE_NUM_TYPES, +} +gceHARDWARE_TYPE; + +/* User signal command codes. */ +typedef enum _gceUSER_SIGNAL_COMMAND_CODES +{ + gcvUSER_SIGNAL_CREATE, + gcvUSER_SIGNAL_DESTROY, + gcvUSER_SIGNAL_SIGNAL, + gcvUSER_SIGNAL_WAIT, + gcvUSER_SIGNAL_MAP, + gcvUSER_SIGNAL_UNMAP, +} +gceUSER_SIGNAL_COMMAND_CODES; + +/* Shared buffer command codes. */ +typedef enum _gceSHBUF_COMMAND_CODES +{ + gcvSHBUF_CREATE, + gcvSHBUF_DESTROY, + gcvSHBUF_MAP, + gcvSHBUF_WRITE, + gcvSHBUF_READ, +} +gceSHBUF_COMMAND_CODES; + +/* Event locations. */ +typedef enum _gceKERNEL_WHERE +{ + gcvKERNEL_COMMAND, + gcvKERNEL_VERTEX, + gcvKERNEL_TRIANGLE, + gcvKERNEL_TEXTURE, + gcvKERNEL_PIXEL, + gcvKERNEL_BLT, +} +gceKERNEL_WHERE; + +typedef enum _gceBLOCK +{ + gcvBLOCK_COMMAND, + gcvBLOCK_TESSELLATOR, + gcvBLOCK_TESSELLATOR2, + gcvBLOCK_TESSELLATOR3, + gcvBLOCK_RASTER, + gcvBLOCK_VG, + gcvBLOCK_VG2, + gcvBLOCK_VG3, + gcvBLOCK_PIXEL, + + /* Number of defined blocks. */ + gcvBLOCK_COUNT +} +gceBLOCK; + +typedef enum _gceCORE_3D_MASK +{ + gcvCORE_3D_0_MASK = (1 << 0), + gcvCORE_3D_1_MASK = (1 << 1), + + gcvCORE_3D_ALL_MASK = (0xFFFF) +} +gceCORE_3D_MASK; + +typedef enum _gceCORE_3D_ID +{ + gcvCORE_3D_0_ID = 0, + gcvCORE_3D_1_ID = 1, + + gcvCORE_3D_ID_INVALID = ~0UL +} +gceCORE_3D_ID; + + +typedef enum _gceCHIP_FLAG +{ + gcvCHIP_FLAG_MSAA_COHERENCEY_ECO_FIX = 1 << 0, + gcvCHIP_FLAG_GC2000_R2 = 1 << 1, + gcvCHIP_AXI_BUS128_BITS = 1 << 2, +} +gceCHIP_FLAG; + +/* If different, choose render engine */ +#define PRIORITY_ENGINE(a, b) gcmMIN(a,b) + +typedef enum +{ + gcvENGINE_RENDER = 0, + gcvENGINE_BLT = 1, + gcvENGINE_GPU_ENGINE_COUNT = 2, + gcvENGINE_CPU = gcvENGINE_GPU_ENGINE_COUNT, + gcvENGINE_ALL_COUNT = gcvENGINE_CPU + 1, + gcvENGINE_INVALID = gcvENGINE_ALL_COUNT + 0x100 +} +gceENGINE; + +/* CORE enum. */ +typedef enum _gceCORE +{ + gcvCORE_MAJOR, + gcvCORE_3D1, + gcvCORE_3D2, + gcvCORE_3D3, + gcvCORE_3D4, + gcvCORE_3D5, + gcvCORE_3D6, + gcvCORE_3D7, + gcvCORE_3D_MAX = gcvCORE_3D7, + gcvCORE_2D, + gcvCORE_VG, +#if gcdDEC_ENABLE_AHB + gcvCORE_DEC, +#endif + gcvCORE_COUNT +} +gceCORE; + +#define gcdCHIP_COUNT gcvCORE_COUNT + +typedef enum _gceSECURE_MODE +{ + /* For cores without gcvFEATURE_SECURITY. */ + gcvSECURE_NONE, + + /* Use registers added in gcvFEATURE_SECURITY in normal driver, + ** In this mode, GPU always works under non secure mode and + ** should not touch secure buffer. It is used to test basic function. + */ + gcvSECURE_IN_NORMAL, + + /* Make use of gcvFEATURE_SECURITY in trust application. */ + gcvSECURE_IN_TA +} +gceSECURE_MODE; + +/* kernel driver compression option, as it's a system global option, +** it means kernel driver allows the options, NOT necessarily means it must be on. +*/ +typedef enum _gceCOMPRESSION_OPTION +{ + gcvCOMPRESSION_OPTION_NONE = 0x0, /* No any compression */ + gcvCOMPRESSION_OPTION_COLOR = 0x1, /* Compression for non-msaa color format */ + gcvCOMPRESSION_OPTION_DEPTH = 0x2, /* Compression for non-msaa depth format */ + gcvCOMPRESSION_OPTION_MSAA_COLOR = 0x4, /* Compression for msaa color */ + gcvCOMPRESSION_OPTION_MSAA_DEPTH = 0x8, /* Compression for msaa depth */ + + /* default compressio option */ + gcvCOMPRESSION_OPTION_DEFAULT = gcvCOMPRESSION_OPTION_DEPTH | + gcvCOMPRESSION_OPTION_COLOR | + gcvCOMPRESSION_OPTION_MSAA_COLOR | + gcvCOMPRESSION_OPTION_MSAA_DEPTH, +} +gceCOMPRESSION_OPTION; + +typedef enum _gceSRAM_INTERNAL +{ + gcvSRAM_INTERNAL0 = 0, + gcvSRAM_INTERNAL1, + + gcvSRAM_INTER_COUNT +} +gceSRAM_INTERNAL; + +typedef enum _gceSRAM_EXTERNAL +{ + gcvSRAM_EXTERNAL0 = 0, + gcvSRAM_EXTERNAL1, + + gcvSRAM_EXT_COUNT +} +gceSRAM_EXTERNAL; + +typedef enum _gceFLATMAP_FLAG +{ + gcvFLATMAP_DIRECT, + gcvFLATMAP_SHIFT, +} +gceFLATMAP_FLAG; + +/* Video memory alloation type. */ +typedef enum _gceVIDMEM_TYPE +{ + gcvVIDMEM_TYPE_GENERIC = gcvSURF_TYPE_UNKNOWN, + gcvVIDMEM_TYPE_INDEX_BUFFER = gcvSURF_INDEX, + gcvVIDMEM_TYPE_VERTEX_BUFFER = gcvSURF_VERTEX, + gcvVIDMEM_TYPE_TEXTURE = gcvSURF_TEXTURE, + gcvVIDMEM_TYPE_COLOR_BUFFER = gcvSURF_RENDER_TARGET, + gcvVIDMEM_TYPE_DEPTH_BUFFER = gcvSURF_DEPTH, + gcvVIDMEM_TYPE_BITMAP = gcvSURF_BITMAP, + gcvVIDMEM_TYPE_TILE_STATUS = gcvSURF_TILE_STATUS, + gcvVIDMEM_TYPE_IMAGE = gcvSURF_IMAGE, + gcvVIDMEM_TYPE_MASK = gcvSURF_MASK, + gcvVIDMEM_TYPE_SCISSOR = gcvSURF_SCISSOR, + gcvVIDMEM_TYPE_HZ_BUFFER = gcvSURF_HIERARCHICAL_DEPTH, + gcvVIDMEM_TYPE_ICACHE = gcvSURF_ICACHE, + gcvVIDMEM_TYPE_TXDESC = gcvSURF_TXDESC, + gcvVIDMEM_TYPE_FENCE = gcvSURF_FENCE, + gcvVIDMEM_TYPE_TFBHEADER = gcvSURF_TFBHEADER, + gcvVIDMEM_TYPE_COMMAND, + gcvVIDMEM_TYPE_COUNT +} +gceVIDMEM_TYPE; + +typedef enum _gceTASK +{ + gcvTASK_LINK, + gcvTASK_CLUSTER, + gcvTASK_INCREMENT, + gcvTASK_DECREMENT, + gcvTASK_SIGNAL, + gcvTASK_LOCKDOWN, + gcvTASK_UNLOCK_VIDEO_MEMORY, + gcvTASK_FREE_VIDEO_MEMORY, + gcvTASK_FREE_CONTIGUOUS_MEMORY, +} +gceTASK; + +/******************************************************************************\ +********************************* Status Codes ********************************* +\******************************************************************************/ + +typedef enum _gceSTATUS +{ + gcvSTATUS_OK = 0, + gcvSTATUS_FALSE = 0, + gcvSTATUS_TRUE = 1, + gcvSTATUS_NO_MORE_DATA = 2, + gcvSTATUS_CACHED = 3, + gcvSTATUS_MIPMAP_TOO_LARGE = 4, + gcvSTATUS_NAME_NOT_FOUND = 5, + gcvSTATUS_NOT_OUR_INTERRUPT = 6, + gcvSTATUS_MISMATCH = 7, + gcvSTATUS_MIPMAP_TOO_SMALL = 8, + gcvSTATUS_LARGER = 9, + gcvSTATUS_SMALLER = 10, + gcvSTATUS_CHIP_NOT_READY = 11, + gcvSTATUS_NEED_CONVERSION = 12, + gcvSTATUS_SKIP = 13, + gcvSTATUS_DATA_TOO_LARGE = 14, + gcvSTATUS_INVALID_CONFIG = 15, + gcvSTATUS_CHANGED = 16, + gcvSTATUS_NOT_SUPPORT_DITHER = 17, + gcvSTATUS_EXECUTED = 18, + gcvSTATUS_TERMINATE = 19, + + gcvSTATUS_INVALID_ARGUMENT = -1, + gcvSTATUS_INVALID_OBJECT = -2, + gcvSTATUS_OUT_OF_MEMORY = -3, + gcvSTATUS_MEMORY_LOCKED = -4, + gcvSTATUS_MEMORY_UNLOCKED = -5, + gcvSTATUS_HEAP_CORRUPTED = -6, + gcvSTATUS_GENERIC_IO = -7, + gcvSTATUS_INVALID_ADDRESS = -8, + gcvSTATUS_CONTEXT_LOSSED = -9, + gcvSTATUS_TOO_COMPLEX = -10, + gcvSTATUS_BUFFER_TOO_SMALL = -11, + gcvSTATUS_INTERFACE_ERROR = -12, + gcvSTATUS_NOT_SUPPORTED = -13, + gcvSTATUS_MORE_DATA = -14, + gcvSTATUS_TIMEOUT = -15, + gcvSTATUS_OUT_OF_RESOURCES = -16, + gcvSTATUS_INVALID_DATA = -17, + gcvSTATUS_INVALID_MIPMAP = -18, + gcvSTATUS_NOT_FOUND = -19, + gcvSTATUS_NOT_ALIGNED = -20, + gcvSTATUS_INVALID_REQUEST = -21, + gcvSTATUS_GPU_NOT_RESPONDING = -22, + gcvSTATUS_TIMER_OVERFLOW = -23, + gcvSTATUS_VERSION_MISMATCH = -24, + gcvSTATUS_LOCKED = -25, + gcvSTATUS_INTERRUPTED = -26, + gcvSTATUS_DEVICE = -27, + gcvSTATUS_NOT_MULTI_PIPE_ALIGNED = -28, + gcvSTATUS_OUT_OF_SAMPLER = -29, + + /* Linker errors. */ + gcvSTATUS_GLOBAL_TYPE_MISMATCH = -1000, + gcvSTATUS_TOO_MANY_ATTRIBUTES = -1001, + gcvSTATUS_TOO_MANY_UNIFORMS = -1002, + gcvSTATUS_TOO_MANY_VARYINGS = -1003, + gcvSTATUS_UNDECLARED_VARYING = -1004, + gcvSTATUS_VARYING_TYPE_MISMATCH = -1005, + gcvSTATUS_MISSING_MAIN = -1006, + gcvSTATUS_NAME_MISMATCH = -1007, + gcvSTATUS_INVALID_INDEX = -1008, + gcvSTATUS_UNIFORM_MISMATCH = -1009, + gcvSTATUS_UNSAT_LIB_SYMBOL = -1010, + gcvSTATUS_TOO_MANY_SHADERS = -1011, + gcvSTATUS_LINK_INVALID_SHADERS = -1012, + gcvSTATUS_CS_NO_WORKGROUP_SIZE = -1013, + gcvSTATUS_LINK_LIB_ERROR = -1014, + + gcvSTATUS_SHADER_VERSION_MISMATCH = -1015, + gcvSTATUS_TOO_MANY_INSTRUCTION = -1016, + gcvSTATUS_SSBO_MISMATCH = -1017, + gcvSTATUS_TOO_MANY_OUTPUT = -1018, + gcvSTATUS_TOO_MANY_INPUT = -1019, + gcvSTATUS_NOT_SUPPORT_CL = -1020, + gcvSTATUS_NOT_SUPPORT_INTEGER = -1021, + gcvSTATUS_UNIFORM_TYPE_MISMATCH = -1022, + + gcvSTATUS_MISSING_PRIMITIVE_TYPE = -1023, + gcvSTATUS_MISSING_OUTPUT_VERTEX_COUNT = -1024, + gcvSTATUS_NON_INVOCATION_ID_AS_INDEX = -1025, + gcvSTATUS_INPUT_ARRAY_SIZE_MISMATCH = -1026, + gcvSTATUS_OUTPUT_ARRAY_SIZE_MISMATCH = -1027, + gcvSTATUS_LOCATION_ALIASED = -1028, + gcvSTATUS_LOCATION_OVERLAP = -1029, + gcvSTATUS_LOCATION_NOTCONSISTENT = -1030, + + /* Compiler errors. */ + gcvSTATUS_COMPILER_FE_PREPROCESSOR_ERROR = -2000, + gcvSTATUS_COMPILER_FE_PARSER_ERROR = -2001, + + /* Recompilation Errors */ + gcvSTATUS_RECOMPILER_CONVERT_UNIMPLEMENTED = -3000, +} +gceSTATUS; + +/* The patch types. */ +enum _gceHAL_PATCH_TYPE +{ + gcvHAL_PATCH_VIDMEM_ADDRESS = 1, + gcvHAL_PATCH_MCFE_SEMAPHORE, + gcvHAL_PATCH_VIDMEM_TIMESTAMP, + + /* Must be the last one for counting. */ + gcvHAL_PATCH_TYPE_COUNT, +}; + +/******************************************************************************\ +********************************* Command Codes ******************************** +\******************************************************************************/ + +typedef enum _gceHAL_COMMAND_CODES +{ + /*************** Common ***************/ + + /* Chip info: count, type and so on. */ + gcvHAL_CHIP_INFO, + + /* HAL driver version. */ + gcvHAL_VERSION, + + /* Query chip id and options. */ + gcvHAL_QUERY_CHIP_IDENTITY, + gcvHAL_QUERY_CHIP_OPTION, + + /* Query chip frequency, used by CL. */ + gcvHAL_QUERY_CHIP_FREQUENCY, + + /* Query system pool video memory, used by CL. */ + gcvHAL_QUERY_VIDEO_MEMORY, + + /* Memory management. */ + gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY, + gcvHAL_WRAP_USER_MEMORY, + gcvHAL_RELEASE_VIDEO_MEMORY, + gcvHAL_LOCK_VIDEO_MEMORY, + gcvHAL_UNLOCK_VIDEO_MEMORY, + gcvHAL_BOTTOM_HALF_UNLOCK_VIDEO_MEMORY, + gcvHAL_MAP_MEMORY, + gcvHAL_UNMAP_MEMORY, + + /* Cache operations. */ + gcvHAL_CACHE, + + /* HAL user attach and detach. */ + gcvHAL_ATTACH, + gcvHAL_DETACH, + + /* Event commit. */ + gcvHAL_EVENT_COMMIT, + + /* User command commit. */ + gcvHAL_COMMIT, + + /* Set hardware timeout, used by CL. */ + gcvHAL_SET_TIMEOUT, + + /* User signal operations. */ + gcvHAL_USER_SIGNAL, + + /* Event signal, commit stall. */ + gcvHAL_SIGNAL, + + /* Profile related. */ + gcvHAL_SET_PROFILE_SETTING, + gcvHAL_READ_PROFILER_REGISTER_SETTING, + gcvHAL_READ_ALL_PROFILE_REGISTERS_PART1, + gcvHAL_READ_ALL_PROFILE_REGISTERS_PART2, + + /* Query process database info when debug trace and proflie. */ + gcvHAL_DATABASE, + + /* Power managment enable/disable. */ + gcvHAL_CONFIG_POWER_MANAGEMENT, + + /* Debug/dump feature. */ + gcvHAL_DEBUG_DUMP, + + /*************** Common end ***************/ + + /*************** GPU only ***************/ + /* Register operations, 2D only. */ + gcvHAL_READ_REGISTER, + gcvHAL_WRITE_REGISTER, + gcvHAL_PROFILE_REGISTERS_2D, + + /* Get base address for old mmu. */ + gcvHAL_GET_BASE_ADDRESS, + + /* Read frame database, 3D only. */ + gcvHAL_GET_FRAME_INFO, + + /* Set video memory meta data. */ + gcvHAL_SET_VIDEO_MEMORY_METADATA, + + /* Query command buffer, VG only. */ + gcvHAL_QUERY_COMMAND_BUFFER, + + /* Reset time stamp. */ + gcvHAL_QUERY_RESET_TIME_STAMP, + + /* Create native fence. */ + gcvHAL_CREATE_NATIVE_FENCE, + + /* Wait native fence. */ + gcvHAL_WAIT_NATIVE_FENCE, + + /* Wait until GPU finishes access to a resource. */ + gcvHAL_WAIT_FENCE, + + /* Video memory node operations. */ + gcvHAL_EXPORT_VIDEO_MEMORY, + gcvHAL_NAME_VIDEO_MEMORY, + gcvHAL_IMPORT_VIDEO_MEMORY, + + /* Mutex Operation. */ + gcvHAL_DEVICE_MUTEX, + /*************** GPU only end ***************/ + + /*************** DEC only ***************/ + /* DEC200 test. */ + gcvHAL_DEC200_TEST, + + /* DEC300 related operations. */ + gcvHAL_DEC300_READ, + gcvHAL_DEC300_WRITE, + gcvHAL_DEC300_FLUSH, + gcvHAL_DEC300_FLUSH_WAIT, + /*************** DEC only end ***************/ + + /*************** OS specific ***************/ + + /* Android gralloc: shared buffer operations. */ + gcvHAL_SHBUF, + + /* Android gralloc: get graphic buffer fd. */ + gcvHAL_GET_GRAPHIC_BUFFER_FD, + + /* Vsimulator only. */ + gcvHAL_UPDATE_DEBUG_CALLBACK, + gcvHAL_CONFIG_CTX_FRAMEWORK, + + /* Non paged memory management backup compatibility, windows, qnx. */ + gcvHAL_ALLOCATE_NON_PAGED_MEMORY, + gcvHAL_FREE_NON_PAGED_MEMORY, + + /* Write user data, windows only. */ + gcvHAL_WRITE_DATA, + + /*************** OS specific end ***************/ + + /*************** Reserved ***************/ + gcvHAL_SET_IDLE, + gcvHAL_RESET, + + /* Command commit done, kernel event only. */ + gcvHAL_COMMIT_DONE, + + /* Get video memory file description. */ + gcvHAL_GET_VIDEO_MEMORY_FD, + + /* Get profile setting. */ + gcvHAL_GET_PROFILE_SETTING, + + /* Read/Write register ex. */ + gcvHAL_READ_REGISTER_EX, + gcvHAL_WRITE_REGISTER_EX, + + /* Power managment state. */ + gcvHAL_SET_POWER_MANAGEMENT_STATE, + gcvHAL_QUERY_POWER_MANAGEMENT_STATE, + + /* Set debug level. */ + gcvHAL_SET_DEBUG_LEVEL_ZONE, + + /* Dump info. */ + gcvHAL_DUMP_GPU_STATE, + gcvHAL_DUMP_EVENT, + gcvHAL_DUMP_GPU_PROFILE, + + /* Timer. */ + gcvHAL_TIMESTAMP, + + /* FSCALE_VAL. */ + gcvHAL_SET_FSCALE_VALUE, + gcvHAL_GET_FSCALE_VALUE, + + /* Destory MMU. */ + gcvHAL_DESTROY_MMU, + /*************** Reserved end ***************/ +} +gceHAL_COMMAND_CODES; + +/******************************************************************************\ +******************************** gcsOBJECT Object ******************************* +\******************************************************************************/ + +/* Macro to combine four characters into a Charcater Code. */ +#define gcmCC(c1, c2, c3, c4) \ +(\ + (char) (c1) \ + | \ + ((char) (c2) << 8) \ + | \ + ((char) (c3) << 16) \ + | \ + ((char) (c4) << 24) \ +) + +/* Type of objects. */ +typedef enum _gceOBJECT_TYPE +{ + gcvOBJ_UNKNOWN = 0, + gcvOBJ_2D = gcmCC('2','D',' ',' '), + gcvOBJ_3D = gcmCC('3','D',' ',' '), + gcvOBJ_ATTRIBUTE = gcmCC('A','T','T','R'), + gcvOBJ_BRUSHCACHE = gcmCC('B','R','U','$'), + gcvOBJ_BRUSHNODE = gcmCC('B','R','U','n'), + gcvOBJ_BRUSH = gcmCC('B','R','U','o'), + gcvOBJ_BUFFER = gcmCC('B','U','F','R'), + gcvOBJ_COMMAND = gcmCC('C','M','D',' '), + gcvOBJ_COMMANDBUFFER = gcmCC('C','M','D','B'), + gcvOBJ_CONTEXT = gcmCC('C','T','X','T'), + gcvOBJ_DEVICE = gcmCC('D','E','V',' '), + gcvOBJ_DUMP = gcmCC('D','U','M','P'), + gcvOBJ_EVENT = gcmCC('E','V','N','T'), + gcvOBJ_FUNCTION = gcmCC('F','U','N','C'), + gcvOBJ_HAL = gcmCC('H','A','L',' '), + gcvOBJ_HARDWARE = gcmCC('H','A','R','D'), + gcvOBJ_HEAP = gcmCC('H','E','A','P'), + gcvOBJ_INDEX = gcmCC('I','N','D','X'), + gcvOBJ_INTERRUPT = gcmCC('I','N','T','R'), + gcvOBJ_KERNEL = gcmCC('K','E','R','N'), + gcvOBJ_KERNEL_FUNCTION = gcmCC('K','F','C','N'), + gcvOBJ_MEMORYBUFFER = gcmCC('M','E','M','B'), + gcvOBJ_MMU = gcmCC('M','M','U',' '), + gcvOBJ_OS = gcmCC('O','S',' ',' '), + gcvOBJ_OUTPUT = gcmCC('O','U','T','P'), + gcvOBJ_PAINT = gcmCC('P','N','T',' '), + gcvOBJ_PATH = gcmCC('P','A','T','H'), + gcvOBJ_QUEUE = gcmCC('Q','U','E',' '), + gcvOBJ_SAMPLER = gcmCC('S','A','M','P'), + gcvOBJ_SHADER = gcmCC('S','H','D','R'), + gcvOBJ_VIR_SHADER = gcmCC('V','S','D','R'), + gcvOBJ_STREAM = gcmCC('S','T','R','M'), + gcvOBJ_SURF = gcmCC('S','U','R','F'), + gcvOBJ_TEXTURE = gcmCC('T','X','T','R'), + gcvOBJ_UNIFORM = gcmCC('U','N','I','F'), + gcvOBJ_VARIABLE = gcmCC('V','A','R','I'), + gcvOBJ_VERTEX = gcmCC('V','R','T','X'), + gcvOBJ_VIDMEM = gcmCC('V','M','E','M'), + gcvOBJ_VIDMEM_BLOCK = gcmCC('V','M','B','K'), + gcvOBJ_VG = gcmCC('V','G',' ',' '), + gcvOBJ_BUFOBJ = gcmCC('B','U','F','O'), + gcvOBJ_UNIFORM_BLOCK = gcmCC('U','B','L','K'), + gcvOBJ_CL = gcmCC('C','L',' ',' '), + gcvOBJ_STORAGE_BLOCK = gcmCC('S','B','L','K'), + gcvOBJ_IO_BLOCK = gcmCC('I','O','B','K'), +} +gceOBJECT_TYPE; + +/* Video memory pool type. */ +typedef enum _gcePOOL +{ + gcvPOOL_UNKNOWN = 0, + gcvPOOL_DEFAULT, + gcvPOOL_LOCAL, + gcvPOOL_LOCAL_INTERNAL, + gcvPOOL_LOCAL_EXTERNAL, + gcvPOOL_UNIFIED, + gcvPOOL_SYSTEM, + gcvPOOL_SRAM, + gcvPOOL_VIRTUAL, + gcvPOOL_USER, + gcvPOOL_INTERNAL_SRAM, + gcvPOOL_EXTERNAL_SRAM, + + gcvPOOL_NUMBER_OF_POOLS +} +gcePOOL; + +typedef enum _gceDUMP_BUFFER_TYPE +{ + gcvDUMP_BUFFER_USER_STRING, + gcvDUMP_BUFFER_VERIFY, + + gcvDUMP_BUFFER_MEMORY, + gcvDUMP_BUFFER_TEXTURE, + gcvDUMP_BUFFER_STREAM, + gcvDUMP_BUFFER_INDEX, + gcvDUMP_BUFFER_BUFOBJ, + gcvDUMP_BUFFER_IMAGE, + /* A type of command, but should not execute directly. */ + gcvDUMP_BUFFER_INSTRUCTION, + gcvDUMP_BUFFER_CONTEXT, + gcvDUMP_BUFFER_COMMAND, + gcvDUMP_BUFFER_ASYNC_COMMAND, + gcvDUMP_BUFFER_USER_TYPE_LAST = gcvDUMP_BUFFER_ASYNC_COMMAND, + + gcvDUMP_BUFFER_KERNEL_CONTEXT, + gcvDUMP_BUFFER_KERNEL_COMMAND, + + gcvDUMP_BUFFER_PHYSICAL_MEMORY, + + gcvDUMP_BUFFER_TYPE_COUNT, +} +gceDUMP_BUFFER_TYPE; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_enum_shared_h_ */ + + + diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_profiler.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_profiler.h new file mode 100644 index 00000000000000..9db4c3951c5285 --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_profiler.h @@ -0,0 +1,281 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_profiler_shared_h_ +#define __gc_hal_profiler_shared_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* HW profile information. */ +typedef struct _gcsPROFILER_COUNTERS_PART1 +{ + gctUINT32 gpuTotalRead64BytesPerFrame; + gctUINT32 gpuTotalWrite64BytesPerFrame; + + /* FE */ + gctUINT32 fe_draw_count; + gctUINT32 fe_out_vertex_count; + gctUINT32 fe_cache_miss_count; + gctUINT32 fe_cache_lk_count; + gctUINT32 fe_stall_count; + gctUINT32 fe_starve_count; + gctUINT32 fe_process_count; + + /* PE */ + gctUINT32 pe0_pixel_count_killed_by_color_pipe; + gctUINT32 pe0_pixel_count_killed_by_depth_pipe; + gctUINT32 pe0_pixel_count_drawn_by_color_pipe; + gctUINT32 pe0_pixel_count_drawn_by_depth_pipe; + gctUINT32 pe1_pixel_count_killed_by_color_pipe; + gctUINT32 pe1_pixel_count_killed_by_depth_pipe; + gctUINT32 pe1_pixel_count_drawn_by_color_pipe; + gctUINT32 pe1_pixel_count_drawn_by_depth_pipe; + + /* SH */ + gctUINT32 shader_cycle_count; + gctUINT32 vs_shader_cycle_count; + gctUINT32 ps_shader_cycle_count; + gctUINT32 ps_inst_counter; + gctUINT32 ps_rendered_pixel_counter; + gctUINT32 vs_inst_counter; + gctUINT32 vs_rendered_vertice_counter; + gctUINT32 vs_branch_inst_counter; + gctUINT32 vs_texld_inst_counter; + gctUINT32 ps_branch_inst_counter; + gctUINT32 ps_texld_inst_counter; + gctUINT32 vs_non_idle_starve_count; + gctUINT32 vs_starve_count; + gctUINT32 vs_stall_count; + gctUINT32 vs_process_count; + gctUINT32 ps_non_idle_starve_count; + gctUINT32 ps_starve_count; + gctUINT32 ps_stall_count; + gctUINT32 ps_process_count; + + /* PA */ + gctUINT32 pa_input_vtx_counter; + gctUINT32 pa_input_prim_counter; + gctUINT32 pa_output_prim_counter; + gctUINT32 pa_depth_clipped_counter; + gctUINT32 pa_trivial_rejected_counter; + gctUINT32 pa_culled_prim_counter; + gctUINT32 pa_droped_prim_counter; + gctUINT32 pa_frustum_clipped_prim_counter; + gctUINT32 pa_frustum_clipdroped_prim_counter; + gctUINT32 pa_non_idle_starve_count; + gctUINT32 pa_starve_count; + gctUINT32 pa_stall_count; + gctUINT32 pa_process_count; + + /* SE */ + gctUINT32 se_culled_triangle_count; + gctUINT32 se_culled_lines_count; + gctUINT32 se_clipped_triangle_count; + gctUINT32 se_clipped_line_count; + gctUINT32 se_starve_count; + gctUINT32 se_stall_count; + gctUINT32 se_receive_triangle_count; + gctUINT32 se_send_triangle_count; + gctUINT32 se_receive_lines_count; + gctUINT32 se_send_lines_count; + gctUINT32 se_process_count; + gctUINT32 se_trivial_rejected_line_count; + gctUINT32 se_non_idle_starve_count; + + /* RA */ + gctUINT32 ra_input_prim_count; + gctUINT32 ra_total_quad_count; + gctUINT32 ra_valid_quad_count_after_early_z; + gctUINT32 ra_valid_pixel_count_to_render; + gctUINT32 ra_output_valid_quad_count; + gctUINT32 ra_output_valid_pixel_count; + gctUINT32 ra_pipe_cache_miss_counter; + gctUINT32 ra_pipe_hz_cache_miss_counter; + gctUINT32 ra_prefetch_cache_miss_counter; + gctUINT32 ra_prefetch_hz_cache_miss_counter; + gctUINT32 ra_eez_culled_counter; + gctUINT32 ra_non_idle_starve_count; + gctUINT32 ra_starve_count; + gctUINT32 ra_stall_count; + gctUINT32 ra_process_count; + + /* TX */ + gctUINT32 tx_total_bilinear_requests; + gctUINT32 tx_total_trilinear_requests; + gctUINT32 tx_total_discarded_texture_requests; + gctUINT32 tx_total_texture_requests; + gctUINT32 tx_mc0_miss_count; + gctUINT32 tx_mc0_request_byte_count; + gctUINT32 tx_mc1_miss_count; + gctUINT32 tx_mc1_request_byte_count; + gctUINT32 tx_non_idle_starve_count; + gctUINT32 tx_starve_count; + gctUINT32 tx_stall_count; + gctUINT32 tx_process_count; +} +gcsPROFILER_COUNTERS_PART1; + +typedef struct _gcsPROFILER_COUNTERS_PART2 +{ + /* MCC */ + gctUINT32 mcc_total_read_req_8B_from_colorpipe; + gctUINT32 mcc_total_read_req_8B_sentout_from_colorpipe; + gctUINT32 mcc_total_write_req_8B_from_colorpipe; + gctUINT32 mcc_total_read_req_sentout_from_colorpipe; + gctUINT32 mcc_total_write_req_from_colorpipe; + gctUINT32 mcc_total_read_req_8B_from_depthpipe; + gctUINT32 mcc_total_read_req_8B_sentout_from_depthpipe; + gctUINT32 mcc_total_write_req_8B_from_depthpipe; + gctUINT32 mcc_total_read_req_sentout_from_depthpipe; + gctUINT32 mcc_total_write_req_from_depthpipe; + gctUINT32 mcc_total_read_req_8B_from_others; + gctUINT32 mcc_total_write_req_8B_from_others; + gctUINT32 mcc_total_read_req_from_others; + gctUINT32 mcc_total_write_req_from_others; + gctUINT32 mcc_axi_total_latency; + gctUINT32 mcc_axi_sample_count; + gctUINT32 mcc_axi_max_latency; + gctUINT32 mcc_axi_min_latency; + gctUINT32 mc_fe_read_bandwidth; + gctUINT32 mc_mmu_read_bandwidth; + gctUINT32 mc_blt_read_bandwidth; + gctUINT32 mc_sh0_read_bandwidth; + gctUINT32 mc_sh1_read_bandwidth; + gctUINT32 mc_pe_write_bandwidth; + gctUINT32 mc_blt_write_bandwidth; + gctUINT32 mc_sh0_write_bandwidth; + gctUINT32 mc_sh1_write_bandwidth; + + /* MCZ */ + gctUINT32 mcz_total_read_req_8B_from_colorpipe; + gctUINT32 mcz_total_read_req_8B_sentout_from_colorpipe; + gctUINT32 mcz_total_write_req_8B_from_colorpipe; + gctUINT32 mcz_total_read_req_sentout_from_colorpipe; + gctUINT32 mcz_total_write_req_from_colorpipe; + gctUINT32 mcz_total_read_req_8B_from_depthpipe; + gctUINT32 mcz_total_read_req_8B_sentout_from_depthpipe; + gctUINT32 mcz_total_write_req_8B_from_depthpipe; + gctUINT32 mcz_total_read_req_sentout_from_depthpipe; + gctUINT32 mcz_total_write_req_from_depthpipe; + gctUINT32 mcz_total_read_req_8B_from_others; + gctUINT32 mcz_total_write_req_8B_from_others; + gctUINT32 mcz_total_read_req_from_others; + gctUINT32 mcz_total_write_req_from_others; + gctUINT32 mcz_axi_total_latency; + gctUINT32 mcz_axi_sample_count; + gctUINT32 mcz_axi_max_latency; + gctUINT32 mcz_axi_min_latency; + + /* HI */ + gctUINT32 hi0_total_read_8B_count; + gctUINT32 hi0_total_write_8B_count; + gctUINT32 hi0_total_read_request_count; + gctUINT32 hi0_total_write_request_count; + gctUINT32 hi0_axi_cycles_read_request_stalled; + gctUINT32 hi0_axi_cycles_write_request_stalled; + gctUINT32 hi0_axi_cycles_write_data_stalled; + gctUINT32 hi1_total_read_8B_count; + gctUINT32 hi1_total_write_8B_count; + gctUINT32 hi1_total_read_request_count; + gctUINT32 hi1_total_write_request_count; + gctUINT32 hi1_axi_cycles_read_request_stalled; + gctUINT32 hi1_axi_cycles_write_request_stalled; + gctUINT32 hi1_axi_cycles_write_data_stalled; + gctUINT32 hi_total_cycle_count; + gctUINT32 hi_total_idle_cycle_count; + gctUINT32 hi_total_read_8B_count; + gctUINT32 hi_total_write_8B_count; + gctUINT32 hi_total_readOCB_16B_count; + gctUINT32 hi_total_writeOCB_16B_count; + + /* L2 */ + gctUINT32 l2_total_axi0_read_request_count; + gctUINT32 l2_total_axi1_read_request_count; + gctUINT32 l2_total_axi0_write_request_count; + gctUINT32 l2_total_axi1_write_request_count; + gctUINT32 l2_total_read_transactions_request_by_axi0; + gctUINT32 l2_total_read_transactions_request_by_axi1; + gctUINT32 l2_total_write_transactions_request_by_axi0; + gctUINT32 l2_total_write_transactions_request_by_axi1; + gctUINT32 l2_axi0_minmax_latency; + gctUINT32 l2_axi0_min_latency; + gctUINT32 l2_axi0_max_latency; + gctUINT32 l2_axi0_total_latency; + gctUINT32 l2_axi0_total_request_count; + gctUINT32 l2_axi1_minmax_latency; + gctUINT32 l2_axi1_min_latency; + gctUINT32 l2_axi1_max_latency; + gctUINT32 l2_axi1_total_latency; + gctUINT32 l2_axi1_total_request_count; +} +gcsPROFILER_COUNTERS_PART2; + +typedef struct _gcsPROFILER_COUNTERS +{ + gcsPROFILER_COUNTERS_PART1 counters_part1; + gcsPROFILER_COUNTERS_PART2 counters_part2; +} +gcsPROFILER_COUNTERS; + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_profiler_shared_h_ */ + + + diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_types.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_types.h new file mode 100644 index 00000000000000..c8038ade48a3e6 --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_types.h @@ -0,0 +1,987 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_types_h_ +#define __gc_hal_types_h_ + +#include "gc_hal_version.h" +#include "gc_hal_options.h" + +#if !defined(VIV_KMD) +#if defined(__KERNEL__) +#include "linux/version.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + typedef unsigned long uintptr_t; +# endif +# include "linux/types.h" +#elif defined(UNDER_CE) +#include +typedef signed char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef long long int64_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +#elif defined(_MSC_VER) && (_MSC_VER <= 1500) +#include +#include "vadefs.h" +#elif defined(__QNXNTO__) +#define _QNX_SOURCE +#include +#include +#else +#include +#include +#include +#endif +#endif + +#ifdef _WIN32 +#pragma warning(disable:4127) /* Conditional expression is constant (do { } while(0)). */ +#pragma warning(disable:4100) /* Unreferenced formal parameter. */ +#pragma warning(disable:4204) /* Non-constant aggregate initializer (C99). */ +#pragma warning(disable:4131) /* Uses old-style declarator. */ +#pragma warning(disable:4206) /* Translation unit is empty. */ +#pragma warning(disable:4214) /* Nonstandard extension used : + ** bit field types other than int. */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************\ +** Platform macros. +*/ + +#if defined(__GNUC__) +# define gcdHAS_ELLIPSIS 1 /* GCC always has it. */ +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define gcdHAS_ELLIPSIS 1 /* C99 has it. */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1500) +# define gcdHAS_ELLIPSIS 1 /* MSVC 2007+ has it. */ +#elif defined(UNDER_CE) +#if UNDER_CE >= 600 +# define gcdHAS_ELLIPSIS 1 +# else +# define gcdHAS_ELLIPSIS 0 +# endif +#else +# error "gcdHAS_ELLIPSIS: Platform could not be determined" +#endif + +/******************************************************************************\ +************************************ Keyword *********************************** +\******************************************************************************/ + +#if defined(ANDROID) && defined(__BIONIC_FORTIFY) +#if defined(__clang__) +# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline)) +# else +# define gcmINLINE __inline__ __attribute__ ((always_inline)) __attribute__ ((gnu_inline)) __attribute__ ((artificial)) +# endif +#elif ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__APPLE__)) +# define gcmINLINE inline /* C99 keyword. */ +#elif defined(__GNUC__) +# define gcmINLINE __inline__ /* GNU keyword. */ +#elif defined(_MSC_VER) || defined(UNDER_CE) +# define gcmINLINE __inline /* Internal keyword. */ +#else +# error "gcmINLINE: Platform could not be determined" +#endif + + +/* Possible debug flags. */ +#define gcdDEBUG_NONE 0 +#define gcdDEBUG_ALL (1 << 0) +#define gcdDEBUG_FATAL (1 << 1) +#define gcdDEBUG_TRACE (1 << 2) +#define gcdDEBUG_BREAK (1 << 3) +#define gcdDEBUG_ASSERT (1 << 4) +#define gcdDEBUG_CODE (1 << 5) +#define gcdDEBUG_STACK (1 << 6) + +#define gcmIS_DEBUG(flag) (gcdDEBUG & (flag | gcdDEBUG_ALL) ) + +#ifndef gcdDEBUG +#if (defined(DBG) && DBG) || defined(DEBUG) || defined(_DEBUG) +# define gcdDEBUG gcdDEBUG_ALL +# else +# define gcdDEBUG gcdDEBUG_NONE +# endif +#endif + +#ifdef _USRDLL +#ifdef _MSC_VER +#ifdef HAL_EXPORTS +# define HALAPI __declspec(dllexport) +# else +# define HALAPI __declspec(dllimport) +# endif +# define HALDECL __cdecl +# else +#ifdef HAL_EXPORTS +# define HALAPI +# else +# define HALAPI extern +# endif +# endif +#else +# define HALAPI +# define HALDECL +#endif + +/******************************************************************************\ +********************************** Common Types ******************************** +\******************************************************************************/ + +#define gcvFALSE 0 +#define gcvTRUE 1 + +#define gcvINFINITE ((gctUINT32) ~0U) + +#define gcvINVALID_HANDLE ((gctHANDLE) ~0U) + +typedef int gctBOOL; +typedef gctBOOL * gctBOOL_PTR; + +typedef int gctINT; +typedef signed char gctINT8; +typedef signed short gctINT16; +typedef signed int gctINT32; +typedef signed long long gctINT64; + +typedef gctINT * gctINT_PTR; +typedef gctINT8 * gctINT8_PTR; +typedef gctINT16 * gctINT16_PTR; +typedef gctINT32 * gctINT32_PTR; +typedef gctINT64 * gctINT64_PTR; + +typedef unsigned int gctUINT; +typedef unsigned char gctUINT8; +typedef unsigned short gctUINT16; +typedef unsigned int gctUINT32; +typedef unsigned long long gctUINT64; +typedef uintptr_t gctUINTPTR_T; +typedef ptrdiff_t gctPTRDIFF_T; + +typedef gctUINT * gctUINT_PTR; +typedef gctUINT8 * gctUINT8_PTR; +typedef gctUINT16 * gctUINT16_PTR; +typedef gctUINT32 * gctUINT32_PTR; +typedef gctUINT64 * gctUINT64_PTR; + +typedef size_t gctSIZE_T; +typedef gctSIZE_T * gctSIZE_T_PTR; +typedef gctUINT32 gctTRACE; + +#ifdef __cplusplus +# define gcvNULL 0 +#else +# define gcvNULL ((void *) 0) +#endif + +#define gcvMAXINT8 0x7f +#define gcvMININT8 0x80 +#define gcvMAXINT16 0x7fff +#define gcvMININT16 0x8000 +#define gcvMAXINT32 0x7fffffff +#define gcvMININT32 0x80000000 +#define gcvMAXINT64 0x7fffffffffffffff +#define gcvMININT64 0x8000000000000000 +#define gcvMAXUINT8 0xff +#define gcvMINUINT8 0x0 +#define gcvMAXUINT16 0xffff +#define gcvMINUINT16 0x0 +#define gcvMAXUINT32 0xffffffff +#define gcvMINUINT32 0x0 +#define gcvMAXUINT64 0xffffffffffffffff +#define gcvMINUINT64 0x0 +#define gcvMAXUINTPTR_T (~(gctUINTPTR_T)0) +#define gcvMAXSIZE_T ((gctSIZE_T)(-1)) + +typedef float gctFLOAT; +typedef signed int gctFIXED_POINT; +typedef float * gctFLOAT_PTR; + +typedef void * gctPHYS_ADDR; +typedef void * gctHANDLE; +typedef void * gctFILE; +typedef void * gctSIGNAL; +typedef void * gctWINDOW; +typedef void * gctIMAGE; +typedef void * gctSHBUF; + +typedef void * gctSEMAPHORE; + +typedef void * gctPOINTER; +typedef const void * gctCONST_POINTER; + +typedef char gctCHAR; +typedef signed char gctSIGNED_CHAR; +typedef unsigned char gctUNSIGNED_CHAR; +typedef char * gctSTRING; +typedef const char * gctCONST_STRING; + +typedef gctUINT64 gctPHYS_ADDR_T; + +typedef struct _gcsCOUNT_STRING +{ + gctSIZE_T Length; + gctCONST_STRING String; +} +gcsCOUNT_STRING; + +typedef union _gcuFLOAT_UINT32 +{ + gctFLOAT f; + gctUINT32 u; +} +gcuFLOAT_UINT32; + +/* Fixed point constants. */ +#define gcvZERO_X ((gctFIXED_POINT) 0x00000000) +#define gcvHALF_X ((gctFIXED_POINT) 0x00008000) +#define gcvONE_X ((gctFIXED_POINT) 0x00010000) +#define gcvNEGONE_X ((gctFIXED_POINT) 0xFFFF0000) +#define gcvTWO_X ((gctFIXED_POINT) 0x00020000) + + + +#define gcmFIXEDCLAMP_NEG1_TO_1(_x) \ + (((_x) < gcvNEGONE_X) \ + ? gcvNEGONE_X \ + : (((_x) > gcvONE_X) \ + ? gcvONE_X \ + : (_x))) + +#define gcmFLOATCLAMP_NEG1_TO_1(_f) \ + (((_f) < -1.0f) \ + ? -1.0f \ + : (((_f) > 1.0f) \ + ? 1.0f \ + : (_f))) + + +#define gcmFIXEDCLAMP_0_TO_1(_x) \ + (((_x) < 0) \ + ? 0 \ + : (((_x) > gcvONE_X) \ + ? gcvONE_X \ + : (_x))) + +#define gcmFLOATCLAMP_0_TO_1(_f) \ + (((_f) < 0.0f) \ + ? 0.0f \ + : (((_f) > 1.0f) \ + ? 1.0f \ + : (_f))) + + +/******************************************************************************\ +******************************* Multicast Values ******************************* +\******************************************************************************/ + +/* Value unions. */ +typedef union _gcuVALUE +{ + gctUINT uintValue; + gctFIXED_POINT fixedValue; + gctFLOAT floatValue; + gctINT intValue; +} +gcuVALUE; + + + + +/* Stringizing macro. */ +#define gcmSTRING(Value) #Value + +/******************************************************************************\ +******************************* Fixed Point Math ******************************* +\******************************************************************************/ + +#define gcmXMultiply(x1, x2) gcoMATH_MultiplyFixed(x1, x2) +#define gcmXDivide(x1, x2) gcoMATH_DivideFixed(x1, x2) +#define gcmXMultiplyDivide(x1, x2, x3) gcoMATH_MultiplyDivideFixed(x1, x2, x3) + +/* 2D Engine profile. */ +typedef struct _gcs2D_PROFILE +{ + /* Cycle count. + 32bit counter incremented every 2D clock cycle. + Wraps back to 0 when the counter overflows. + */ + gctUINT32 cycleCount; + + /* Pixels rendered by the 2D engine. + Resets to 0 every time it is read. */ + gctUINT32 pixelsRendered; +} +gcs2D_PROFILE; + +#define gcmPRINTABLE(c) ((((c) >= ' ') && ((c) <= '}')) ? ((c) != '%' ? (c) : ' ') : ' ') + +#define gcmCC_PRINT(cc) \ + gcmPRINTABLE((char) ((cc) & 0xFF)), \ + gcmPRINTABLE((char) (((cc) >> 8) & 0xFF)), \ + gcmPRINTABLE((char) (((cc) >> 16) & 0xFF)), \ + gcmPRINTABLE((char) (((cc) >> 24) & 0xFF)) + +/******************************************************************************\ +****************************** Function Parameters ***************************** +\******************************************************************************/ + +#define IN +#define OUT +#define INOUT +#define OPTIONAL + +/******************************************************************************\ +********************************* Status Macros ******************************** +\******************************************************************************/ + +#define gcmIS_ERROR(status) (status < 0) +#define gcmNO_ERROR(status) (status >= 0) +#define gcmIS_SUCCESS(status) (status == gcvSTATUS_OK) + +/******************************************************************************\ +********************************* Field Macros ********************************* +\******************************************************************************/ + +#define __gcmSTART(reg_field) \ + (0 ? reg_field) + +#define __gcmEND(reg_field) \ + (1 ? reg_field) + +#define __gcmGETSIZE(reg_field) \ + (__gcmEND(reg_field) - __gcmSTART(reg_field) + 1) + +#define __gcmALIGN(data, reg_field) \ + (((gctUINT32) (data)) << __gcmSTART(reg_field)) + +#define __gcmMASK(reg_field) \ + ((gctUINT32) ((__gcmGETSIZE(reg_field) == 32) \ + ? ~0U \ + : (~(~0U << __gcmGETSIZE(reg_field))))) + +/******************************************************************************* +** +** gcmFIELDMASK +** +** Get aligned field mask. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +*/ +#define gcmFIELDMASK(reg, field) \ +(\ + __gcmALIGN(__gcmMASK(reg##_##field), reg##_##field) \ +) + +/******************************************************************************* +** +** gcmGETFIELD +** +** Extract the value of a field from specified data. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +*/ +#define gcmGETFIELD(data, reg, field) \ +(\ + ((((gctUINT32) (data)) >> __gcmSTART(reg##_##field)) \ + & __gcmMASK(reg##_##field)) \ +) + +/******************************************************************************* +** +** gcmSETFIELD +** +** Set the value of a field within specified data. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +** value Value for field. +*/ +#define gcmSETFIELD(data, reg, field, value) \ +(\ + (((gctUINT32) (data)) \ + & ~__gcmALIGN(__gcmMASK(reg##_##field), reg##_##field)) \ + | __gcmALIGN((gctUINT32) (value) \ + & __gcmMASK(reg##_##field), reg##_##field) \ +) + +/******************************************************************************* +** +** gcmSETFIELDVALUE +** +** Set the value of a field within specified data with a +** predefined value. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +** value Name of the value within the field. +*/ +#define gcmSETFIELDVALUE(data, reg, field, value) \ +(\ + (((gctUINT32) (data)) \ + & ~__gcmALIGN(__gcmMASK(reg##_##field), reg##_##field)) \ + | __gcmALIGN(reg##_##field##_##value \ + & __gcmMASK(reg##_##field), reg##_##field) \ +) + +/******************************************************************************* +** +** gcmGETMASKEDFIELDMASK +** +** Determine field mask of a masked field. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +*/ +#define gcmGETMASKEDFIELDMASK(reg, field) \ +(\ + gcmSETFIELD(0, reg, field, ~0U) | \ + gcmSETFIELD(0, reg, MASK_ ## field, ~0U) \ +) + +/******************************************************************************* +** +** gcmSETMASKEDFIELD +** +** Set the value of a masked field with specified data. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +** value Value for field. +*/ +#define gcmSETMASKEDFIELD(reg, field, value) \ +(\ + gcmSETFIELD (~0U, reg, field, value) & \ + gcmSETFIELDVALUE(~0U, reg, MASK_ ## field, ENABLED) \ +) + +/******************************************************************************* +** +** gcmSETMASKEDFIELDVALUE +** +** Set the value of a masked field with specified data. +** +** ARGUMENTS: +** +** reg Name of register. +** field Name of field within register. +** value Value for field. +*/ +#define gcmSETMASKEDFIELDVALUE(reg, field, value) \ +(\ + gcmSETFIELDVALUE(~0U, reg, field, value) & \ + gcmSETFIELDVALUE(~0U, reg, MASK_ ## field, ENABLED) \ +) + +/******************************************************************************* +** +** gcmVERIFYFIELDVALUE +** +** Verify if the value of a field within specified data equals a +** predefined value. +** +** ARGUMENTS: +** +** data Data value. +** reg Name of register. +** field Name of field within register. +** value Name of the value within the field. +*/ +#define gcmVERIFYFIELDVALUE(data, reg, field, value) \ +(\ + (((gctUINT32) (data)) >> __gcmSTART(reg##_##field) & \ + __gcmMASK(reg##_##field)) \ + == \ + (reg##_##field##_##value & __gcmMASK(reg##_##field)) \ +) + +/******************************************************************************* +** Bit field macros. +*/ + +#define __gcmSTARTBIT(Field) \ + (1 ? Field ) + +#define __gcmBITSIZE(Field) \ + (0 ? Field ) + +#define __gcmBITMASK(Field) \ +(\ + (1 << __gcmBITSIZE(Field)) - 1 \ +) + +#define gcmGETBITS(Value, Type, Field) \ +(\ + (((Type) (Value)) >> __gcmSTARTBIT(Field) ) \ + & \ + __gcmBITMASK(Field) \ +) + +#define gcmSETBITS(Value, Type, Field, NewValue) \ +(\ + (((Type) (Value)) \ + & ~(__gcmBITMASK(Field) << __gcmSTARTBIT(Field)) \ + ) \ + | \ + ((((Type) (NewValue)) \ + & __gcmBITMASK(Field) \ + ) << __gcmSTARTBIT(Field) \ + ) \ +) + +/******************************************************************************* +** +** gcmISINREGRANGE +** +** Verify whether the specified address is in the register range. +** +** ARGUMENTS: +** +** Address Address to be verified. +** Name Name of a register. +*/ + +#define gcmISINREGRANGE(Address, Name) \ +(\ + ((Address & (~0U << Name ## _LSB)) == (Name ## _Address >> 2)) \ +) + +/******************************************************************************\ +******************************** Ceiling Macro ******************************** +\******************************************************************************/ +#define gcmCEIL(x) (((x) - (gctUINT32)(x)) == 0 ? (gctUINT32)(x) : (gctUINT32)(x) + 1) + +/******************************************************************************\ +******************************** Min/Max Macros ******************************** +\******************************************************************************/ + +#define gcmMIN(x, y) (((x) <= (y)) ? (x) : (y)) +#define gcmMAX(x, y) (((x) >= (y)) ? (x) : (y)) +#define gcmCLAMP(x, min, max) (((x) < (min)) ? (min) : \ + ((x) > (max)) ? (max) : (x)) +#define gcmABS(x) (((x) < 0) ? -(x) : (x)) +#define gcmNEG(x) (((x) < 0) ? (x) : -(x)) + +/******************************************************************************\ +******************************** Bit Macro ******************************** +\******************************************************************************/ +#define gcmBITSET(x, bit) ((x) | (1 << (bit))) +#define gcmBITCLEAR(x, bit) ((x) & ~(1 << (bit))) +#define gcmBITTEST(x, bit) ((x) & (1 << (bit))) + +/******************************************************************************* +** +** gcmPTR2SIZE +** +** Convert a pointer to an integer value. +** +** ARGUMENTS: +** +** p Pointer value. +*/ +#define gcmPTR2SIZE(p) \ +(\ + (gctUINTPTR_T) (p) \ +) + +#define gcmPTR2INT32(p) \ +(\ + (gctUINT32)(gctUINTPTR_T) (p) \ +) + +/******************************************************************************* +** +** gcmINT2PTR +** +** Convert an integer value into a pointer. +** +** ARGUMENTS: +** +** v Integer value. +*/ + +#define gcmINT2PTR(i) \ +(\ + (gctPOINTER) (gctUINTPTR_T)(i) \ +) + +/******************************************************************************* +** +** gcmOFFSETOF +** +** Compute the byte offset of a field inside a structure. +** +** ARGUMENTS: +** +** s Structure name. +** field Field name. +*/ +#define gcmOFFSETOF(s, field) \ +(\ + gcmPTR2INT32(& (((struct s *) 0)->field)) \ +) + +#define __gcmOFFSETOF(type, field) \ +(\ + gcmPTR2INT32(& (((type *) 0)->field)) \ +) + +/******************************************************************************* +** +** gcmCONTAINEROF +** +** Get containing structure of a member. +** +** ARGUMENTS: +** +** Pointer Pointer of member. +** Type Structure name. +** Name Field name. +*/ +#define gcmCONTAINEROF(Pointer, Type, Member) \ +(\ + (Type *)((gctUINTPTR_T)Pointer - __gcmOFFSETOF(Type, Member)) \ +) + +/******************************************************************************* +** +** gcmBSWAP32 +** +** Return a value with all bytes in the 32 bit argument swapped. +*/ +#if !defined(__KERNEL__) && defined(__GNUC__) && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ >= 40300) \ + && !defined(__VXWORKS__) +# define gcmBSWAP32(x) __builtin_bswap32(x) +#else +# define gcmBSWAP32(x) ((gctUINT32)(\ + (((gctUINT32)(x) & (gctUINT32)0x000000FFUL) << 24) | \ + (((gctUINT32)(x) & (gctUINT32)0x0000FF00UL) << 8) | \ + (((gctUINT32)(x) & (gctUINT32)0x00FF0000UL) >> 8) | \ + (((gctUINT32)(x) & (gctUINT32)0xFF000000UL) >> 24))) +#endif + +/******************************************************************************* +***** Database ****************************************************************/ + +typedef struct _gcsDATABASE_COUNTERS +{ + /* Number of currently allocated bytes. */ + gctUINT64 bytes; + + /* Maximum number of bytes allocated (memory footprint). */ + gctUINT64 maxBytes; + + /* Total number of bytes allocated. */ + gctUINT64 totalBytes; + + /* The numbers of times video memory was allocated. */ + gctUINT32 allocCount; + + /* The numbers of times video memory was freed. */ + gctUINT32 freeCount; +} +gcsDATABASE_COUNTERS; + +typedef struct _gcuDATABASE_INFO +{ + /* Counters. */ + gcsDATABASE_COUNTERS counters; + + /* Time value. */ + gctUINT64 time; +} +gcuDATABASE_INFO; + +/******************************************************************************* +***** Frame database **********************************************************/ + +/* gcsHAL_FRAME_INFO */ +typedef struct _gcsHAL_FRAME_INFO +{ + /* Current timer tick. */ + OUT gctUINT64 ticks; + + /* Bandwidth counters. */ + OUT gctUINT readBytes8[8]; + OUT gctUINT writeBytes8[8]; + + /* Counters. */ + OUT gctUINT cycles[8]; + OUT gctUINT idleCycles[8]; + OUT gctUINT mcCycles[8]; + OUT gctUINT readRequests[8]; + OUT gctUINT writeRequests[8]; + + /* 3D counters. */ + OUT gctUINT vertexCount; + OUT gctUINT primitiveCount; + OUT gctUINT rejectedPrimitives; + OUT gctUINT culledPrimitives; + OUT gctUINT clippedPrimitives; + OUT gctUINT outPrimitives; + OUT gctUINT inPrimitives; + OUT gctUINT culledQuadCount; + OUT gctUINT totalQuadCount; + OUT gctUINT quadCount; + OUT gctUINT totalPixelCount; + + /* PE counters. */ + OUT gctUINT colorKilled[8]; + OUT gctUINT colorDrawn[8]; + OUT gctUINT depthKilled[8]; + OUT gctUINT depthDrawn[8]; + + /* Shader counters. */ + OUT gctUINT shaderCycles; + OUT gctUINT vsInstructionCount; + OUT gctUINT vsTextureCount; + OUT gctUINT psInstructionCount; + OUT gctUINT psTextureCount; + + /* Texture counters. */ + OUT gctUINT bilinearRequests; + OUT gctUINT trilinearRequests; + OUT gctUINT txBytes8; + OUT gctUINT txHitCount; + OUT gctUINT txMissCount; +} +gcsHAL_FRAME_INFO; + +typedef struct _gckLINKDATA * gckLINKDATA; +struct _gckLINKDATA +{ + gctUINT32 start; + gctUINT32 end; + gctUINT32 pid; + gctUINT32 linkLow; + gctUINT32 linkHigh; +}; + +typedef struct _gckADDRESSDATA * gckADDRESSDATA; +struct _gckADDRESSDATA +{ + gctUINT32 start; + gctUINT32 end; +}; + +typedef union _gcuQUEUEDATA +{ + struct _gckLINKDATA linkData; + + struct _gckADDRESSDATA addressData; +} +gcuQUEUEDATA; + +typedef struct _gckQUEUE * gckQUEUE; +struct _gckQUEUE +{ + gcuQUEUEDATA * datas; + gctUINT32 rear; + gctUINT32 front; + gctUINT32 count; + gctUINT32 size; +}; + +typedef struct _gcsLISTHEAD * gcsLISTHEAD_PTR; +typedef struct _gcsLISTHEAD +{ + gcsLISTHEAD_PTR prev; + gcsLISTHEAD_PTR next; +} +gcsLISTHEAD; + +/* + * 'Patch' here means a mechanism to let kernel side modify user space reserved + * command buffer location, or something the like, during the command buffer + * commit. + * + * Reasons of using 'patch': + * 1. Some resources/states are managed globally only in kernel side, such as + * MCFE semaphore, etc. + * 2. For the sake of security or optimization, like video memory address. + * + * Patches are arranged in arrays, each array has the same type. The 'patchArray' + * in 'gcsHAL_PATCH_LIST' pointers the concrete patch item array. + * + * NOTICE: + * Be aware of the order and values! Tables in gc_hal_user_buffer.c and + * gc_hal_kernel_command.c depend on this. + */ +/* The patch array. */ +typedef struct _gcsHAL_PATCH_LIST +{ + /* Patch type. */ + gctUINT32 type; + + /* Patch item count. */ + gctUINT32 count; + + /* + * Pointer to the patch items. + * + * gcsHAL_PATCH_VIDMEM_ADDRESS * patchArray; + * gcsHAL_PATCH_MCFE_SEMAPHORE * patchArray; + * gcsHAL_PATCH_VIDMEM_TIMESTAMP * patchArray; + * ... + */ + gctUINT64 patchArray; + + /* struct _gcsHAL_PATCH_LIST * next; */ + gctUINT64 next; +} +gcsHAL_PATCH_LIST; + +/* + * Patch a GPU address in the place (gcvHAL_PATCH_VIDMEM_ADDRESS). + * Size of a GPU address is always 32 bits. + */ +typedef struct _gcsHAL_PATCH_VIDMEM_ADDRESS +{ + /* Patch location in the command buffer. */ + gctUINT32 location; + + /* Handle of the video memory node. */ + gctUINT32 node; + + /* Address offset in the video memory node. */ + gctUINT32 offset; +} +gcsHAL_PATCH_VIDMEM_ADDRESS; + +/* + * Patch a MCFE semaphore command in the place (gcvHAL_PATCH_MCFE_SEMAPHORE). + * Size of the semaphore command is fixed at _64_ bits! + */ +typedef struct _gcsHAL_PATCH_MCFE_SEMAPHORE +{ + /* Patch location in the command buffer. */ + gctUINT32 location; + + /* semaphore direction: 1 = Send, 0 = Wait. */ + gctUINT32 sendSema; + + /* Handle of the semaphore. */ + gctUINT32 semaHandle; +} +gcsHAL_PATCH_MCFE_SEMAPHORE; + +/* + * Patch timestamp of given video memory node (gcvHAL_PATCH_VIDMEM_TIMESTAMP). + * Pure software-wise, not command relevant. + */ +typedef struct _gcsHAL_PATCH_VIDMEM_TIMESTAMP +{ + /* Handle of a video memory node. */ + gctUINT32 handle; + + gctUINT32 flag; +} +gcsHAL_PATCH_VIDMEM_TIMESTAMP; + +/* + gcvFEATURE_DATABASE_DATE_MASK + + Mask used to control which bits of chip date will be used to + query feature database, ignore release date for fpga and emulator. +*/ +#if (gcdFPGA_BUILD || defined(EMULATOR)) +# define gcvFEATURE_DATABASE_DATE_MASK (0U) +#else +# define gcvFEATURE_DATABASE_DATE_MASK (~0U) +#endif + +#if defined(__GNUC__) +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define gcdENDIAN_BIG 1 +#else +#define gcdENDIAN_BIG 0 +#endif +#else +#define gcdENDIAN_BIG 0 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_types_h_ */ + + diff --git a/drivers/amlogic/npu/kernel/inc/shared/gc_hal_vg.h b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_vg.h new file mode 100644 index 00000000000000..e948b030583efa --- /dev/null +++ b/drivers/amlogic/npu/kernel/inc/shared/gc_hal_vg.h @@ -0,0 +1,220 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante 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. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_shared_vg_h_ +#define __gc_hal_shared_vg_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Command buffer header. */ +typedef struct _gcsCMDBUFFER * gcsCMDBUFFER_PTR; +typedef struct _gcsCMDBUFFER +{ + /* Pointer to the completion signal. */ + gcsCOMPLETION_SIGNAL_PTR completion; + + /* The user sets this to the node of the container buffer whitin which + this particular command buffer resides. The kernel sets this to the + node of the internally allocated buffer. */ + gcuVIDMEM_NODE_PTR node; + + /* Command buffer hardware address. */ + gctUINT32 address; + + /* The offset of the buffer from the beginning of the header. */ + gctUINT32 bufferOffset; + + /* Size of the area allocated for the data portion of this particular + command buffer (headers and tail reserves are excluded). */ + gctUINT32 size; + + /* Offset into the buffer [0..size]; reflects exactly how much data has + been put into the command buffer. */ + gctUINT offset; + + /* The number of command units in the buffer for the hardware to + execute. */ + gctUINT32 dataCount; + + /* MANAGED BY : user HAL (gcoBUFFER object). + USED BY : user HAL (gcoBUFFER object). + Points to the immediate next allocated command buffer. */ + gcsCMDBUFFER_PTR nextAllocated; + + /* MANAGED BY : user layers (HAL and drivers). + USED BY : kernel HAL (gcoBUFFER object). + Points to the next subbuffer if any. A family of subbuffers are chained + together and are meant to be executed inseparably as a unit. Meaning + that context switching cannot occur while a chain of subbuffers is being + executed. */ + gcsCMDBUFFER_PTR nextSubBuffer; +} +gcsCMDBUFFER; + +/* Command queue element. */ +typedef struct _gcsVGCMDQUEUE +{ + /* Pointer to the command buffer header. */ + gcsCMDBUFFER_PTR commandBuffer; + + /* Dynamic vs. static command buffer state. */ + gctBOOL dynamic; +} +gcsVGCMDQUEUE; + +/* Context map entry. */ +typedef struct _gcsVGCONTEXT_MAP +{ + /* State index. */ + gctUINT32 index; + + /* New state value. */ + gctUINT32 data; + + /* Points to the next entry in the mod list. */ + gcsVGCONTEXT_MAP_PTR next; +} +gcsVGCONTEXT_MAP; + +/* gcsVGCONTEXT structure that holds the current context. */ +typedef struct _gcsVGCONTEXT +{ + /* Context ID. */ + gctUINT64 id; + + /* State caching ebable flag. */ + gctBOOL stateCachingEnabled; + + /* Current pipe. */ + gctUINT32 currentPipe; + + /* State map/mod buffer. */ + gctUINT32 mapFirst; + gctUINT32 mapLast; + gcsVGCONTEXT_MAP_PTR mapContainer; + gcsVGCONTEXT_MAP_PTR mapPrev; + gcsVGCONTEXT_MAP_PTR mapCurr; + gcsVGCONTEXT_MAP_PTR firstPrevMap; + gcsVGCONTEXT_MAP_PTR firstCurrMap; + + /* Main context buffer. */ + gcsCMDBUFFER_PTR header; + gctUINT32_PTR buffer; + + /* Completion signal. */ + gctHANDLE process; + gctSIGNAL signal; + +#if defined(__QNXNTO__) + gctSIGNAL userSignal; + gctINT32 coid; + gctINT32 rcvid; +#endif +} +gcsVGCONTEXT; + +/* User space task header. */ +typedef struct _gcsTASK * gcsTASK_PTR; +typedef struct _gcsTASK +{ + /* Pointer to the next task for the same interrupt in user space. */ + gcsTASK_PTR next; + + /* Size of the task data that immediately follows the structure. */ + gctUINT size; + + /* Task data starts here. */ + /* ... */ +} +gcsTASK; + +/* User space task master table entry. */ +typedef struct _gcsTASK_MASTER_ENTRY * gcsTASK_MASTER_ENTRY_PTR; +typedef struct _gcsTASK_MASTER_ENTRY +{ + /* Pointers to the head and to the tail of the task chain. */ + gcsTASK_PTR head; + gcsTASK_PTR tail; +} +gcsTASK_MASTER_ENTRY; + +/* User space task master table entry. */ +typedef struct _gcsTASK_MASTER_TABLE +{ + /* Table with one entry per block. */ + gcsTASK_MASTER_ENTRY table[gcvBLOCK_COUNT]; + + /* The total number of tasks sckeduled. */ + gctUINT count; + + /* The total size of event data in bytes. */ + gctUINT size; + +#if defined(__QNXNTO__) + gctINT32 coid; + gctINT32 rcvid; +#endif +} +gcsTASK_MASTER_TABLE; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __gc_hal_shared_h_ */ + + diff --git a/drivers/amlogic/npu/kernel/makefile.linux b/drivers/amlogic/npu/kernel/makefile.linux index 9f0f1b3ff94ceb..03c2a72329a275 100755 --- a/drivers/amlogic/npu/kernel/makefile.linux +++ b/drivers/amlogic/npu/kernel/makefile.linux @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2014 - 2019 Vivante Corporation +# Copyright (c) 2014 - 2020 Vivante Corporation # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ # # The GPL License (GPL) # -# Copyright (C) 2014 - 2019 Vivante Corporation +# Copyright (C) 2014 - 2020 Vivante Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/libGAL.def.mak b/drivers/amlogic/npu/os/libGAL.def.mak index 70c7c9d241904a..24f1ba14fff369 100755 --- a/drivers/amlogic/npu/os/libGAL.def.mak +++ b/drivers/amlogic/npu/os/libGAL.def.mak @@ -1,6 +1,6 @@ ############################################################################## # -# Copyright (c) 2005 - 2019 by Vivante Corp. All rights reserved. +# Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. # # The material in this file is confidential and contains trade secrets # of Vivante Corporation. This is proprietary information owned by @@ -248,6 +248,7 @@ EXPORTS gcoHAL_QueryChipFeature gcoHAL_QueryChipIdentity gcoHAL_QueryChipIdentityEx + gcoHAL_QuerySuperTileMode gcoHAL_QueryChipLimits gcoHAL_QueryPowerManagementState gcoHAL_QueryTiled @@ -266,6 +267,7 @@ EXPORTS gcoHAL_WrapUserMemory gcoHAL_LockVideoMemory gcoHAL_UnlockVideoMemory + gcoHAL_UnlockVideoMemoryEX gcoHAL_ReleaseVideoMemory gcoHAL_ScheduleSignal gcoHAL_GetPLS @@ -281,6 +283,7 @@ EXPORTS gcoHAL_SetBltNP2Texture gcoHAL_Get3DEngine gcoHAL_SetCompilerFuncTable + gcoHAL_SetFscaleValue !ENDIF gcoHAL_SetHardwareType gcoHAL_GetBaseAddr @@ -342,6 +345,9 @@ EXPORTS gcoSURF_GetInfo gcoSURF_QueryHints gcoSURF_UpdateMetadata + gcoSURF_QueryVidMemNode + gcoSURF_Set2DSource + gcoSURF_Set2DTarget !IF "$(VIVANTE_ENABLE_3D)_$(VIVANTE_ENABLE_VG)" != "0_0" ; Both 3D & VG have these functions. @@ -782,6 +788,7 @@ EXPORTS gcoVX_QueryCoreCount gcoVX_QueryMultiCore gcoVX_CaptureInitState + gcoVX_SetHardwareType !IF "$(VSIMULATOR_DEBUG)" == "1" gcoOS_UpdateSimulatorCallback diff --git a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h index 6bc1e196882e84..91c3a6b022c6f0 100644 --- a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h +++ b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_array.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c index 9a5bd4c7dc8266..5fcf102a743c6f 100644 --- a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c +++ b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dma.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -157,14 +157,23 @@ _DmaAlloc( { gfp |= __GFP_DMA32; } +#else + if (Flags & gcvALLOC_FLAG_4GB_ADDR) + { + gfp |= __GFP_DMA; + } #endif mdlPriv->kvaddr #if defined CONFIG_MIPS || defined CONFIG_CPU_CSKYV2 || defined CONFIG_PPC || defined CONFIG_ARM64 = dma_alloc_coherent(galcore_device, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, gfp); +#else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + = dma_alloc_wc(galcore_device, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, gfp); #else = dma_alloc_writecombine(galcore_device, NumPages * PAGE_SIZE, &mdlPriv->dmaHandle, gfp); #endif +#endif #ifdef CONFLICT_BETWEEN_BASE_AND_PHYS if ((os->device->baseAddress & 0x80000000) != (mdlPriv->dmaHandle & 0x80000000)) @@ -283,8 +292,12 @@ _DmaFree( #if defined CONFIG_MIPS || defined CONFIG_CPU_CSKYV2 || defined CONFIG_PPC || defined CONFIG_ARM64 dma_free_coherent(galcore_device, Mdl->numPages * PAGE_SIZE, mdlPriv->kvaddr, mdlPriv->dmaHandle); +#else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + dma_free_wc(galcore_device, Mdl->numPages * PAGE_SIZE, mdlPriv->kvaddr, mdlPriv->dmaHandle); #else dma_free_writecombine(galcore_device, Mdl->numPages * PAGE_SIZE, mdlPriv->kvaddr, mdlPriv->dmaHandle); +#endif #endif gckOS_Free(os, mdlPriv); @@ -318,6 +331,14 @@ _DmaMmap( (mdlPriv->dmaHandle >> PAGE_SHIFT) + skipPages, numPages << PAGE_SHIFT, pgprot_writecombine(vma->vm_page_prot)) < 0) +#else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + /* map kernel memory to user space.. */ + if (dma_mmap_wc(galcore_device, + vma, + (gctINT8_PTR)mdlPriv->kvaddr + (skipPages << PAGE_SHIFT), + mdlPriv->dmaHandle + (skipPages << PAGE_SHIFT), + numPages << PAGE_SHIFT) < 0) #else /* map kernel memory to user space.. */ if (dma_mmap_writecombine(galcore_device, @@ -325,6 +346,7 @@ _DmaMmap( (gctINT8_PTR)mdlPriv->kvaddr + (skipPages << PAGE_SHIFT), mdlPriv->dmaHandle + (skipPages << PAGE_SHIFT), numPages << PAGE_SHIFT) < 0) +#endif #endif { gcmkTRACE_ZONE( @@ -586,7 +608,7 @@ _DmaAlloctorInit( */ allocator->capability = gcvALLOC_FLAG_CONTIGUOUS | gcvALLOC_FLAG_DMABUF_EXPORTABLE -#if defined(CONFIG_ZONE_DMA32) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) +#if (defined(CONFIG_ZONE_DMA32) || defined(CONFIG_ZONE_DMA)) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) | gcvALLOC_FLAG_4GB_ADDR #endif ; diff --git a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c index 97ab69804f70da..6feb9be95cae99 100644 --- a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c +++ b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -355,11 +355,16 @@ _DmabufMapUser( gcsDMABUF *buf_desc = Mdl->priv; gctINT8_PTR userLogical = gcvNULL; gceSTATUS status = gcvSTATUS_OK; + struct file *fd = buf_desc->dmabuf->file; + unsigned long flag = 0; - userLogical = (gctINT8_PTR)vm_mmap(buf_desc->dmabuf->file, + flag |= (fd->f_mode & FMODE_READ ? PROT_READ : 0); + flag |= (fd->f_mode & FMODE_WRITE ? PROT_WRITE : 0); + + userLogical = (gctINT8_PTR)vm_mmap(fd, 0L, Mdl->numPages << PAGE_SHIFT, - PROT_READ | PROT_WRITE, + flag, MAP_SHARED | MAP_NORESERVE, 0); diff --git a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c index 421f43ccab9133..beb7cd38d64b2c 100644 --- a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c +++ b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -61,7 +61,9 @@ #include #include #include - +#if defined(CONFIG_X86) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +#include +#endif #include "gc_hal_kernel_platform.h" #define _GC_OBJ_ZONE gcvZONE_OS @@ -196,8 +198,9 @@ _NonContiguousFree( gcmkFOOTER_NO(); } -static struct page ** +static gceSTATUS _NonContiguousAlloc( + IN struct gfp_mdl_priv *MdlPriv, IN gctSIZE_T NumPages, IN gctUINT32 Gfp ) @@ -217,7 +220,7 @@ _NonContiguousAlloc( #endif { gcmkFOOTER_NO(); - return gcvNULL; + return gcvSTATUS_INVALID_ARGUMENT; } size = NumPages * sizeof(struct page *); @@ -231,7 +234,7 @@ _NonContiguousAlloc( if (!pages) { gcmkFOOTER_NO(); - return gcvNULL; + return gcvSTATUS_OUT_OF_MEMORY; } } @@ -243,7 +246,7 @@ _NonContiguousAlloc( { _NonContiguousFree(pages, i); gcmkFOOTER_NO(); - return gcvNULL; + return gcvSTATUS_OUT_OF_MEMORY; } #if gcdDISCRETE_PAGES @@ -264,7 +267,7 @@ _NonContiguousAlloc( { _NonContiguousFree(pages, i); gcmkFOOTER_NO(); - return gcvNULL; + return gcvSTATUS_OUT_OF_MEMORY; } } } @@ -273,8 +276,10 @@ _NonContiguousAlloc( pages[i] = p; } + MdlPriv->contiguousPages = (struct page *)pages; + gcmkFOOTER_ARG("pages=0x%X", pages); - return pages; + return gcvSTATUS_OK; } static void @@ -312,6 +317,7 @@ _NonContiguous1MPagesFree( { kfree(MdlPriv->Pages1M); } + MdlPriv->Pages1M = gcvNULL; } if (MdlPriv->isExact) @@ -336,22 +342,26 @@ _NonContiguous1MPagesFree( { kfree(MdlPriv->nonContiguousPages); } + MdlPriv->nonContiguousPages = gcvNULL; } } -static struct page ** +static gceSTATUS _NonContiguous1MPagesAlloc( IN struct gfp_mdl_priv *MdlPriv, IN gctSIZE_T *NumPages, IN gctUINT32 Gfp ) { + gceSTATUS status; size_t numPages1M, num, size; struct page **pages; struct page *page; void *addr = NULL; gctINT i, j; + MdlPriv->numPages1M = 0; + numPages1M = ((*NumPages << PAGE_SHIFT) + (gcd1M_PAGE_SIZE - 1)) >> gcd1M_PAGE_SHIFT; *NumPages = (numPages1M << gcd1M_PAGE_SHIFT) >> PAGE_SHIFT; @@ -364,7 +374,7 @@ _NonContiguous1MPagesAlloc( if (*NumPages > num_physpages) #endif { - return gcvNULL; + return gcvSTATUS_INVALID_ARGUMENT; } num = gcd1M_PAGE_SIZE / PAGE_SIZE; @@ -377,7 +387,7 @@ _NonContiguous1MPagesAlloc( if (!MdlPriv->Pages1M) { - return gcvNULL; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } } @@ -388,10 +398,10 @@ _NonContiguous1MPagesAlloc( MdlPriv->isExact = vmalloc(size); if (!MdlPriv->isExact) { - _NonContiguous1MPagesFree(MdlPriv, 0); - return gcvNULL; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } } + memset(MdlPriv->isExact, 0, size); size = *NumPages * sizeof(struct page *); pages = kmalloc(size, GFP_KERNEL | gcdNOWARN); @@ -400,12 +410,11 @@ _NonContiguous1MPagesAlloc( pages = vmalloc(size); if (!pages) { - _NonContiguous1MPagesFree(MdlPriv, 0); - return gcvNULL; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } } + MdlPriv->contiguousPages = (struct page *)pages; - MdlPriv->numPages1M = 0; for (i = 0; i < numPages1M; i++) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) @@ -424,8 +433,7 @@ _NonContiguous1MPagesAlloc( if (order >= MAX_ORDER) { - _NonContiguous1MPagesFree(MdlPriv, MdlPriv->numPages1M); - return gcvNULL; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } MdlPriv->Pages1M[i] = alloc_pages(Gfp, order); @@ -433,8 +441,7 @@ _NonContiguous1MPagesAlloc( if (MdlPriv->Pages1M[i] == gcvNULL) { - _NonContiguous1MPagesFree(MdlPriv, MdlPriv->numPages1M); - return gcvNULL; + gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } MdlPriv->numPages1M += 1; @@ -446,7 +453,11 @@ _NonContiguous1MPagesAlloc( } } - return pages; + return gcvSTATUS_OK; +OnError: + _NonContiguous1MPagesFree(MdlPriv, MdlPriv->numPages1M); + + return status; } /***************************************************************************\ @@ -588,16 +599,11 @@ _GFPAlloc( { if (Mdl->pageUnit1M) { - mdlPriv->nonContiguousPages = _NonContiguous1MPagesAlloc(mdlPriv, &NumPages, gfp); + gcmkONERROR(_NonContiguous1MPagesAlloc(mdlPriv, &NumPages, gfp)); } else { - mdlPriv->nonContiguousPages = _NonContiguousAlloc(NumPages, gfp); - } - - if (mdlPriv->nonContiguousPages == gcvNULL) - { - gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); + gcmkONERROR(_NonContiguousAlloc(mdlPriv, NumPages, gfp)); } #if LINUX_VERSION_CODE >= KERNEL_VERSION (3,6,0) \ @@ -797,12 +803,12 @@ _GFPFree( if (Mdl->contiguous) { dma_unmap_page(galcore_device, mdlPriv->dma_addr, - Mdl->numPages << PAGE_SHIFT, DMA_TO_DEVICE); + Mdl->numPages << PAGE_SHIFT, DMA_FROM_DEVICE); } else { dma_unmap_sg(galcore_device, mdlPriv->sgt.sgl, mdlPriv->sgt.nents, - DMA_TO_DEVICE); + DMA_FROM_DEVICE); #if LINUX_VERSION_CODE >= KERNEL_VERSION (3,6,0) \ && (defined (ARCH_HAS_SG_CHAIN) || defined (CONFIG_ARCH_HAS_SG_CHAIN)) @@ -1361,7 +1367,7 @@ _GFPAlloctorInit( | gcvALLOC_FLAG_MEMLIMIT | gcvALLOC_FLAG_ALLOC_ON_FAULT | gcvALLOC_FLAG_DMABUF_EXPORTABLE -#if defined(CONFIG_ZONE_DMA32) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) +#if (defined(CONFIG_ZONE_DMA32) || defined(CONFIG_ZONE_DMA)) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) | gcvALLOC_FLAG_4GB_ADDR #endif | gcvALLOC_FLAG_1M_PAGES diff --git a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c index 5e390dba99a981..a2d9558a63076f 100644 --- a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c +++ b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_reserved_mem.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -75,6 +75,7 @@ struct reserved_mem { unsigned long start; unsigned long size; + unsigned int offset_in_page; char name[32]; int release; @@ -178,6 +179,7 @@ reserved_mem_attach( res->start = Desc->reservedMem.start; res->size = Desc->reservedMem.size; + res->offset_in_page = Desc->reservedMem.start & (PAGE_SIZE - 1); strncpy(res->name, Desc->reservedMem.name, sizeof(res->name)-1); res->release = 0; @@ -203,7 +205,7 @@ reserved_mem_attach( Mdl->priv = res; - if (res->start < 0xFFFFFFFF) + if ((res->start + res->size) < 0xFFFFFFFF) { Allocator->capability |= gcvALLOC_FLAG_4GB_ADDR; } @@ -281,17 +283,19 @@ reserved_mem_unmap_user( IN gctUINT32 Size ) { + struct reserved_mem *res = (struct reserved_mem*)Mdl->priv; + if (unlikely(!current->mm)) return; #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) - if (vm_munmap((unsigned long)MdlMap->vmaAddr, (unsigned long)Size) < 0) + if (vm_munmap((unsigned long)MdlMap->vmaAddr - res->offset_in_page, res->size) < 0) { printk("%s: vm_munmap failed\n", __func__); } #else down_write(¤t->mm->mmap_sem); - if (do_munmap(current->mm, (unsigned long)MdlMap->vmaAddr, (unsigned long)Size) < 0) + if (do_munmap(current->mm, (unsigned long)MdlMap->vmaAddr - res->offset_in_page, res->size) < 0) { printk("%s: do_munmap failed\n", __func__); } @@ -357,7 +361,7 @@ reserved_mem_map_user( gcmkERR_BREAK(reserved_mem_mmap(Allocator, Mdl, gcvFALSE, 0, Mdl->numPages, vma)); - MdlMap->vmaAddr = userLogical; + MdlMap->vmaAddr = userLogical + res->offset_in_page; MdlMap->cacheable = gcvFALSE; MdlMap->vma = vma; } diff --git a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c index c625509066da17..4e1e0761a8fdf6 100644 --- a/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c +++ b/drivers/amlogic/npu/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.c index 3a1cb1e8a2d58b..d788c3a718eb3c 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.h index f0b96f75b34490..e6f1d24c148c5f 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_allocator.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -398,6 +398,40 @@ typedef struct _gcsALLOCATOR_OPERATIONS } gcsALLOCATOR_OPERATIONS; +/* defination of allocator operations wrapper*/ +#define gcmALLOCATOR_Alloc(Allocator, Mdl, NumPages, Flag) \ + (Allocator)->ops->Alloc((Allocator), (Mdl), (NumPages), (Flag)) + +#define gcmALLOCATOR_Free(Allocator, Mdl) \ + (Allocator)->ops->Free((Allocator), (Mdl)) + +#define gcmALLOCATOR_Mmap(Allocator, Mdl, Cacheable, skipPages, numPages, vma) \ + (Allocator)->ops->Mmap((Allocator), (Mdl), (Cacheable), (skipPages), (numPages), (vma)) + +#define gcmALLOCATOR_MapUser(Allocator, Mdl, MdlMap, Cacheable) \ + (Allocator)->ops->MapUser((Allocator), (Mdl), (MdlMap), (Cacheable)) + +#define gcmALLOCATOR_UnmapUser(Allocator, Mdl, MdlMap, Size) \ + (Allocator)->ops->UnmapUser((Allocator), (Mdl), (MdlMap), (Size)) + +#define gcmALLOCATOR_MapKernel(Allocator, Mdl, Offset, Bytes, Logical) \ + (Allocator)->ops->MapKernel((Allocator), (Mdl), (Offset), (Bytes), (Logical)) + +#define gcmALLOCATOR_UnmapKernel(Allocator, Mdl, Logical) \ + (Allocator)->ops->UnmapKernel((Allocator), (Mdl), (Logical)) + +#define gcmALLOCATOR_Cache(Allocator, Mdl, Offset, Logical, Bytes, Operation) \ + (Allocator)->ops->Cache((Allocator), (Mdl), (Offset), (Logical), (Bytes), (Operation)) + +#define gcmALLOCATOR_Physical(Allocator, Mdl, Offset, Phys) \ + (Allocator)->ops->Physical((Allocator), (Mdl), (Offset), (Phys)) + +#define gcmALLOCATOR_Attach(Allocator, Desc, Mdl) \ + (Allocator)->ops->Attach((Allocator), (Desc), (Mdl)) + +#define gcmALLOCATOR_GetSGT(Allocator, Mdl, Offset, Bytes, SGT) \ + (Allocator)->ops->GetSGT((Allocator), (Mdl), (Offset), (Bytes), (SGT)) + typedef struct _gcsALLOCATOR { /* Pointer to gckOS Object. */ diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debug.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debug.h index d607ee222e3ce4..3e596f98180277 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debug.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debug.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.c index 7bc22a3c566911..46c3b06efd2d3d 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.h index 6a5809eb0e153c..47e1234eaccf28 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_debugfs.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.c index bcc304c72d231d..44cb18e5825224 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -266,8 +266,11 @@ static const char * poolStr[gcvPOOL_NUMBER_OF_POOLS] = "External", "Unified", "System", + "Sram", "Virtual", "User", + "Insram", + "Exsram", }; static void @@ -345,6 +348,15 @@ _ShowVideoMemoryRecord( return; } +static void +_ShowCommandBufferRecord( + IN struct seq_file *m, + IN gcsDATABASE_PTR Database + ) +{ + return; +} + static void _ShowNonPagedRecord( IN struct seq_file *m, @@ -379,6 +391,15 @@ _ShowNonPagedRecord( } } +static void +_ShowContiguousRecord( + IN struct seq_file *m, + IN gcsDATABASE_PTR Database + ) +{ + return; +} + static void _ShowSignalRecord( IN struct seq_file *m, @@ -522,6 +543,15 @@ _ShowMapMemoryRecord( } } +static void +_ShowMapUserMemoryRecord( + IN struct seq_file *m, + IN gcsDATABASE_PTR Database + ) +{ + return; +} + static void _ShowShbufRecord( IN struct seq_file *m, @@ -551,6 +581,176 @@ _ShowShbufRecord( } } +static void +_ShowCounters( + struct seq_file *File, + gcsDATABASE_PTR Database + ) +{ + gctUINT i = 0; + + static const char * otherCounterNames[] = { + "AllocNonPaged", + "AllocContiguous", + "MapUserMemory", + "MapMemory", + }; + + gcsDATABASE_COUNTERS * otherCounters[] = { + &Database->nonPaged, + &Database->contiguous, + &Database->mapUserMemory, + &Database->mapMemory, + }; + + seq_printf(File, "%-16s %16s %16s %16s\n", "", "Current", "Maximum", "Total"); + + /* Print surface type counters. */ + seq_printf(File, "%-16s %16lld %16lld %16lld\n", + "All-Types", + Database->vidMem.bytes, + Database->vidMem.maxBytes, + Database->vidMem.totalBytes); + + for (i = 1; i < gcvVIDMEM_TYPE_COUNT; i++) + { + seq_printf(File, "%-16s %16lld %16lld %16lld\n", + vidmemTypeStr[i], + Database->vidMemType[i].bytes, + Database->vidMemType[i].maxBytes, + Database->vidMemType[i].totalBytes); + } + seq_puts(File, "\n"); + + /* Print surface pool counters. */ + seq_printf(File, "%-16s %16lld %16lld %16lld\n", + "All-Pools", + Database->vidMem.bytes, + Database->vidMem.maxBytes, + Database->vidMem.totalBytes); + + for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++) + { + seq_printf(File, "%-16s %16lld %16lld %16lld\n", + poolStr[i], + Database->vidMemPool[i].bytes, + Database->vidMemPool[i].maxBytes, + Database->vidMemPool[i].totalBytes); + } + seq_puts(File, "\n"); + + /* Print other counters. */ + for (i = 0; i < gcmCOUNTOF(otherCounterNames); i++) + { + seq_printf(File, "%-16s %16lld %16lld %16lld\n", + otherCounterNames[i], + otherCounters[i]->bytes, + otherCounters[i]->maxBytes, + otherCounters[i]->totalBytes); + } + seq_puts(File, "\n"); +} + +static int +_ShowRecord( + IN struct seq_file *File, + IN gcsDATABASE_PTR Database, + IN gcsDATABASE_RECORD_PTR Record + ) +{ + gctUINT32 handle; + gckVIDMEM_NODE nodeObject; + gctPHYS_ADDR_T physical; + gceSTATUS status = gcvSTATUS_OK; + + static const char * recordTypes[gcvDB_NUM_TYPES] = { + "Unknown", + "VideoMemory", + "CommandBuffer", + "NonPaged", + "Contiguous", + "Signal", + "VidMemLock", + "Context", + "Idel", + "MapMemory", + "MapUserMemory", + "ShBuf", + }; + + handle = gcmPTR2INT32(Record->data); + + if (Record->type == gcvDB_VIDEO_MEMORY || Record->type == gcvDB_VIDEO_MEMORY_LOCKED) + { + status = gckVIDMEM_HANDLE_Lookup2( + Record->kernel, + Database, + handle, + &nodeObject + ); + + if (gcmIS_ERROR(status)) + { + seq_printf(File, "%6u Invalid Node\n", handle); + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + gcmkONERROR(gckVIDMEM_NODE_GetPhysical(Record->kernel, nodeObject, 0, &physical)); + } + else + { + physical = (gctUINT64)(gctUINTPTR_T)Record->physical; + } + + seq_printf(File, "%-14s %3d %16x %16zx %16zu\n", + recordTypes[Record->type], + Record->kernel->core, + gcmPTR2INT32(Record->data), + (size_t) physical, + Record->bytes + ); + +OnError: + return status; +} + +static void +_ShowDataBaseOldFormat( + IN struct seq_file *File, + IN gcsDATABASE_PTR Database + ) +{ + gctINT pid; + gctUINT i; + char name[24]; + + /* Process ID and name */ + pid = Database->processID; + gcmkVERIFY_OK(gckOS_GetProcessNameByPid(pid, gcmSIZEOF(name), name)); + + seq_printf(File, "--------------------------------------------------------------------------------\n"); + seq_printf(File, "Process: %-8d %s\n", pid, name); + + seq_printf(File, "Records:\n"); + + seq_printf(File, "%14s %3s %16s %16s %16s\n", + "Type", "GPU", "Data/Node", "Physical/Node", "Bytes"); + + for (i = 0; i < gcmCOUNTOF(Database->list); i++) + { + gcsDATABASE_RECORD_PTR record = Database->list[i]; + + while (record != NULL) + { + _ShowRecord(File, Database, record); + record = record->next; + } + } + + seq_printf(File, "Counters:\n"); + + _ShowCounters(File, Database); +} + static void _ShowDatabase( IN struct seq_file *File, @@ -565,12 +765,15 @@ _ShowDatabase( { _ShowDummyRecord, _ShowVideoMemoryRecord, + _ShowCommandBufferRecord, _ShowNonPagedRecord, + _ShowContiguousRecord, _ShowSignalRecord, _ShowLockRecord, _ShowContextRecord, _ShowDummyRecord, _ShowMapMemoryRecord, + _ShowMapUserMemoryRecord, _ShowShbufRecord, }; @@ -604,6 +807,50 @@ _ShowDatabase( } } +static int +gc_db_show_old(struct seq_file *m, void *data) +{ + gcsDATABASE_PTR database; + gctINT i; + static gctUINT64 idleTime = 0; + gcsINFO_NODE *node = m->private; + gckGALDEVICE device = node->device; + gckKERNEL kernel = _GetValidKernel(device); + + if (!kernel) + return -ENXIO; + + /* Acquire the database mutex. */ + gcmkVERIFY_OK( + gckOS_AcquireMutex(kernel->os, kernel->db->dbMutex, gcvINFINITE)); + + if (kernel->db->idleTime) + { + /* Record idle time if DB upated. */ + idleTime = kernel->db->idleTime; + kernel->db->idleTime = 0; + } + + /* Idle time since last call */ + seq_printf(m, "GPU Idle: %llu ns\n", idleTime); + + /* Walk the databases. */ + for (i = 0; i < gcmCOUNTOF(kernel->db->db); ++i) + { + for (database = kernel->db->db[i]; + database != gcvNULL; + database = database->next) + { + _ShowDataBaseOldFormat(m, database); + } + } + + /* Release the database mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(kernel->os, kernel->db->dbMutex)); + + return 0 ; +} + static int gc_db_show(struct seq_file *m, void *data) { @@ -802,6 +1049,76 @@ gc_dump_trigger_show(struct seq_file *m, void *data) static int dumpProcess = 0; +static void +_ShowVideoMemoryOldFormat( + struct seq_file *File, + gcsDATABASE_PTR Database + ) +{ + gctUINT i = 0; + + static const char * otherCounterNames[] = { + "AllocNonPaged", + "AllocContiguous", + "MapUserMemory", + "MapMemory", + }; + + gcsDATABASE_COUNTERS * otherCounters[] = { + &Database->nonPaged, + &Database->contiguous, + &Database->mapUserMemory, + &Database->mapMemory, + }; + + seq_printf(File, "%-16s %16s %16s %16s\n", "", "Current", "Maximum", "Total"); + + /* Print surface type counters. */ + seq_printf(File, "%-16s %16llu %16llu %16llu\n", + "All-Types", + Database->vidMem.bytes, + Database->vidMem.maxBytes, + Database->vidMem.totalBytes); + + for (i = 1; i < gcvVIDMEM_TYPE_COUNT; i++) + { + seq_printf(File, "%-16s %16llu %16llu %16llu\n", + vidmemTypeStr[i], + Database->vidMemType[i].bytes, + Database->vidMemType[i].maxBytes, + Database->vidMemType[i].totalBytes); + } + seq_puts(File, "\n"); + + /* Print surface pool counters. */ + seq_printf(File, "%-16s %16llu %16llu %16llu\n", + "All-Pools", + Database->vidMem.bytes, + Database->vidMem.maxBytes, + Database->vidMem.totalBytes); + + for (i = 1; i < gcvPOOL_NUMBER_OF_POOLS; i++) + { + seq_printf(File, "%-16s %16llu %16llu %16llu\n", + poolStr[i], + Database->vidMemPool[i].bytes, + Database->vidMemPool[i].maxBytes, + Database->vidMemPool[i].totalBytes); + } + seq_puts(File, "\n"); + + /* Print other counters. */ + for (i = 0; i < gcmCOUNTOF(otherCounterNames); i++) + { + seq_printf(File, "%-16s %16llu %16llu %16llu\n", + otherCounterNames[i], + otherCounters[i]->bytes, + otherCounters[i]->maxBytes, + otherCounters[i]->totalBytes); + } + seq_puts(File, "\n"); +} + static void _ShowVideoMemory( struct seq_file *File, @@ -868,6 +1185,61 @@ _ShowVideoMemory( seq_puts(File, "\n"); } +static int gc_vidmem_show_old(struct seq_file *m, void *unused) +{ + gceSTATUS status; + gcsDATABASE_PTR database; + gcsINFO_NODE *node = m->private; + gckGALDEVICE device = node->device; + char name[64]; + int i; + + gckKERNEL kernel = _GetValidKernel(device); + + if (!kernel) + return -ENXIO; + + if (dumpProcess == 0) + { + /* Acquire the database mutex. */ + gcmkVERIFY_OK( + gckOS_AcquireMutex(kernel->os, kernel->db->dbMutex, gcvINFINITE)); + + for (i = 0; i < gcmCOUNTOF(kernel->db->db); i++) + { + for (database = kernel->db->db[i]; + database != gcvNULL; + database = database->next) + { + gckOS_GetProcessNameByPid(database->processID, gcmSIZEOF(name), name); + seq_printf(m, "VidMem Usage (Process %u: %s):\n", database->processID, name); + _ShowVideoMemoryOldFormat(m, database); + seq_puts(m, "\n"); + } + } + + /* Release the database mutex. */ + gcmkVERIFY_OK(gckOS_ReleaseMutex(kernel->os, kernel->db->dbMutex)); + } + else + { + /* Find the database. */ + status = gckKERNEL_FindDatabase(kernel, dumpProcess, gcvFALSE, &database); + + if (gcmIS_ERROR(status)) + { + seq_printf(m, "ERROR: process %d not found\n", dumpProcess); + return 0; + } + + gckOS_GetProcessNameByPid(dumpProcess, gcmSIZEOF(name), name); + seq_printf(m, "VidMem Usage (Process %d: %s):\n", dumpProcess, name); + _ShowVideoMemoryOldFormat(m, database); + } + + return 0; +} + static int gc_vidmem_show(struct seq_file *m, void *unused) { gceSTATUS status; @@ -895,7 +1267,7 @@ static int gc_vidmem_show(struct seq_file *m, void *unused) database = database->next) { gckOS_GetProcessNameByPid(database->processID, gcmSIZEOF(name), name); - seq_printf(m, "Memory Usage (Process %u: %s):\n", database->processID, name); + seq_printf(m, "VidMem Usage (Process %u: %s):\n", database->processID, name); _ShowVideoMemory(m, database); seq_puts(m, "\n"); } @@ -916,7 +1288,7 @@ static int gc_vidmem_show(struct seq_file *m, void *unused) } gckOS_GetProcessNameByPid(dumpProcess, gcmSIZEOF(name), name); - seq_printf(m, "Memory Usage (Process %d: %s):\n", dumpProcess, name); + seq_printf(m, "VidMem Usage (Process %d: %s):\n", dumpProcess, name); _ShowVideoMemory(m, database); } @@ -1005,9 +1377,11 @@ static gcsINFO InfoList[] = {"clients", gc_clients_show}, {"meminfo", gc_meminfo_show}, {"idle", gc_idle_show}, - {"database", gc_db_show}, + {"database", gc_db_show_old}, + {"database64x", gc_db_show}, {"version", gc_version_show}, - {"vidmem", gc_vidmem_show, gc_vidmem_write}, + {"vidmem", gc_vidmem_show_old, gc_vidmem_write}, + {"vidmem64x", gc_vidmem_show, gc_vidmem_write}, {"dump_trigger", gc_dump_trigger_show, gc_dump_trigger_write}, {"clk", gc_clk_show}, }; @@ -1208,11 +1582,16 @@ _SetupContiguousVidMem( else { gckALLOCATOR allocator; + gctBOOL contiguousRequested = Args->contiguousRequested; + +#if gcdCAPTURE_ONLY_MODE + contiguousRequested = gcvTRUE; +#endif gcmkONERROR(gckOS_RequestReservedMemory( device->os, Args->contiguousBase, Args->contiguousSize, "galcore contiguous memory", - Args->contiguousRequested, + contiguousRequested, &device->contiguousPhysical )); @@ -1238,6 +1617,79 @@ _SetupContiguousVidMem( return status; } +static gceSTATUS +_SetupExternalSRAMVidMem( + IN gckGALDEVICE Device + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE device = Device; + gctINT32 i, j = 0; + + gcmkHEADER_ARG("Device=%p", Device); + + /* Setup external SRAM memory region. */ + for (i = 0; i < gcvSRAM_EXT_COUNT; i++) + { + if (!device->extSRAMSizes[i]) + { + /* Keep this path for internal test, read from feature database. */ + device->extSRAMSizes[i] = device->device->extSRAMSizes[i]; + } + + if (device->extSRAMSizes[i] > 0) + { + /* create the external SRAM memory heap */ + status = gckVIDMEM_Construct( + device->os, + device->extSRAMBases[i], + device->extSRAMSizes[i], + 64, + 0, + &device->extSRAMVidMem[i] + ); + + if (gcmIS_ERROR(status)) + { + /* Error, disable external SRAM heap. */ + device->extSRAMSizes[i] = 0; + } + else + { + char sRAMName[40]; + snprintf(sRAMName, gcmSIZEOF(sRAMName) - 1, "Galcore external sram%d", i); + +#if gcdCAPTURE_ONLY_MODE + device->args.sRAMRequested = gcvTRUE; +#endif + /* Map external SRAM memory. */ + gcmkONERROR(gckOS_RequestReservedMemory( + device->os, + device->extSRAMBases[i], device->extSRAMSizes[i], + sRAMName, + device->args.sRAMRequested, + &device->extSRAMPhysical[i] + )); + + device->extSRAMVidMem[i]->physical = device->extSRAMPhysical[i]; + device->device->extSRAMPhysical[i] = device->extSRAMPhysical[i]; + + for (j = 0; j < gcdMAX_GPU_COUNT; j++) + { + if (device->irqLines[j] != -1 && device->kernels[j]) + { + device->kernels[j]->hardware->options.extSRAMGPUPhysNames[i] = gckKERNEL_AllocateNameFromPointer(device->kernels[j], device->extSRAMPhysical[i]); + } + } + } + } + } + +OnError: + gcmkFOOTER(); + return status; +} + /******************************************************************************\ ******************************* Interrupt Handler ****************************** \******************************************************************************/ @@ -1283,6 +1735,44 @@ static const char *isrNames[] = #endif }; +static int isrRoutinePoll(void *ctxt) +{ + gckGALDEVICE device; + gceCORE core = (gceCORE)gcmPTR2INT32(ctxt); + + device = galDevice; + + gcmSTATIC_ASSERT(gcvCORE_COUNT == gcmCOUNTOF(isrNames), + "isrNames array does not match core types"); + + while (1) + { + if (unlikely(device->killThread)) + { + /* The daemon exits. */ + while (!kthread_should_stop()) + { + gckOS_Delay(device->os, 1); + } + + return 0; + } + + if (core == gcvCORE_VG) + { + isrRoutineVG(-1, gcvNULL); + } + else + { + isrRoutine(-1, (gctPOINTER)(uintptr_t)(core + 1)); + } + + gckOS_Delay(device->os, 10); + } + + return 0; +} + static gceSTATUS _SetupIsr( IN gceCORE Core @@ -1297,13 +1787,50 @@ _SetupIsr( gcmkVERIFY_ARGUMENT(Device != NULL); - if (Device->irqLines[Core] < 0) + gcmSTATIC_ASSERT(gcvCORE_COUNT == gcmCOUNTOF(isrNames), + "isrNames array does not match core types"); + + if (Device->irqLines[Core] == -1) { - gcmkONERROR(gcvSTATUS_GENERIC_IO); - } + gctUINT64 isrPolling = -1; + + if (Device->isrThread[Core]) + { + return status; + } + + gckOS_QueryOption(Device->os, "isrPoll", &isrPolling); + + /* use kthread to poll int stat */ + if (gcmBITTEST(isrPolling, Core) != 0) + { + struct task_struct * task; + + Device->killIsrThread = gcvFALSE; + + task = kthread_run(isrRoutinePoll, (gctPOINTER)Core, "%s_poll", isrNames[Core]); + + if (IS_ERR(task)) + { + gcmkTRACE_ZONE( + gcvLEVEL_ERROR, gcvZONE_DRIVER, + "%s(%d): Could not start the intr poll thread.\n", + __FUNCTION__, __LINE__ + ); + + gcmkONERROR(gcvSTATUS_GENERIC_IO); + } + + gcmkPRINT("galcore: polling core%d int state\n", Core); + + Device->isrThread[Core] = task; + Device->isrInitializeds[Core] = gcvTRUE; - gcmSTATIC_ASSERT(gcvCORE_COUNT == gcmCOUNTOF(isrNames), - "isrNames array does not match core types"); + return status; + } + /* it should not run to here */ + return gcvSTATUS_INVALID_ARGUMENT; + } handler = (Core == gcvCORE_VG) ? isrRoutineVG : isrRoutine; @@ -1351,7 +1878,17 @@ _ReleaseIsr( /* release the irq */ if (Device->isrInitializeds[Core]) { - free_irq(Device->irqLines[Core], (void *)(uintptr_t)(Core + 1)); + if (Device->isrThread[Core]) + { + Device->killIsrThread = gcvTRUE; + kthread_stop(Device->isrThread[Core]); + Device->isrThread[Core] = gcvNULL; + } + else + { + free_irq(Device->irqLines[Core], (void *)(uintptr_t)(Core + 1)); + } + Device->isrInitializeds[Core] = gcvFALSE; } @@ -1422,11 +1959,11 @@ _StartThread( } device->threadCtxts[Core] = task; - device->threadInitializeds[Core] = gcvTRUE; + device->threadInitializeds[Core] = device->kernels[Core]->threadInitialized = gcvTRUE; } else { - device->threadInitializeds[Core] = gcvFALSE; + device->threadInitializeds[Core] = gcvFALSE; } OnError: @@ -1473,9 +2010,14 @@ gckGALDEVICE_Construct( { gckKERNEL kernel = gcvNULL; gckGALDEVICE device; - gctINT32 i, j; + gctINT32 i; + +#if !gcdCAPTURE_ONLY_MODE gceHARDWARE_TYPE type; +#endif + gceSTATUS status = gcvSTATUS_OK; + gctUINT64 isrPolling = -1; gcmkHEADER_ARG("Platform=%p Args=%p", Platform, Args); @@ -1550,8 +2092,11 @@ gckGALDEVICE_Construct( gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); } - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0) && (defined(CONFIG_ARM) || defined(CONFIG_ARM64)) + device->registerBases[i] = (gctPOINTER)ioremap( +#else device->registerBases[i] = (gctPOINTER)ioremap_nocache( +#endif physical, device->requestedRegisterMemSizes[i]); if (device->registerBases[i] == gcvNULL) @@ -1573,6 +2118,10 @@ gckGALDEVICE_Construct( device->baseAddress = device->physBase = Args->baseAddress; device->physSize = Args->physSize; + /* Set the external base address */ + device->externalBase = Args->externalBase; + device->externalSize = Args->externalSize; + for (i = 0; i < gcvSRAM_EXT_COUNT; i++) { device->extSRAMBases[i] = Args->extSRAMBases[i]; @@ -1582,6 +2131,39 @@ gckGALDEVICE_Construct( /* Construct the gckOS object. */ gcmkONERROR(gckOS_Construct(device, &device->os)); + + if (device->externalSize > 0) + { + /* create the external memory heap */ + status = gckVIDMEM_Construct( + device->os, + device->externalBase, + device->externalSize, + 64, + 0, + &device->externalVidMem + ); + + if (gcmIS_ERROR(status)) + { + /* Error, disable external heap. */ + device->externalSize = 0; + } + else + { + /* Map external memory. */ + gcmkONERROR(gckOS_RequestReservedMemory( + device->os, + device->externalBase, device->externalSize, + "galcore external memory", + gcvTRUE, + &device->externalPhysical + )); + + device->externalVidMem->physical = device->externalPhysical; + } + } + /* Construct the gckDEVICE object for os independent core management. */ gcmkONERROR(gckDEVICE_Construct(device->os, &device->device)); @@ -1589,7 +2171,9 @@ gckGALDEVICE_Construct( device->platform->dev = device->device; - if (device->irqLines[gcvCORE_MAJOR] != -1) + gckOS_QueryOption(device->os, "isrPoll", &isrPolling); + + if (device->irqLines[gcvCORE_MAJOR] != -1 || gcmBITTEST(isrPolling, gcvCORE_MAJOR)!= 0) { gcmkONERROR(gctaOS_ConstructOS(device->os, &device->taos)); } @@ -1597,55 +2181,61 @@ gckGALDEVICE_Construct( /* Setup contiguous video memory pool. */ gcmkONERROR(_SetupContiguousVidMem(device, Args)); - /* Set external base and size */ - device->externalBase = Args->externalBase; - device->externalSize = Args->externalSize; +#if gcdEXTERNAL_SRAM_DEFAULT_POOL + /* Setup external SRAM video memory pool. */ + gcmkONERROR(_SetupExternalSRAMVidMem(device)); +#endif - if (device->irqLines[gcvCORE_MAJOR] != -1) + /* Add core for all available major cores. */ + for (i = gcvCORE_MAJOR; i <= gcvCORE_3D_MAX; i++) { - gcmkONERROR(gcTA_Construct( - device->taos, - gcvCORE_MAJOR, - &globalTA[gcvCORE_MAJOR] - )); + if (device->irqLines[i] != -1 || gcmBITTEST(isrPolling, i)!= 0) + { + gcmkONERROR(gcTA_Construct( + device->taos, + (gceCORE)i, + &globalTA[i] + )); - gcmkONERROR(gckDEVICE_AddCore( - device->device, - gcvCORE_MAJOR, - Args->chipIDs[gcvCORE_MAJOR], - device, - &device->kernels[gcvCORE_MAJOR] - )); + gcmkONERROR(gckDEVICE_AddCore( + device->device, + (gceCORE)i, + Args->chipIDs[i], + device, + &device->kernels[i] + )); - gcmkONERROR(gckHARDWARE_SetFastClear( - device->kernels[gcvCORE_MAJOR]->hardware, - Args->fastClear, - Args->compression - )); + gcmkONERROR(gckHARDWARE_SetFastClear( + device->kernels[i]->hardware, + Args->fastClear, + Args->compression + )); - gcmkONERROR(gckHARDWARE_EnablePowerManagement( - device->kernels[gcvCORE_MAJOR]->hardware, - Args->powerManagement - )); + gcmkONERROR(gckHARDWARE_EnablePowerManagement( + device->kernels[i]->hardware, + Args->powerManagement + )); #if gcdENABLE_FSCALE_VAL_ADJUST - gcmkONERROR(gckHARDWARE_SetMinFscaleValue( - device->kernels[gcvCORE_MAJOR]->hardware, - Args->gpu3DMinClock - )); + gcmkONERROR(gckHARDWARE_SetMinFscaleValue( + device->kernels[i]->hardware, + Args->gpu3DMinClock + )); #endif - gcmkONERROR(gckHARDWARE_SetGpuProfiler( - device->kernels[gcvCORE_MAJOR]->hardware, - Args->gpuProfiler - )); - } - else - { - device->kernels[gcvCORE_MAJOR] = gcvNULL; + gcmkONERROR(gckHARDWARE_SetGpuProfiler( + device->kernels[i]->hardware, + Args->gpuProfiler + )); + } + else + { + device->kernels[i] = gcvNULL; + } } - if (device->irqLines[gcvCORE_2D] != -1) +#if !gcdCAPTURE_ONLY_MODE + if (device->irqLines[gcvCORE_2D] != -1 || gcmBITTEST(isrPolling, gcvCORE_2D)!= 0) { gcmkONERROR(gckDEVICE_AddCore( device->device, @@ -1689,109 +2279,29 @@ gckGALDEVICE_Construct( device->kernels[gcvCORE_2D] = gcvNULL; } - if (device->irqLines[gcvCORE_VG] != -1) + if (device->irqLines[gcvCORE_VG] != -1 || gcmBITTEST(isrPolling, gcvCORE_VG)!= 0) { } else { device->kernels[gcvCORE_VG] = gcvNULL; } +#else + device->kernels[gcvCORE_2D] = gcvNULL; - /* Add core for multiple core. */ - for (i = gcvCORE_3D1; i <= gcvCORE_3D_MAX; i++) - { - if (device->irqLines[i] != -1) - { - gcmkONERROR(gcTA_Construct( - device->taos, - (gceCORE)i, - &globalTA[i] - )); - - gckDEVICE_AddCore( - device->device, - i, - Args->chipIDs[i], - device, - &device->kernels[i] - ); - - gcmkONERROR(gckHARDWARE_SetFastClear( - device->kernels[i]->hardware, - Args->fastClear, - Args->compression - )); - - gcmkONERROR(gckHARDWARE_EnablePowerManagement( - device->kernels[i]->hardware, - Args->powerManagement - )); - - gcmkONERROR(gckHARDWARE_SetGpuProfiler( - device->kernels[i]->hardware, - Args->gpuProfiler - )); - } - } - - /* Setup external SRAM memory region. */ - for (i = 0; i < gcvSRAM_EXT_COUNT; i++) - { - if (!device->extSRAMSizes[i]) - { - /* Keep this path for internal test, read from feature database. */ - device->extSRAMSizes[i] = device->device->extSRAMSizes[i]; - } - - if (device->extSRAMSizes[i] > 0) - { - /* create the external SRAM memory heap */ - status = gckVIDMEM_Construct( - device->os, - device->extSRAMBases[i], - device->extSRAMSizes[i], - 64, - 0, - &device->extSRAMVidMem[i] - ); - - if (gcmIS_ERROR(status)) - { - /* Error, disable external SRAM heap. */ - device->extSRAMSizes[i] = 0; - } - else - { - char sRAMName[20]; - snprintf(sRAMName, gcmSIZEOF(sRAMName) - 1, "Galcore external sram%d", i); - - /* Map external SRAM memory. */ - gcmkONERROR(gckOS_RequestReservedMemory( - device->os, - device->extSRAMBases[i], device->extSRAMSizes[i], - sRAMName, - device->args.sRAMRequested, - &device->extSRAMPhysical[i] - )); - - device->extSRAMVidMem[i]->physical = device->extSRAMPhysical[i]; - device->device->extSRAMPhysical[i] = device->extSRAMPhysical[i]; + device->kernels[gcvCORE_VG] = gcvNULL; +#endif - for (j = 0; j < gcdMAX_GPU_COUNT; j++) - { - if (device->irqLines[j] != -1 && device->kernels[j]) - { - device->kernels[j]->hardware->options.extSRAMGPUPhysNames[i] = gckKERNEL_AllocateNameFromPointer(device->kernels[j], device->extSRAMPhysical[i]); - } - } - } - } - } +#if !gcdEXTERNAL_SRAM_DEFAULT_POOL + /* Setup external SRAM video memory pool. */ + gcmkONERROR(_SetupExternalSRAMVidMem(device)); +#endif /* Initialize the kernel thread semaphores. */ for (i = 0; i < gcdMAX_GPU_COUNT; i++) { - if (device->irqLines[i] != -1 && device->kernels[i]) + if ((device->irqLines[i] != -1 || gcmBITTEST(isrPolling, i)!= 0) + && device->kernels[i]) { sema_init(&device->semas[i], 0); } @@ -1812,39 +2322,6 @@ gckGALDEVICE_Construct( gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - - if (device->externalSize > 0) - { - /* create the external memory heap */ - status = gckVIDMEM_Construct( - device->os, - device->externalBase, - device->externalSize, - 64, - 0, - &device->externalVidMem - ); - - if (gcmIS_ERROR(status)) - { - /* Error, disable external heap. */ - device->externalSize = 0; - } - else - { - /* Map external memory. */ - gcmkONERROR(gckOS_RequestReservedMemory( - device->os, - device->externalBase, device->externalSize, - "galcore external memory", - gcvTRUE, - &device->externalPhysical - )); - - device->externalVidMem->physical = device->externalPhysical; - } - } - if (device->internalPhysical) { device->internalPhysName = gcmPTR_TO_NAME(device->internalPhysical); @@ -1964,6 +2441,22 @@ gckGALDEVICE_Destroy( } } + if (Device->device) + { + gcmkVERIFY_OK(gckDEVICE_Destroy(Device->os, Device->device)); + + for (i = 0; i < gcdMAX_GPU_COUNT; i++) + { + if (globalTA[i]) + { + gcTA_Destroy(globalTA[i]); + globalTA[i] = gcvNULL; + } + } + + Device->device = gcvNULL; + } + for (i = 0; i < gcdMAX_GPU_COUNT; i++) { if (Device->kernels[i] != gcvNULL) @@ -1994,6 +2487,7 @@ gckGALDEVICE_Destroy( Device->os, Device->extSRAMPhysical[i] ); + Device->extSRAMPhysical[i] = gcvNULL; } if (Device->extSRAMVidMem[i] != gcvNULL) @@ -2009,6 +2503,7 @@ gckGALDEVICE_Destroy( Device->os, Device->externalPhysical ); + Device->externalPhysical = gcvNULL; } if (Device->externalLogical != gcvNULL) @@ -2023,22 +2518,6 @@ gckGALDEVICE_Destroy( Device->externalVidMem = gcvNULL; } - if (Device->device) - { - gcmkVERIFY_OK(gckDEVICE_Destroy(Device->os, Device->device)); - - for (i = 0; i < gcdMAX_GPU_COUNT; i++) - { - if (globalTA[i]) - { - gcTA_Destroy(globalTA[i]); - globalTA[i] = gcvNULL; - } - } - - Device->device = gcvNULL; - } - /* * Destroy contiguous memory pool after gckDEVICE destroyed. gckDEVICE * may allocates GPU memory types from SYSTEM pool. @@ -2059,7 +2538,7 @@ gckGALDEVICE_Destroy( Device->os, Device->contiguousPhysical ); - + Device->contiguousPhysical = gcvNULL; Device->requestedContiguousBase = 0; Device->requestedContiguousSize = 0; } @@ -2178,6 +2657,8 @@ gckGALDEVICE_Start( gcmkONERROR(gckHARDWARE_SetPowerState( Device->kernels[i]->hardware, gcvPOWER_OFF_BROADCAST )); + + gcmkONERROR(gckHARDWARE_StartTimerReset(Device->kernels[i]->hardware)); } } @@ -2238,6 +2719,8 @@ gckGALDEVICE_Stop( gcmkONERROR(gckHARDWARE_SetPowerState( Device->kernels[i]->hardware, gcvPOWER_OFF )); + + gckHARDWARE_StartTimerReset(Device->kernels[i]->hardware); } /* Stop the ISR routine. */ diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.h index 4d96458bbbe235..d5ebe818fc6727 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_device.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -106,6 +106,8 @@ typedef struct _gckGALDEVICE /* IRQ management. */ gctINT irqLines[gcdMAX_GPU_COUNT]; gctBOOL isrInitializeds[gcdMAX_GPU_COUNT]; + struct task_struct *isrThread[gcdMAX_GPU_COUNT]; + gctBOOL killIsrThread; /* Register memory. */ gctPOINTER registerBases[gcdMAX_GPU_COUNT]; diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_driver.c index 300426a20f7e76..bcb2cf041c9f09 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_driver.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_driver.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -59,7 +59,7 @@ #include #include "gc_hal_kernel_linux.h" -#include "gc_hal_driver.h" +#include "shared/gc_hal_driver.h" #include @@ -153,6 +153,13 @@ module_param(externalBase, ulong, 0644); #endif MODULE_PARM_DESC(externalBase, "Base address of external memory"); +static ulong exclusiveSize = 0; +module_param(exclusiveSize, ulong, 0644); +MODULE_PARM_DESC(exclusiveSize, "Size of exclusiveSize memory, if it is 0, means there is no exclusive pool"); + +static ulong exclusiveBase = 0; +module_param(exclusiveBase, ulong, 0644); +MODULE_PARM_DESC(exclusiveBase, "Base address of exclusive memory(GPU access only)"); static int fastClear = -1; module_param(fastClear, int, 0644); @@ -219,10 +226,14 @@ static int userClusterMask = 0; module_param(userClusterMask, int, 0644); MODULE_PARM_DESC(userClusterMask, "User defined cluster enable mask"); +/* GPU small batch feature. */ static int smallBatch = 1; module_param(smallBatch, int, 0644); -MODULE_PARM_DESC(smallBatch, "Enable/disable small batch"); +MODULE_PARM_DESC(smallBatch, "Enable/disable GPU small batch feature, enable by default"); +static int allMapInOne = 1; +module_param(allMapInOne, int, 0644); +MODULE_PARM_DESC(allMapInOne, "Mapping kernel video memory to user, 0 means mapping every time, otherwise only mapping one time"); /******************************************************************************* ***************************** SRAM description ********************************* *******************************************************************************/ @@ -255,10 +266,22 @@ static uint sRAMRequested = 1; module_param(sRAMRequested, uint, 0644); MODULE_PARM_DESC(sRAMRequested, "Default 1 means AXI-SRAM is already reserved for GPU, 0 means GPU driver need request the memory region."); +static uint mmuPageTablePool = 1; +module_param(mmuPageTablePool, uint, 0644); +MODULE_PARM_DESC(mmuPageTablePool, "Default 1 means alloc mmu page table in virsual memory, 0 means auto select memory pool."); + static uint sRAMLoopMode = 0; module_param(sRAMLoopMode, uint, 0644); MODULE_PARM_DESC(sRAMLoopMode, "Default 0 means SRAM pool must be specified when allocating SRAM memory, 1 means SRAM memory will be looped as default pool."); +static uint mmuDynamicMap = 1; +module_param(mmuDynamicMap, uint, 0644); +MODULE_PARM_DESC(mmuDynamicMap, "Default 1 means enable mmu dynamic mapping in virsual memory, 0 means disable dynnamic mapping."); + +static uint isrPoll = 0; +module_param(isrPoll, uint, 0644); +MODULE_PARM_DESC(isrPoll, "Bits isr polling for per-core, default 0'1b means disable, 1'1b means auto enable isr polling mode"); + #if USE_LINUX_PCIE static int bar = 1; module_param(bar, int, 0644); @@ -281,11 +304,6 @@ module_param_array(sRAMOffsets, int, NULL, 0644); MODULE_PARM_DESC(sRAMOffsets, "Array of SRAM offset inside bar of shared external SRAMs."); #endif -static uint mmuPageTablePool = 1; -module_param(mmuPageTablePool, uint, 0644); -MODULE_PARM_DESC(mmuPageTablePool, "Default 1 means alloc mmu page table in virsual memory, 0 means auto select memory pool."); - - static int gpu3DMinClock = 1; static int contiguousRequested = 0; static ulong bankSize = 0; @@ -415,6 +433,12 @@ _InitModuleParam( p->deviceType = type; p->showArgs = showArgs; + p->mmuPageTablePool = mmuPageTablePool; + + p->mmuDynamicMap = mmuDynamicMap; + p->allMapInOne = allMapInOne; + + p->isrPoll = isrPoll; #if !gcdENABLE_3D p->irqs[gcvCORE_MAJOR] = irqLine = -1; p->registerBases[gcvCORE_MAJOR] = registerMemBase = 0; @@ -471,8 +495,14 @@ _SyncModuleParam( p->chipIDs[i] = chipIDs[i]; } - contiguousBase = (ulong)p->contiguousBase; - contiguousSize = (ulong)p->contiguousSize; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0) + contiguousBase = p->contiguousBase; + contiguousSize = p->contiguousSize; +#else + contiguousBase = (ulong)p->contiguousBase; + contiguousSize = (ulong)p->contiguousSize; +#endif + contiguousRequested = p->contiguousRequested; /* not a module param. */ externalBase = p->externalBase; @@ -520,6 +550,11 @@ _SyncModuleParam( type = p->deviceType; showArgs = p->showArgs; + + mmuPageTablePool = p->mmuDynamicMap; + mmuDynamicMap = p->mmuDynamicMap; + allMapInOne = p->allMapInOne; + isrPoll = p->isrPoll; } void @@ -583,7 +618,8 @@ gckOS_DumpParam( printk(" stuckDump = %d\n", stuckDump); printk(" gpuProfiler = %d\n", gpuProfiler); printk(" userClusterMask = 0x%x\n", userClusterMask); - printk(" smallBatch = %d\n", smallBatch); + printk(" GPU smallBatch = %d\n", smallBatch); + printk(" allMapInOne = %d\n", allMapInOne); printk(" irqs = "); for (i = 0; i < gcvCORE_COUNT; i++) @@ -647,6 +683,10 @@ gckOS_DumpParam( } printk("\n"); + printk(" mmuPageTablePool = %d\n", mmuPageTablePool); + printk(" mmuDynamicMap = %d\n", mmuDynamicMap); + printk(" isrPoll = 0x%08X\n", isrPoll); + printk("Build options:\n"); printk(" gcdGPU_TIMEOUT = %d\n", gcdGPU_TIMEOUT); printk(" gcdGPU_2D_TIMEOUT = %d\n", gcdGPU_2D_TIMEOUT); @@ -950,15 +990,14 @@ static struct miscdevice gal_device = { static int drv_init(void) { - int ret = -EINVAL; + int result = -EINVAL; gceSTATUS status; gckGALDEVICE device = gcvNULL; struct class* device_class = gcvNULL; gcmkHEADER(); - printk("Galcore version %d.%d.%d.%d\n", - gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD); + printk(KERN_INFO "Galcore version %s\n", gcvVERSION_STRING); if (showArgs) { @@ -994,7 +1033,9 @@ static int drv_init(void) if (type == 1) { /* Register as misc driver. */ - if (misc_register(&gal_device) < 0) + result = misc_register(&gal_device); + + if (result < 0) { gcmkTRACE_ZONE( gcvLEVEL_ERROR, gcvZONE_DRIVER, @@ -1008,7 +1049,7 @@ static int drv_init(void) else { /* Register the character device. */ - int result = register_chrdev(major, DEVICE_NAME, &driver_fops); + result = register_chrdev(major, DEVICE_NAME, &driver_fops); if (result < 0) { @@ -1057,27 +1098,39 @@ static int drv_init(void) ); /* Success. */ - ret = 0; + gcmkFOOTER(); + return 0; OnError: - if (ret) + /* Roll back. */ + if (device_class) { - /* Roll back. */ - if (device_class) + device_destroy(device_class, MKDEV(major, 0)); + class_destroy(device_class); + } + + if (result < 0) + { + if (type == 1) { - device_destroy(device_class, MKDEV(major, 0)); - class_destroy(device_class); + misc_deregister(&gal_device); } - - if (device) + else { - gcmkVERIFY_OK(gckGALDEVICE_Stop(device)); - gcmkVERIFY_OK(gckGALDEVICE_Destroy(device)); + unregister_chrdev(result, DEVICE_NAME); } } + if (device) + { + gcmkVERIFY_OK(gckGALDEVICE_Stop(device)); + gcmkVERIFY_OK(gckGALDEVICE_Destroy(device)); + } + + galcore_device->dma_mask = NULL; + galcore_device = NULL; gcmkFOOTER(); - return ret; + return result; } static void drv_exit(void) @@ -1117,24 +1170,39 @@ static int __devinit gpu_probe(struct platform_device *pdev) #endif { int ret = -ENODEV; + bool getPowerFlag = gcvFALSE; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24) static u64 dma_mask = DMA_BIT_MASK(40); #else static u64 dma_mask = DMA_40BIT_MASK; #endif +#if gcdCAPTURE_ONLY_MODE + gctPHYS_ADDR_T contiguousBaseCap = 0; + gctSIZE_T contiguousSizeCap = 0; + gctPHYS_ADDR_T sRAMBaseCap[gcvCORE_COUNT][gcvSRAM_INTER_COUNT]; + gctUINT32 sRAMSizeCap[gcvCORE_COUNT][gcvSRAM_INTER_COUNT]; + gctPHYS_ADDR_T extSRAMBaseCap[gcvSRAM_EXT_COUNT]; + gctUINT32 extSRAMSizeCap[gcvSRAM_EXT_COUNT]; + gctUINT i = 0, j = 0; +#endif + gcmkHEADER(); - if (get_nna_status(pdev) == gcvSTATUS_MISMATCH) - { - printk("nn is disable,should not do probe continue\n"); - return ret; - } + + if (get_nna_status(pdev) == gcvSTATUS_MISMATCH) + { + printk("nn is disable,should not do probe continue\n"); + return ret; + } + platform->device = pdev; galcore_device = &pdev->dev; galcore_device->dma_mask = &dma_mask; - galcore_device->coherent_dma_mask = dma_mask; +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) + galcore_device->coherent_dma_mask = dma_mask; +#endif if (platform->ops->getPower) { @@ -1143,17 +1211,64 @@ static int __devinit gpu_probe(struct platform_device *pdev) gcmkFOOTER_NO(); return ret; } + getPowerFlag = gcvTRUE; } /* Gather module parameters. */ _InitModuleParam(&moduleParam); +#if gcdCAPTURE_ONLY_MODE + contiguousBaseCap = moduleParam.contiguousBase; + contiguousSizeCap = moduleParam.contiguousSize; + + gcmkPRINT("Capture only mode is enabled in Hal Kernel."); + + if ((contiguousBaseCap + contiguousSizeCap) > 0x80000000) + { + gcmkPRINT("Capture only mode: contiguousBase + contiguousSize > 2G, there is error in CModel and old MMU version RTL simulation."); + } + + for (i = 0; i < gcvCORE_COUNT; i++) + { + for (j = 0; j < gcvSRAM_INTER_COUNT; j++) + { + sRAMBaseCap[i][j] = moduleParam.sRAMBases[i][j]; + sRAMSizeCap[i][j] = moduleParam.sRAMSizes[i][j]; + } + } + + for (i = 0; i < gcvSRAM_EXT_COUNT; i++) + { + extSRAMBaseCap[i] = moduleParam.extSRAMBases[i]; + extSRAMSizeCap[i] = moduleParam.extSRAMSizes[i]; + } +#endif + if (platform->ops->adjustParam) { /* Override default module param. */ platform->ops->adjustParam(platform, &moduleParam); } +#if gcdCAPTURE_ONLY_MODE + moduleParam.contiguousBase = contiguousBaseCap; + moduleParam.contiguousSize = contiguousSizeCap; + + for (i = 0; i < gcvCORE_COUNT; i++) + { + for (j = 0; j < gcvSRAM_INTER_COUNT; j++) + { + moduleParam.sRAMBases[i][j] = sRAMBaseCap[i][j]; + moduleParam.sRAMSizes[i][j] = sRAMSizeCap[i][j]; + } + } + + for (i = 0; i < gcvSRAM_EXT_COUNT; i++) + { + moduleParam.extSRAMBases[i] = extSRAMBaseCap[i]; + moduleParam.extSRAMSizes[i] = extSRAMSizeCap[i]; + } +#endif /* Update module param because drv_init() uses them directly. */ _SyncModuleParam(&moduleParam); @@ -1170,6 +1285,14 @@ static int __devinit gpu_probe(struct platform_device *pdev) if (ret < 0) { + if(platform->ops->putPower) + { + if(getPowerFlag == gcvTRUE) + { + platform->ops->putPower(platform); + } + } + gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret); } else @@ -1384,4 +1507,5 @@ static void __exit gpu_exit(void) } module_init(gpu_init); + module_exit(gpu_exit); diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_drm.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_drm.c index 23d0f4c5e87861..df10d7e2d38e14 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_drm.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_drm.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -75,10 +75,17 @@ struct viv_gem_object { gctBOOL cacheable; }; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,4,0) +struct dma_buf *viv_gem_prime_export(struct drm_gem_object *gem_obj, + int flags) +{ + struct drm_device *drm = gem_obj->dev; +#else struct dma_buf *viv_gem_prime_export(struct drm_device *drm, struct drm_gem_object *gem_obj, int flags) { +#endif struct viv_gem_object *viv_obj = container_of(gem_obj, struct viv_gem_object, base); struct dma_buf *dmabuf = gcvNULL; gckGALDEVICE gal_dev = (gckGALDEVICE)drm->dev_private; @@ -586,7 +593,7 @@ static int viv_ioctl_gem_attach_aux(struct drm_device *drm, void *data, /* Fill tile status node with tileStatusFiller. */ memset(entry , tileStatusFiller , (__u64)gem_ts_obj->size); - gcmkONERROR(gckVIDMEM_NODE_UnlockCPU(kernel, ObjNode, 0, gcvFALSE)); + gcmkONERROR(gckVIDMEM_NODE_UnlockCPU(kernel, ObjNode, 0, gcvFALSE, gcvFALSE)); /* UnLock tile status node. */ memset(&iface, 0, sizeof(iface)); @@ -772,7 +779,11 @@ static const struct file_operations viv_drm_fops = { }; static struct drm_driver viv_drm_driver = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,4,0) + .driver_features = DRIVER_GEM | DRIVER_RENDER, +#else .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER, +#endif .open = viv_drm_open, .postclose = viv_drm_postclose, #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_iommu.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_iommu.c index ae86dd24f8cf2e..36be9bbe483bdc 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_iommu.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_iommu.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.c index 343f0f7d87e33a..2c516645bf7118 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -268,6 +268,92 @@ gckKERNEL_UnmapMemory( return gckOS_UnmapMemoryEx(Kernel->os, physical, Bytes, Logical, ProcessID); } +/**************************************************************************** +** +** gckKERNEL_DestroyProcessReservedUserMap +** +** Destroy process reserved memory +** +** INPUT: +** +** gctPHYS_ADDR Physical +** Physical address of video memory to map. +** +** gctUINT32 Pid +** Process ID. +*/ +gceSTATUS +gckKERNEL_DestroyProcessReservedUserMap( + IN gckKERNEL Kernel, + IN gctUINT32 Pid + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE device = gcvNULL; + gctSIZE_T bytes = 0; + gctPHYS_ADDR physHandle = gcvNULL; + /* when unmap reserved memory, we don't need real logical*/ + gctPOINTER Logical = (gctPOINTER)0xFFFFFFFF; + gctINT i; + gcmkHEADER_ARG("Logical=0x%08x pid=%u", + Logical, Pid); + /* Verify the arguments. */ + gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL); + /* Extract the pointer to the gckGALDEVICE class. */ + device = (gckGALDEVICE) Kernel->context; + + physHandle = (PLINUX_MDL)device->internalPhysical; + bytes = device->internalSize; + if (bytes) + { + gckOS_UnmapMemoryEx(Kernel->os, physHandle, bytes, Logical, Pid); + } + + physHandle = (PLINUX_MDL)device->externalPhysical; + bytes = device->externalSize; + if (bytes) + { + gckOS_UnmapMemoryEx(Kernel->os, physHandle, bytes, Logical, Pid); + } + + /* System memory. */ + physHandle = (PLINUX_MDL)device->contiguousPhysical; + bytes = device->contiguousSize; + if (bytes) + { + gckOS_UnmapMemoryEx(Kernel->os, physHandle, bytes, Logical, Pid); + } + + /* External shared SRAM memory. */ + for(i = 0; i < gcvSRAM_EXT_COUNT; i++) + { + physHandle = (PLINUX_MDL)device->extSRAMPhysical[i]; + bytes = device->extSRAMSizes[i]; + if (bytes) + { + gckOS_UnmapMemoryEx(Kernel->os, physHandle, bytes, Logical, Pid); + } + } + + /* Per core SRAM reserved usage. */ + for(i = 0; i < gcvSRAM_INTER_COUNT; i++) + { + if (!Kernel->sRAMPhysFaked[i]) + { + physHandle = (PLINUX_MDL)Kernel->sRAMPhysical[i]; + bytes = Kernel->sRAMSizes[i]; + if (bytes) + { + gckOS_UnmapMemoryEx(Kernel->os, physHandle, bytes, Logical, Pid); + } + } + } + + /* Retunn the status. */ + gcmkFOOTER_NO(); + return status; +} + /******************************************************************************* ** ** gckKERNEL_MapVideoMemory @@ -303,6 +389,7 @@ gckKERNEL_MapVideoMemory( IN gckKERNEL Kernel, IN gctBOOL InUserSpace, IN gcePOOL Pool, + IN gctPHYS_ADDR Physical, IN gctUINT32 Offset, IN gctUINT32 Bytes, OUT gctPOINTER * Logical @@ -313,6 +400,7 @@ gckKERNEL_MapVideoMemory( gctPHYS_ADDR physHandle = gcvNULL; gceSTATUS status = gcvSTATUS_OK; gctPOINTER logical = gcvNULL; + gctUINT64 mappingInOne = 1; gcmkHEADER_ARG("Kernel=%p InUserSpace=%d Pool=%d Offset=%X Bytes=%X", Kernel, InUserSpace, Pool, Offset, Bytes); @@ -321,67 +409,205 @@ gckKERNEL_MapVideoMemory( gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL); gcmkVERIFY_ARGUMENT(Logical != NULL); - /* Extract the pointer to the gckGALDEVICE class. */ - device = (gckGALDEVICE) Kernel->context; - - /* Dispatch on pool. */ - switch (Pool) + if (Physical) { - case gcvPOOL_LOCAL_INTERNAL: - physHandle = (PLINUX_MDL)device->internalPhysical; - bytes = device->internalSize; - break; + gcmkONERROR(gckOS_QueryOption(Kernel->os, "allMapInOne", &mappingInOne)); + } - case gcvPOOL_LOCAL_EXTERNAL: - physHandle = (PLINUX_MDL)device->externalPhysical; - bytes = device->externalSize; - break; + if (mappingInOne) + { + /* Extract the pointer to the gckGALDEVICE class. */ + device = (gckGALDEVICE) Kernel->context; - case gcvPOOL_SYSTEM: - /* System memory. */ - physHandle = (PLINUX_MDL)device->contiguousPhysical; - bytes = device->contiguousSize; - break; + /* Dispatch on pool. */ + switch (Pool) + { + case gcvPOOL_LOCAL_INTERNAL: + physHandle = (PLINUX_MDL)device->internalPhysical; + bytes = device->internalSize; + break; - case gcvPOOL_EXTERNAL_SRAM: - /* External shared SRAM memory. */ - physHandle = (PLINUX_MDL)device->extSRAMPhysical[Kernel->extSRAMIndex]; - bytes = device->extSRAMSizes[Kernel->extSRAMIndex]; - break; + case gcvPOOL_LOCAL_EXTERNAL: + physHandle = (PLINUX_MDL)device->externalPhysical; + bytes = device->externalSize; + break; - case gcvPOOL_INTERNAL_SRAM: - /* Per core SRAM reserved usage. */ - if (Kernel->sRAMPhysFaked[Kernel->sRAMIndex]) - { - *Logical = gcvNULL; + case gcvPOOL_SYSTEM: + /* System memory. */ + physHandle = (PLINUX_MDL)device->contiguousPhysical; + bytes = device->contiguousSize; + break; - gcmkFOOTER_NO(); - return gcvSTATUS_OK; - } - /* Per core SRAM memory block. */ - else - { - physHandle = (PLINUX_MDL)Kernel->sRAMPhysical[Kernel->sRAMIndex]; - bytes = Kernel->sRAMSizes[Kernel->sRAMIndex]; + case gcvPOOL_EXTERNAL_SRAM: + /* External shared SRAM memory. */ + physHandle = (PLINUX_MDL)device->extSRAMPhysical[Kernel->extSRAMIndex]; + bytes = device->extSRAMSizes[Kernel->extSRAMIndex]; break; + + case gcvPOOL_INTERNAL_SRAM: + /* Per core SRAM reserved usage. */ + if (Kernel->sRAMPhysFaked[Kernel->sRAMIndex]) + { + *Logical = gcvNULL; + + gcmkFOOTER_NO(); + return gcvSTATUS_OK; + } + /* Per core SRAM memory block. */ + else + { + physHandle = (PLINUX_MDL)Kernel->sRAMPhysical[Kernel->sRAMIndex]; + bytes = Kernel->sRAMSizes[Kernel->sRAMIndex]; + break; + } + + default: + /* Invalid memory pool. */ + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - default: - /* Invalid memory pool. */ - gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + else + { + physHandle = (PLINUX_MDL)Physical; + bytes = Bytes; + Offset = 0; } - gcmkONERROR(gckOS_MapMemory(Kernel->os, physHandle, bytes, &logical)); - + gcmkONERROR(gckOS_LockPages(Kernel->os, physHandle, bytes, gcvFALSE, &logical)); /* Build logical address of specified address. */ *Logical = (gctPOINTER)((gctUINT8_PTR)logical + Offset); - OnError: /* Retunn the status. */ gcmkFOOTER_ARG("*Logical=%p", gcmOPT_POINTER(Logical)); return status; } + +/******************************************************************************* +** +** gckKERNEL_UnmapVideoMemory +** +** Unmap video memory for the current process. +** +** INPUT: +** +** gckKERNEL Kernel +** Pointer to an gckKERNEL object. +** +** gcePOOL Pool +** Specify pool type. + +** gctUINT32 Address +** Hardware specific memory address. +** +** gctUINT32 Pid +** Process ID of the current process. +** +** gctSIZE_T Bytes +** Number of bytes to map. +** +** OUTPUT: +** +** Nothing. +*/ +gceSTATUS +gckKERNEL_UnmapVideoMemory( + IN gckKERNEL Kernel, + IN gcePOOL Pool, + IN gctPHYS_ADDR Physical, + IN gctPOINTER Logical, + IN gctUINT32 Pid, + IN gctSIZE_T Bytes + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gckGALDEVICE device = gcvNULL; + gctSIZE_T bytes = 0; + gctPHYS_ADDR physHandle = gcvNULL; + gctUINT64 mappingInOne = 1; + + gcmkHEADER_ARG("Logical=0x%08x pid=%u Bytes=%u", + Logical, Pid, Bytes); + + /* Verify the arguments. */ + gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL); + + if (Logical == gcvNULL) + { + return gcvSTATUS_OK; + } + + if (Physical) + { + gcmkONERROR(gckOS_QueryOption(Kernel->os, "allMapInOne", &mappingInOne)); + } + + if (mappingInOne) + { + /* Extract the pointer to the gckGALDEVICE class. */ + device = (gckGALDEVICE) Kernel->context; + + /* Dispatch on pool. */ + switch (Pool) + { + case gcvPOOL_LOCAL_INTERNAL: + physHandle = (PLINUX_MDL)device->internalPhysical; + bytes = device->internalSize; + break; + + case gcvPOOL_LOCAL_EXTERNAL: + physHandle = (PLINUX_MDL)device->externalPhysical; + bytes = device->externalSize; + break; + + case gcvPOOL_SYSTEM: + /* System memory. */ + physHandle = (PLINUX_MDL)device->contiguousPhysical; + bytes = device->contiguousSize; + break; + + case gcvPOOL_EXTERNAL_SRAM: + /* External shared SRAM memory. */ + physHandle = (PLINUX_MDL)device->extSRAMPhysical[Kernel->extSRAMIndex]; + bytes = device->extSRAMSizes[Kernel->extSRAMIndex]; + break; + + case gcvPOOL_INTERNAL_SRAM: + /* Per core SRAM reserved usage. */ + if (Kernel->sRAMPhysFaked[Kernel->sRAMIndex]) + { + gcmkFOOTER_NO(); + return gcvSTATUS_OK; + } + /* Per core SRAM memory block. */ + else + { + physHandle = (PLINUX_MDL)Kernel->sRAMPhysical[Kernel->sRAMIndex]; + bytes = Kernel->sRAMSizes[Kernel->sRAMIndex]; + break; + } + + default: + /* Invalid memory pool. */ + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + } + else + { + physHandle = (PLINUX_MDL)Physical; + bytes = Bytes; + } + + gcmkONERROR(gckOS_UnlockPages(Kernel->os, physHandle, bytes, Logical)); + +OnError: + /* Retunn the status. */ + gcmkFOOTER_NO(); + return status; + +} + /******************************************************************************* ** ** gckKERNEL_Notify diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.h index bfad0c58c02ef7..1e3ca19b477a80 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_linux.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -86,7 +86,7 @@ #define NTSTRSAFE_NO_CCH_FUNCTIONS #include "gc_hal.h" -#include "gc_hal_driver.h" +#include "shared/gc_hal_driver.h" #include "gc_hal_kernel.h" #include "gc_hal_kernel_platform.h" #include "gc_hal_kernel_device.h" @@ -165,8 +165,7 @@ #endif -gceSTATUS get_nna_status(struct platform_device *dev); - +int get_nna_status(struct platform_device *dev); extern struct device *galcore_device; /******************************************************************************\ diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_math.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_math.c index 3e72ea317bdfbf..b0c62bfa2c87fc 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_math.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_math.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_mutex.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_mutex.h index b2d9e6c5b65d9b..9f83847cf17344 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_mutex.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_mutex.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.c index 1e073c90f93858..16a932f6a432de 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -83,10 +83,6 @@ #include #endif -#if defined(CONFIG_ARM) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) -#include -#endif - #define _GC_OBJ_ZONE gcvZONE_OS #include "gc_hal_kernel_allocator.h" @@ -236,9 +232,9 @@ _DestroyMdl( { if (Mdl->addr) { - allocator->ops->UnmapKernel(allocator, Mdl, Mdl->addr); + gcmALLOCATOR_UnmapKernel(allocator, Mdl, Mdl->addr); } - allocator->ops->Free(allocator, Mdl); + gcmALLOCATOR_Free(allocator, Mdl); } mutex_lock(&Mdl->mapsMutex); @@ -875,7 +871,7 @@ gckOS_CreateKernelMapping( } else { - gcmkONERROR(allocator->ops->MapKernel(allocator, mdl, Offset, Bytes, Logical)); + gcmkONERROR(gcmALLOCATOR_MapKernel(allocator, mdl, Offset, Bytes, Logical)); } OnError: @@ -901,7 +897,7 @@ gckOS_DestroyKernelMapping( } else { - allocator->ops->UnmapKernel(allocator, mdl, Logical); + gcmALLOCATOR_UnmapKernel(allocator, mdl, Logical); } gcmkFOOTER_NO(); @@ -1156,10 +1152,7 @@ gckOS_MapMemory( { allocator = mdl->allocator; - gcmkONERROR( - allocator->ops->MapUser(allocator, - mdl, mdlMap, - gcvFALSE)); + gcmkONERROR(gcmALLOCATOR_MapUser(allocator, mdl, mdlMap, gcvFALSE)); } mutex_unlock(&mdl->mapsMutex); @@ -1282,15 +1275,17 @@ gckOS_UnmapMemoryEx( mdlMap = FindMdlMap(mdl, PID); - if (mdlMap == gcvNULL || mdlMap->vmaAddr == gcvNULL) + if (mdlMap == gcvNULL) { mutex_unlock(&mdl->mapsMutex); gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } - BUG_ON(!allocator || !allocator->ops->UnmapUser); - - allocator->ops->UnmapUser(allocator, mdl, mdlMap, mdl->bytes); + if (mdlMap->vmaAddr != gcvNULL) + { + BUG_ON(!allocator || !allocator->ops->UnmapUser); + gcmALLOCATOR_UnmapUser(allocator, mdl, mdlMap, mdl->bytes); + } gcmkVERIFY_OK(_DestroyMdlMap(mdl, mdlMap)); @@ -1390,15 +1385,7 @@ gckOS_AllocateNonPagedMemory( if (!strcmp(allocator->name, "dma") || ((Flag & allocator->capability) == Flag && numPages == 1)) { - /*!VIV: - * For historical issue, we force allocate all non-paged memory from - * dma coherent pool when it is not disabled. - * - * The code here changes the scheme a little: can try other - * allocators when page count is 1. This is to save memory usage of - * dma coherent pool. - */ - status = allocator->ops->Alloc(allocator, mdl, numPages, Flag); + status = gcmALLOCATOR_Alloc(allocator, mdl, numPages, Flag); if (gcmIS_SUCCESS(status)) { @@ -1409,7 +1396,7 @@ gckOS_AllocateNonPagedMemory( #else if ((Flag & allocator->capability) == Flag) { - status = allocator->ops->Alloc(allocator, mdl, numPages, Flag); + status = gcmALLOCATOR_Alloc(allocator, mdl, numPages, Flag); if (gcmIS_SUCCESS(status)) { @@ -1430,7 +1417,7 @@ gckOS_AllocateNonPagedMemory( mdl->contiguous = gcvTRUE; - gcmkONERROR(allocator->ops->MapKernel(allocator, mdl, 0, bytes, &addr)); + gcmkONERROR(gcmALLOCATOR_MapKernel(allocator, mdl, 0, bytes, &addr)); if (!strcmp(allocator->name, "gfp")) { @@ -1449,7 +1436,7 @@ gckOS_AllocateNonPagedMemory( gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } - gcmkONERROR(allocator->ops->MapUser(allocator, mdl, mdlMap, gcvFALSE)); + gcmkONERROR(gcmALLOCATOR_MapUser(allocator, mdl, mdlMap, gcvFALSE)); *Logical = mdlMap->vmaAddr; } @@ -1603,7 +1590,7 @@ gckOS_RequestReservedMemory( } /* Call attach. */ - gcmkONERROR(allocator->ops->Attach(allocator, &desc, mdl)); + gcmkONERROR(gcmALLOCATOR_Attach(allocator, &desc, mdl)); /* Assign alloator. */ mdl->allocator = allocator; @@ -1644,15 +1631,12 @@ gckOS_ReleaseReservedMemory( gctPOINTER MemoryHandle ) { - gckALLOCATOR allocator; PLINUX_MDL mdl = (PLINUX_MDL)MemoryHandle; - allocator = _FindAllocator(Os, gcvALLOC_FLAG_LINUX_RESERVED_MEM); - - /* If no allocator, how comes the memory? */ - BUG_ON(!allocator); - - allocator->ops->Free(allocator, mdl); + if (mdl) + { + gcmkVERIFY_OK(_DestroyMdl(mdl)); + } } /******************************************************************************* @@ -2079,7 +2063,7 @@ gckOS_GetPhysicalFromHandle( PLINUX_MDL mdl = (PLINUX_MDL)Physical; gckALLOCATOR allocator = mdl->allocator; - return allocator->ops->Physical(allocator, mdl, Offset, PhysicalAddress); + return gcmALLOCATOR_Physical(allocator, mdl, Offset, PhysicalAddress); } @@ -2148,7 +2132,7 @@ _ConvertLogical2Physical( { offset = (gctINT8_PTR) Logical - vBase; - allocator->ops->Physical(allocator, Mdl, offset, Physical); + gcmALLOCATOR_Physical(allocator, Mdl, offset, Physical); status = gcvSTATUS_OK; } @@ -2277,8 +2261,11 @@ gckOS_MapPhysical( { /* Map memory as cached memory. */ request_mem_region(physical, Bytes, "MapRegion"); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0) + logical = (gctPOINTER) ioremap(physical, Bytes); +#else logical = (gctPOINTER) ioremap_nocache(physical, Bytes); - +#endif if (logical == gcvNULL) { gcmkTRACE_ZONE( @@ -3108,7 +3095,7 @@ gckOS_AllocatePagedMemory( gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY); } -#if defined(CONFIG_ZONE_DMA32) +#if defined(CONFIG_ZONE_DMA32) || defined(CONFIG_ZONE_DMA) #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) zoneDMA32 = gcvTRUE; #endif @@ -3131,7 +3118,7 @@ gckOS_AllocatePagedMemory( continue; } - status = allocator->ops->Alloc(allocator, mdl, numPages, Flag); + status = gcmALLOCATOR_Alloc(allocator, mdl, numPages, Flag); if (gcmIS_SUCCESS(status)) { @@ -3296,7 +3283,7 @@ gckOS_LockPages( if (mdlMap->vmaAddr == gcvNULL) { - gcmkONERROR(allocator->ops->MapUser(allocator, mdl, mdlMap, Cacheable)); + gcmkONERROR(gcmALLOCATOR_MapUser(allocator, mdl, mdlMap, Cacheable)); } mdlMap->count++; @@ -3383,7 +3370,7 @@ gckOS_MapPagesEx( gctUINT i; gctPHYS_ADDR_T phys = ~0U; - allocator->ops->Physical(allocator, mdl, offset, &phys); + gcmALLOCATOR_Physical(allocator, mdl, offset, &phys); gcmkVERIFY_OK(gckOS_CPUPhysicalToGPUPhysical(Os, phys, &phys)); @@ -3556,7 +3543,7 @@ gckOS_Map1MPages( { gctPHYS_ADDR_T phys = ~0U; - allocator->ops->Physical(allocator, mdl, offset, &phys); + gcmALLOCATOR_Physical(allocator, mdl, offset, &phys); gcmkVERIFY_OK(gckOS_CPUPhysicalToGPUPhysical(Os, phys, &phys)); @@ -3672,7 +3659,7 @@ gckOS_UnlockPages( { if (--mdlMap->count == 0) { - allocator->ops->UnmapUser( + gcmALLOCATOR_UnmapUser( allocator, mdl, mdlMap, @@ -4083,7 +4070,10 @@ gckOS_SuspendInterruptEx( /* Verify the arguments. */ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS); - disable_irq(Os->device->irqLines[Core]); + if (Os->device->irqLines[Core] != -1) + { + disable_irq(Os->device->irqLines[Core]); + } gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -4108,7 +4098,10 @@ gckOS_ResumeInterruptEx( /* Verify the arguments. */ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS); - enable_irq(Os->device->irqLines[Core]); + if (Os->device->irqLines[Core] != -1) + { + enable_irq(Os->device->irqLines[Core]); + } gcmkFOOTER_NO(); return gcvSTATUS_OK; @@ -4193,7 +4186,7 @@ _CacheOperation( if ((!ProcessID && mdl->cacheable) || (mdlMap && mdlMap->cacheable)) { - allocator->ops->Cache(allocator, + gcmALLOCATOR_Cache(allocator, mdl, Offset, Logical, Bytes, Operation); return gcvSTATUS_OK; @@ -5140,10 +5133,15 @@ gckOS_GetProfileTick( OUT gctUINT64_PTR Tick ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0) + struct timespec64 time; + + ktime_get_ts64(&time); +#else struct timespec time; ktime_get_ts(&time); - +#endif *Tick = time.tv_nsec + time.tv_sec * 1000000000ULL; return gcvSTATUS_OK; @@ -5154,7 +5152,11 @@ gckOS_QueryProfileTickRate( OUT gctUINT64_PTR TickRate ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0) + struct timespec64 res; +#else struct timespec res; +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) res.tv_sec = 0; @@ -6789,7 +6791,7 @@ gckOS_AllocatePageArray( gctPHYS_ADDR_T phys_addr; - allocator->ops->Physical(allocator, mdl, offset * PAGE_SIZE, &phys_addr); + gcmALLOCATOR_Physical(allocator, mdl, offset * PAGE_SIZE, &phys_addr); phys = (unsigned long)phys_addr; @@ -6810,7 +6812,7 @@ gceSTATUS gckOS_CPUPhysicalToGPUPhysical( IN gckOS Os, IN gctPHYS_ADDR_T CPUPhysical, - IN gctPHYS_ADDR_T * GPUPhysical + OUT gctPHYS_ADDR_T * GPUPhysical ) { gcsPLATFORM * platform; @@ -6991,6 +6993,22 @@ gckOS_QueryOption( { *Value = device->platform->flagBits; } + else if (!strcmp(Option, "mmuPageTablePool")) + { + *Value = device->args.mmuPageTablePool; + } + else if (!strcmp(Option, "mmuDynamicMap")) + { + *Value = device->args.mmuDynamicMap; + } + else if (!strcmp(Option, "allMapInOne")) + { + *Value = device->args.allMapInOne; + } + else if (!strcmp(Option, "isrPoll")) + { + *Value = device->args.isrPoll; + } else { status = gcvSTATUS_NOT_SUPPORTED; @@ -7027,7 +7045,7 @@ gckOS_MemoryGetSGT( if (Bytes > 0) { - gcmkONERROR(allocator->ops->GetSGT(allocator, mdl, Offset, Bytes, SGT)); + gcmkONERROR(gcmALLOCATOR_GetSGT(allocator, mdl, Offset, Bytes, SGT)); } OnError: @@ -7072,7 +7090,7 @@ gckOS_MemoryMmap( mutex_unlock(&mdl->mapsMutex); - gcmkONERROR(allocator->ops->Mmap(allocator, mdl, cacheable, skipPages, numPages, Vma)); + gcmkONERROR(gcmALLOCATOR_Mmap(allocator, mdl, cacheable, skipPages, numPages, Vma)); OnError: return status; @@ -7181,7 +7199,7 @@ gckOS_WrapMemory( } } - status = allocator->ops->Attach(allocator, &desc, mdl); + status = gcmALLOCATOR_Attach(allocator, &desc, mdl); if (gcmIS_SUCCESS(status)) { diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.h index baa5c9cbdc18ce..b4bd95160677f2 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_os.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_platform.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_platform.h index 0dba8f1b8e4532..8d4e10201040fd 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_platform.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_platform.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -118,6 +118,14 @@ typedef struct _gcsMODULE_PARAMETERS /* device type, 0 for char device, 1 for misc device. */ gctUINT deviceType; gctUINT showArgs; + + /* mmu page table pool, 0 mean auto, 1 means virsual*/ + gctUINT mmuPageTablePool; + + gctUINT mmuDynamicMap; + gctUINT allMapInOne; + + gctUINT isrPoll; } gcsMODULE_PARAMETERS; diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel.c index 4bacdafb9e60d1..7447c62e830e96 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c index 135c135082a3b0..7d97d7103777e6 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_security_channel_emulator.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.c index c1367bcefb7c90..521ecca777cf7b 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.c +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.h index f83822decd40f5..8e1c45a5957a0a 100644 --- a/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.h +++ b/drivers/amlogic/npu/os/linux/kernel/gc_hal_kernel_sync.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_amlogic.c b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_amlogic.c index b322733e5a7952..fefbd181669cb2 100644 --- a/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_amlogic.c +++ b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_amlogic.c @@ -57,6 +57,8 @@ #include #include #include +#include +#include #include "gc_hal_kernel_linux.h" #include "gc_hal_kernel_platform.h" @@ -230,8 +232,8 @@ void delay(uint32_t time) for (i = 0;idev); + ret = pm_runtime_get_sync(&pdev->dev); + if (ret < 0) printk("===runtime getpower error===\n"); + set_clock(pdev); +} +void Runtime_downpower_a1(struct platform_device *pdev) +{ + pm_runtime_put_sync(&pdev->dev); + pm_runtime_disable(&pdev->dev); } -gceSTATUS _Reset(IN gcsPLATFORM * Platform, IN gceCORE GPU) +gceSTATUS _GetPower(IN gcsPLATFORM *Platform) { + struct platform_device *pdev = Platform->device; + _InitDtsRegValue(Platform); switch (nn_power_version) { case 1: - Downpower_a1(); - mdelay(10); - Getpower_a1(); + nanoqFreq=666*1024*1024; + Getpower_a1(pdev); break; case 2: - Downpower_88(); - mdelay(10); - Getpower_88(); + Getpower_88(pdev); break; case 3: - Downpower_99(); - mdelay(10); - Getpower_99(); + Getpower_99(pdev); break; default: printk("not find power_version\n"); } - mdelay(2); - printk("====>>>>npu hardware reset end!\n"); - hardwareResetNum++; - if (hardwareResetNum > 10000) - { - printk("hardwareResetNum is too large over 10000,just set zero\n"); - hardwareResetNum = 0; - } return gcvSTATUS_OK; } - gceSTATUS _SetPower(IN gcsPLATFORM * Platform,IN gceCORE GPU,IN gctBOOL Enable) { + struct platform_device *pdev = Platform->device; if (Enable == 0) { switch (nn_power_version) { case 1: - Downpower_a1(); + Runtime_downpower_a1(pdev); break; case 2: - Downpower_88(); + Runtime_downpower_88(); break; case 3: - Downpower_99(); + Runtime_downpower_99(); break; default: printk("not find power_version\n"); @@ -466,13 +439,13 @@ gceSTATUS _SetPower(IN gcsPLATFORM * Platform,IN gceCORE GPU,IN gctBOOL Enable) switch (nn_power_version) { case 1: - Getpower_a1(); + Runtime_getpower_a1(pdev); break; case 2: - Getpower_88(); + Runtime_getpower_88(pdev); break; case 3: - Getpower_99(); + Runtime_getpower_99(pdev); break; default: printk("not find power_version\n"); @@ -480,6 +453,60 @@ gceSTATUS _SetPower(IN gcsPLATFORM * Platform,IN gceCORE GPU,IN gctBOOL Enable) } return gcvSTATUS_OK; } + +gceSTATUS _Reset(IN gcsPLATFORM * Platform, IN gceCORE GPU) +{ + struct platform_device *pdev = Platform->device; + switch (nn_power_version) + { + case 1: + Runtime_downpower_a1(pdev); + mdelay(10); + Runtime_getpower_a1(pdev); + break; + case 2: + Downpower_88(); + mdelay(10); + Getpower_88(pdev); + break; + case 3: + Downpower_99(); + mdelay(10); + Getpower_99(pdev); + break; + default: + printk("not find power_version\n"); + } + mdelay(2); + printk("====>>>>npu hardware reset end!\n"); + hardwareResetNum++; + if (hardwareResetNum > 10000) + { + printk("hardwareResetNum is too large over 10000,just set zero\n"); + hardwareResetNum = 0; + } + return gcvSTATUS_OK; +} + +gceSTATUS _DownPower(IN gcsPLATFORM *Platform) +{ + switch (nn_power_version) + { + case 1: + Downpower_a1(); + break; + case 2: + Downpower_88(); + break; + case 3: + Downpower_99(); + break; + default: + printk("not find power_version\n"); + } + return gcvSTATUS_OK; +} + static gcsPLATFORM_OPERATIONS default_ops = { .adjustParam = _AdjustParam, diff --git a/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.c b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.c new file mode 100644 index 00000000000000..cbc6047f7f7833 --- /dev/null +++ b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.c @@ -0,0 +1,468 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gc_hal_kernel_linux.h" +#include "gc_hal_kernel_platform.h" + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) +#include +#else +#include +#endif + +/*======== power version 0 hardware reg begin ===========*/ +#define AO_RTI_BASE 0xff800000 +#define AO_RTI_GEN_PWR_SLEEP0 (AO_RTI_BASE + (0x3a<<2)) //0xff8000e8 +#define AO_RTI_GEN_PWR_ISO0 (AO_RTI_BASE + (0x3b<<2)) //0xff8000ec + + +/*======== power version 1 hardware reg begin ===========*/ +#define P_PWRCTRL_ISO_EN1 0xfe007818 +#define P_PWRCTRL_PWR_OFF1 0xfe00781c + +static unsigned int HHI_NANOQ_MEM_PD_REG0 = 0xff63c10c; +static unsigned int HHI_NANOQ_MEM_PD_REG1 = 0xff63c110; +static unsigned int RESET_LEVEL2 = 0xffd01088;//RESET_LEVEL2 = P_PWRCTRL_FOCRSTN1 + +static unsigned int NN_clk = 0xff63c1c8; +static unsigned int nn_power_version = 0; + +//static unsigned int P_PWRCTRL_FOCRSTN1 = 0xfe007824 +//#define HHI_NANOQ_MEM_PD_REG0 0xfe0078a0 +//#define HHI_NANOQ_MEM_PD_REG1 0xfe0078a4 + + + + +//#define PWR_OFF 0 +//#define MAX_NANOQ_FREQ 800000000 + +static int hardwareResetNum = 0; +module_param(hardwareResetNum, int, 0644); +//static int nanoqFreq = 800000000; +//module_param(nanoqFreq, int, 0644); + +static void _InitDtsRegValue(IN gcsPLATFORM *Platform) +{ + struct platform_device *pdev = Platform->device; + struct resource *res; + int ret; + res = platform_get_resource(pdev, IORESOURCE_MEM, 2); + if (res) + { + printk("reg resource 2, start: %ld,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + HHI_NANOQ_MEM_PD_REG0 = (unsigned long)res->start; + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 3); + if (res) + { + printk("reg resource 3, start: %ld,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + HHI_NANOQ_MEM_PD_REG1 = (unsigned long)res->start; + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 4); + if (res) + { + printk("reg resource 4, start: %ld,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + RESET_LEVEL2 = (unsigned long)res->start; + } + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "NN_CLK"); + if (res) + { + printk("reg resource NN_CLK, start: %ld,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + NN_clk = (unsigned long)res->start; + } + ret = of_property_read_u32(pdev->dev.of_node,"nn_power_version",&nn_power_version); + return; +} + +gceSTATUS _AdjustParam(IN gcsPLATFORM *Platform,OUT gcsMODULE_PARAMETERS *Args) +{ + struct platform_device *pdev = Platform->device; + struct resource *res; + int irqLine = platform_get_irq_byname(pdev, "galcore"); + + printk("galcore irq number is %d.\n", irqLine); + if (irqLine < 0) { + printk("get galcore irq resource error\n"); + irqLine = platform_get_irq(pdev, 0); + printk("galcore irq number is %d\n", irqLine); + } + if (irqLine < 0) return gcvSTATUS_OUT_OF_RESOURCES; + Args->irqs[gcvCORE_MAJOR] = irqLine; + /*================read reg value from dts===============*/ + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (res) + { + //printk("reg resource 0,start:%ld,end:%ld",(unsigned long)res->start,(unsigned long)res->end); + Args->registerBases[0] = (gctPHYS_ADDR_T)res->start; + Args->registerSizes[0] = (gctSIZE_T)(res->end - res->start+1); + //printk("read from dts,regbase:0x%llx,size:0x%lx\n",Args->registerBases[0],Args->registerSizes[0]); + } + else + { + printk("no memory resource 0\n"); + Args->registerBases[0] = 0xFF100000; + Args->registerSizes[0] = 2 << 10; + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (res) + { + //printk("reg resource 1,start:%ld,end:%ld",(unsigned long)res->start,(unsigned long)res->end); + Args->extSRAMBases[0] = (gctPHYS_ADDR_T)res->start; +// Args->sRAMSizes[0][1] = 0x480000; + Args->contiguousBase = 0; + Args->contiguousSize = 0x400000; +// Args->contiguousSize = (gctSIZE_T)(res->end - res->start+1); + } + else + { + printk("no memory resource 1\n"); + Args->contiguousBase = 0; + Args->contiguousSize = 0x400000; + Args->extSRAMBases[0] = 0xFF000000; + } + Args->registerSizes[0] = 0x20000; + return gcvSTATUS_OK; +} + +int _RegWrite(unsigned int reg, unsigned int writeval) +{ + void __iomem *vaddr; + reg = round_down(reg, 0x3); + + vaddr = ioremap(reg, 0x4); + writel(writeval, vaddr); + iounmap(vaddr); + + return 0; +} + +int _RegRead(unsigned int reg,unsigned int *readval) +{ + void __iomem *vaddr; + reg = round_down(reg, 0x3); + vaddr = ioremap(reg, 0x4); + *readval = readl(vaddr); + iounmap(vaddr); + return 0; +} +//us +void delay(unsigned int time) +{ + int i,j; + for(j=0;j<1000;j++) + { + for(i = 0;idev, "cts_vipnanoq_axi_clk_composite"); + if (IS_ERR(npu_axi_clk)) + { + printk("%s: get npu_axi_clk error!!!\n", __func__); + return; + } + else + { + clk_prepare_enable(npu_axi_clk); + } + clk_set_rate(npu_axi_clk, nanoqFreq); + + npu_core_clk = clk_get(&pdev->dev, "cts_vipnanoq_core_clk_composite"); + if (IS_ERR(npu_core_clk)) + { + printk("%s: get npu_core_clk error!!!\n", __func__); + return; + } + else + { + clk_prepare_enable(npu_core_clk); + } + clk_set_rate(npu_core_clk, nanoqFreq); + return; +}*/ +gceSTATUS _GetPower(IN gcsPLATFORM *Platform) +{ + unsigned int readReg=0; + _InitDtsRegValue(Platform); + if (nn_power_version == 1) + { + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg & (~(1<<3))); + _RegWrite(RESET_LEVEL2, readReg); + + _RegRead(P_PWRCTRL_PWR_OFF1,&readReg); + readReg = (readReg & (~(1<<3))); + _RegWrite(P_PWRCTRL_PWR_OFF1, readReg); + + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0x0); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0x0); + + _RegRead(P_PWRCTRL_ISO_EN1,&readReg); + readReg = (readReg & (~(1<<3))); + _RegWrite(P_PWRCTRL_ISO_EN1, readReg); + + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg | (1<<3)); + _RegWrite(RESET_LEVEL2, readReg); + + _RegWrite(NN_clk, 0x3000300); + } + else + { + _RegRead(AO_RTI_GEN_PWR_SLEEP0,&readReg); + readReg = (readReg & 0xfffcffff); + _RegWrite(AO_RTI_GEN_PWR_SLEEP0, readReg); + + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0x0); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0x0); + + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg & 0xffffefff); + _RegWrite(RESET_LEVEL2, readReg); + + _RegRead(AO_RTI_GEN_PWR_ISO0,&readReg); + readReg = (readReg & 0xfffcffff); + _RegWrite(AO_RTI_GEN_PWR_ISO0, readReg); + + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg | (0x1<<12)); + _RegWrite(RESET_LEVEL2, readReg); + +// set_clock(Platform->device); + _RegWrite(NN_clk, 0x7000700); + } + return gcvSTATUS_OK; +} + +gceSTATUS _DownPower(IN gcsPLATFORM *Platform) +{ + + unsigned int readReg=0; + printk("====>>>>downpower for putpower\n"); + if (nn_power_version == 1) + { + _RegRead(P_PWRCTRL_ISO_EN1,&readReg); + readReg = (readReg | (1<<3)); + _RegWrite(P_PWRCTRL_ISO_EN1, readReg); + + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0xffffffff); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0xffffffff); + + _RegRead(P_PWRCTRL_PWR_OFF1,&readReg); + readReg = (readReg | (1<<3)); + _RegWrite(P_PWRCTRL_PWR_OFF1, readReg); + } + else + { + _RegRead(AO_RTI_GEN_PWR_ISO0,&readReg); + readReg = (readReg | 0x30000); + _RegWrite(AO_RTI_GEN_PWR_ISO0, readReg); + + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0xffffffff); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0xffffffff); + + _RegRead(AO_RTI_GEN_PWR_SLEEP0,&readReg); + readReg = (readReg | 0x30000); + _RegWrite(AO_RTI_GEN_PWR_SLEEP0, readReg); + } + return gcvSTATUS_OK; +} + +gceSTATUS _Reset(IN gcsPLATFORM * Platform, IN gceCORE GPU) +{ + unsigned int readReg=0; + + printk("====>>>>begin npu hardware reset!\n"); + _RegWrite(RESET_LEVEL2, 0xffffefff); + /*==========power off=============*/ + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0xffffffff); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0xffffffff); + _RegRead(AO_RTI_GEN_PWR_ISO0,&readReg); + readReg = (readReg | 0x30000); + _RegWrite(AO_RTI_GEN_PWR_ISO0, readReg); + + _RegRead(AO_RTI_GEN_PWR_SLEEP0,&readReg); + readReg = (readReg | 0x30000); + _RegWrite(AO_RTI_GEN_PWR_SLEEP0, readReg); + + mdelay(10); + /*==========power on===============*/ + _RegRead(AO_RTI_GEN_PWR_SLEEP0,&readReg); + readReg = (readReg & 0xfffcffff); + _RegWrite(AO_RTI_GEN_PWR_SLEEP0, readReg); + _RegRead(AO_RTI_GEN_PWR_ISO0,&readReg); + readReg = (readReg & 0xfffcffff); + _RegWrite(AO_RTI_GEN_PWR_ISO0, readReg); + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0x0); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0x0); + _RegWrite(NN_clk, 0x3000300); +// set_clock(Platform->device); + mdelay(1); + _RegWrite(RESET_LEVEL2, 0xffffffff); + mdelay(2); + printk("====>>>>npu hardware reset end!\n"); + hardwareResetNum++; + if(hardwareResetNum > 10000) + { + printk("hardwareResetNum is too large over 10000,just set zero\n"); + hardwareResetNum = 0; + } + + return gcvSTATUS_OK; //gcvSTATUS_NOT_SUPPORTED; +} + +gceSTATUS _SetPower(IN gcsPLATFORM * Platform,IN gceCORE GPU,IN gctBOOL Enable) +{ + unsigned int readReg=0; + printk("_setpower,control status:%d\n",Enable); + if (nn_power_version == 1) + { + if(Enable == 0) + { + printk("====>>>>poweroff in _SetPower\n"); + _RegRead(P_PWRCTRL_ISO_EN1,&readReg); + readReg = (readReg | (1<<3)); + _RegWrite(P_PWRCTRL_ISO_EN1, readReg); + + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0xffffffff); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0xffffffff); + + _RegRead(P_PWRCTRL_PWR_OFF1,&readReg); + readReg = (readReg | (1<<3)); + _RegWrite(P_PWRCTRL_PWR_OFF1, readReg); + } + else + { + printk("====>>>>poweron in _SetPower\n"); + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg & (~(1<<3))); + _RegWrite(RESET_LEVEL2, readReg); + + _RegRead(P_PWRCTRL_PWR_OFF1,&readReg); + readReg = (readReg & (~(1<<3))); + _RegWrite(P_PWRCTRL_PWR_OFF1, readReg); + + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0x0); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0x0); + + _RegRead(P_PWRCTRL_ISO_EN1,&readReg); + readReg = (readReg & (~(1<<3))); + _RegWrite(P_PWRCTRL_ISO_EN1, readReg); + + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg | (1<<3)); + _RegWrite(RESET_LEVEL2, readReg); + + _RegWrite(NN_clk, 0x3000300); + } + } + else + { + if(Enable == 0) + { + printk("====>>>>poweroff in _SetPower\n"); + _RegRead(AO_RTI_GEN_PWR_ISO0,&readReg); + readReg = (readReg | 0x30000); + _RegWrite(AO_RTI_GEN_PWR_ISO0, readReg); + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0xffffffff); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0xffffffff); + _RegRead(AO_RTI_GEN_PWR_SLEEP0,&readReg); + readReg = (readReg | 0x30000); + _RegWrite(AO_RTI_GEN_PWR_SLEEP0, readReg); + } + else + { + printk("====>>>>poweron in _SetPower\n"); + _RegRead(AO_RTI_GEN_PWR_SLEEP0,&readReg); + readReg = (readReg & 0xfffcffff); + _RegWrite(AO_RTI_GEN_PWR_SLEEP0, readReg); + _RegWrite(HHI_NANOQ_MEM_PD_REG0, 0x0); + _RegWrite(HHI_NANOQ_MEM_PD_REG1, 0x0); + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg & 0xffffefff); + _RegWrite(RESET_LEVEL2, readReg); + _RegRead(AO_RTI_GEN_PWR_ISO0,&readReg); + readReg = (readReg & 0xfffcffff); + _RegWrite(AO_RTI_GEN_PWR_ISO0, readReg); + _RegRead(RESET_LEVEL2,&readReg); + readReg = (readReg | (0x1<<12)); + _RegWrite(RESET_LEVEL2, readReg); + _RegWrite(NN_clk, 0x7000700); + } + } + + return gcvSTATUS_OK; +} + + +static gcsPLATFORM_OPERATIONS default_ops = +{ + .adjustParam = _AdjustParam, + .getPower = _GetPower, +// .reset = _Reset, + .putPower = _DownPower, + .setPower = _SetPower, +}; + +static gcsPLATFORM default_platform = +{ + .name = __FILE__, + .ops = &default_ops, +}; + + +static struct platform_device *default_dev; + +static const struct of_device_id galcore_dev_match[] = { + { + .compatible = "amlogic, galcore" + }, + { }, +}; + +int gckPLATFORM_Init(struct platform_driver *pdrv, gcsPLATFORM **platform) +{ + pdrv->driver.of_match_table = galcore_dev_match; + + *platform = &default_platform; + /* default_dev = platform; hot plug just not support */ + return 0; +} + +int gckPLATFORM_Terminate(gcsPLATFORM *platform) +{ + if (default_dev) { + platform_device_unregister(default_dev); + default_dev = NULL; + } + + return 0; +} + diff --git a/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.config b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.config new file mode 100755 index 00000000000000..a01a43fcd2112c --- /dev/null +++ b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_c308x.config @@ -0,0 +1,4 @@ +ifeq ($(USE_LINUX_PCIE), 1) +EXTRA_CFLAGS +=-DgcdIRQ_SHARED +endif +EXTRA_CFLAGS += -DNO_DMA_COHERENT=1 diff --git a/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.c b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.c new file mode 100644 index 00000000000000..2cf54311074346 --- /dev/null +++ b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.c @@ -0,0 +1,453 @@ +/**************************************************************************** +* +* Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved. +* +* The material in this file is confidential and contains trade secrets +* of Vivante Corporation. This is proprietary information owned by +* Vivante Corporation. No part of this work may be disclosed, +* reproduced, copied, transmitted, or used in any way for any purpose, +* without the express written permission of Vivante Corporation. +* +*****************************************************************************/ + + +#include +#include +#include +#include +#include + +#include "gc_hal_kernel_linux.h" +#include "gc_hal_kernel_platform.h" + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) +#include +#else +#include +#endif + +/*======== power version 0 hardware reg begin ===========*/ +#define AO_RTI_BASE 0xff800000 +#define AO_RTI_GEN_PWR_SLEEP0 (AO_RTI_BASE + (0x3a<<2)) +#define AO_RTI_GEN_PWR_ISO0 (AO_RTI_BASE + (0x3b<<2)) + + +/*======== power version 1 hardware reg begin ===========*/ +#define P_PWRCTRL_ISO_EN1 0xfe007818 +#define P_PWRCTRL_PWR_OFF1 0xfe00781c + +static uint32_t HHI_NANOQ_MEM_PD_REG0 = 0xff63c10c; +static uint32_t HHI_NANOQ_MEM_PD_REG1 = 0xff63c110; +static uint32_t RESET_LEVEL2 = 0xffd01088; + +static uint32_t NN_clk = 0xff63c1c8; +static uint32_t nn_power_version = 0; + + +static int hardwareResetNum = 0; +module_param(hardwareResetNum, int, 0644); +static int nanoqFreq = 800000000; +module_param(nanoqFreq, int, 0644); + +gceSTATUS _InitDtsRegValue(IN gcsPLATFORM *Platform) +{ + int ret = 0; + struct resource *res = NULL; + struct platform_device *pdev = Platform->device; + + + res = platform_get_resource(pdev, IORESOURCE_MEM, 2); + if (res) + { + HHI_NANOQ_MEM_PD_REG0 = (unsigned long)res->start; + printk("reg resource 2, start: %lx,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 3); + if (res) + { + HHI_NANOQ_MEM_PD_REG1 = (unsigned long)res->start; + printk("reg resource 3, start: %lx,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 4); + if (res) + { + RESET_LEVEL2 = (unsigned long)res->start; + printk("reg resource 4, start: %lx,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + } + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "NN_CLK"); + if (res) + { + NN_clk = (unsigned long)res->start; + printk("reg resource NN_CLK, start: %lx,end: %lx\n",(unsigned long)res->start,(unsigned long)res->end); + } + + ret = of_property_read_u32(pdev->dev.of_node,"nn_power_version",&nn_power_version); + printk("npu_version: %d\n",nn_power_version); + return gcvSTATUS_OK; +} + +gceSTATUS _AdjustParam(IN gcsPLATFORM *Platform,OUT gcsMODULE_PARAMETERS *Args) +{ + struct resource *res = NULL; + struct platform_device *pdev = Platform->device; + int irqLine = platform_get_irq_byname(pdev, "galcore"); + + if (irqLine >= 0) + printk("galcore irq number is %d.\n", irqLine); + if (irqLine < 0) { + printk("get galcore irq resource error\n"); + irqLine = platform_get_irq(pdev, 0); + printk("galcore irq number is %d\n", irqLine); + if (irqLine < 0) + return gcvSTATUS_OUT_OF_RESOURCES; + } + Args->irqs[gcvCORE_MAJOR] = irqLine; + + /*================read reg value from dts===============*/ + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (res) + { + Args->registerBases[0] = (gctPHYS_ADDR_T)res->start; + Args->registerSizes[0] = (gctSIZE_T)(res->end - res->start+1); + } + else + { + printk("no memory resource 0\n"); + Args->registerBases[0] = 0xFF100000; + Args->registerSizes[0] = 2 << 10; + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (res) + { + Args->extSRAMBases[0] = (gctPHYS_ADDR_T)res->start; + + Args->contiguousBase = 0; + Args->contiguousSize = (gctSIZE_T)(res->end - res->start+1); + } + else + { + printk("no memory resource 1\n"); + Args->contiguousBase = 0; + Args->contiguousSize = 0x400000; + } + return gcvSTATUS_OK; +} + +gceSTATUS _RegWrite(uint32_t reg, uint32_t writeval) +{ + void __iomem *vaddr = NULL; + reg = round_down(reg, 0x3); + + vaddr = ioremap(reg, 0x4); + writel(writeval, vaddr); + iounmap(vaddr); + + return gcvSTATUS_OK; +} + +gceSTATUS _RegRead(uint32_t reg,uint32_t *readval) +{ + void __iomem *vaddr = NULL; + reg = round_down(reg, 0x3); + vaddr = ioremap(reg, 0x4); + *readval = readl(vaddr); + iounmap(vaddr); + return gcvSTATUS_OK; +} +gceSTATUS get_nna_status(struct platform_device *dev) +{ + int ret = 0; + uint32_t readReg = 0; + uint32_t nn_ef[2]; + struct platform_device *pdev = dev; + + ret = of_property_read_u32_array(pdev->dev.of_node,"nn_efuse", &nn_ef[0], 2); + if (ret == 0) + { + _RegRead(nn_ef[0],&readReg); + readReg = (readReg & nn_ef[1]); + if (readReg == 0) + return gcvSTATUS_OK; + else + return gcvSTATUS_MISMATCH; + } + else + { + return gcvSTATUS_OK; + } +} +//us +void delay(uint32_t time) +{ + int i = 0,j = 0; + for (j=0;j<1000;j++) + { + for (i = 0;i>>>npu hardware reset end!\n"); + hardwareResetNum++; + if (hardwareResetNum > 10000) + { + printk("hardwareResetNum is too large over 10000,just set zero\n"); + hardwareResetNum = 0; + } + return gcvSTATUS_OK; +} + + +gceSTATUS _SetPower(IN gcsPLATFORM * Platform,IN gceCORE GPU,IN gctBOOL Enable) +{ + if (Enable == 0) + { + switch (nn_power_version) + { + case 1: + Downpower_a1(); + break; + case 2: + Downpower_88(); + break; + case 3: + Downpower_99(); + break; + default: + printk("not find power_version\n"); + } + } + else + { + switch (nn_power_version) + { + case 1: + Getpower_a1(); + break; + case 2: + Getpower_88(); + break; + case 3: + Getpower_99(); + break; + default: + printk("not find power_version\n"); + } + } + return gcvSTATUS_OK; +} +static gcsPLATFORM_OPERATIONS default_ops = +{ + .adjustParam = _AdjustParam, + .getPower = _GetPower, + .reset = _Reset, + .putPower = _DownPower, + .setPower = _SetPower, +}; + +static gcsPLATFORM default_platform = +{ + .name = __FILE__, + .ops = &default_ops, +}; + + +static struct platform_device *default_dev; + +static const struct of_device_id galcore_dev_match[] = { + { + .compatible = "amlogic, galcore" + }, + { }, +}; + +int gckPLATFORM_Init(struct platform_driver *pdrv, gcsPLATFORM **platform) +{ + pdrv->driver.of_match_table = galcore_dev_match; + + *platform = &default_platform; + /* default_dev = platform; hot plug just not support */ + return 0; +} + +int gckPLATFORM_Terminate(gcsPLATFORM *platform) +{ + if (default_dev) { + platform_device_unregister(default_dev); + default_dev = NULL; + } + + return 0; +} diff --git a/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.config b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.config new file mode 100755 index 00000000000000..a01a43fcd2112c --- /dev/null +++ b/drivers/amlogic/npu/os/linux/kernel/platform/amlogic/gc_hal_kernel_platform_pico.config @@ -0,0 +1,4 @@ +ifeq ($(USE_LINUX_PCIE), 1) +EXTRA_CFLAGS +=-DgcdIRQ_SHARED +endif +EXTRA_CFLAGS += -DNO_DMA_COHERENT=1 diff --git a/drivers/amlogic/npu/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c b/drivers/amlogic/npu/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c index 7c915df698e236..55a6f1cac156df 100644 --- a/drivers/amlogic/npu/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c +++ b/drivers/amlogic/npu/os/linux/kernel/platform/default/gc_hal_kernel_platform_default.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -185,7 +185,7 @@ _AdjustParam( #if USE_LINUX_PCIE struct _gcsPLATFORM_PCIE *pcie_platform = (struct _gcsPLATFORM_PCIE *)Platform; struct pci_dev *pdev = pcie_platform->pcie_info[0].pdev; - unsigned char irqline = pdev->irq; + int irqline = pdev->irq; unsigned int i; unsigned int dev_index, core_index = 0; diff --git a/drivers/amlogic/npu/security_v1/gc_hal_ta.c b/drivers/amlogic/npu/security_v1/gc_hal_ta.c index c7dd9e7436f108..485dc91a665d79 100644 --- a/drivers/amlogic/npu/security_v1/gc_hal_ta.c +++ b/drivers/amlogic/npu/security_v1/gc_hal_ta.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -53,7 +53,7 @@ *****************************************************************************/ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_base.h" #include "gc_hal_security_interface.h" #include "gc_hal_ta.h" diff --git a/drivers/amlogic/npu/security_v1/gc_hal_ta.h b/drivers/amlogic/npu/security_v1/gc_hal_ta.h index 8d004567dd3bff..549a03e6bddc0f 100644 --- a/drivers/amlogic/npu/security_v1/gc_hal_ta.h +++ b/drivers/amlogic/npu/security_v1/gc_hal_ta.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -55,7 +55,7 @@ #ifndef _GC_HAL_TA_H_ #define _GC_HAL_TA_H_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_security_interface.h" #ifdef __cplusplus diff --git a/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.c b/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.c index 8fb08a78a40aed..27e9f2f7590bee 100644 --- a/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.c +++ b/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -53,7 +53,7 @@ *****************************************************************************/ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_base.h" #include "gc_hal_security_interface.h" #include "gc_hal_ta.h" diff --git a/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.h b/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.h index 6e7c8bd768754c..815d1a1060904b 100644 --- a/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.h +++ b/drivers/amlogic/npu/security_v1/gc_hal_ta_hardware.h @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -55,7 +55,7 @@ #ifndef _GC_HAL_TA_HARDWARE_H_ #define _GC_HAL_TA_HARDWARE_H_ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_security_interface.h" #ifdef __cplusplus diff --git a/drivers/amlogic/npu/security_v1/gc_hal_ta_mmu.c b/drivers/amlogic/npu/security_v1/gc_hal_ta_mmu.c index 8cad46c05622d9..3d110533fbb983 100644 --- a/drivers/amlogic/npu/security_v1/gc_hal_ta_mmu.c +++ b/drivers/amlogic/npu/security_v1/gc_hal_ta_mmu.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -53,7 +53,7 @@ *****************************************************************************/ -#include "gc_hal_types.h" +#include "shared/gc_hal_types.h" #include "gc_hal_base.h" #include "gc_hal_security_interface.h" #include "gc_hal_ta.h" diff --git a/drivers/amlogic/npu/security_v1/os/emulator/gc_hal_ta_emulator.c b/drivers/amlogic/npu/security_v1/os/emulator/gc_hal_ta_emulator.c index c3339475df0269..1f12644047e6f6 100644 --- a/drivers/amlogic/npu/security_v1/os/emulator/gc_hal_ta_emulator.c +++ b/drivers/amlogic/npu/security_v1/os/emulator/gc_hal_ta_emulator.c @@ -2,7 +2,7 @@ * * The MIT License (MIT) * -* Copyright (c) 2014 - 2019 Vivante Corporation +* Copyright (c) 2014 - 2020 Vivante Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,7 +26,7 @@ * * The GPL License (GPL) * -* Copyright (C) 2014 - 2019 Vivante Corporation +* Copyright (C) 2014 - 2020 Vivante Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License