mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 14:48:06 +00:00
drm/armada: move overlay plane work out from under spinlock
Move the overlay plane work out from under the spinlock so that both the primary and overlay planes run their work in the same context. This is necessary so that we can use frame works with the overlay plane. However, we must update the CRTC registers under the spinlock, so fix up the overlay code for that. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
d76dcc7236
commit
a3f6a18f9a
2 changed files with 5 additions and 1 deletions
|
@ -471,11 +471,11 @@ static void armada_drm_crtc_irq(struct armada_crtc *dcrtc, u32 stat)
|
|||
if (stat & VSYNC_IRQ)
|
||||
drm_crtc_handle_vblank(&dcrtc->crtc);
|
||||
|
||||
spin_lock(&dcrtc->irq_lock);
|
||||
ovl_plane = dcrtc->plane;
|
||||
if (ovl_plane)
|
||||
armada_drm_plane_work_run(dcrtc, ovl_plane);
|
||||
|
||||
spin_lock(&dcrtc->irq_lock);
|
||||
if (stat & GRA_FRAME_IRQ && dcrtc->interlaced) {
|
||||
int i = stat & GRA_FRAME_IRQ0 ? 0 : 1;
|
||||
uint32_t val;
|
||||
|
|
|
@ -84,10 +84,14 @@ static void armada_ovl_plane_work(struct armada_crtc *dcrtc,
|
|||
{
|
||||
struct armada_ovl_plane *dplane = container_of(work->plane,
|
||||
struct armada_ovl_plane, base.base);
|
||||
unsigned long flags;
|
||||
|
||||
trace_armada_ovl_plane_work(&dcrtc->crtc, work->plane);
|
||||
|
||||
spin_lock_irqsave(&dcrtc->irq_lock, flags);
|
||||
armada_drm_crtc_update_regs(dcrtc, dplane->vbl.regs);
|
||||
spin_unlock_irqrestore(&dcrtc->irq_lock, flags);
|
||||
|
||||
armada_ovl_retire_fb(dplane, NULL);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue