Commit 34508f9d authored by Ben Skeggs's avatar Ben Skeggs
Browse files

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: default avatarBen Skeggs <bskeggs@redhat.com>
parent 261fcfa9
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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);
+4 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __NVBIOS_DP_H__
#define __NVBIOS_DP_H__

u16
nvbios_dp_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len);

struct nvbios_dpout {
	u16 type;
	u16 mask;
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@
#include <subdev/bios/bit.h>
#include <subdev/bios/dp.h>

static u16
u16
nvbios_dp_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
{
	struct bit_entry d;