diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2017-05-19 23:59:35 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2017-06-16 14:04:57 +1000 |
commit | 6c22ea3747fd36409ce4a1e1a0cbac40f93e1e71 (patch) | |
tree | 3e59368a13cff78bed2206404138b0849b56c69d /drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | |
parent | drm/nouveau/disp: remove hw-specific customisation of output paths (diff) | |
download | linux-dev-6c22ea3747fd36409ce4a1e1a0cbac40f93e1e71.tar.xz linux-dev-6c22ea3747fd36409ce4a1e1a0cbac40f93e1e71.zip |
drm/nouveau/disp: introduce acquire/release display path methods
These exist to give NVKM information on the set of display paths that
the DD needs to be active at any given time.
Previously, the supervisor attempted to determine this solely from OR
state, but there's a few configurations where this information on its
own isn't enough to determine the specific display paths in question:
- ANX9805, where the PIOR protocol for both DP and TMDS is TMDS.
- On a device using DCB Switched Outputs.
- On GM20x and newer, with a crossbar between the SOR and macro links.
After this commit, the DD tells NVKM *exactly* which display path it's
attempting a modeset on.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h index a43a924debfe..a2e38d4780b1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h @@ -17,6 +17,7 @@ struct nvkm_ior { struct list_head head; struct nvkm_ior_state { + struct nvkm_outp *outp; unsigned rgdiv; unsigned proto_evo:4; enum nvkm_ior_proto { @@ -40,6 +41,11 @@ struct nvkm_ior { }; struct nvkm_ior_func { + struct { + int (*get)(struct nvkm_outp *, int *link); + void (*set)(struct nvkm_outp *, struct nvkm_ior *); + } route; + void (*state)(struct nvkm_ior *, struct nvkm_ior_state *); void (*power)(struct nvkm_ior *, bool normal, bool pu, bool data, bool vsync, bool hsync); |