diff options
author | Xianzhong <xianzhong.li@nxp.com> | 2018-10-22 19:56:47 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:34:44 +0800 |
commit | 410845412da31323c181e3eb1e74107707e17464 (patch) | |
tree | dd294cf100126bcb4088541e715e0a4f66541307 /drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c | |
parent | fb256da9024243a821e01a04b8d9dc22d888b042 (diff) |
MGS-4338-1 [#imx-1217] fix GPU probe delay to query frequency
it is not necessary to query frequency when hardware initialize,
there are two cases which really need to query frequency,
1. application query (such as openCL initialization) with ioctl,
2. debugfs with "cat /sys/kernel/debug/gc/clk"
removed the query from driver probe, no impact on real cases.
Signed-off-by: Xianzhong <xianzhong.li@nxp.com>
Diffstat (limited to 'drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c')
-rw-r--r-- | drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c | 34 |
1 files changed, 23 insertions, 11 deletions
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 d11b6dd15e80..2fd668a4157c 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 @@ -2097,6 +2097,13 @@ gckGALDEVICE_Stop_Threads( return gcvSTATUS_OK; } +/******************************************************************************* +** +** gckGALDEVICE_QueryFrequency +** +** Query frequency for all the hardwares. +** +*/ gceSTATUS gckGALDEVICE_QueryFrequency( IN gckGALDEVICE Device @@ -2154,29 +2161,36 @@ gckGALDEVICE_QueryFrequency( } #endif - if (Device->kernels[i] && mcStart[i]) + if (Device->kernels[i]) { hardware = Device->kernels[i]->hardware; + if (mcStart[i]) + { + gckHARDWARE_ExitQueryClock(hardware, + mcStart[i], shStart[i], + &mcClk[i], &shClk[i]); + } + + hardware->mcClk = mcClk[i]; + hardware->shClk = shClk[i]; + if (Device->args.powerManagement) { gcmkONERROR(gckHARDWARE_SetPowerManagement( hardware, gcvTRUE )); } - - gckHARDWARE_ExitQueryClock(hardware, - mcStart[i], shStart[i], - &mcClk[i], &shClk[i]); - - hardware->mcClk = mcClk[i]; - hardware->shClk = shClk[i]; } } -OnError: gcmkFOOTER_NO(); + return gcvSTATUS_OK; + +OnError: + gcmkFOOTER(); + return status; } @@ -2214,8 +2228,6 @@ gckGALDEVICE_Start( /* Start the kernel thread. */ gcmkONERROR(gckGALDEVICE_Start_Threads(Device)); - gcmkONERROR(gckGALDEVICE_QueryFrequency(Device)); - for (i = 0; i < gcvCORE_COUNT; i++) { if (i == gcvCORE_VG) |