59aac79
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
59aac79
From: Ben Skeggs <bskeggs@redhat.com>
59aac79
Date: Wed, 6 May 2020 14:40:56 +1000
59aac79
Subject: [PATCH] disp/hda/gf119-: add HAL for programming device entry in SF
59aac79
59aac79
Register has moved on GV100.
59aac79
59aac79
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
59aac79
---
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c | 11 +++++++++--
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h      |  2 ++
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c |  1 +
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c |  1 +
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c |  1 +
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c |  1 +
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c |  1 +
59aac79
 drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c |  1 +
59aac79
 8 files changed, 17 insertions(+), 2 deletions(-)
59aac79
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
59aac79
index 1080ba6ecd64..8a0ec7db5145 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c
59aac79
@@ -23,6 +23,14 @@
59aac79
  */
59aac79
 #include "ior.h"
59aac79
59aac79
+void
59aac79
+gf119_hda_device_entry(struct nvkm_ior *ior, int head)
59aac79
+{
59aac79
+	struct nvkm_device *device = ior->disp->engine.subdev.device;
59aac79
+	const u32 hoff = 0x800 * head;
59aac79
+	nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000);
59aac79
+}
59aac79
+
59aac79
 void
59aac79
 gf119_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size)
59aac79
 {
59aac79
@@ -41,11 +49,10 @@ void
59aac79
 gf119_hda_hpd(struct nvkm_ior *ior, int head, bool present)
59aac79
 {
59aac79
 	struct nvkm_device *device = ior->disp->engine.subdev.device;
59aac79
-	const u32 hoff = 0x800 * head;
59aac79
 	u32 data = 0x80000000;
59aac79
 	u32 mask = 0x80000001;
59aac79
 	if (present) {
59aac79
-		nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000);
59aac79
+		ior->func->hda.device_entry(ior, head);
59aac79
 		data |= 0x00000001;
59aac79
 	} else {
59aac79
 		mask |= 0x00000002;
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
59aac79
index c60acf71831e..eb1155e47ecd 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
59aac79
@@ -88,6 +88,7 @@ struct nvkm_ior_func {
59aac79
 	struct {
59aac79
 		void (*hpd)(struct nvkm_ior *, int head, bool present);
59aac79
 		void (*eld)(struct nvkm_ior *, int head, u8 *data, u8 size);
59aac79
+		void (*device_entry)(struct nvkm_ior *, int head);
59aac79
 	} hda;
59aac79
 };
59aac79
59aac79
@@ -162,6 +163,7 @@ void gt215_hda_eld(struct nvkm_ior *, int, u8 *, u8);
59aac79
59aac79
 void gf119_hda_hpd(struct nvkm_ior *, int, bool);
59aac79
 void gf119_hda_eld(struct nvkm_ior *, int, u8 *, u8);
59aac79
+void gf119_hda_device_entry(struct nvkm_ior *, int);
59aac79
59aac79
 #define IOR_MSG(i,l,f,a...) do {                                               \
59aac79
 	struct nvkm_ior *_ior = (i);                                           \
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
59aac79
index 456a5a143522..3b3643fb1019 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
59aac79
@@ -177,6 +177,7 @@ gf119_sor = {
59aac79
 	.hda = {
59aac79
 		.hpd = gf119_hda_hpd,
59aac79
 		.eld = gf119_hda_eld,
59aac79
+		.device_entry = gf119_hda_device_entry,
59aac79
 	},
59aac79
 };
59aac79
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
59aac79
index b94090edaebf..0c0925680790 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgk104.c
59aac79
@@ -43,6 +43,7 @@ gk104_sor = {
59aac79
 	.hda = {
59aac79
 		.hpd = gf119_hda_hpd,
59aac79
 		.eld = gf119_hda_eld,
59aac79
+		.device_entry = gf119_hda_device_entry,
59aac79
 	},
59aac79
 };
59aac79
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
59aac79
index e6965dec09c9..38045c92197f 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
59aac79
@@ -57,6 +57,7 @@ gm107_sor = {
59aac79
 	.hda = {
59aac79
 		.hpd = gf119_hda_hpd,
59aac79
 		.eld = gf119_hda_eld,
59aac79
+		.device_entry = gf119_hda_device_entry,
59aac79
 	},
59aac79
 };
59aac79
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
59aac79
index 384f82652bec..cf2075db742a 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
59aac79
@@ -115,6 +115,7 @@ gm200_sor = {
59aac79
 	.hda = {
59aac79
 		.hpd = gf119_hda_hpd,
59aac79
 		.eld = gf119_hda_eld,
59aac79
+		.device_entry = gf119_hda_device_entry,
59aac79
 	},
59aac79
 };
59aac79
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
59aac79
index b0597ff9a714..565cfbc65550 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgv100.c
59aac79
@@ -103,6 +103,7 @@ gv100_sor = {
59aac79
 	.hda = {
59aac79
 		.hpd = gf119_hda_hpd,
59aac79
 		.eld = gf119_hda_eld,
59aac79
+		.device_entry = gf119_hda_device_entry,
59aac79
 	},
59aac79
 };
59aac79
59aac79
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
59aac79
index 4d5f3791ea7b..b16ecea098c7 100644
59aac79
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
59aac79
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sortu102.c
59aac79
@@ -88,6 +88,7 @@ tu102_sor = {
59aac79
 	.hda = {
59aac79
 		.hpd = gf119_hda_hpd,
59aac79
 		.eld = gf119_hda_eld,
59aac79
+		.device_entry = gf119_hda_device_entry,
59aac79
 	},
59aac79
 };
59aac79
59aac79
-- 
59aac79
2.26.2
59aac79