diff --git a/drivers/gpu/msm/governor_msm_adreno_tz.c b/drivers/gpu/msm/governor_msm_adreno_tz.c index 7d75b95bf992..ab7e5443ba04 100644 --- a/drivers/gpu/msm/governor_msm_adreno_tz.c +++ b/drivers/gpu/msm/governor_msm_adreno_tz.c @@ -15,6 +15,9 @@ #include #include #include +#ifdef CONFIG_QGKI +#include +#endif #include #include "../../devfreq/governor.h" @@ -408,6 +411,13 @@ static int tz_get_target_freq(struct devfreq *devfreq, unsigned long *freq) priv->bin.busy_time > CEILING) { val = -1 * level; } else { +#ifdef CONFIG_QGKI + unsigned int refresh_rate = dsi_panel_get_refresh_rate(); + + if (refresh_rate > 60) + priv->bin.busy_time = priv->bin.busy_time * refresh_rate / 60; +#endif + val = __secure_tz_update_entry3(level, priv->bin.total_time, priv->bin.busy_time, context_count, priv); } diff --git a/include/drm/drm_refresh_rate.h b/include/drm/drm_refresh_rate.h new file mode 100644 index 000000000000..b0c6cfe634e2 --- /dev/null +++ b/include/drm/drm_refresh_rate.h @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2020 Sultan Alsawaf . + */ + +unsigned int dsi_panel_get_refresh_rate(void); diff --git a/techpack/display/msm/dsi/dsi_display.c b/techpack/display/msm/dsi/dsi_display.c index 3f3784e99fba..b365745f45d2 100644 --- a/techpack/display/msm/dsi/dsi_display.c +++ b/techpack/display/msm/dsi/dsi_display.c @@ -63,6 +63,8 @@ bool is_skip_op_required(struct dsi_display *display) return (display->is_cont_splash_enabled || display->trusted_vm_env); } +static unsigned int cur_refresh_rate = 60; + static void dsi_display_mask_ctrl_error_interrupts(struct dsi_display *display, u32 mask, bool enable) { @@ -7391,6 +7393,10 @@ int dsi_display_validate_mode_change(struct dsi_display *display, cur_mode->timing.v_front_porch, adj_mode->timing.v_front_porch); } + if (cur_mode->timing.refresh_rate != adj_mode->timing.refresh_rate) { + WRITE_ONCE(cur_refresh_rate, adj_mode->timing.refresh_rate); + DSI_DEBUG("cur_refresh_rate set to %d\n", adj_mode->timing.refresh_rate); + } } /* dynamic clk change use case */ @@ -8338,6 +8344,11 @@ static void dsi_display_panel_id_notification(struct dsi_display *display) } } +unsigned int dsi_panel_get_refresh_rate(void) +{ + return READ_ONCE(cur_refresh_rate); +} + int dsi_display_enable(struct dsi_display *display) { int rc = 0; @@ -8380,6 +8391,8 @@ int dsi_display_enable(struct dsi_display *display) mode = display->panel->cur_mode; + WRITE_ONCE(cur_refresh_rate, mode->timing.refresh_rate); + if (mode->dsi_mode_flags & DSI_MODE_FLAG_DMS) { rc = dsi_panel_post_switch(display->panel); if (rc) {