From: Sui Jingfeng <suijingf...@loongson.cn>

Because the current implement is DT-based, this is only works when the host
platform has the DT support. Typically, the PLL hardwares are provided by
the host platform, not the GPU core itself. So add a dedicated helper
function to get clocks, only call this function when DT is available.

Signed-off-by: Sui Jingfeng <suijingf...@loongson.cn>
---
 drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 53 ++++++++++++++++-----------
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c 
b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index 3e35e7db5177..4d5819632597 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -1597,6 +1597,35 @@ static irqreturn_t irq_handler(int irq, void *data)
        return ret;
 }
 
+static int etnaviv_gpu_clk_get(struct etnaviv_gpu *gpu)
+{
+       struct device *dev = gpu->dev;
+
+       gpu->clk_reg = devm_clk_get_optional(dev, "reg");
+       DBG("clk_reg: %p", gpu->clk_reg);
+       if (IS_ERR(gpu->clk_reg))
+               return PTR_ERR(gpu->clk_reg);
+
+       gpu->clk_bus = devm_clk_get_optional(dev, "bus");
+       DBG("clk_bus: %p", gpu->clk_bus);
+       if (IS_ERR(gpu->clk_bus))
+               return PTR_ERR(gpu->clk_bus);
+
+       gpu->clk_core = devm_clk_get(dev, "core");
+       DBG("clk_core: %p", gpu->clk_core);
+       if (IS_ERR(gpu->clk_core))
+               return PTR_ERR(gpu->clk_core);
+       gpu->base_rate_core = clk_get_rate(gpu->clk_core);
+
+       gpu->clk_shader = devm_clk_get_optional(dev, "shader");
+       DBG("clk_shader: %p", gpu->clk_shader);
+       if (IS_ERR(gpu->clk_shader))
+               return PTR_ERR(gpu->clk_shader);
+       gpu->base_rate_shader = clk_get_rate(gpu->clk_shader);
+
+       return 0;
+}
+
 static int etnaviv_gpu_clk_enable(struct etnaviv_gpu *gpu)
 {
        int ret;
@@ -1872,27 +1901,9 @@ static int etnaviv_gpu_platform_probe(struct 
platform_device *pdev)
        }
 
        /* Get Clocks: */
-       gpu->clk_reg = devm_clk_get_optional(&pdev->dev, "reg");
-       DBG("clk_reg: %p", gpu->clk_reg);
-       if (IS_ERR(gpu->clk_reg))
-               return PTR_ERR(gpu->clk_reg);
-
-       gpu->clk_bus = devm_clk_get_optional(&pdev->dev, "bus");
-       DBG("clk_bus: %p", gpu->clk_bus);
-       if (IS_ERR(gpu->clk_bus))
-               return PTR_ERR(gpu->clk_bus);
-
-       gpu->clk_core = devm_clk_get(&pdev->dev, "core");
-       DBG("clk_core: %p", gpu->clk_core);
-       if (IS_ERR(gpu->clk_core))
-               return PTR_ERR(gpu->clk_core);
-       gpu->base_rate_core = clk_get_rate(gpu->clk_core);
-
-       gpu->clk_shader = devm_clk_get_optional(&pdev->dev, "shader");
-       DBG("clk_shader: %p", gpu->clk_shader);
-       if (IS_ERR(gpu->clk_shader))
-               return PTR_ERR(gpu->clk_shader);
-       gpu->base_rate_shader = clk_get_rate(gpu->clk_shader);
+       err = etnaviv_gpu_clk_get(gpu);
+       if (err)
+               return err;
 
        /* TODO: figure out max mapped size */
        dev_set_drvdata(dev, gpu);
-- 
2.34.1

Reply via email to