Blob Blame History Raw
From 333781045d84628417efa161d37256331abef64b Mon Sep 17 00:00:00 2001
From: Ben Skeggs <bskeggs@redhat.com>
Date: Fri, 19 May 2017 23:59:35 +1000
Subject: [PATCH] drm/nouveau/disp/g94-: port OR DP lane mapping to nvkm_ior
Git-commit: 333781045d84628417efa161d37256331abef64b
Patch-mainline: v4.13-rc1
References: bsc#1095094

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Acked-by: Takashi Iwai <tiwai@suse.de>

---
 drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h      |    4 ++++
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c   |   12 ++++--------
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c |    3 +++
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c |    3 +++
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c |    3 +++
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c |    5 ++++-
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c |    3 +++
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c |    3 +++
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c |    3 +++
 9 files changed, 30 insertions(+), 9 deletions(-)

--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
@@ -49,6 +49,10 @@ struct nvkm_ior_func {
 			     u8 max_ac_packet, u8 rekey, u8 *avi, u8 avi_size,
 			     u8 *vendor, u8 vendor_size);
 	} hdmi;
+
+	struct {
+		u8 lanes[4];
+	} dp;
 };
 
 int nvkm_ior_new_(const struct nvkm_ior_func *func, struct nvkm_disp *,
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorg94.c
@@ -44,14 +44,7 @@ g94_sor_loff(struct nvkm_output_dp *outp
 u32
 g94_sor_dp_lane_map(struct nvkm_device *device, u8 lane)
 {
-	static const u8 gm100[] = { 0, 8, 16, 24 };
-	static const u8 mcp89[] = { 24, 16, 8, 0 }; /* thanks, apple.. */
-	static const u8   g94[] = { 16, 8, 0, 24 };
-	if (device->chipset >= 0x110)
-		return gm100[lane];
-	if (device->chipset == 0xaf)
-		return mcp89[lane];
-	return g94[lane];
+	return nvkm_ior_find(device->disp, SOR, -1)->func->dp.lanes[lane] * 8;
 }
 
 static int
@@ -305,6 +298,9 @@ static const struct nvkm_ior_func
 g94_sor = {
 	.state = g94_sor_state,
 	.power = nv50_sor_power,
+	.dp = {
+		.lanes = { 2, 1, 0, 3},
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
@@ -160,6 +160,9 @@ gf119_sor = {
 	.hdmi = {
 		.ctrl = gf119_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 2, 1, 0, 3 },
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
@@ -28,6 +28,9 @@ gk104_sor = {
 	.hdmi = {
 		.ctrl = gk104_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 2, 1, 0, 3 },
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
@@ -60,6 +60,9 @@ gm107_sor = {
 	.hdmi = {
 		.ctrl = gk104_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 0, 1, 2, 3 },
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
@@ -41,7 +41,7 @@ gm200_sor_loff(struct nvkm_output_dp *ou
 static inline u32
 gm200_sor_dp_lane_map(struct nvkm_device *device, u8 lane)
 {
-	return lane * 0x08;
+	return nvkm_ior_find(device->disp, SOR, -1)->func->dp.lanes[lane] * 8;
 }
 
 static int
@@ -137,6 +137,9 @@ gm200_sor = {
 	.hdmi = {
 		.ctrl = gk104_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 0, 1, 2, 3 },
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgt215.c
@@ -28,6 +28,9 @@ gt215_sor = {
 	.hdmi = {
 		.ctrl = gt215_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 2, 1, 0, 3 },
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp77.c
@@ -28,6 +28,9 @@ mcp77_sor = {
 	.hdmi = {
 		.ctrl = g84_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 2, 1, 0, 3},
+	},
 };
 
 int
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sormcp89.c
@@ -28,6 +28,9 @@ mcp89_sor = {
 	.hdmi = {
 		.ctrl = gt215_hdmi_ctrl,
 	},
+	.dp = {
+		.lanes = { 3, 2, 1, 0 },
+	},
 };
 
 int