From f7cdc2d4bffd78fe37db5b2646ac4471f11319e3 Mon Sep 17 00:00:00 2001 From: Hui Li Date: Wed, 15 Jul 2020 11:28:34 +0800 Subject: [PATCH] msm: kgsl: fix a condition error and set L3 clock rate fail Fix a condition error in gmu_enable_clks, if there is no hub_clk exists, the return value should be -ENODEV. There will be an set L3 clock failure while kgsl power disable, we should set L3 clock to NULL while there is no l3_vote clock exists: [ 13.076919] Call trace: [ 13.079430] clk_set_rate+0x78/0x140 [ 13.083103] kgsl_pwrctrl_disable+0x20/0x270 [ 13.087491] _slumber+0x24c/0x280 [ 13.090893] kgsl_pwrctrl_change_state+0x384/0x640 Change-Id: I492ce86908ade3daba526f8c3d269ba05c07e2aa Signed-off-by: Hui Li --- drivers/gpu/msm/adreno.c | 4 +++- drivers/gpu/msm/adreno_a6xx_gmu.c | 2 +- drivers/gpu/msm/adreno_ringbuffer.c | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 514865058377..a66b96a138b2 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -1023,9 +1023,11 @@ l3_pwrlevel_probe(struct kgsl_device *device, struct device_node *node) device->l3_clk = devm_clk_get(&device->pdev->dev, "l3_vote"); - if (IS_ERR_OR_NULL(device->l3_clk)) + if (IS_ERR_OR_NULL(device->l3_clk)) { dev_err(&device->pdev->dev, "Unable to get the l3_vote clock\n"); + device->l3_clk = NULL; + } } static int adreno_of_get_power(struct adreno_device *adreno_dev, diff --git a/drivers/gpu/msm/adreno_a6xx_gmu.c b/drivers/gpu/msm/adreno_a6xx_gmu.c index ecc5461e2ee7..7702225eabf2 100644 --- a/drivers/gpu/msm/adreno_a6xx_gmu.c +++ b/drivers/gpu/msm/adreno_a6xx_gmu.c @@ -2062,7 +2062,7 @@ static int a6xx_gmu_enable_clks(struct adreno_device *adreno_dev) } ret = a6xx_gmu_clk_set_rate(gmu, "hub_clk", 150000000); - if (ret && ret != ENODEV) { + if (ret && ret != -ENODEV) { dev_err(&gmu->pdev->dev, "Unable to set the HUB clock\n"); return ret; } diff --git a/drivers/gpu/msm/adreno_ringbuffer.c b/drivers/gpu/msm/adreno_ringbuffer.c index b7d134929625..1b2a13e5e901 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.c +++ b/drivers/gpu/msm/adreno_ringbuffer.c @@ -753,7 +753,7 @@ static void adreno_ringbuffer_set_constraint(struct kgsl_device *device, ((context->flags & KGSL_CONTEXT_PWR_CONSTRAINT) || (flags & KGSL_CONTEXT_PWR_CONSTRAINT))) { - if (IS_ERR_OR_NULL(device->l3_clk)) { + if (device->l3_clk == NULL) { dev_err_once(device->dev, "l3_vote clk not available\n"); return;