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>
This commit is contained in:
GG Hou
2023-04-13 14:23:24 +08:00
کامیت شده توسط Gerrit - the friendly Code Review server
والد 54209fb4d0
کامیت d2812ee4e7
4فایلهای تغییر یافته به همراه154 افزوده شده و 1 حذف شده

مشاهده پرونده

@@ -976,6 +976,28 @@ struct msm_drm_thread {
struct kthread_worker worker;
};
/**
* struct msm_fence_error_ops - hooks for communication with fence error clients
* @fence_error_handle_submodule: fence error handle for display submodule
*/
struct msm_fence_error_ops {
int (*fence_error_handle_submodule)(void *ctl_data, void *priv_data);
};
/**
* msm_fence_error_client_entry - defines the msm fence error client info
* @ops: client msm_fence_error_ops
* @dev: client device id
* @data: client custom data
* @list: linked list entry
*/
struct msm_fence_error_client_entry {
struct msm_fence_error_ops ops;
struct device *dev;
void *data;
struct list_head list;
};
struct msm_drm_private {
struct drm_device *dev;
@@ -1102,6 +1124,9 @@ struct msm_drm_private {
struct mutex vm_client_lock;
struct list_head vm_client_list;
struct mutex fence_error_client_lock;
struct list_head fence_error_client_list;
};
/* get struct msm_kms * from drm_device * */
@@ -1138,6 +1163,25 @@ void msm_atomic_state_free(struct drm_atomic_state *state);
void msm_atomic_flush_display_threads(struct msm_drm_private *priv);
/**
* msm_register_fence_error_event - api for display dependent drivers(clients) to
* register for fence error events
* @dev: msm device
* @ops: fence error event hooks
* @priv_data: client custom data
*/
void *msm_register_fence_error_event(struct drm_device *ddev, struct msm_fence_error_ops *ops,
void *priv_data);
/**
* msm_unregister_fence_error_event - api for display dependent drivers(clients) to
* unregister for fence error events
* @dev: msm device
* @client_entry_handle: client_entry pointer
*/
int msm_unregister_fence_error_event(struct drm_device *ddev,
struct msm_fence_error_client_entry *client_entry_handle);
int msm_gem_init_vma(struct msm_gem_address_space *aspace,
struct msm_gem_vma *vma, int npages);
void msm_gem_unmap_vma(struct msm_gem_address_space *aspace,