From d0396a72bf5bccbcda957d998606384a398edb66 Mon Sep 17 00:00:00 2001 From: Xianzhong Date: Wed, 21 Apr 2021 18:15:22 +0800 Subject: [PATCH] LF-3652 gpu-viv: Integrate 6.4.3.p2 20210416 release This version includes more bug-fixings for 8ULP GPU Signed-off-by: Xianzhong --- drivers/mxc/gpu-viv/Kbuild | 1 - .../hal/kernel/arch/gc_hal_kernel_hardware.c | 17 +- .../gc_hal_kernel_hardware_func_flop_reset.c | 1 + .../mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 28 +- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 12 +- .../hal/kernel/gc_hal_kernel_command_vg.c | 644 +++++++++--------- .../gpu-viv/hal/kernel/gc_hal_kernel_event.c | 20 +- .../gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 11 +- .../hal/kernel/inc/gc_feature_database.h | 172 ++++- .../default/gc_hal_kernel_allocator_dmabuf.c | 13 - .../default/gc_hal_kernel_allocator_gfp.c | 7 +- .../gc_hal_kernel_allocator_user_memory.c | 10 +- .../os/linux/kernel/gc_hal_kernel_allocator.c | 2 +- .../os/linux/kernel/gc_hal_kernel_allocator.h | 2 +- .../os/linux/kernel/gc_hal_kernel_device.c | 167 ++++- .../hal/os/linux/kernel/gc_hal_kernel_drm.c | 3 +- .../hal/os/linux/kernel/gc_hal_kernel_linux.h | 9 + .../hal/os/linux/kernel/gc_hal_kernel_os.c | 1 + 18 files changed, 731 insertions(+), 389 deletions(-) diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild index afe6b54fdedf..9d0cf640a679 100644 --- a/drivers/mxc/gpu-viv/Kbuild +++ b/drivers/mxc/gpu-viv/Kbuild @@ -324,7 +324,6 @@ endif EXTRA_CFLAGS += -DHOST=\"$(HOST)\" EXTRA_CFLAGS += -DgcdENABLE_TRUST_APPLICATION=1 -EXTRA_CFLAGS += -DgcdSYS_HAS_SG_CHAIN=1 obj-$(CONFIG_MXC_GPU_VIV) = $(MODULE_NAME).o diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c index b78d87c9ec55..a31808d196bc 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c +++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c @@ -4695,18 +4695,25 @@ gckHARDWARE_Notify( ) { gceSTATUS status; + gceEVENT_FAULT fault; + gcmkHEADER_ARG("Hardware=%p", Hardware); /* Handle events. */ - status = gckEVENT_Notify(Hardware->kernel->eventObj, 0); + status = gckEVENT_Notify(Hardware->kernel->eventObj, 0, &fault); if (Hardware->asyncFE) { - status = gckEVENT_Notify(Hardware->kernel->asyncEvent, 0); + status = gckEVENT_Notify(Hardware->kernel->asyncEvent, 0, &fault); + } + + if (fault & gcvEVENT_BUS_ERROR_FAULT) + { + status = gckKERNEL_Recovery(Hardware->kernel); } - gcmkFOOTER(); - return status; + gcmkFOOTER(); + return status; } /******************************************************************************* @@ -11960,7 +11967,7 @@ gckHARDWARE_Reset( /* Jump to address into which GPU should run if it doesn't stuck. */ if (Hardware->wlFE) { - gcmkONERROR(gckWLFE_Execute(Hardware, Hardware->kernel->restoreAddress, 16)); + gcmkONERROR(gckWLFE_Execute(Hardware, Hardware->lastWaitLink, 16)); } gcmkPRINT("[galcore]: recovery done"); diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c index 6d57034e181d..14d5a33085ef 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c +++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c @@ -6898,6 +6898,7 @@ gckHARDWARE_ResetFlopWithTP( gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); } + dataType = 0x0; gcmkONERROR(_GetNNDataSize(dataType, &itemBytes)); diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c index 81a8625dccf5..697cc68289ff 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c @@ -198,8 +198,12 @@ _MonitorTimerFunction( &pendingMask )); - gcmkPRINT("[galcore]: Number of pending interrupt is %d mask is %x", - pendingInterrupt, pendingMask); + gcmkTRACE_N( + gcvLEVEL_ERROR, + gcmSIZEOF(pendingInterrupt) + gcmSIZEOF(pendingMask), + "[galcore]: Number of pending interrupt is %d mask is %x", + pendingInterrupt, pendingMask + ); while (i--) { @@ -3984,6 +3988,8 @@ gckKERNEL_Recovery( hardware = Kernel->hardware; gcmkVERIFY_OBJECT(hardware, gcvOBJ_HARDWARE); + gckOS_AcquireMutex(Kernel->os, Kernel->device->commitMutex, gcdRECOVERY_FORCE_TIMEOUT); + if (Kernel->stuckDump == gcvSTUCK_DUMP_NONE) { gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core); @@ -4033,7 +4039,17 @@ gckKERNEL_Recovery( /* Issuing a soft reset for the GPU. */ gcmkONERROR(gckHARDWARE_Reset(hardware)); - mask = Kernel->restoreMask; + gcmkVERIFY_OK(gckOS_AtomGet( + Kernel->os, + Kernel->hardware->pendingEvent, + (gctINT32 *)&mask + )); + + if (mask) + { + /* Handle all outstanding events now. */ + gcmkONERROR(gckOS_AtomSet(Kernel->os, eventObj->pending, mask)); + } for (i = 0; i < 32; i++) { @@ -4043,8 +4059,6 @@ gckKERNEL_Recovery( } } - /* Handle all outstanding events now. */ - gcmkONERROR(gckOS_AtomSet(Kernel->os, eventObj->pending, mask)); #if gcdINTERRUPT_STATISTIC while (count--) @@ -4059,10 +4073,12 @@ gckKERNEL_Recovery( gckOS_AtomClearMask(Kernel->hardware->pendingEvent, mask); #endif - gcmkONERROR(gckEVENT_Notify(eventObj, 1)); + gcmkONERROR(gckEVENT_Notify(eventObj, 1, gcvNULL)); gcmkVERIFY_OK(gckOS_GetTime(&Kernel->resetTimeStamp)); + gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->device->commitMutex)); + /* Success. */ gcmkFOOTER_NO(); return gcvSTATUS_OK; diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h index 72eca46446f3..c2d93ce3530d 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h @@ -75,6 +75,8 @@ extern "C" { #endif +#define gcdRECOVERY_FORCE_TIMEOUT 100 + /******************************************************************************* ***** New MMU Defination *******************************************************/ @@ -328,6 +330,13 @@ gcsFDPRIVATE; typedef struct _gcsRECORDER * gckRECORDER; +typedef enum _gceEVENT_FAULT +{ + gcvEVENT_NO_FAULT, + gcvEVENT_BUS_ERROR_FAULT, +} +gceEVENT_FAULT; + /* Create a process database that will contain all its allocations. */ gceSTATUS gckKERNEL_CreateProcessDB( @@ -1058,7 +1067,8 @@ gckEVENT_Commit( gceSTATUS gckEVENT_Notify( IN gckEVENT Event, - IN gctUINT32 IDs + IN gctUINT32 IDs, + OUT gceEVENT_FAULT *Fault ); /* Event callback routine. */ diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c index 6fe2a2390fa1..96a61ade8642 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c @@ -3447,7 +3447,7 @@ gckVGCOMMAND_Execute( kernelEntry->commandBuffer = CommandBuffer; kernelEntry->handler = _FreeKernelCommandBuffer; - /* Unlock the current queue. */ + /* Lock the current queue. */ gcmkERR_BREAK(_UnlockCurrentQueue( Command, 1 )); @@ -3461,19 +3461,19 @@ gckVGCOMMAND_Execute( gceSTATUS gckVGCOMMAND_Commit( - IN gckVGCOMMAND Command, - IN gcsVGCONTEXT_PTR Context, - IN gcsVGCMDQUEUE_PTR Queue, - IN gctUINT EntryCount, - IN gcsTASK_MASTER_TABLE_PTR TaskTable - ) + IN gckVGCOMMAND Command, + IN gcsVGCONTEXT_PTR Context, + IN gcsVGCMDQUEUE_PTR Queue, + IN gctUINT EntryCount, + IN gcsTASK_MASTER_TABLE_PTR TaskTable + ) { /* - The first buffer is executed through a direct gckVGHARDWARE_Execute call, - therefore only an update is needed after the execution is over. All - consequent buffers need to be executed upon the first update call from - the FE interrupt handler. - */ + The first buffer is executed through a direct gckVGHARDWARE_Execute call, + therefore only an update is needed after the execution is over. All + consequent buffers need to be executed upon the first update call from + the FE interrupt handler. + */ static gcsQUEUE_UPDATE_CONTROL _dynamicBuffer[] = { { @@ -3506,8 +3506,8 @@ gckVGCOMMAND_Commit( } }; - gceSTATUS status, last; - struct _gcsTASK_MASTER_TABLE _TaskTable; + gceSTATUS status; + struct _gcsTASK_MASTER_TABLE _TaskTable; #ifdef __QNXNTO__ gcsVGCONTEXT_PTR userContext = gcvNULL; gctBOOL userContextMapped = gcvFALSE; @@ -3518,6 +3518,27 @@ gckVGCOMMAND_Commit( struct _gcsVGCONTEXT _Context; gctBOOL needCopy = gcvFALSE; + + gctBOOL haveFETasks; + gctUINT queueSize = 0; + gcsVGCMDQUEUE_PTR mappedQueue = gcvNULL; + gcsVGCMDQUEUE_PTR userEntry = gcvNULL; + gcsKERNEL_CMDQUEUE_PTR kernelEntry; + gcsQUEUE_UPDATE_CONTROL_PTR queueControl; + gctUINT currentLength; + gctUINT queueLength; + gctUINT entriesQueued; + gctUINT8_PTR previousEnd; + gctBOOL previousDynamic; + gctBOOL previousExecuted; + gctUINT controlIndex; + gctINT pid; + gctBOOL powerSemaphoreAcquired = gcvFALSE; + gctBOOL commitMutexAcquired = gcvFALSE; + gctBOOL queueMutexAcquired = gcvFALSE; + + + gcmkHEADER_ARG("Command=%p Context=%p Queue=%p EntryCount=0x%x TaskTable=%p", Command, Context, Queue, EntryCount, TaskTable); @@ -3527,375 +3548,360 @@ gckVGCOMMAND_Commit( gcmkVERIFY_ARGUMENT(Queue != gcvNULL); gcmkVERIFY_ARGUMENT(EntryCount > 1); - do - { - gctBOOL haveFETasks; - gctUINT queueSize = 0; - gcsVGCMDQUEUE_PTR mappedQueue=gcvNULL; - gcsVGCMDQUEUE_PTR userEntry=gcvNULL; - gcsKERNEL_CMDQUEUE_PTR kernelEntry; - gcsQUEUE_UPDATE_CONTROL_PTR queueControl; - gctUINT currentLength; - gctUINT queueLength; - gctUINT entriesQueued; - gctUINT8_PTR previousEnd; - gctBOOL previousDynamic; - gctBOOL previousExecuted; - gctUINT controlIndex; - gctINT pid; + #ifdef __QNXNTO__ - /* Map the context into the kernel space. */ - userContext = Context; + /* Map the context into the kernel space. */ + userContext = Context; - gcmkERR_BREAK(gckOS_MapUserPointer( - Command->os, - userContext, - gcmSIZEOF(*userContext), - &pointer)); + gcmkONERROR(gckOS_MapUserPointer( + Command->os, + userContext, + gcmSIZEOF(*userContext), + &pointer)); - Context = pointer; + Context = pointer; - userContextMapped = gcvTRUE; + userContextMapped = gcvTRUE; - /* Map the taskTable into the kernel space. */ - userTaskTable = TaskTable; + /* Map the taskTable into the kernel space. */ + userTaskTable = TaskTable; - gcmkERR_BREAK(gckOS_MapUserPointer( - Command->os, - userTaskTable, - gcmSIZEOF(*userTaskTable), - &pointer)); + gcmkONERROR(gckOS_MapUserPointer( + Command->os, + userTaskTable, + gcmSIZEOF(*userTaskTable), + &pointer)); - TaskTable = pointer; + TaskTable = pointer; - userTaskTableMapped = gcvTRUE; + userTaskTableMapped = gcvTRUE; - /* Update the signal info. */ - TaskTable->coid = Context->coid; - TaskTable->rcvid = Context->rcvid; + /* Update the signal info. */ + TaskTable->coid = Context->coid; + TaskTable->rcvid = Context->rcvid; #endif - gcmkERR_BREAK(gckOS_GetProcessID((gctUINT32_PTR)&pid)); - gcmkERR_BREAK(gckOS_QueryNeedCopy(Command->os, pid, &needCopy)); - if(needCopy) - { - gcmkERR_BREAK(gckOS_CopyFromUserData( - Command->os, - &_TaskTable, - TaskTable, - gcmSIZEOF(struct _gcsTASK_MASTER_TABLE) - )); - TaskTable = &_TaskTable; - /* Determine whether there are FE tasks to be performed. */ - gcmkERR_BREAK(gckOS_CopyFromUserData( - Command->os, - &_Context, - Context, - gcmSIZEOF(struct _gcsVGCONTEXT) - )); - Context = &_Context; - } - - gcmkERR_BREAK(gckVGHARDWARE_SetPowerState( - Command->hardware, gcvPOWER_ON_AUTO + gcmkONERROR(gckOS_GetProcessID((gctUINT32_PTR)&pid)); + gcmkONERROR(gckOS_QueryNeedCopy(Command->os, pid, &needCopy)); + if(needCopy) + { + gcmkONERROR(gckOS_CopyFromUserData( + Command->os, + &_TaskTable, + TaskTable, + gcmSIZEOF(struct _gcsTASK_MASTER_TABLE) )); - - /* Acquire the power semaphore. */ - gcmkERR_BREAK(gckOS_AcquireSemaphore( - Command->os, Command->powerSemaphore + TaskTable = &_TaskTable; + /* Determine whether there are FE tasks to be performed. */ + gcmkONERROR(gckOS_CopyFromUserData( + Command->os, + &_Context, + Context, + gcmSIZEOF(struct _gcsVGCONTEXT) )); + Context = &_Context; + } + + gcmkONERROR(gckVGHARDWARE_SetPowerState( + Command->hardware, gcvPOWER_ON_AUTO + )); - /* Acquire the commit mutex. */ - status = gckOS_AcquireMutex( + /* Acquire the power semaphore. */ + gcmkONERROR(gckOS_AcquireSemaphore( + Command->os, Command->powerSemaphore + )); + powerSemaphoreAcquired = gcvTRUE; + /* Acquire the mutex. */ + gcmkONERROR(gckOS_AcquireMutex( Command->os, Command->commitMutex, gcvINFINITE - ); + )); + commitMutexAcquired = gcvTRUE; - if (gcmIS_ERROR(status)) - { - gcmkVERIFY_OK(gckOS_ReleaseSemaphore( - Command->os, Command->powerSemaphore)); - break; - } - do - { - gcmkERR_BREAK(_FlushMMU(Command)); + gcmkONERROR(_FlushMMU(Command)); - /* Assign a context ID if not yet assigned. */ - if (Context->id == 0) - { - /* Assign the next context number. */ - Context->id = ++ Command->contextCounter; - /* See if we overflowed. */ - if (Command->contextCounter == 0) - { - /* We actually did overflow, wow... */ - status = gcvSTATUS_OUT_OF_RESOURCES; - break; - } - } + /* Assign a context ID if not yet assigned. */ + if (Context->id == 0) + { + /* Assign the next context number. */ + Context->id = ++ Command->contextCounter; + /* See if we overflowed. */ + if (Command->contextCounter == 0) + { + /* We actually did overflow, wow... */ + gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES); + } + } - /* The first entry in the queue is always the context buffer. - Verify whether the user context is the same as the current - context and if that's the case, skip the first entry. */ - if (Context->id == Command->currentContext) - { - /* Same context as before, skip the first entry. */ - EntryCount -= 1; - Queue += 1; + /* The first entry in the queue is always the context buffer. + Verify whether the user context is the same as the current + context and if that's the case, skip the first entry. */ + if (Context->id == Command->currentContext) + { + /* Same context as before, skip the first entry. */ + EntryCount -= 1; + Queue += 1; - /* Set the signal to avoid user waiting. */ + /* Set the signal to avoid user waiting. */ #ifdef __QNXNTO__ - gcmkERR_BREAK(gckOS_UserSignal( - Command->os, - Context->userSignal, - Context->rcvid, - Context->coid - )); + gcmkONERROR(gckOS_UserSignal( + Command->os, + Context->userSignal, + Context->rcvid, + Context->coid + )); #else - gcmkERR_BREAK(gckOS_UserSignal( - Command->os, Context->signal, Context->process - )); + gcmkONERROR(gckOS_UserSignal( + Command->os, Context->signal, Context->process + )); #endif - } - else - { - /* Different user context - keep the first entry. - Set the user context as the current one. */ - Command->currentContext = Context->id; - } + } + else + { + /* Different user context - keep the first entry. + Set the user context as the current one. */ + Command->currentContext = Context->id; + } + + /* Reset pointers. */ + queueControl = gcvNULL; + previousEnd = gcvNULL; + + haveFETasks = (TaskTable->table[gcvBLOCK_COMMAND].head != gcvNULL); + + /* Determine the size of the queue. */ + queueSize = EntryCount * gcmSIZEOF(gcsVGCMDQUEUE); + if(needCopy) + { + gctPOINTER pointer = gcvNULL; + gcmkONERROR(gckOS_Allocate( + Command->os, + queueSize, + &pointer + )); + userEntry = pointer; + mappedQueue = pointer; + gcmkONERROR(gckOS_CopyFromUserData( + Command->os, + userEntry, + Queue, + queueSize + )); + } + else + { + /* Map the command queue into the kernel space. */ + gcmkONERROR(gckOS_MapUserPointer( + Command->os, + Queue, + queueSize, + (gctPOINTER *) &mappedQueue + )); + userEntry = mappedQueue; + } + /* Set the first entry. */ - /* Reset pointers. */ - queueControl = gcvNULL; - previousEnd = gcvNULL; + /* Process the command queue. */ + while (EntryCount) + { + /* Lock the current queue. */ + gcmkONERROR(_LockCurrentQueue( + Command, &kernelEntry, &queueLength + )); + queueMutexAcquired = gcvTRUE; + + /* Determine the number of entries to process. */ + currentLength = (queueLength < EntryCount) + ? queueLength + : EntryCount; + + /* Update the number of the entries left to process. */ + EntryCount -= currentLength; + + /* Reset previous flags. */ + previousDynamic = gcvFALSE; + previousExecuted = gcvFALSE; - haveFETasks = (TaskTable->table[gcvBLOCK_COMMAND].head != gcvNULL); + /* Set the initial control index. */ + controlIndex = 0; - /* Determine the size of the queue. */ - queueSize = EntryCount * gcmSIZEOF(gcsVGCMDQUEUE); - if(needCopy) + /* Process entries. */ + for (entriesQueued = 0; entriesQueued < currentLength; entriesQueued += 1) + { + /* Get the kernel pointer to the command buffer header. */ + gcsCMDBUFFER_PTR commandBuffer = gcvNULL; + gcmkONERROR(_ConvertUserCommandBufferPointer( + Command, + userEntry->commandBuffer, + &commandBuffer + )); + + /* Is it a dynamic command buffer? */ + if (userEntry->dynamic) { - gctPOINTER pointer = gcvNULL; - gcmkERR_BREAK(gckOS_Allocate( - Command->os, - queueSize, - &pointer - )); - userEntry = pointer; - mappedQueue = pointer; - gcmkERR_BREAK(gckOS_CopyFromUserData( - Command->os, - userEntry, - Queue, - queueSize - )); + /* Select dynamic buffer control functions. */ + queueControl = &_dynamicBuffer[controlIndex]; } + + /* No, a static command buffer. */ else { - /* Map the command queue into the kernel space. */ - gcmkERR_BREAK(gckOS_MapUserPointer( - Command->os, - Queue, - queueSize, - (gctPOINTER *) &mappedQueue - )); - userEntry = mappedQueue; + /* Select static buffer control functions. */ + queueControl = &_staticBuffer[controlIndex]; } - /* Set the first entry. */ - /* Process the command queue. */ - while (EntryCount) + /* Set the command buffer pointer to the entry. */ + kernelEntry->commandBuffer = commandBuffer; + + /* If the previous entry was a dynamic command buffer, + link it to the current. */ + if (previousDynamic) { - /* Lock the current queue. */ - gcmkERR_BREAK(_LockCurrentQueue( - Command, &kernelEntry, &queueLength + gcmkONERROR(gckVGCOMMAND_FetchCommand( + Command, + previousEnd, + commandBuffer->address, + commandBuffer->dataCount, + gcvNULL )); - /* Determine the number of entries to process. */ - currentLength = (queueLength < EntryCount) - ? queueLength - : EntryCount; + /* The buffer will be auto-executed, only need to + update it after it has been executed. */ + kernelEntry->handler = queueControl->update; - /* Reset previous flags. */ - previousDynamic = gcvFALSE; + /* The buffer is only being updated. */ previousExecuted = gcvFALSE; + } + else + { + /* Set the buffer up for execution. */ + kernelEntry->handler = queueControl->execute; - /* Set the initial control index. */ - controlIndex = 0; - - /* Process entries. */ - for (entriesQueued = 0; entriesQueued < currentLength; entriesQueued += 1) - { - /* Get the kernel pointer to the command buffer header. */ - gcsCMDBUFFER_PTR commandBuffer = gcvNULL; - gcmkONERROR(_ConvertUserCommandBufferPointer( - Command, - userEntry->commandBuffer, - &commandBuffer - )); - - /* Is it a dynamic command buffer? */ - if (userEntry->dynamic) - { - /* Select dynamic buffer control functions. */ - queueControl = &_dynamicBuffer[controlIndex]; - } - - /* No, a static command buffer. */ - else - { - /* Select static buffer control functions. */ - queueControl = &_staticBuffer[controlIndex]; - } - - /* Set the command buffer pointer to the entry. */ - kernelEntry->commandBuffer = commandBuffer; - - /* If the previous entry was a dynamic command buffer, - link it to the current. */ - if (previousDynamic) - { - gcmkONERROR(gckVGCOMMAND_FetchCommand( - Command, - previousEnd, - commandBuffer->address, - commandBuffer->dataCount, - gcvNULL - )); - - /* The buffer will be auto-executed, only need to - update it after it has been executed. */ - kernelEntry->handler = queueControl->update; + /* The buffer is being updated. */ + previousExecuted = gcvTRUE; + } - /* The buffer is only being updated. */ - previousExecuted = gcvFALSE; - } - else - { - /* Set the buffer up for execution. */ - kernelEntry->handler = queueControl->execute; + /* The current buffer's END command becomes the last END. */ + previousEnd + = ((gctUINT8_PTR) commandBuffer) + + commandBuffer->bufferOffset + + commandBuffer->dataCount * Command->info.commandAlignment + - Command->info.staticTailSize; - /* The buffer is being updated. */ - previousExecuted = gcvTRUE; - } + /* Update the last entry info. */ + previousDynamic = userEntry->dynamic; - /* The current buffer's END command becomes the last END. */ - previousEnd - = ((gctUINT8_PTR) commandBuffer) - + commandBuffer->bufferOffset - + commandBuffer->dataCount * Command->info.commandAlignment - - Command->info.staticTailSize; + /* Advance entries. */ + userEntry ++; + kernelEntry ++; - /* Update the last entry info. */ - previousDynamic = userEntry->dynamic; + /* Update the control index. */ + controlIndex = 1; + } - /* Advance entries. */ - userEntry ++; - kernelEntry ++; + /* If the previous entry was a dynamic command buffer, + terminate it with an END. */ + if (previousDynamic) + { + gcmkONERROR(gckVGCOMMAND_EndCommand( + Command, + previousEnd, + Command->info.feBufferInt, + gcvNULL + )); + } - /* Update the control index. */ - controlIndex = 1; + /* Last buffer? */ + if (EntryCount == 0) + { + /* Modify the last command buffer's routines to handle + tasks if any.*/ + if (haveFETasks && controlIndex == 1) + { + if (previousExecuted) + { + kernelEntry[-1].handler = queueControl->lastExecute; } - - /* If the previous entry was a dynamic command buffer, - terminate it with an END. */ - if (previousDynamic) + else { - gcmkONERROR(gckVGCOMMAND_EndCommand( - Command, - previousEnd, - Command->info.feBufferInt, - gcvNULL - )); + kernelEntry[-1].handler = queueControl->lastUpdate; } + } - /* Last buffer? */ - if (EntryCount - entriesQueued == 0) - { - /* Modify the last command buffer's routines to handle - tasks if any.*/ - if (haveFETasks && controlIndex == 1) - { - if (previousExecuted) - { - kernelEntry[-1].handler = queueControl->lastExecute; - } - else - { - kernelEntry[-1].handler = queueControl->lastUpdate; - } - } + /* Release the mutex. */ + gcmkONERROR(gckOS_ReleaseMutex( + Command->os, + Command->queueMutex + )); + queueMutexAcquired = gcvFALSE; + /* Add a semaphore stall after PE EVENT (Before the END). */ + { + gctUINT32_PTR memory = (gctUINT32_PTR)(previousEnd - 0x10); + *memory++ = 0x10000007; + *memory++ = 0; - /* Release the queue mutex. */ - gcmkERR_BREAK(gckOS_ReleaseMutex( - Command->os, - Command->queueMutex - )); - /* Add a semaphore stall after PE EVENT (Before the END). */ - { - gctUINT32_PTR memory = (gctUINT32_PTR)(previousEnd - 0x10); - *memory++ = 0x10000007; - *memory++ = 0; + *memory++ = 0x20000007; + *memory++ = 0; + } + /* Schedule tasks. */ + gcmkONERROR(_ScheduleTasks(Command, TaskTable, previousEnd - 0x10)); - *memory++ = 0x20000007; - *memory++ = 0; - } - /* Schedule tasks. */ - gcmkERR_BREAK(_ScheduleTasks(Command, TaskTable, previousEnd - 0x10)); + /* Acquire the mutex. */ + gcmkONERROR(gckOS_AcquireMutex( + Command->os, + Command->queueMutex, + gcvINFINITE + )); + queueMutexAcquired = gcvTRUE; + } - /* Acquire back the queue mutex. */ - gcmkERR_BREAK(gckOS_AcquireMutex( - Command->os, - Command->queueMutex, - gcvINFINITE - )); - } + /* Unkock and schedule the current queue for execution. */ + gcmkONERROR(_UnlockCurrentQueue( + Command, currentLength + )); + queueMutexAcquired = gcvFALSE; + } OnError: - /* Update the number of the entries left to process. */ - EntryCount -= entriesQueued; - - /* Unlock and schedule the current queue for execution. */ - gcmkCHECK_STATUS(_UnlockCurrentQueue( - Command, entriesQueued - )); - /* Report the status error if any. */ - gcmkERR_BREAK(status); - } + if (queueMutexAcquired) + { + gcmkVERIFY_OK(gckOS_ReleaseMutex( + Command->os, + Command->queueMutex + )); + } + if (mappedQueue) + { + if(!needCopy) + { + /* Unmap the user command buffer. */ + gcmkVERIFY_OK(gckOS_UnmapUserPointer( + Command->os, + Queue, + queueSize, + mappedQueue + )); } - while (gcvFALSE); - - if (mappedQueue) + else { - if(!needCopy) - { - /* Unmap the user command buffer. */ - gcmkCHECK_STATUS(gckOS_UnmapUserPointer( - Command->os, - Queue, - queueSize, - mappedQueue - )); - } - else - { - gcmkCHECK_STATUS(gckOS_Free(Command->os, mappedQueue)); - } + gcmkVERIFY_OK(gckOS_Free(Command->os, mappedQueue)); } - - /* Release the commit mutex. */ - gcmkCHECK_STATUS(gckOS_ReleaseMutex( + } + /* Release the mutex. */ + if (commitMutexAcquired) + { + gcmkVERIFY_OK(gckOS_ReleaseMutex( Command->os, Command->commitMutex )); - - /* Release the power semaphore. */ + } + if (powerSemaphoreAcquired) + { gcmkVERIFY_OK(gckOS_ReleaseSemaphore( Command->os, Command->powerSemaphore)); } - while (gcvFALSE); #ifdef __QNXNTO__ if (userContextMapped) { diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c index 9f12fea6c22c..647e53f04fa4 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c @@ -1458,7 +1458,7 @@ gckEVENT_Submit( /* Notify immediately on infinite hardware. */ gcmkONERROR(gckEVENT_Interrupt(Event, 1 << id)); - gcmkONERROR(gckEVENT_Notify(Event, 0)); + gcmkONERROR(gckEVENT_Notify(Event, 0, gcvNULL)); #endif } @@ -1701,7 +1701,8 @@ gckEVENT_Interrupt( gceSTATUS gckEVENT_Notify( IN gckEVENT Event, - IN gctUINT32 IDs + IN gctUINT32 IDs, + OUT gceEVENT_FAULT *Fault ) { gceSTATUS status = gcvSTATUS_OK; @@ -1711,6 +1712,7 @@ gckEVENT_Notify( gctBOOL acquired = gcvFALSE; gctSIGNAL signal; gctUINT pending = 0; + gceEVENT_FAULT fault = gcvEVENT_NO_FAULT; #if gcmIS_DEBUG(gcdDEBUG_TRACE) gctINT eventNumber = 0; @@ -1767,8 +1769,9 @@ gckEVENT_Notify( if (pending & 0x80000000) { gcmkPRINT("AXI BUS ERROR"); - gckHARDWARE_DumpGPUState(Event->kernel->hardware); pending &= 0x7FFFFFFF; + + fault |= gcvEVENT_BUS_ERROR_FAULT; } if ((pending & 0x40000000) && Event->kernel->hardware->mmuVersion) @@ -1844,6 +1847,12 @@ gckEVENT_Notify( pending ); + /* Clear the BUS ERROR event. */ + if (fault & gcvEVENT_BUS_ERROR_FAULT) + { + pending |= (1 << 31); + } + gckOS_AtomClearMask(Event->pending, pending); /* Release the mutex queue. */ @@ -2113,6 +2122,11 @@ gckEVENT_Notify( /* End of event handling. */ Event->notifyState = -1; + if (Fault != gcvNULL) + { + *Fault = fault; + } + /* Success. */ gcmkFOOTER_NO(); return gcvSTATUS_OK; diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c index 44cc48a2bdf1..2058252baa1f 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c @@ -1447,7 +1447,7 @@ gckMMU_SetupDynamicSpace( gckOS_Free(Mmu->os, (gctPOINTER)nodeArray); #if gcdENABLE_TRUST_APPLICATION - if (gckHARDWARE_IsFeatureAvailable(Mmu->hardware, gcvFEATURE_SECURITY) == gcvSTATUS_TRUE) + if (Mmu->hardware->options.secureMode == gcvSECURE_IN_TA) { /* Setup secure address area when needed. */ gctUINT32 secureAreaSize = gcdMMU_SECURE_AREA_SIZE; @@ -3161,6 +3161,15 @@ gckMMU_SetupSRAM( /* Map the internal SRAM. */ if (needMapInternalSRAM) { + if (Device->showSRAMMapInfo) + { + gcmkPRINT("Galcore Info: MMU mapped core%d SRAM base=0x%llx size=0x%x", + i, + reservedBase, + reservedSize + ); + } + /* * Default gpu virtual base = 0. * It can be specified if not conflict with existing mapping. diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h index eb6edf5589e4..41e70a1a9275 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_feature_database.h @@ -53,7 +53,7 @@ *****************************************************************************/ -/*Auto created on 2021-03-05 22:36*/ +/*Auto created on 2021-04-14 20:50*/ #ifndef _gc_feature_database_h_ #define _gc_feature_database_h_ @@ -101,6 +101,7 @@ typedef struct gctUINT32 RESULT_WINDOW_MAX_SIZE; gctUINT32 ClusterAliveMask; gctUINT32 G2D_DEC400_MINOR; + gctUINT32 PS_INSTRUCTION_COUNT; gctUINT32 NNMadPerCore; gctUINT32 NNCoreCount; gctUINT32 NN_ACTIVE_CORE_COUNT; @@ -150,6 +151,7 @@ typedef struct gctUINT32 NN_CLUSTER_NUM_FOR_POWER_CONTROL; gctUINT32 NN_IN_LINES_PER_CYCLE; gctUINT32 VIP_CLUSTER_COUNT; + gctUINT32 NN_MP_INTER_CONNECT_RING_COUNT; gctUINT32 REG_FastClear:1; gctUINT32 REG_SpecialAntiAliasing:1; gctUINT32 REG_Pipe3D:1; @@ -557,6 +559,7 @@ typedef struct gctUINT32 IMGLD_WIDTH_LT16_FIX:1; gctUINT32 TX_FILTER_ROUND_FIX:1; gctUINT32 SH_FP32_FMA_SUPPORT:1; + gctUINT32 TX_ETC2_COMPRESSION:1; gctUINT32 VG_TS_CULLING:1; gctUINT32 VG_FP25:1; gctUINT32 VG_AYUV_INPUT_OUTPUT:1; @@ -684,6 +687,7 @@ typedef struct gctUINT32 NN_TRANSPOSE_PHASE2:1; gctUINT32 NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD:1; gctUINT32 NN_CONV_CORE_BYPASS:1; + gctUINT32 NN_TENSOR_ADD_RELU:1; gctUINT32 TPLITE_SUPPORT_TP_DATA_TRANSPOSE:1; gctUINT32 NN_SUPPORT_CONV_1D:1; gctUINT32 USE_VIPSRAM_FOR_KERNEL_STREAMING:1; @@ -775,6 +779,7 @@ typedef struct gctUINT32 NN_JD_DIRECT_MODE_FIX:1; gctUINT32 NN_KERNEL_DIRECT_WRONG_PUSH_FIX:1; gctUINT32 HI_DEFAULT_ENABLE_REORDER_FIX:1; + gctUINT32 V83_INTILESIZE_1X1_10BITS_FIX:1; gctUINT32 NN_INTERLEVE8:1; gctUINT32 NN_FP16_ALU:1; gctUINT32 NN_INT16_ALU:1; @@ -834,6 +839,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -883,6 +889,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -1290,6 +1297,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -1417,6 +1425,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -1508,6 +1517,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -1565,6 +1575,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -1614,6 +1625,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2021,6 +2033,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -2148,6 +2161,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -2239,6 +2253,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -2296,6 +2311,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -2345,6 +2361,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -2752,6 +2769,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -2879,6 +2897,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -2970,6 +2989,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -3027,6 +3047,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -3076,6 +3097,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -3483,6 +3505,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -3610,6 +3633,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -3701,6 +3725,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -3758,6 +3783,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -3807,6 +3833,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -4214,6 +4241,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -4341,6 +4369,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -4432,6 +4461,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -4489,6 +4519,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -4538,6 +4569,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -4945,6 +4977,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -5072,6 +5105,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -5163,6 +5197,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -5220,6 +5255,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -5269,6 +5305,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -5676,6 +5713,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -5803,6 +5841,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -5894,6 +5933,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -5951,6 +5991,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -6000,6 +6041,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x1, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x0, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -6407,6 +6449,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -6534,6 +6577,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -6625,6 +6669,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -6682,6 +6727,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -6731,6 +6777,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -7138,6 +7185,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -7265,6 +7313,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -7356,6 +7405,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -7413,6 +7463,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -7462,6 +7513,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -7869,6 +7921,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -7996,6 +8049,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -8087,6 +8141,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -8144,6 +8199,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -8193,6 +8249,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -8600,6 +8657,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -8727,6 +8785,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -8818,6 +8877,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -8875,6 +8935,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -8924,6 +8985,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -9331,6 +9393,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -9458,6 +9521,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -9549,6 +9613,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -9606,6 +9671,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -9655,6 +9721,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -10062,6 +10129,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -10189,6 +10257,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -10280,6 +10349,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -10337,6 +10407,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -10386,6 +10457,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -10793,6 +10865,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -10920,6 +10993,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -11011,6 +11085,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -11068,6 +11143,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -11117,6 +11193,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -11524,6 +11601,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -11651,6 +11729,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -11742,6 +11821,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -11799,6 +11879,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -11848,6 +11929,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -12255,6 +12337,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -12382,6 +12465,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -12473,6 +12557,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -12530,6 +12615,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -12579,6 +12665,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -12986,6 +13073,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -13113,6 +13201,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -13204,6 +13293,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -13261,6 +13351,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -13310,6 +13401,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -13717,6 +13809,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -13844,6 +13937,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -13935,6 +14029,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -13992,6 +14087,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -14041,6 +14137,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -14263,7 +14360,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_REG_RSS8 */ 0x1, /* gcFEATURE_BIT_REG_MSAACoherencyCheck */ 0x1, /* gcFEATURE_BIT_REG_Halti5 */ - 0x1, /* gcFEATURE_BIT_REG_Evis */ + 0x0, /* gcFEATURE_BIT_REG_Evis */ 0x0, /* gcFEATURE_BIT_REG_BltEngine */ 0x0, /* gcFEATURE_BIT_REG_BugFixes23 */ 0x0, /* gcFEATURE_BIT_REG_BugFixes24 */ @@ -14448,6 +14545,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -14489,17 +14587,17 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_NONZERO_BORDER */ 0x0, /* gcFEATURE_BIT_NN_MIRROR_BORDER */ 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 */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_ABSDIFF */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_BITREPLACE */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_BOXFILTER */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_CORDIAC */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_DP32 */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_FILTER */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_IADD */ + 0x1, /* gcFEATURE_BIT_EVIS_NO_SELECTADD */ 0x0, /* gcFEATURE_BIT_EVIS_LERP_7OUTPUT */ 0x0, /* gcFEATURE_BIT_EVIS_ACCSQ_8OUTPUT */ - 0x1, /* gcFEATURE_BIT_EVIS_VX2 */ + 0x0, /* gcFEATURE_BIT_EVIS_VX2 */ 0x0, /* gcFEATURE_BIT_TP_ENGINE */ 0x0, /* gcFEATURE_BIT_VIP_V7 */ 0x0, /* gcFEATURE_BIT_TP_TENSOR_ADD_MUL */ @@ -14575,6 +14673,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -14666,6 +14765,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -14723,6 +14823,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -14772,6 +14873,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -15179,6 +15281,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -15306,6 +15409,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -15397,6 +15501,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -15454,6 +15559,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -15503,6 +15609,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -15910,6 +16017,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -16037,6 +16145,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -16128,6 +16237,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -16185,6 +16295,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -16234,6 +16345,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -16641,6 +16753,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -16768,6 +16881,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -16859,6 +16973,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -16916,6 +17031,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x10, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -16965,6 +17081,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -17372,6 +17489,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -17499,6 +17617,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -17590,6 +17709,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -17647,6 +17767,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -17696,6 +17817,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -18103,6 +18225,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -18230,6 +18353,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -18321,6 +18445,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -18378,6 +18503,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -18427,6 +18553,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -18834,6 +18961,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -18961,6 +19089,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -19052,6 +19181,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -19109,6 +19239,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x3, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -19158,6 +19289,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -19565,6 +19697,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -19692,6 +19825,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -19783,6 +19917,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -19840,6 +19975,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x3, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x0, /* gcFEATURE_VALUE_NNMadPerCore */ 0x0, /* gcFEATURE_VALUE_NNCoreCount */ 0x0, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -19889,6 +20025,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x0, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x0, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x1, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -20296,6 +20433,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -20423,6 +20561,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -20514,6 +20653,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x0, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x0, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x0, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x0, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -20571,6 +20711,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ 0x6, /* gcFEATURE_VALUE_NNCoreCount */ 0x6, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -20620,6 +20761,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x3, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x1, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -21027,6 +21169,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -21154,6 +21297,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -21245,6 +21389,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x1, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x1, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x1, /* gcFEATURE_BIT_NN_INT16_ALU */ @@ -21302,6 +21447,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x100, /* gcFEATURE_VALUE_RESULT_WINDOW_MAX_SIZE */ 0x0, /* gcFEATURE_VALUE_ClusterAliveMask */ 0x0, /* gcFEATURE_VALUE_G2D_DEC400_MINOR */ + 0x0, /* gcFEATURE_VALUE_PS_INSTRUCTION_COUNT */ 0x40, /* gcFEATURE_VALUE_NNMadPerCore */ 0x6, /* gcFEATURE_VALUE_NNCoreCount */ 0x6, /* gcFEATURE_VALUE_NN_ACTIVE_CORE_COUNT */ @@ -21351,6 +21497,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_VALUE_NN_CLUSTER_NUM_FOR_POWER_CONTROL */ 0x3, /* gcFEATURE_VALUE_NN_IN_LINES_PER_CYCLE */ 0x1, /* gcFEATURE_VALUE_VIP_CLUSTER_COUNT */ + 0x0, /* gcFEATURE_VALUE_NN_MP_INTER_CONNECT_RING_COUNT */ 0x0, /* gcFEATURE_BIT_REG_FastClear */ 0x0, /* gcFEATURE_BIT_REG_SpecialAntiAliasing */ 0x1, /* gcFEATURE_BIT_REG_Pipe3D */ @@ -21758,6 +21905,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x1, /* gcFEATURE_BIT_IMGLD_WIDTH_LT16_FIX */ 0x0, /* gcFEATURE_BIT_TX_FILTER_ROUND_FIX */ 0x0, /* gcFEATURE_BIT_SH_FP32_FMA_SUPPORT */ + 0x0, /* gcFEATURE_BIT_TX_ETC2_COMPRESSION */ 0x0, /* gcFEATURE_BIT_VG_TS_CULLING */ 0x0, /* gcFEATURE_BIT_VG_FP25 */ 0x0, /* gcFEATURE_BIT_VG_AYUV_INPUT_OUTPUT */ @@ -21885,6 +22033,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_TRANSPOSE_PHASE2 */ 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_FIELD_MOVE_TO_EXT_CMD */ 0x0, /* gcFEATURE_BIT_NN_CONV_CORE_BYPASS */ + 0x0, /* gcFEATURE_BIT_NN_TENSOR_ADD_RELU */ 0x0, /* gcFEATURE_BIT_TPLITE_SUPPORT_TP_DATA_TRANSPOSE */ 0x0, /* gcFEATURE_BIT_NN_SUPPORT_CONV_1D */ 0x0, /* gcFEATURE_BIT_USE_VIPSRAM_FOR_KERNEL_STREAMING */ @@ -21976,6 +22125,7 @@ static gcsFEATURE_DATABASE gChipInfo[] = { 0x0, /* gcFEATURE_BIT_NN_JD_DIRECT_MODE_FIX */ 0x1, /* gcFEATURE_BIT_NN_KERNEL_DIRECT_WRONG_PUSH_FIX */ 0x1, /* gcFEATURE_BIT_HI_DEFAULT_ENABLE_REORDER_FIX */ + 0x1, /* gcFEATURE_BIT_V83_INTILESIZE_1X1_10BITS_FIX */ 0x0, /* gcFEATURE_BIT_NN_INTERLEVE8 */ 0x0, /* gcFEATURE_BIT_NN_FP16_ALU */ 0x1, /* gcFEATURE_BIT_NN_INT16_ALU */ diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c index 6feb9be95cae..4c0fd1bc312c 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_dmabuf.c @@ -374,19 +374,6 @@ _DmabufMapUser( } userLogical += buf_desc->sgt->sgl->offset; - /* To make sure the mapping is created. */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) - if (access_ok(userLogical, 4)) -#else - if (access_ok(VERIFY_READ, userLogical, 4)) -#endif - { - uint32_t mem; - get_user(mem, (uint32_t *)userLogical); - - (void)mem; - } - MdlMap->vmaAddr = (gctPOINTER)userLogical; MdlMap->cacheable = Cacheable; diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c index 4d5096e33670..ff241c66e6a9 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_gfp.c @@ -615,8 +615,7 @@ _GFPAlloc( gcmkONERROR(_NonContiguousAlloc(mdlPriv, NumPages, gfp)); } } - -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API result = sg_alloc_table_from_pages(&mdlPriv->sgt, mdlPriv->nonContiguousPages, NumPages, 0, NumPages << PAGE_SHIFT, GFP_KERNEL); @@ -656,7 +655,7 @@ _GFPAlloc( _NonContiguousFree(mdlPriv->nonContiguousPages, NumPages); } -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API sg_free_table(&mdlPriv->sgt); #else kfree(mdlPriv->sgt.sgl); @@ -817,7 +816,7 @@ _GFPFree( dma_unmap_sg(galcore_device, mdlPriv->sgt.sgl, mdlPriv->sgt.nents, DMA_FROM_DEVICE); -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API sg_free_table(&mdlPriv->sgt); #else kfree(mdlPriv->sgt.sgl); diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c index d88879ff913f..ffdec26b453d 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/default/gc_hal_kernel_allocator_user_memory.c @@ -185,7 +185,7 @@ static int import_page_map(struct um_desc *um, } } -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API result = sg_alloc_table_from_pages(&um->sgt, pages, page_count, addr & ~PAGE_MASK, size, GFP_KERNEL | gcdNOWARN); @@ -214,7 +214,7 @@ static int import_page_map(struct um_desc *um, return 0; error: -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API sg_free_table(&um->sgt); #else kfree(um->sgt.sgl); @@ -346,7 +346,7 @@ static int import_pfn_map(struct um_desc *um, if (pageCount == pfn_count) { -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API result = sg_alloc_table_from_pages(&um->sgt, pages, pfn_count, addr & ~PAGE_MASK, pfn_count * PAGE_SIZE, GFP_KERNEL | gcdNOWARN); @@ -366,7 +366,7 @@ static int import_pfn_map(struct um_desc *um, if (unlikely(result != um->sgt.nents)) { -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API sg_free_table(&um->sgt); #else kfree(um->sgt.sgl); @@ -664,7 +664,7 @@ static void release_page_map(struct um_desc *um) dma_unmap_sg(galcore_device, um->sgt.sgl, um->sgt.nents, DMA_FROM_DEVICE); -#if gcdSYS_HAS_SG_CHAIN +#if gcdUSE_Linux_SG_TABLE_API sg_free_table(&um->sgt); #else kfree(um->sgt.sgl); diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c index 83f006d1d547..146cd3a8ac85 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.c @@ -178,7 +178,7 @@ gckOS_FreeAllocators( return gcvSTATUS_OK; } -#if !gcdSYS_HAS_SG_CHAIN +#if !gcdUSE_Linux_SG_TABLE_API #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,23) static inline void sg_set_page(struct scatterlist *sg, struct page *page, diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h index 0d547798ff00..630538af0fee 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_allocator.h @@ -561,7 +561,7 @@ OnError: return status; } -#if !gcdSYS_HAS_SG_CHAIN +#if !gcdUSE_Linux_SG_TABLE_API int alloc_sg_list_from_pages( struct scatterlist **sgl, diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c index e444f58e56bd..c3cd8f3ec801 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c @@ -64,11 +64,6 @@ #define _GC_OBJ_ZONE gcvZONE_DEVICE -#define DEBUG_FILE "galcore_trace" -#define PARENT_FILE "gpu" - -#define gcdDEBUG_FS_WARN "Experimental debug entry, may be removed in future release, do NOT rely on it!\n" - static gckGALDEVICE galDevice; extern gcTA globalTA[16]; @@ -1019,6 +1014,7 @@ _DumpState( ** Suspend: Time GPU stays in gcvPOWER_SUSPEND. */ static int dumpCore = 0; +static gctBOOL dumpAllCore = gcvFALSE; static int gc_dump_trigger_show(struct seq_file *m, void *data) @@ -1027,28 +1023,149 @@ gc_dump_trigger_show(struct seq_file *m, void *data) gcsINFO_NODE *node = m->private; gckGALDEVICE device = node->device; gckKERNEL kernel = gcvNULL; + gckHARDWARE Hardware = gcvNULL; + gctBOOL powerManagement = gcvFALSE; + gceSTATUS status = gcvSTATUS_OK; + gceCHIPPOWERSTATE statesStored, state; - if (dumpCore >= gcvCORE_MAJOR && dumpCore < gcvCORE_COUNT) + if (((dumpCore < gcvCORE_MAJOR) || (dumpCore >= gcvCORE_COUNT)) && (!dumpAllCore)) { - kernel = device->kernels[dumpCore]; + return -ENXIO; } - if (!kernel) - return -ENXIO; + seq_printf(m, "Dump one core: For example, dump core 0: echo 0 > /sys/kernel/debug/gc/dump_trigger; cat /sys/kernel/debug/gc/dump_trigger\n"); + seq_printf(m, "Dump all cores: echo all > /sys/kernel/debug/gc/dump_trigger; cat /sys/kernel/debug/gc/dump_trigger\n"); + seq_printf(m, "The dump will be in [dmesg].\n"); -#endif + if (dumpAllCore) + { + gctINT8 i = 0; + + for (i = 0; i < gcvCORE_COUNT; ++i) + { + if (!device->kernels[i]) + { + continue; + } - seq_printf(m, gcdDEBUG_FS_WARN); + kernel = device->kernels[i]; + Hardware = kernel->hardware; + powerManagement = Hardware->options.powerManagement; -#if gcdENABLE_3D || gcdENABLE_2D - seq_printf(m, "Get dump from /proc/kmsg or /sys/kernel/debug/gc/galcore_trace\n"); + if (powerManagement) + { + gcmkONERROR(gckHARDWARE_EnablePowerManagement( + Hardware, gcvFALSE + )); + } + + gcmkONERROR(gckHARDWARE_QueryPowerState( + Hardware, &statesStored + )); - if (kernel && kernel->hardware->options.powerManagement == gcvFALSE) + gcmkONERROR(gckHARDWARE_SetPowerState( + Hardware, gcvPOWER_ON_AUTO + )); + + _DumpState(kernel); + + switch(statesStored) + { + case gcvPOWER_OFF: + state = gcvPOWER_OFF_BROADCAST; + break; + case gcvPOWER_IDLE: + state = gcvPOWER_IDLE_BROADCAST; + break; + case gcvPOWER_SUSPEND: + state = gcvPOWER_SUSPEND_BROADCAST; + break; + case gcvPOWER_ON: + state = gcvPOWER_ON_AUTO; + break; + default: + state = statesStored; + break; + } + + if (powerManagement) + { + gcmkONERROR(gckHARDWARE_EnablePowerManagement( + Hardware, gcvTRUE + )); + } + + gcmkONERROR(gckHARDWARE_SetPowerState( + Hardware, state + )); + + } + } + else { + if (device->kernels[dumpCore]) + { + kernel = device->kernels[dumpCore]; + } + else + { + seq_printf(m, "Dump core from invalid coreid.\n"); + goto OnError; + } + + Hardware = kernel->hardware; + powerManagement = Hardware->options.powerManagement; + + if (powerManagement) + { + gcmkONERROR(gckHARDWARE_EnablePowerManagement( + Hardware, gcvFALSE + )); + } + + gcmkONERROR(gckHARDWARE_QueryPowerState( + Hardware, &statesStored + )); + + gcmkONERROR(gckHARDWARE_SetPowerState( + Hardware, gcvPOWER_ON_AUTO + )); + _DumpState(kernel); + + switch(statesStored) + { + case gcvPOWER_OFF: + state = gcvPOWER_OFF_BROADCAST; + break; + case gcvPOWER_IDLE: + state = gcvPOWER_IDLE_BROADCAST; + break; + case gcvPOWER_SUSPEND: + state = gcvPOWER_SUSPEND_BROADCAST; + break; + case gcvPOWER_ON: + state = gcvPOWER_ON_AUTO; + break; + default: + state = statesStored; + break; + } + + if (powerManagement) + { + gcmkONERROR(gckHARDWARE_EnablePowerManagement( + Hardware, gcvTRUE + )); + } + + gcmkONERROR(gckHARDWARE_SetPowerState( + Hardware, state + )); } -#endif +OnError: +#endif return 0; } @@ -1330,7 +1447,25 @@ static int gc_vidmem_write(const char __user *buf, size_t count, void* data) static int gc_dump_trigger_write(const char __user *buf, size_t count, void* data) { - return strtoint_from_user(buf, count, &dumpCore); + char str[1 + sizeof(long) * 8 + 1 + 1]; + + size_t len = min(count, sizeof(str) - 1); + + if (copy_from_user(str, buf, len)) + return -EFAULT; + + str[len] = '\0'; + + if (str[0] == 'a' && str[1] == 'l' && str[2] == 'l') + { + dumpAllCore = gcvTRUE; + return count; + } + else + { + dumpAllCore = gcvFALSE; + return strtoint_from_user(buf, count, &dumpCore); + } } static int gc_clk_show(struct seq_file* m, void* data) diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c index 60a76e61d41e..1f8f80738a99 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_drm.c @@ -84,8 +84,7 @@ struct viv_gem_object { #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,11,0) void viv_gem_free_object(struct drm_gem_object *gem_obj); -struct dma_buf *viv_gem_prime_export(struct drm_gem_object *gem_obj, - int flags); +struct dma_buf *viv_gem_prime_export(struct drm_gem_object *gem_obj, int flags); static const struct drm_gem_object_funcs viv_gem_object_funcs = { .free = viv_gem_free_object, diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h index 09f0011f7219..a436edb11d9a 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h @@ -175,6 +175,15 @@ #define untagged_addr(addr) (addr) #endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION (4,20,17) && !defined(CONFIG_ARCH_NO_SG_CHAIN)) || \ + (LINUX_VERSION_CODE >= KERNEL_VERSION (3,6,0) \ + && (defined(ARCH_HAS_SG_CHAIN) || defined(CONFIG_ARCH_HAS_SG_CHAIN))) +#define gcdUSE_Linux_SG_TABLE_API 1 +#else +#define gcdUSE_Linux_SG_TABLE_API 0 +#endif + + extern struct device *galcore_device; /******************************************************************************\ diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c index bba91508e245..55f6a4ee7938 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c @@ -492,6 +492,7 @@ _QueryProcessPageTable( return gcvSTATUS_NOT_FOUND; pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl); + if (!pte_present(*pte)) { pte_unmap_unlock(pte, ptl); -- 2.17.1