Commit eba5e56d authored by Ilia Mirkin's avatar Ilia Mirkin Committed by Ben Skeggs

drm/nouveau/disp/gf119-: avoid creating non-existent heads

We assume that each board has 4 heads for GF119+. However this is not
necessarily true - in the case of a GP108 board, the register indicated
that there were only 2.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101601Signed-off-by: default avatarIlia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 9d60b9c9
...@@ -4451,11 +4451,13 @@ nv50_display_create(struct drm_device *dev) ...@@ -4451,11 +4451,13 @@ nv50_display_create(struct drm_device *dev)
/* create crtc objects to represent the hw heads */ /* create crtc objects to represent the hw heads */
if (disp->disp->oclass >= GF110_DISP) if (disp->disp->oclass >= GF110_DISP)
crtcs = nvif_rd32(&device->object, 0x022448); crtcs = nvif_rd32(&device->object, 0x612004) & 0xf;
else else
crtcs = 2; crtcs = 0x3;
for (i = 0; i < crtcs; i++) { for (i = 0; i < fls(crtcs); i++) {
if (!(crtcs & (1 << i)))
continue;
ret = nv50_head_create(dev, i); ret = nv50_head_create(dev, i);
if (ret) if (ret)
goto out; goto out;
......
...@@ -92,5 +92,8 @@ gf119_head = { ...@@ -92,5 +92,8 @@ gf119_head = {
int int
gf119_head_new(struct nvkm_disp *disp, int id) gf119_head_new(struct nvkm_disp *disp, int id)
{ {
struct nvkm_device *device = disp->engine.subdev.device;
if (!(nvkm_rd32(device, 0x612004) & (0x00000001 << id)))
return 0;
return nvkm_head_new_(&gf119_head, disp, id); return nvkm_head_new_(&gf119_head, disp, id);
} }
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