From: Ben Skeggs Date: Fri, 19 Jun 2020 23:20:17 +0000 (+1000) Subject: drm/nouveau/kms/nv50-: convert wndw image_set() to new push macros X-Git-Tag: v5.9-rc1~134^2~7^2~96 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6d6e11e2844015a5f6c3d0373966fd4a459add8b;p=thirdparty%2Flinux.git drm/nouveau/kms/nv50-: convert wndw image_set() to new push macros Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- diff --git a/drivers/gpu/drm/nouveau/dispnv50/base507c.c b/drivers/gpu/drm/nouveau/dispnv50/base507c.c index 760ee65613a72..ae1c5cc009579 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/base507c.c +++ b/drivers/gpu/drm/nouveau/dispnv50/base507c.c @@ -56,37 +56,35 @@ base507c_image_clr(struct nv50_wndw *wndw) } } -static void +static int base507c_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - if ((push = evo_wait(&wndw->wndw, 13))) { - evo_mthd(push, 0x0084, 1); - evo_data(push, asyw->image.mode << 8 | - asyw->image.interval << 4); - evo_mthd(push, 0x00c0, 1); - evo_data(push, asyw->image.handle[0]); - if (asyw->image.format == 0xca) { - evo_mthd(push, 0x0110, 2); - evo_data(push, 1); - evo_data(push, 0x6400); - } else { - evo_mthd(push, 0x0110, 2); - evo_data(push, 0); - evo_data(push, 0); - } - evo_mthd(push, 0x0800, 5); - evo_data(push, asyw->image.offset[0] >> 8); - evo_data(push, 0x00000000); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 20 | - (asyw->image.pitch[0] >> 8) << 8 | - asyw->image.blocks[0] << 8 | - asyw->image.blockh); - evo_data(push, asyw->image.kind << 16 | - asyw->image.format << 8); - evo_kick(push, &wndw->wndw); + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 13))) + return ret; + + PUSH_NVSQ(push, NV507C, 0x0084, asyw->image.mode << 8 | + asyw->image.interval << 4); + PUSH_NVSQ(push, NV507C, 0x00c0, asyw->image.handle[0]); + if (asyw->image.format == 0xca) { + PUSH_NVSQ(push, NV507C, 0x0110, 1, + 0x0114, 0x6400); + } else { + PUSH_NVSQ(push, NV507C, 0x0110, 0, + 0x0114, 0); } + PUSH_NVSQ(push, NV507C, 0x0800, asyw->image.offset[0] >> 8, + 0x0804, 0x00000000, + 0x0808, asyw->image.h << 16 | asyw->image.w, + 0x080c, asyw->image.layout << 20 | + (asyw->image.pitch[0] >> 8) << 8 | + asyw->image.blocks[0] << 8 | + asyw->image.blockh, + 0x0810, asyw->image.kind << 16 | + asyw->image.format << 8); + return 0; } int diff --git a/drivers/gpu/drm/nouveau/dispnv50/base827c.c b/drivers/gpu/drm/nouveau/dispnv50/base827c.c index f4c05949dd625..c1995194aa7b3 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/base827c.c +++ b/drivers/gpu/drm/nouveau/dispnv50/base827c.c @@ -21,36 +21,36 @@ */ #include "base.h" -static void +#include + +static int base827c_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - if ((push = evo_wait(&wndw->wndw, 13))) { - evo_mthd(push, 0x0084, 1); - evo_data(push, asyw->image.mode << 8 | - asyw->image.interval << 4); - evo_mthd(push, 0x00c0, 1); - evo_data(push, asyw->image.handle[0]); - if (asyw->image.format == 0xca) { - evo_mthd(push, 0x0110, 2); - evo_data(push, 1); - evo_data(push, 0x6400); - } else { - evo_mthd(push, 0x0110, 2); - evo_data(push, 0); - evo_data(push, 0); - } - evo_mthd(push, 0x0800, 5); - evo_data(push, asyw->image.offset[0] >> 8); - evo_data(push, 0x00000000); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 20 | - (asyw->image.pitch[0] >> 8) << 8 | - asyw->image.blocks[0] << 8 | - asyw->image.blockh); - evo_data(push, asyw->image.format << 8); - evo_kick(push, &wndw->wndw); + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 13))) + return ret; + + PUSH_NVSQ(push, NV827C, 0x0084, asyw->image.mode << 8 | + asyw->image.interval << 4); + PUSH_NVSQ(push, NV827C, 0x00c0, asyw->image.handle[0]); + if (asyw->image.format == 0xca) { + PUSH_NVSQ(push, NV827C, 0x0110, 1, + 0x0114, 0x6400); + } else { + PUSH_NVSQ(push, NV827C, 0x0110, 0, + 0x0114, 0); } + PUSH_NVSQ(push, NV827C, 0x0800, asyw->image.offset[0] >> 8, + 0x0804, 0x00000000, + 0x0808, asyw->image.h << 16 | asyw->image.w, + 0x080c, asyw->image.layout << 20 | + (asyw->image.pitch[0] >> 8) << 8 | + asyw->image.blocks[0] << 8 | + asyw->image.blockh, + 0x0810, asyw->image.format << 8); + return 0; } static const struct nv50_wndw_func diff --git a/drivers/gpu/drm/nouveau/dispnv50/base907c.c b/drivers/gpu/drm/nouveau/dispnv50/base907c.c index d50fa80f3c999..c88a924d7d09c 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/base907c.c +++ b/drivers/gpu/drm/nouveau/dispnv50/base907c.c @@ -23,27 +23,27 @@ #include -static void +static int base907c_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - if ((push = evo_wait(&wndw->wndw, 10))) { - evo_mthd(push, 0x0084, 1); - evo_data(push, asyw->image.mode << 8 | - asyw->image.interval << 4); - evo_mthd(push, 0x00c0, 1); - evo_data(push, asyw->image.handle[0]); - evo_mthd(push, 0x0400, 5); - evo_data(push, asyw->image.offset[0] >> 8); - evo_data(push, 0x00000000); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 24 | - (asyw->image.pitch[0] >> 8) << 8 | - asyw->image.blocks[0] << 8 | - asyw->image.blockh); - evo_data(push, asyw->image.format << 8); - evo_kick(push, &wndw->wndw); - } + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 10))) + return ret; + + PUSH_NVSQ(push, NV907C, 0x0084, asyw->image.mode << 8 | + asyw->image.interval << 4); + PUSH_NVSQ(push, NV907C, 0x00c0, asyw->image.handle[0]); + PUSH_NVSQ(push, NV907C, 0x0400, asyw->image.offset[0] >> 8, + 0x0404, 0x00000000, + 0x0408, asyw->image.h << 16 | asyw->image.w, + 0x040c, asyw->image.layout << 24 | + (asyw->image.pitch[0] >> 8) << 8 | + asyw->image.blocks[0] << 8 | + asyw->image.blockh, + 0x0410, asyw->image.format << 8); + return 0; } static int diff --git a/drivers/gpu/drm/nouveau/dispnv50/ovly507e.c b/drivers/gpu/drm/nouveau/dispnv50/ovly507e.c index 151064aa19e18..e182f376900fd 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/ovly507e.c +++ b/drivers/gpu/drm/nouveau/dispnv50/ovly507e.c @@ -28,6 +28,7 @@ #include #include +#include void ovly507e_update(struct nv50_wndw *wndw, u32 *interlock) @@ -66,30 +67,28 @@ ovly507e_image_clr(struct nv50_wndw *wndw) } } -static void +static int ovly507e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - if ((push = evo_wait(&wndw->wndw, 12))) { - evo_mthd(push, 0x0084, 1); - evo_data(push, asyw->image.interval << 4); - evo_mthd(push, 0x00c0, 1); - evo_data(push, asyw->image.handle[0]); - evo_mthd(push, 0x0100, 1); - evo_data(push, 0x00000002); - evo_mthd(push, 0x0800, 1); - evo_data(push, asyw->image.offset[0] >> 8); - evo_mthd(push, 0x0808, 3); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 20 | - (asyw->image.pitch[0] >> 8) << 8 | - asyw->image.blocks[0] << 8 | - asyw->image.blockh); - evo_data(push, asyw->image.kind << 16 | - asyw->image.format << 8 | - asyw->image.colorspace); - evo_kick(push, &wndw->wndw); - } + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 12))) + return ret; + + PUSH_NVSQ(push, NV507E, 0x0084, asyw->image.interval << 4); + PUSH_NVSQ(push, NV507E, 0x00c0, asyw->image.handle[0]); + PUSH_NVSQ(push, NV507E, 0x0100, 0x00000002); + PUSH_NVSQ(push, NV507E, 0x0800, asyw->image.offset[0] >> 8); + PUSH_NVSQ(push, NV507E, 0x0808, asyw->image.h << 16 | asyw->image.w, + 0x080c, asyw->image.layout << 20 | + (asyw->image.pitch[0] >> 8) << 8 | + asyw->image.blocks[0] << 8 | + asyw->image.blockh, + 0x0810, asyw->image.kind << 16 | + asyw->image.format << 8 | + asyw->image.colorspace); + return 0; } void diff --git a/drivers/gpu/drm/nouveau/dispnv50/ovly827e.c b/drivers/gpu/drm/nouveau/dispnv50/ovly827e.c index 37e37a7d4ba9c..cb0f372cbcf7a 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/ovly827e.c +++ b/drivers/gpu/drm/nouveau/dispnv50/ovly827e.c @@ -24,31 +24,30 @@ #include +#include #include -static void +static int ovly827e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - if ((push = evo_wait(&wndw->wndw, 12))) { - evo_mthd(push, 0x0084, 1); - evo_data(push, asyw->image.interval << 4); - evo_mthd(push, 0x00c0, 1); - evo_data(push, asyw->image.handle[0]); - evo_mthd(push, 0x0100, 1); - evo_data(push, 0x00000002); - evo_mthd(push, 0x0800, 1); - evo_data(push, asyw->image.offset[0] >> 8); - evo_mthd(push, 0x0808, 3); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 20 | - (asyw->image.pitch[0] >> 8) << 8 | - asyw->image.blocks[0] << 8 | - asyw->image.blockh); - evo_data(push, asyw->image.format << 8 | - asyw->image.colorspace); - evo_kick(push, &wndw->wndw); - } + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 12))) + return ret; + + PUSH_NVSQ(push, NV827E, 0x0084, asyw->image.interval << 4); + PUSH_NVSQ(push, NV827E, 0x00c0, asyw->image.handle[0]); + PUSH_NVSQ(push, NV827E, 0x0100, 0x00000002); + PUSH_NVSQ(push, NV827E, 0x0800, asyw->image.offset[0] >> 8); + PUSH_NVSQ(push, NV827E, 0x0808, asyw->image.h << 16 | asyw->image.w, + 0x080c, asyw->image.layout << 20 | + (asyw->image.pitch[0] >> 8) << 8 | + asyw->image.blocks[0] << 8 | + asyw->image.blockh, + 0x0810, asyw->image.format << 8 | + asyw->image.colorspace); + return 0; } int diff --git a/drivers/gpu/drm/nouveau/dispnv50/ovly907e.c b/drivers/gpu/drm/nouveau/dispnv50/ovly907e.c index 73fb5d4eb3433..6b83daff15601 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/ovly907e.c +++ b/drivers/gpu/drm/nouveau/dispnv50/ovly907e.c @@ -22,29 +22,29 @@ #include "ovly.h" #include "atom.h" -static void +#include + +static int ovly907e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - if ((push = evo_wait(&wndw->wndw, 12))) { - evo_mthd(push, 0x0084, 1); - evo_data(push, asyw->image.interval << 4); - evo_mthd(push, 0x00c0, 1); - evo_data(push, asyw->image.handle[0]); - evo_mthd(push, 0x0100, 1); - evo_data(push, 0x00000002); - evo_mthd(push, 0x0400, 1); - evo_data(push, asyw->image.offset[0] >> 8); - evo_mthd(push, 0x0408, 3); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 24 | - (asyw->image.pitch[0] >> 8) << 8 | - asyw->image.blocks[0] << 8 | - asyw->image.blockh); - evo_data(push, asyw->image.format << 8 | - asyw->image.colorspace); - evo_kick(push, &wndw->wndw); - } + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 12))) + return ret; + + PUSH_NVSQ(push, NV907E, 0x0084, asyw->image.interval << 4); + PUSH_NVSQ(push, NV907E, 0x00c0, asyw->image.handle[0]); + PUSH_NVSQ(push, NV907E, 0x0100, 0x00000002); + PUSH_NVSQ(push, NV907E, 0x0400, asyw->image.offset[0] >> 8); + PUSH_NVSQ(push, NV907E, 0x0408, asyw->image.h << 16 | asyw->image.w, + 0x040c, asyw->image.layout << 24 | + (asyw->image.pitch[0] >> 8) << 8 | + asyw->image.blocks[0] << 8 | + asyw->image.blockh, + 0x0410, asyw->image.format << 8 | + asyw->image.colorspace); + return 0; } const struct nv50_wndw_func diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.h b/drivers/gpu/drm/nouveau/dispnv50/wndw.h index 6baf27090fc2b..d6e1c29da3796 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/wndw.h +++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.h @@ -74,7 +74,7 @@ struct nv50_wndw_func { bool olut_core; int (*xlut_set)(struct nv50_wndw *, struct nv50_wndw_atom *); int (*xlut_clr)(struct nv50_wndw *); - void (*image_set)(struct nv50_wndw *, struct nv50_wndw_atom *); + int (*image_set)(struct nv50_wndw *, struct nv50_wndw_atom *); void (*image_clr)(struct nv50_wndw *); void (*scale_set)(struct nv50_wndw *, struct nv50_wndw_atom *); void (*blend_set)(struct nv50_wndw *, struct nv50_wndw_atom *); diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndwc37e.c b/drivers/gpu/drm/nouveau/dispnv50/wndwc37e.c index eab1c322eccb6..24cb4e9b356e5 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/wndwc37e.c +++ b/drivers/gpu/drm/nouveau/dispnv50/wndwc37e.c @@ -125,37 +125,34 @@ wndwc37e_image_clr(struct nv50_wndw *wndw) } } -static void +static int wndwc37e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; + struct nvif_push *push = wndw->wndw.push; + int ret; - if (!(push = evo_wait(&wndw->wndw, 17))) - return; - - evo_mthd(push, 0x0308, 1); - evo_data(push, asyw->image.mode << 4 | asyw->image.interval); - evo_mthd(push, 0x0224, 4); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 4 | asyw->image.blockh); - evo_data(push, asyw->csc.valid << 17 | - asyw->image.colorspace << 8 | - asyw->image.format); - evo_data(push, asyw->image.blocks[0] | (asyw->image.pitch[0] >> 6)); - evo_mthd(push, 0x0240, 1); - evo_data(push, asyw->image.handle[0]); - evo_mthd(push, 0x0260, 1); - evo_data(push, asyw->image.offset[0] >> 8); - evo_mthd(push, 0x0290, 1); - evo_data(push, (asyw->state.src_y >> 16) << 16 | - (asyw->state.src_x >> 16)); - evo_mthd(push, 0x0298, 1); - evo_data(push, (asyw->state.src_h >> 16) << 16 | - (asyw->state.src_w >> 16)); - evo_mthd(push, 0x02a4, 1); - evo_data(push, asyw->state.crtc_h << 16 | - asyw->state.crtc_w); - evo_kick(push, &wndw->wndw); + if ((ret = PUSH_WAIT(push, 17))) + return ret; + + PUSH_NVSQ(push, NVC37E, 0x0308, asyw->image.mode << 4 | + asyw->image.interval); + PUSH_NVSQ(push, NVC37E, 0x0224, asyw->image.h << 16 | asyw->image.w, + 0x0228, asyw->image.layout << 4 | + asyw->image.blockh, + 0x022c, asyw->csc.valid << 17 | + asyw->image.colorspace << 8 | + asyw->image.format, + 0x0230, asyw->image.blocks[0] | + (asyw->image.pitch[0] >> 6)); + PUSH_NVSQ(push, NVC37E, 0x0240, asyw->image.handle[0]); + PUSH_NVSQ(push, NVC37E, 0x0260, asyw->image.offset[0] >> 8); + PUSH_NVSQ(push, NVC37E, 0x0290,(asyw->state.src_y >> 16) << 16 | + (asyw->state.src_x >> 16)); + PUSH_NVSQ(push, NVC37E, 0x0298,(asyw->state.src_h >> 16) << 16 | + (asyw->state.src_w >> 16)); + PUSH_NVSQ(push, NVC37E, 0x02a4, asyw->state.crtc_h << 16 | + asyw->state.crtc_w); + return 0; } int diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndwc57e.c b/drivers/gpu/drm/nouveau/dispnv50/wndwc57e.c index f393399baab14..687cb7378c69d 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/wndwc57e.c +++ b/drivers/gpu/drm/nouveau/dispnv50/wndwc57e.c @@ -29,36 +29,33 @@ #include #include -static void +static int wndwc57e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) { - u32 *push; - - if (!(push = evo_wait(&wndw->wndw, 17))) - return; - - evo_mthd(push, 0x0308, 1); - evo_data(push, asyw->image.mode << 4 | asyw->image.interval); - evo_mthd(push, 0x0224, 4); - evo_data(push, asyw->image.h << 16 | asyw->image.w); - evo_data(push, asyw->image.layout << 4 | asyw->image.blockh); - evo_data(push, asyw->image.colorspace << 8 | - asyw->image.format); - evo_data(push, asyw->image.blocks[0] | (asyw->image.pitch[0] >> 6)); - evo_mthd(push, 0x0240, 1); - evo_data(push, asyw->image.handle[0]); - evo_mthd(push, 0x0260, 1); - evo_data(push, asyw->image.offset[0] >> 8); - evo_mthd(push, 0x0290, 1); - evo_data(push, (asyw->state.src_y >> 16) << 16 | - (asyw->state.src_x >> 16)); - evo_mthd(push, 0x0298, 1); - evo_data(push, (asyw->state.src_h >> 16) << 16 | - (asyw->state.src_w >> 16)); - evo_mthd(push, 0x02a4, 1); - evo_data(push, asyw->state.crtc_h << 16 | - asyw->state.crtc_w); - evo_kick(push, &wndw->wndw); + struct nvif_push *push = wndw->wndw.push; + int ret; + + if ((ret = PUSH_WAIT(push, 17))) + return ret; + + PUSH_NVSQ(push, NVC57E, 0x0308, asyw->image.mode << 4 | + asyw->image.interval); + PUSH_NVSQ(push, NVC57E, 0x0224, asyw->image.h << 16 | asyw->image.w, + 0x0228, asyw->image.layout << 4 | + asyw->image.blockh, + 0x022c, asyw->image.colorspace << 8 | + asyw->image.format, + 0x0230, asyw->image.blocks[0] | + (asyw->image.pitch[0] >> 6)); + PUSH_NVSQ(push, NVC57E, 0x0240, asyw->image.handle[0]); + PUSH_NVSQ(push, NVC57E, 0x0260, asyw->image.offset[0] >> 8); + PUSH_NVSQ(push, NVC57E, 0x0290,(asyw->state.src_y >> 16) << 16 | + (asyw->state.src_x >> 16)); + PUSH_NVSQ(push, NVC57E, 0x0298,(asyw->state.src_h >> 16) << 16 | + (asyw->state.src_w >> 16)); + PUSH_NVSQ(push, NVC57E, 0x02a4, asyw->state.crtc_h << 16 | + asyw->state.crtc_w); + return 0; } static int