disp: msm: add support for display clients to register for fence error

Add framework for display submodules like PP, DSI, DP to register
for fence error and call the client callback funtion when fence
error occurs.

Change-Id: I70cc6b01907177e6c4238c4398fe2c085a000322
Signed-off-by: GG Hou <quic_renjhou@quicinc.com>
这个提交包含在:
GG Hou
2023-04-13 14:23:24 +08:00
提交者 Gerrit - the friendly Code Review server
父节点 54209fb4d0
当前提交 d2812ee4e7
修改 4 个文件,包含 154 行新增1 行删除

查看文件

@@ -2181,6 +2181,8 @@ int sde_encoder_hw_fence_error_handle(struct drm_encoder *drm_enc)
{
struct sde_encoder_virt *sde_enc;
struct sde_encoder_phys *phys_enc;
struct msm_drm_private *priv;
struct msm_fence_error_client_entry *entry;
int rc = 0;
sde_enc = to_sde_encoder_virt(drm_enc);
@@ -2204,6 +2206,25 @@ int sde_encoder_hw_fence_error_handle(struct drm_encoder *drm_enc)
SDE_EVT32(DRMID(phys_enc->parent), rc, SDE_EVTLOG_ERROR);
}
if (!phys_enc->sde_kms && !phys_enc->sde_kms->dev && !phys_enc->sde_kms->dev->dev_private) {
SDE_EVT32(DRMID(drm_enc), SDE_EVTLOG_ERROR);
return -EINVAL;
}
priv = phys_enc->sde_kms->dev->dev_private;
list_for_each_entry(entry, &priv->fence_error_client_list, list) {
if (!entry->ops.fence_error_handle_submodule)
continue;
SDE_EVT32(DRMID(drm_enc), SDE_EVTLOG_FUNC_CASE1);
rc = entry->ops.fence_error_handle_submodule(phys_enc->hw_ctl, entry->data);
if (rc) {
SDE_ERROR("fence_error_handle_submodule failed for device: %d\n",
entry->dev->id);
SDE_EVT32(DRMID(drm_enc), rc, SDE_EVTLOG_ERROR);
}
}
phys_enc->sde_hw_fence_error_status = false;
SDE_EVT32(DRMID(drm_enc), SDE_EVTLOG_FUNC_EXIT);
return rc;