diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2018-05-08 13:39:47 +0300 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2018-05-18 08:01:29 +0300 |
commit | 53e0a3e70de69dc9f498d26c6b5495b2771ee374 (patch) | |
tree | dace6fc2c8adfe40459ddcaa6731a69842a1b665 /drivers/gpu/drm/nouveau/dispnv50/wndw.h | |
parent | 34508f9d260cbd7b91f988c858f50ad956750ee3 (diff) | |
download | linux-53e0a3e70de69dc9f498d26c6b5495b2771ee374.tar.xz |
drm/nouveau/kms/nv50-: simplify tracking of channel interlocks
Instead of windows returning their core channel interlock mask if they
know core has been modified, it's recorded unconditionally and used if
required when update methods are emitted.
This will be required to support Volta.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/dispnv50/wndw.h')
-rw-r--r-- | drivers/gpu/drm/nouveau/dispnv50/wndw.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.h b/drivers/gpu/drm/nouveau/dispnv50/wndw.h index 8672c280a6a4..c26796c612f6 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/wndw.h +++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.h @@ -15,6 +15,7 @@ struct nv50_wndw { const struct nv50_wndw_func *func; const struct nv50_wimm_func *immd; int id; + struct nv50_disp_interlock interlock; struct { struct nvif_object *parent; @@ -34,13 +35,14 @@ struct nv50_wndw { int nv50_wndw_new_(const struct nv50_wndw_func *, struct drm_device *, enum drm_plane_type, const char *name, int index, - const u32 *format, u32 heads, struct nv50_wndw **); + const u32 *format, enum nv50_disp_interlock_type, + u32 interlock_data, u32 heads, struct nv50_wndw **); void nv50_wndw_init(struct nv50_wndw *); void nv50_wndw_fini(struct nv50_wndw *); -u32 nv50_wndw_flush_set(struct nv50_wndw *, u32 interlock, - struct nv50_wndw_atom *); -u32 nv50_wndw_flush_clr(struct nv50_wndw *, u32 interlock, bool flush, - struct nv50_wndw_atom *); +void nv50_wndw_flush_set(struct nv50_wndw *, u32 *interlock, + struct nv50_wndw_atom *); +void nv50_wndw_flush_clr(struct nv50_wndw *, u32 *interlock, bool flush, + struct nv50_wndw_atom *); void nv50_wndw_ntfy_enable(struct nv50_wndw *, struct nv50_wndw_atom *); int nv50_wndw_wait_armed(struct nv50_wndw *, struct nv50_wndw_atom *); @@ -63,7 +65,7 @@ struct nv50_wndw_func { void (*image_clr)(struct nv50_wndw *); void (*lut)(struct nv50_wndw *, struct nv50_wndw_atom *); - u32 (*update)(struct nv50_wndw *, u32 interlock); + void (*update)(struct nv50_wndw *, u32 *interlock); }; extern const struct drm_plane_funcs nv50_wndw; @@ -71,6 +73,6 @@ extern const struct drm_plane_funcs nv50_wndw; struct nv50_wimm_func { void (*point)(struct nv50_wndw *, struct nv50_wndw_atom *); - u32 (*update)(struct nv50_wndw *, u32 interlock); + void (*update)(struct nv50_wndw *, u32 *interlock); }; #endif |