Merge "disp: msm: sde: deprecate idle notify work scheduling"

This commit is contained in:
qctecmdr
2021-11-20 00:19:10 -08:00
committed by Gerrit - the friendly Code Review server
3 changed files with 3 additions and 76 deletions

View File

@@ -174,7 +174,6 @@ enum msm_mdp_crtc_property {
CRTC_PROP_ROT_CLK, CRTC_PROP_ROT_CLK,
CRTC_PROP_ROI_V1, CRTC_PROP_ROI_V1,
CRTC_PROP_SECURITY_LEVEL, CRTC_PROP_SECURITY_LEVEL,
CRTC_PROP_IDLE_TIMEOUT,
CRTC_PROP_DEST_SCALER, CRTC_PROP_DEST_SCALER,
CRTC_PROP_CAPTURE_OUTPUT, CRTC_PROP_CAPTURE_OUTPUT,

View File

@@ -3684,7 +3684,7 @@ static void sde_crtc_atomic_flush(struct drm_crtc *crtc,
dev = crtc->dev; dev = crtc->dev;
priv = dev->dev_private; priv = dev->dev_private;
if ((sde_crtc->cache_state == CACHE_STATE_PRE_CACHE) && if ((sde_crtc->cache_state == CACHE_STATE_NORMAL) &&
sde_crtc_get_property(cstate, CRTC_PROP_CACHE_STATE)) sde_crtc_get_property(cstate, CRTC_PROP_CACHE_STATE))
sde_crtc_static_img_control(crtc, CACHE_STATE_FRAME_WRITE, sde_crtc_static_img_control(crtc, CACHE_STATE_FRAME_WRITE,
false); false);
@@ -3853,37 +3853,6 @@ static void _sde_crtc_remove_pipe_flush(struct drm_crtc *crtc)
} }
} }
static void _sde_crtc_schedule_idle_notify(struct drm_crtc *crtc)
{
struct sde_crtc *sde_crtc = to_sde_crtc(crtc);
struct sde_crtc_state *cstate = to_sde_crtc_state(crtc->state);
struct sde_kms *sde_kms = _sde_crtc_get_kms(crtc);
struct msm_drm_private *priv;
struct msm_drm_thread *event_thread;
int idle_time = 0;
if (!sde_kms || !sde_kms->dev || !sde_kms->dev->dev_private)
return;
priv = sde_kms->dev->dev_private;
idle_time = sde_crtc_get_property(cstate, CRTC_PROP_IDLE_TIMEOUT);
if (!idle_time ||
!sde_encoder_check_curr_mode(sde_crtc->mixers[0].encoder,
MSM_DISPLAY_VIDEO_MODE) ||
(crtc->index >= ARRAY_SIZE(priv->event_thread)) ||
(sde_crtc->cache_state > CACHE_STATE_NORMAL))
return;
/* schedule the idle notify delayed work */
event_thread = &priv->event_thread[crtc->index];
kthread_mod_delayed_work(&event_thread->worker,
&sde_crtc->idle_notify_work, msecs_to_jiffies(idle_time));
SDE_DEBUG("schedule idle notify work in %dms\n", idle_time);
}
/** /**
* sde_crtc_reset_hw - attempt hardware reset on errors * sde_crtc_reset_hw - attempt hardware reset on errors
* @crtc: Pointer to DRM crtc instance * @crtc: Pointer to DRM crtc instance
@@ -4108,8 +4077,6 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc,
spin_unlock_irqrestore(&dev->event_lock, flags); spin_unlock_irqrestore(&dev->event_lock, flags);
} }
_sde_crtc_schedule_idle_notify(crtc);
SDE_ATRACE_END("crtc_commit"); SDE_ATRACE_END("crtc_commit");
} }
@@ -4526,7 +4493,6 @@ static void sde_crtc_disable(struct drm_crtc *crtc)
mutex_lock(&sde_crtc->crtc_lock); mutex_lock(&sde_crtc->crtc_lock);
kthread_cancel_delayed_work_sync(&sde_crtc->static_cache_read_work); kthread_cancel_delayed_work_sync(&sde_crtc->static_cache_read_work);
kthread_cancel_delayed_work_sync(&sde_crtc->idle_notify_work);
SDE_EVT32(DRMID(crtc), sde_crtc->enabled, crtc->state->active, SDE_EVT32(DRMID(crtc), sde_crtc->enabled, crtc->state->active,
crtc->state->enable, sde_crtc->cached_encoder_mask); crtc->state->enable, sde_crtc->cached_encoder_mask);
@@ -5852,10 +5818,6 @@ static void sde_crtc_install_properties(struct drm_crtc *crtc,
sde_crtc_install_perf_properties(sde_crtc, sde_kms, catalog, info); sde_crtc_install_perf_properties(sde_crtc, sde_kms, catalog, info);
msm_property_install_range(&sde_crtc->property_info,
"idle_time", 0, 0, U64_MAX, 0,
CRTC_PROP_IDLE_TIMEOUT);
if (catalog->has_trusted_vm_support) { if (catalog->has_trusted_vm_support) {
int init_idx = sde_in_trusted_vm(sde_kms) ? 1 : 0; int init_idx = sde_in_trusted_vm(sde_kms) ? 1 : 0;
@@ -7048,12 +7010,8 @@ void sde_crtc_static_img_control(struct drm_crtc *crtc,
kthread_cancel_delayed_work_sync( kthread_cancel_delayed_work_sync(
&sde_crtc->static_cache_read_work); &sde_crtc->static_cache_read_work);
break; break;
case CACHE_STATE_PRE_CACHE:
if (sde_crtc->cache_state != CACHE_STATE_NORMAL)
return;
break;
case CACHE_STATE_FRAME_WRITE: case CACHE_STATE_FRAME_WRITE:
if (sde_crtc->cache_state != CACHE_STATE_PRE_CACHE) if (sde_crtc->cache_state != CACHE_STATE_NORMAL)
return; return;
break; break;
case CACHE_STATE_FRAME_READ: case CACHE_STATE_FRAME_READ:
@@ -7149,33 +7107,10 @@ void sde_crtc_static_cache_read_kickoff(struct drm_crtc *crtc)
msecs_to_jiffies(msecs_fps)); msecs_to_jiffies(msecs_fps));
} }
/*
* __sde_crtc_idle_notify_work - signal idle timeout to user space
*/
static void __sde_crtc_idle_notify_work(struct kthread_work *work)
{
struct sde_crtc *sde_crtc = container_of(work, struct sde_crtc,
idle_notify_work.work);
struct drm_crtc *crtc;
int ret = 0;
if (!sde_crtc) {
SDE_ERROR("invalid sde crtc\n");
} else {
crtc = &sde_crtc->base;
sde_crtc_event_notify(crtc, DRM_EVENT_IDLE_NOTIFY, sizeof(u32), ret);
SDE_DEBUG("crtc[%d]: idle timeout notified\n", crtc->base.id);
sde_crtc_static_img_control(crtc, CACHE_STATE_PRE_CACHE, false);
}
}
void sde_crtc_cancel_delayed_work(struct drm_crtc *crtc) void sde_crtc_cancel_delayed_work(struct drm_crtc *crtc)
{ {
struct sde_crtc *sde_crtc; struct sde_crtc *sde_crtc;
struct sde_crtc_state *cstate; struct sde_crtc_state *cstate;
bool idle_status;
bool cache_status; bool cache_status;
if (!crtc || !crtc->state) if (!crtc || !crtc->state)
@@ -7184,9 +7119,8 @@ void sde_crtc_cancel_delayed_work(struct drm_crtc *crtc)
sde_crtc = to_sde_crtc(crtc); sde_crtc = to_sde_crtc(crtc);
cstate = to_sde_crtc_state(crtc->state); cstate = to_sde_crtc_state(crtc->state);
idle_status = kthread_cancel_delayed_work_sync(&sde_crtc->idle_notify_work);
cache_status = kthread_cancel_delayed_work_sync(&sde_crtc->static_cache_read_work); cache_status = kthread_cancel_delayed_work_sync(&sde_crtc->static_cache_read_work);
SDE_EVT32(DRMID(crtc), idle_status, cache_status); SDE_EVT32(DRMID(crtc), cache_status);
} }
/* initialize crtc */ /* initialize crtc */
@@ -7281,8 +7215,6 @@ struct drm_crtc *sde_crtc_init(struct drm_device *dev, struct drm_plane *plane)
sde_crtc->new_perf.llcc_active[i] = false; sde_crtc->new_perf.llcc_active[i] = false;
} }
kthread_init_delayed_work(&sde_crtc->idle_notify_work,
__sde_crtc_idle_notify_work);
kthread_init_delayed_work(&sde_crtc->static_cache_read_work, kthread_init_delayed_work(&sde_crtc->static_cache_read_work,
__sde_crtc_static_cache_read_work); __sde_crtc_static_cache_read_work);

