From e67e20ec6ff0c9720d87844270421453c738066a Mon Sep 17 00:00:00 2001 From: Madhurkiran Harikrishnan Date: Thu, 16 Feb 2017 12:15:58 -0800 Subject: [PATCH 5/9] linux/mali_kernel_linux.c: Handle clock when probed and removed This patch will handle the clock through clock specifier for GPU PP0 and PP1. Signed-off-by: Madhurkiran Harikrishnan Upstream Status: Inappropriate [Xilinx specific] --- .../src/devicedrv/mali/linux/mali_kernel_linux.c | 40 +++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/driver/src/devicedrv/mali/linux/mali_kernel_linux.c b/driver/src/devicedrv/mali/linux/mali_kernel_linux.c index d7893a3..f15fb56 100644 --- linux/mali_kernel_linux.c +++ b/linux/mali_kernel_linux.c @@ -45,6 +45,14 @@ #if defined(CONFIG_MALI400_INTERNAL_PROFILING) #include "mali_profiling_internal.h" #endif + +#if defined(CONFIG_ARCH_ZYNQMP) +/* Initialize variables for clocks */ +struct clk *clk_gpu; +struct clk *clk_gpu_pp0; +struct clk *clk_gpu_pp1; +#endif + #if defined(CONFIG_MALI400_PROFILING) && defined(CONFIG_MALI_DVFS) #include "mali_osk_profiling.h" #include "mali_dvfs_policy.h" @@ -580,7 +588,23 @@ static int mali_probe(struct platform_device *pdev) } #endif - +#if defined(CONFIG_ARCH_ZYNQMP) + /* Initialize clocks for GPU and PP */ + clk_gpu = devm_clk_get(&pdev->dev, "gpu"); + if (IS_ERR(clk_gpu)) + return PTR_ERR(clk_gpu); + clk_prepare_enable(clk_gpu); + + clk_gpu_pp0 = devm_clk_get(&pdev->dev, "gpu_pp0"); + if (IS_ERR(clk_gpu_pp0)) + return PTR_ERR(clk_gpu_pp0); + clk_prepare_enable(clk_gpu_pp0); + + clk_gpu_pp1 = devm_clk_get(&pdev->dev, "gpu_pp1"); + if (IS_ERR(clk_gpu_pp1)) + return PTR_ERR(clk_gpu_pp1); + clk_prepare_enable(clk_gpu_pp1); +#endif if (_MALI_OSK_ERR_OK == _mali_osk_wq_init()) { /* Initialize the Mali GPU HW specified by pdev */ if (_MALI_OSK_ERR_OK == mali_initialize_subsystems()) { @@ -608,6 +632,12 @@ static int mali_probe(struct platform_device *pdev) _mali_osk_wq_term(); } +#if defined(CONFIG_ARCH_ZYNQMP) + clk_disable_unprepare(clk_gpu); + clk_disable_unprepare(clk_gpu_pp0); + clk_disable_unprepare(clk_gpu_pp1); +#endif + #ifdef CONFIG_MALI_DEVFREQ mali_devfreq_term(mdev); devfreq_init_failed: @@ -673,6 +703,14 @@ static int mali_remove(struct platform_device *pdev) mali_platform_device_deinit(mali_platform_device); #endif mali_platform_device = NULL; + +#if defined(CONFIG_ARCH_ZYNQMP) + /* Remove clock */ + clk_disable_unprepare(clk_gpu); + clk_disable_unprepare(clk_gpu_pp0); + clk_disable_unprepare(clk_gpu_pp1); +#endif + return 0; } -- 2.7.4