Rearrange lookup of recommended OPP for the Mali GPU device and its refcnt
decremental to make sure no OPP object leaks happen in the error path.

Signed-off-by: Adrián Larumbe <adrian.laru...@collabora.com>
Fixes: fac9b22df4b1 ("drm/panthor: Add the devfreq logical block")
Reviewed-by: Steven Price <steven.pr...@arm.com>
Reviewed-by: Liviu Dudau <liviu.du...@arm.com>
---
 drivers/gpu/drm/panthor/panthor_devfreq.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/panthor/panthor_devfreq.c 
b/drivers/gpu/drm/panthor/panthor_devfreq.c
index 9d0f891b9b53..ecc7a52bd688 100644
--- a/drivers/gpu/drm/panthor/panthor_devfreq.c
+++ b/drivers/gpu/drm/panthor/panthor_devfreq.c
@@ -163,13 +163,6 @@ int panthor_devfreq_init(struct panthor_device *ptdev)
 
        cur_freq = clk_get_rate(ptdev->clks.core);
 
-       opp = devfreq_recommended_opp(dev, &cur_freq, 0);
-       if (IS_ERR(opp))
-               return PTR_ERR(opp);
-
-       panthor_devfreq_profile.initial_freq = cur_freq;
-       ptdev->current_frequency = cur_freq;
-
        /* Regulator coupling only takes care of synchronizing/balancing voltage
         * updates, but the coupled regulator needs to be enabled manually.
         *
@@ -200,18 +193,24 @@ int panthor_devfreq_init(struct panthor_device *ptdev)
                return ret;
        }
 
+       opp = devfreq_recommended_opp(dev, &cur_freq, 0);
+       if (IS_ERR(opp))
+               return PTR_ERR(opp);
+
+       panthor_devfreq_profile.initial_freq = cur_freq;
+       ptdev->current_frequency = cur_freq;
+
        /*
         * Set the recommend OPP this will enable and configure the regulator
         * if any and will avoid a switch off by regulator_late_cleanup()
         */
        ret = dev_pm_opp_set_opp(dev, opp);
+       dev_pm_opp_put(opp);
        if (ret) {
                DRM_DEV_ERROR(dev, "Couldn't set recommended OPP\n");
                return ret;
        }
 
-       dev_pm_opp_put(opp);
-
        /* Find the fastest defined rate  */
        opp = dev_pm_opp_find_freq_floor(dev, &freq);
        if (IS_ERR(opp))
-- 
2.46.2

Reply via email to