View File

@@ -80,7 +80,6 @@ enum sde_crtc_idle_pc_state {
* CACHE_STATE_DISABLED: sys cache has been disabled * CACHE_STATE_DISABLED: sys cache has been disabled
* CACHE_STATE_ENABLED: sys cache has been enabled * CACHE_STATE_ENABLED: sys cache has been enabled
* CACHE_STATE_NORMAL: sys cache is normal state * CACHE_STATE_NORMAL: sys cache is normal state
* CACHE_STATE_PRE_CACHE: frame cache is being prepared
* CACHE_STATE_FRAME_WRITE: sys cache is being written to * CACHE_STATE_FRAME_WRITE: sys cache is being written to
* CACHE_STATE_FRAME_READ: sys cache is being read * CACHE_STATE_FRAME_READ: sys cache is being read
*/ */
@@ -88,7 +87,6 @@ enum sde_crtc_cache_state {
CACHE_STATE_DISABLED, CACHE_STATE_DISABLED,
CACHE_STATE_ENABLED, CACHE_STATE_ENABLED,
CACHE_STATE_NORMAL, CACHE_STATE_NORMAL,
CACHE_STATE_PRE_CACHE,
CACHE_STATE_FRAME_WRITE, CACHE_STATE_FRAME_WRITE,
CACHE_STATE_FRAME_READ CACHE_STATE_FRAME_READ
}; };
@@ -304,7 +302,6 @@ struct sde_frame_data {
* @misr_reconfigure : boolean entry indicates misr reconfigure status * @misr_reconfigure : boolean entry indicates misr reconfigure status
* @misr_frame_count : misr frame count provided by client * @misr_frame_count : misr frame count provided by client
* @misr_data : store misr data before turning off the clocks. * @misr_data : store misr data before turning off the clocks.
* @idle_notify_work: delayed worker to notify idle timeout to user space
* @power_event : registered power event handle * @power_event : registered power event handle
* @cur_perf : current performance committed to clock/bandwidth driver * @cur_perf : current performance committed to clock/bandwidth driver
* @plane_mask_old: keeps track of the planes used in the previous commit * @plane_mask_old: keeps track of the planes used in the previous commit
@@ -394,7 +391,6 @@ struct sde_crtc {
bool misr_enable_debugfs; bool misr_enable_debugfs;
bool misr_reconfigure; bool misr_reconfigure;
u32 misr_frame_count; u32 misr_frame_count;
struct kthread_delayed_work idle_notify_work;
struct sde_power_event *power_event; struct sde_power_event *power_event;