summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/dispnv50
diff options
context:
space:
mode:
authorBen Skeggs2018-05-08 12:39:47 +0200
committerBen Skeggs2018-05-18 07:01:29 +0200
commit34508f9d260cbd7b91f988c858f50ad956750ee3 (patch)
treec76957abbce5c033f74b9bf8355b09d859d60a7e /drivers/gpu/drm/nouveau/dispnv50
parentdrm/nouveau/kms/nv50-: extend window image data for stereo/planar formats (diff)
downloadkernel-qcow2-linux-34508f9d260cbd7b91f988c858f50ad956750ee3.tar.gz
kernel-qcow2-linux-34508f9d260cbd7b91f988c858f50ad956750ee3.tar.xz
kernel-qcow2-linux-34508f9d260cbd7b91f988c858f50ad956750ee3.zip
drm/nouveau/kms/nv50-: determine MST support from DP Info Table
GV100 doesn't support MST, use the information provided in VBIOS tables to detect its presence instead. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/dispnv50')
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/disp.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 006562f7f23e..eaa63b43282b 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -52,6 +52,8 @@
#include "nouveau_fence.h"
#include "nouveau_fbcon.h"
+#include <subdev/bios/dp.h>
+
/******************************************************************************
* Atomic state
*****************************************************************************/
@@ -1383,9 +1385,12 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
{
struct nouveau_connector *nv_connector = nouveau_connector(connector);
struct nouveau_drm *drm = nouveau_drm(connector->dev);
+ struct nvkm_bios *bios = nvxx_bios(&drm->client.device);
struct nvkm_i2c *i2c = nvxx_i2c(&drm->client.device);
struct nouveau_encoder *nv_encoder;
struct drm_encoder *encoder;
+ u8 ver, hdr, cnt, len;
+ u32 data;
int type, ret;
switch (dcbe->type) {
@@ -1429,8 +1434,8 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
nv_encoder->aux = aux;
}
- /*TODO: Use DP Info Table to check for support. */
- if (disp->disp->object.oclass >= GF110_DISP) {
+ if ((data = nvbios_dp_table(bios, &ver, &hdr, &cnt, &len)) &&
+ ver >= 0x40 && (nvbios_rd08(bios, data + 0x08) & 0x04)) {
ret = nv50_mstm_new(nv_encoder, &nv_connector->aux, 16,
nv_connector->base.base.id,
&nv_encoder->dp.mstm);