drm/panfrost: Remove opp table when unloading
The devfreq opp table needs to be removed when unloading the driver to free the memory associated with it. Signed-off-by: Steven Price <steven.price@arm.com> Signed-off-by: Rob Herring <robh@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20190816093107.30518-3-steven.price@arm.com
This commit is contained in:
parent
e21dd29088
commit
aa4fffec31
@ -160,12 +160,18 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
|
|||||||
DRM_DEV_ERROR(&pfdev->pdev->dev, "Couldn't initialize GPU devfreq\n");
|
DRM_DEV_ERROR(&pfdev->pdev->dev, "Couldn't initialize GPU devfreq\n");
|
||||||
ret = PTR_ERR(pfdev->devfreq.devfreq);
|
ret = PTR_ERR(pfdev->devfreq.devfreq);
|
||||||
pfdev->devfreq.devfreq = NULL;
|
pfdev->devfreq.devfreq = NULL;
|
||||||
|
dev_pm_opp_of_remove_table(&pfdev->pdev->dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void panfrost_devfreq_fini(struct panfrost_device *pfdev)
|
||||||
|
{
|
||||||
|
dev_pm_opp_of_remove_table(&pfdev->pdev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
void panfrost_devfreq_resume(struct panfrost_device *pfdev)
|
void panfrost_devfreq_resume(struct panfrost_device *pfdev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#define __PANFROST_DEVFREQ_H__
|
#define __PANFROST_DEVFREQ_H__
|
||||||
|
|
||||||
int panfrost_devfreq_init(struct panfrost_device *pfdev);
|
int panfrost_devfreq_init(struct panfrost_device *pfdev);
|
||||||
|
void panfrost_devfreq_fini(struct panfrost_device *pfdev);
|
||||||
|
|
||||||
void panfrost_devfreq_resume(struct panfrost_device *pfdev);
|
void panfrost_devfreq_resume(struct panfrost_device *pfdev);
|
||||||
void panfrost_devfreq_suspend(struct panfrost_device *pfdev);
|
void panfrost_devfreq_suspend(struct panfrost_device *pfdev);
|
||||||
|
@ -547,12 +547,14 @@ static int panfrost_probe(struct platform_device *pdev)
|
|||||||
*/
|
*/
|
||||||
err = drm_dev_register(ddev, 0);
|
err = drm_dev_register(ddev, 0);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto err_out1;
|
goto err_out2;
|
||||||
|
|
||||||
panfrost_gem_shrinker_init(ddev);
|
panfrost_gem_shrinker_init(ddev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_out2:
|
||||||
|
panfrost_devfreq_fini(pfdev);
|
||||||
err_out1:
|
err_out1:
|
||||||
panfrost_device_fini(pfdev);
|
panfrost_device_fini(pfdev);
|
||||||
err_out0:
|
err_out0:
|
||||||
@ -571,6 +573,7 @@ static int panfrost_remove(struct platform_device *pdev)
|
|||||||
pm_runtime_get_sync(pfdev->dev);
|
pm_runtime_get_sync(pfdev->dev);
|
||||||
pm_runtime_put_sync_autosuspend(pfdev->dev);
|
pm_runtime_put_sync_autosuspend(pfdev->dev);
|
||||||
pm_runtime_disable(pfdev->dev);
|
pm_runtime_disable(pfdev->dev);
|
||||||
|
panfrost_devfreq_fini(pfdev);
|
||||||
panfrost_device_fini(pfdev);
|
panfrost_device_fini(pfdev);
|
||||||
drm_dev_put(ddev);
|
drm_dev_put(ddev);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user