summaryrefslogtreecommitdiff
path: root/drivers/mxc
diff options
context:
space:
mode:
authorXianzhong <xianzhong.li@nxp.com>2016-11-28 10:33:26 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commit78e1e1e8edcfbe2dbadd1c6637b4a14db328e6ad (patch)
treeb64c52642b417b4aaceb01595f56ad15f092fe37 /drivers/mxc
parent9a51aa6d331f6ee7d25f1028f136187a1e0f7582 (diff)
MGS-1923 [#imx-19] use device mutex to sync command operations
kernel mutex cannot be shared with gpu0,gpu1 and bridge mode together. use device mutex to prevent the sync problem for gpu command operations. this change is reasonable and fixed one hole in existing implementation. but this patch cannot fix the GPU hang for MGS-2429. Date: Nov 28, 2016 Signed-off-by: Xianzhong <xianzhong.li@nxp.com>
Diffstat (limited to 'drivers/mxc')
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c19
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h5
2 files changed, 11 insertions, 13 deletions
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 28d017b3526d..2ac78723b3a1 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
@@ -558,9 +558,6 @@ gckKERNEL_Construct(
else
#endif
{
- gcmkONERROR(
- gckOS_CreateMutex(Os, (gctPOINTER)&kernel->commitMutex));
-
/* Construct the gckHARDWARE object. */
gcmkONERROR(
gckHARDWARE_Construct(Os, kernel->core, &kernel->hardware));
@@ -885,11 +882,6 @@ gckKERNEL_Destroy(
/* Destroy the gckHARDWARE object. */
gcmkVERIFY_OK(gckHARDWARE_Destroy(Kernel->hardware));
}
-
- if (Kernel->commitMutex)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->commitMutex));
- }
}
if (Kernel->atomClients)
@@ -2189,7 +2181,7 @@ gckKERNEL_Dispatch(
case gcvHAL_COMMIT:
gcmkONERROR(gckOS_AcquireMutex(Kernel->os,
- Kernel->commitMutex,
+ Kernel->device->commitMutex,
gcvINFINITE
));
commitMutexAcquired = gcvTRUE;
@@ -2268,7 +2260,7 @@ gckKERNEL_Dispatch(
}
}
}
- gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->commitMutex));
+ gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->device->commitMutex));
commitMutexAcquired = gcvFALSE;
break;
@@ -3099,7 +3091,7 @@ OnError:
if (commitMutexAcquired == gcvTRUE)
{
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->commitMutex));
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->device->commitMutex));
}
/* Return the status. */
@@ -5724,6 +5716,7 @@ gckDEVICE_Construct(
gckOS_ZeroMemory(device, gcmSIZEOF(gcsDEVICE));
gcmkONERROR(gckOS_CreateMutex(Os, &device->stuckDumpMutex));
+ gcmkONERROR(gckOS_CreateMutex(Os, &device->commitMutex));
device->os = Os;
@@ -5888,6 +5881,10 @@ gckDEVICE_Destroy(
}
}
+ if (Device->commitMutex)
+ {
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Device->commitMutex));
+ }
if (Device->stuckDumpMutex)
{
gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Device->stuckDumpMutex));
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 e8083dbf1d00..6249e266d9ba 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
@@ -651,8 +651,6 @@ struct _gckKERNEL
gckDEVICE device;
gctUINT chipID;
-
- gctPOINTER commitMutex;
};
struct _FrequencyHistory
@@ -1184,6 +1182,9 @@ typedef struct _gcsDEVICE
/* Mutex to make sure stuck dump for multiple cores doesn't interleave. */
gctPOINTER stuckDumpMutex;
+
+ /* Mutex for multi-core combine mode command submission */
+ gctPOINTER commitMutex;
}
gcsDEVICE;