Skip to content

Commit

Permalink
drm/nouveau/kms/nv50-: wait for FIFO space on PIO channels
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
  • Loading branch information
Ben Skeggs committed Apr 7, 2020
1 parent ed3d148 commit 374b558
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
21 changes: 18 additions & 3 deletions drivers/gpu/drm/nouveau/dispnv50/curs507a.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,36 @@
#include "head.h"

#include <nvif/cl507a.h>
#include <nvif/timer.h>

#include <drm/drm_atomic_helper.h>
#include <drm/drm_plane_helper.h>

bool
curs507a_space(struct nv50_wndw *wndw)
{
nvif_msec(&nouveau_drm(wndw->plane.dev)->client.device, 2,
if (nvif_rd32(&wndw->wimm.base.user, 0x0008) >= 4)
return true;
);
WARN_ON(1);
return false;
}

static void
curs507a_update(struct nv50_wndw *wndw, u32 *interlock)
{
nvif_wr32(&wndw->wimm.base.user, 0x0080, 0x00000000);
if (curs507a_space(wndw))
nvif_wr32(&wndw->wimm.base.user, 0x0080, 0x00000000);
}

static void
curs507a_point(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
{
nvif_wr32(&wndw->wimm.base.user, 0x0084, asyw->point.y << 16 |
asyw->point.x);
if (curs507a_space(wndw)) {
nvif_wr32(&wndw->wimm.base.user, 0x0084, asyw->point.y << 16 |
asyw->point.x);
}
}

const struct nv50_wimm_func
Expand Down
9 changes: 6 additions & 3 deletions drivers/gpu/drm/nouveau/dispnv50/cursc37a.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,17 @@
static void
cursc37a_update(struct nv50_wndw *wndw, u32 *interlock)
{
nvif_wr32(&wndw->wimm.base.user, 0x0200, 0x00000001);
if (curs507a_space(wndw))
nvif_wr32(&wndw->wimm.base.user, 0x0200, 0x00000001);
}

static void
cursc37a_point(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
{
nvif_wr32(&wndw->wimm.base.user, 0x0208, asyw->point.y << 16 |
asyw->point.x);
if (curs507a_space(wndw)) {
nvif_wr32(&wndw->wimm.base.user, 0x0208, asyw->point.y << 16 |
asyw->point.x);
}
}

static const struct nv50_wimm_func
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/nouveau/dispnv50/wndw.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ struct nv50_wimm_func {
};

extern const struct nv50_wimm_func curs507a;
bool curs507a_space(struct nv50_wndw *);

int wndwc37e_new(struct nouveau_drm *, enum drm_plane_type, int, s32,
struct nv50_wndw **);
Expand Down

0 comments on commit 374b558

Please sign in to comment.