Skip to content

Commit

Permalink
drm/panthor: Fix OPP refcnt leaks in devfreq initialisation
Browse files Browse the repository at this point in the history
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.larumbe@collabora.com>
Fixes: fac9b22 ("drm/panthor: Add the devfreq logical block")
Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241105205458.1318989-2-adrian.larumbe@collabora.com
  • Loading branch information
Adrián Larumbe authored and Steven Price committed Nov 6, 2024
1 parent 043e8af commit 21c23e4
Showing 1 changed file with 8 additions and 9 deletions.
17 changes: 8 additions & 9 deletions drivers/gpu/drm/panthor/panthor_devfreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit 21c23e4

Please sign in to comment.