Commit d4115d17 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/disp/hda/gf119-: add HAL for programming device entry in SF

Register has moved on GV100.
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 1404e56a
...@@ -23,6 +23,14 @@ ...@@ -23,6 +23,14 @@
*/ */
#include "ior.h" #include "ior.h"
void
gf119_hda_device_entry(struct nvkm_ior *ior, int head)
{
struct nvkm_device *device = ior->disp->engine.subdev.device;
const u32 hoff = 0x800 * head;
nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000);
}
void void
gf119_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size) gf119_hda_eld(struct nvkm_ior *ior, int head, u8 *data, u8 size)
{ {
...@@ -41,11 +49,10 @@ void ...@@ -41,11 +49,10 @@ void
gf119_hda_hpd(struct nvkm_ior *ior, int head, bool present) gf119_hda_hpd(struct nvkm_ior *ior, int head, bool present)
{ {
struct nvkm_device *device = ior->disp->engine.subdev.device; struct nvkm_device *device = ior->disp->engine.subdev.device;
const u32 hoff = 0x800 * head;
u32 data = 0x80000000; u32 data = 0x80000000;
u32 mask = 0x80000001; u32 mask = 0x80000001;
if (present) { if (present) {
nvkm_mask(device, 0x616548 + hoff, 0x00000070, 0x00000000); ior->func->hda.device_entry(ior, head);
data |= 0x00000001; data |= 0x00000001;
} else { } else {
mask |= 0x00000002; mask |= 0x00000002;
......
...@@ -88,6 +88,7 @@ struct nvkm_ior_func { ...@@ -88,6 +88,7 @@ struct nvkm_ior_func {
struct { struct {
void (*hpd)(struct nvkm_ior *, int head, bool present); void (*hpd)(struct nvkm_ior *, int head, bool present);
void (*eld)(struct nvkm_ior *, int head, u8 *data, u8 size); void (*eld)(struct nvkm_ior *, int head, u8 *data, u8 size);
void (*device_entry)(struct nvkm_ior *, int head);
} hda; } hda;
}; };
...@@ -162,6 +163,7 @@ void gt215_hda_eld(struct nvkm_ior *, int, u8 *, u8); ...@@ -162,6 +163,7 @@ void gt215_hda_eld(struct nvkm_ior *, int, u8 *, u8);
void gf119_hda_hpd(struct nvkm_ior *, int, bool); void gf119_hda_hpd(struct nvkm_ior *, int, bool);
void gf119_hda_eld(struct nvkm_ior *, int, u8 *, u8); void gf119_hda_eld(struct nvkm_ior *, int, u8 *, u8);
void gf119_hda_device_entry(struct nvkm_ior *, int);
#define IOR_MSG(i,l,f,a...) do { \ #define IOR_MSG(i,l,f,a...) do { \
struct nvkm_ior *_ior = (i); \ struct nvkm_ior *_ior = (i); \
......
...@@ -177,6 +177,7 @@ gf119_sor = { ...@@ -177,6 +177,7 @@ gf119_sor = {
.hda = { .hda = {
.hpd = gf119_hda_hpd, .hpd = gf119_hda_hpd,
.eld = gf119_hda_eld, .eld = gf119_hda_eld,
.device_entry = gf119_hda_device_entry,
}, },
}; };
......
...@@ -43,6 +43,7 @@ gk104_sor = { ...@@ -43,6 +43,7 @@ gk104_sor = {
.hda = { .hda = {
.hpd = gf119_hda_hpd, .hpd = gf119_hda_hpd,
.eld = gf119_hda_eld, .eld = gf119_hda_eld,
.device_entry = gf119_hda_device_entry,
}, },
}; };
......
...@@ -57,6 +57,7 @@ gm107_sor = { ...@@ -57,6 +57,7 @@ gm107_sor = {
.hda = { .hda = {
.hpd = gf119_hda_hpd, .hpd = gf119_hda_hpd,
.eld = gf119_hda_eld, .eld = gf119_hda_eld,
.device_entry = gf119_hda_device_entry,
}, },
}; };
......
...@@ -115,6 +115,7 @@ gm200_sor = { ...@@ -115,6 +115,7 @@ gm200_sor = {
.hda = { .hda = {
.hpd = gf119_hda_hpd, .hpd = gf119_hda_hpd,
.eld = gf119_hda_eld, .eld = gf119_hda_eld,
.device_entry = gf119_hda_device_entry,
}, },
}; };
......
...@@ -103,6 +103,7 @@ gv100_sor = { ...@@ -103,6 +103,7 @@ gv100_sor = {
.hda = { .hda = {
.hpd = gf119_hda_hpd, .hpd = gf119_hda_hpd,
.eld = gf119_hda_eld, .eld = gf119_hda_eld,
.device_entry = gf119_hda_device_entry,
}, },
}; };
......
...@@ -88,6 +88,7 @@ tu102_sor = { ...@@ -88,6 +88,7 @@ tu102_sor = {
.hda = { .hda = {
.hpd = gf119_hda_hpd, .hpd = gf119_hda_hpd,
.eld = gf119_hda_eld, .eld = gf119_hda_eld,
.device_entry = gf119_hda_device_entry,
}, },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment