drm/radeon: rework page flip handling v4
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 v4: update crtc->primary->fb when the flip actually happens Signed-off-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:

committed by
Dave Airlie

parent
b15eb4ea15
commit
fa7f517cb2
@@ -676,14 +676,16 @@ void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell);
|
||||
* IRQS.
|
||||
*/
|
||||
|
||||
struct radeon_unpin_work {
|
||||
struct work_struct work;
|
||||
struct radeon_device *rdev;
|
||||
int crtc_id;
|
||||
struct radeon_fence *fence;
|
||||
struct radeon_flip_work {
|
||||
struct work_struct flip_work;
|
||||
struct work_struct unpin_work;
|
||||
struct radeon_device *rdev;
|
||||
int crtc_id;
|
||||
struct drm_framebuffer *fb;
|
||||
struct drm_pending_vblank_event *event;
|
||||
struct radeon_bo *old_rbo;
|
||||
u64 new_crtc_base;
|
||||
struct radeon_bo *old_rbo;
|
||||
struct radeon_bo *new_rbo;
|
||||
struct radeon_fence *fence;
|
||||
};
|
||||
|
||||
struct r500_irq_stat_regs {
|
||||
|
Reference in New Issue
Block a user