summaryrefslogtreecommitdiff
path: root/drivers/mxc/gpu-viv
diff options
context:
space:
mode:
authorWujian sun <wujian.sun@nxp.com>2019-11-07 17:20:50 +0800
committerWujian sun <wujian.sun@nxp.com>2019-11-08 13:56:33 +0800
commit791ea1313a069606ee1ab124bdf6a6984e661a71 (patch)
tree3e42aaf907a1172f26028c9a6e1f9ea0f778ef95 /drivers/mxc/gpu-viv
parenta585bfca2b00744147b609927efa955239122c01 (diff)
MGS-5261 [#imx-1771] Both vdk ES20 test and ctrl c stress test met GPU hang on G2D compositor
For 8MM_EVK maybe power off is failed,the GPU still has been power on. so we need to check the mmu enable flag to see if we need to dummy draw Signed-off-by: Wujian sun <wujian.sun@nxp.com>
Diffstat (limited to 'drivers/mxc/gpu-viv')
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c45
1 files changed, 42 insertions, 3 deletions
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 adaf7f22661c..432b0d5c704a 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
@@ -11144,6 +11144,48 @@ gckHARDWARE_SetPowerManagementState(
if (flag & gcvPOWER_FLAG_INITIALIZE)
{
+ gctBOOL hwMmuDisabled = gcvTRUE;
+
+ /* VIV for 8MM_EVK, maybe power off is failed, the GPU still has been power on,
+ so we need to check the mmu enable flag to see if we need to dummy draw */
+ if (_IsHardwareMatch(Hardware, gcv600, 0x4653))
+ {
+ if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL)
+ {
+ gctUINT32 regMmuCtrl = 0;
+ gcmkONERROR(gckOS_ReadRegisterEx(
+ Hardware->os,
+ Hardware->core,
+ 0x00388,
+ &regMmuCtrl
+ ));
+
+ hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1)
+ ? gcvFALSE
+ : gcvTRUE;
+ }
+ else
+ {
+ gctUINT32 regMmuCtrl = 0;
+
+ gcmkONERROR(gckOS_ReadRegisterEx(
+ Hardware->os,
+ Hardware->core,
+ 0x0018C,
+ &regMmuCtrl
+ ));
+
+ hwMmuDisabled = ((((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0x1)
+ ? gcvFALSE
+ : gcvTRUE;
+ }
+ }
+
+ if(hwMmuDisabled)
+ {
+ command->dummyDraw = gcvTRUE;
+ }
+
/* Initialize hardware. */
gcmkONERROR(gckHARDWARE_InitializeHardware(Hardware));
@@ -11153,9 +11195,6 @@ gckHARDWARE_SetPowerManagementState(
/* Force the command queue to reload the next context. */
command->currContext = gcvNULL;
-
- /* Trigger a possible dummy draw. */
- command->dummyDraw = gcvTRUE;
}
/* Get time until initialized. */