diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2020-06-21 02:19:40 +0200 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2020-07-24 10:50:51 +0200 |
commit | bea8395ccf175b599fd3e36df56dd8a67adcea9e (patch) | |
tree | 497a1da9cdd252b08295fc7f56487e947d6a9855 /drivers/gpu/drm/nouveau/dispnv50 | |
parent | drm/nouveau/kms/nv50-: wrap existing command submission in nvif_push interface (diff) | |
download | linux-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.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/dispnv50/cursc37a.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/dispnv50/wndw.h | 9 |
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 *, |