diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_kms.h')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_kms.h | 33 | 
1 files changed, 27 insertions, 6 deletions
| diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h index 1cbef6b200b7..d8151a89e163 100644 --- a/drivers/gpu/drm/msm/msm_kms.h +++ b/drivers/gpu/drm/msm/msm_kms.h @@ -136,7 +136,8 @@ struct msm_kms;   */  struct msm_pending_timer {  	struct hrtimer timer; -	struct work_struct work; +	struct kthread_work work; +	struct kthread_worker *worker;  	struct msm_kms *kms;  	unsigned crtc_idx;  }; @@ -155,21 +156,37 @@ struct msm_kms {  	 * For async commit, where ->flush_commit() and later happens  	 * from the crtc's pending_timer close to end of the frame:  	 */ -	struct mutex commit_lock; +	struct mutex commit_lock[MAX_CRTCS];  	unsigned pending_crtc_mask;  	struct msm_pending_timer pending_timers[MAX_CRTCS];  }; -static inline void msm_kms_init(struct msm_kms *kms, +static inline int msm_kms_init(struct msm_kms *kms,  		const struct msm_kms_funcs *funcs)  { -	unsigned i; +	unsigned i, ret; + +	for (i = 0; i < ARRAY_SIZE(kms->commit_lock); i++) +		mutex_init(&kms->commit_lock[i]); -	mutex_init(&kms->commit_lock);  	kms->funcs = funcs; +	for (i = 0; i < ARRAY_SIZE(kms->pending_timers); i++) { +		ret = msm_atomic_init_pending_timer(&kms->pending_timers[i], kms, i); +		if (ret) { +			return ret; +		} +	} + +	return 0; +} + +static inline void msm_kms_destroy(struct msm_kms *kms) +{ +	unsigned i; +  	for (i = 0; i < ARRAY_SIZE(kms->pending_timers); i++) -		msm_atomic_init_pending_timer(&kms->pending_timers[i], kms, i); +		msm_atomic_destroy_pending_timer(&kms->pending_timers[i]);  }  struct msm_kms *mdp4_kms_init(struct drm_device *dev); @@ -194,4 +211,8 @@ int dpu_mdss_init(struct drm_device *dev);  	drm_for_each_crtc(crtc, dev) \  		for_each_if (drm_crtc_mask(crtc) & (crtc_mask)) +#define for_each_crtc_mask_reverse(dev, crtc, crtc_mask) \ +	drm_for_each_crtc_reverse(crtc, dev) \ +		for_each_if (drm_crtc_mask(crtc) & (crtc_mask)) +  #endif /* __MSM_KMS_H__ */ | 
