diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c index bbf75bafd22f..04eeab6fce83 100644 --- a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -227,6 +228,8 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags) } #endif + /* enable pd for pvtpll clk for px30s/rk3326s */ + pm_runtime_get_sync(dev); for (i = 0; i < kbdev->nr_clocks; i++) { if (kbdev->clocks[i]) { int err; @@ -237,10 +240,12 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags) } else { dev_err(dev, "Failed to set clock %lu (target %lu)\n", freqs[i], *target_freq); + pm_runtime_put_sync(dev); return err; } } } + pm_runtime_put_sync(dev); #if IS_ENABLED(CONFIG_REGULATOR) for (i = 0; i < kbdev->nr_clocks; i++) { diff --git a/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c index ba5aaad67a06..eba09f193e55 100755 --- a/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c +++ b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c @@ -169,11 +169,25 @@ struct kbase_platform_funcs_conf platform_funcs = { static int rk_pm_callback_runtime_on(struct kbase_device *kbdev) { + int i; + + for (i = 0; i < kbdev->nr_clocks; i++) { + if (kbdev->clocks[i]) + clk_set_rate(kbdev->clocks[i], kbdev->current_freqs[i]); + } + return 0; } static void rk_pm_callback_runtime_off(struct kbase_device *kbdev) { + int i; + + for (i = 0; i < kbdev->nr_clocks; i++) { + /* switch to normal pll(200M) before disable pd */ + if (kbdev->clocks[i]) + clk_set_rate(kbdev->clocks[i], 200000000); + } } static int rk_pm_callback_power_on(struct kbase_device *kbdev)