summaryrefslogtreecommitdiff
path: root/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
diff options
context:
space:
mode:
authorXianzhong <xianzhong.li@nxp.com>2018-10-22 19:56:47 +0800
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:34:44 +0800
commit410845412da31323c181e3eb1e74107707e17464 (patch)
treedd294cf100126bcb4088541e715e0a4f66541307 /drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
parentfb256da9024243a821e01a04b8d9dc22d888b042 (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.c34
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)