Commit 1aab5514 authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/radeon: rework page flip handling v3

Instead of trying to flip inside the vblank period when
the buffer is idle, offload blocking for idle to a kernel
thread and program the flip directly into the hardware.

v2: add error handling, fix EBUSY handling
v3: add proper exclusive_lock handling
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 1a0e7918
...@@ -676,14 +676,16 @@ void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell); ...@@ -676,14 +676,16 @@ void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell);
* IRQS. * IRQS.
*/ */
struct radeon_unpin_work { struct radeon_flip_work {
struct work_struct work; struct work_struct flip_work;
struct radeon_device *rdev; struct work_struct unpin_work;
int crtc_id; struct radeon_device *rdev;
struct radeon_fence *fence; int crtc_id;
struct drm_framebuffer *fb;
struct drm_pending_vblank_event *event; struct drm_pending_vblank_event *event;
struct radeon_bo *old_rbo; struct radeon_bo *old_rbo;
u64 new_crtc_base; struct radeon_bo *new_rbo;
struct radeon_fence *fence;
}; };
struct r500_irq_stat_regs { struct r500_irq_stat_regs {
......
This diff is collapsed.
...@@ -325,8 +325,8 @@ struct radeon_crtc { ...@@ -325,8 +325,8 @@ struct radeon_crtc {
struct drm_display_mode native_mode; struct drm_display_mode native_mode;
int pll_id; int pll_id;
/* page flipping */ /* page flipping */
struct radeon_unpin_work *unpin_work; struct workqueue_struct *flip_queue;
int deferred_flip_completion; struct radeon_flip_work *flip_work;
/* pll sharing */ /* pll sharing */
struct radeon_atom_ss ss; struct radeon_atom_ss ss;
bool ss_enabled; bool ss_enabled;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment