summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/dispnv50
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2020-06-21 02:19:40 +0200
committerBen Skeggs <bskeggs@redhat.com>2020-07-24 10:50:51 +0200
commitbea8395ccf175b599fd3e36df56dd8a67adcea9e (patch)
tree497a1da9cdd252b08295fc7f56487e947d6a9855 /drivers/gpu/drm/nouveau/dispnv50
parentdrm/nouveau/kms/nv50-: wrap existing command submission in nvif_push interface (diff)
downloadlinux-bea8395ccf175b599fd3e36df56dd8a67adcea9e.tar.xz
linux-bea8395ccf175b599fd3e36df56dd8a67adcea9e.zip
drm/nouveau/kms/nv50-: convert wimm point() to new push macros
Signed-off-by: Ben Skeggs <bskeggs@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/dispnv50')
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/curs507a.c6
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/cursc37a.c6
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c17
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/wndw.h9
4 files changed, 26 insertions, 12 deletions
diff --git a/drivers/gpu/drm/nouveau/dispnv50/curs507a.c b/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
index 2468e91b36db..babf680c25fd 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/curs507a.c
@@ -47,13 +47,15 @@ curs507a_update(struct nv50_wndw *wndw, u32 *interlock)
nvif_wr32(&wndw->wimm.base.user, 0x0080, 0x00000000);
}
-static void
+static int
curs507a_point(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
{
- if (curs507a_space(wndw)) {
+ int ret = nvif_chan_wait(&wndw->wimm, 1);
+ if (ret == 0) {
nvif_wr32(&wndw->wimm.base.user, 0x0084, asyw->point.y << 16 |
asyw->point.x);
}
+ return ret;
}
const struct nv50_wimm_func
diff --git a/drivers/gpu/drm/nouveau/dispnv50/cursc37a.c b/drivers/gpu/drm/nouveau/dispnv50/cursc37a.c
index 96dff4f09f57..45c1c33e950a 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/cursc37a.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/cursc37a.c
@@ -29,13 +29,15 @@ cursc37a_update(struct nv50_wndw *wndw, u32 *interlock)
nvif_wr32(&wndw->wimm.base.user, 0x0200, 0x00000001);
}
-static void
+static int
cursc37a_point(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
{
- if (curs507a_space(wndw)) {
+ int ret = nvif_chan_wait(&wndw->wimm, 1);
+ if (ret == 0) {
nvif_wr32(&wndw->wimm.base.user, 0x0208, asyw->point.y << 16 |
asyw->point.x);
}
+ return ret;
}
static const struct nv50_wimm_func
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c b/drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c
index f7dbd965e4e7..4eb5abfb8ebf 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c
@@ -24,6 +24,7 @@
#include "wndw.h"
#include <nvif/clc37b.h>
+#include <nvif/pushc37b.h>
static void
wimmc37b_update(struct nv50_wndw *wndw, u32 *interlock)
@@ -39,15 +40,17 @@ wimmc37b_update(struct nv50_wndw *wndw, u32 *interlock)
}
}
-static void
+static int
wimmc37b_point(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
{
- u32 *push;
- if ((push = evo_wait(&wndw->wimm, 2))) {
- evo_mthd(push, 0x0208, 1);
- evo_data(push, asyw->point.y << 16 | asyw->point.x);
- evo_kick(push, &wndw->wimm);
- }
+ struct nvif_push *push = wndw->wimm.push;
+ int ret;
+
+ if ((ret = PUSH_WAIT(push, 2)))
+ return ret;
+
+ PUSH_NVSQ(push, NVC37B, 0x0208, asyw->point.y << 16 | asyw->point.x);
+ return 0;
}
static const struct nv50_wimm_func
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.h b/drivers/gpu/drm/nouveau/dispnv50/wndw.h
index a7412b9d3a98..53e496bfbc9d 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wndw.h
+++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.h
@@ -91,7 +91,7 @@ void base907c_csc(struct nv50_wndw *, struct nv50_wndw_atom *,
const struct drm_color_ctm *);
struct nv50_wimm_func {
- void (*point)(struct nv50_wndw *, struct nv50_wndw_atom *);
+ int (*point)(struct nv50_wndw *, struct nv50_wndw_atom *);
void (*update)(struct nv50_wndw *, u32 *interlock);
};
@@ -99,6 +99,13 @@ struct nv50_wimm_func {
extern const struct nv50_wimm_func curs507a;
bool curs507a_space(struct nv50_wndw *);
+static inline __must_check int
+nvif_chan_wait(struct nv50_dmac *dmac, u32 size)
+{
+ struct nv50_wndw *wndw = container_of(dmac, typeof(*wndw), wimm);
+ return curs507a_space(wndw) ? 0 : -ETIMEDOUT;
+}
+
int wndwc37e_new(struct nouveau_drm *, enum drm_plane_type, int, s32,
struct nv50_wndw **);
int wndwc37e_new_(const struct nv50_wndw_func *, struct nouveau_drm *,