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=101601 Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
9d60b9c9d0
commit
eba5e56db6
|
@ -4451,11 +4451,13 @@ nv50_display_create(struct drm_device *dev)
|
|||
|
||||
/* create crtc objects to represent the hw heads */
|
||||
if (disp->disp->oclass >= GF110_DISP)
|
||||
crtcs = nvif_rd32(&device->object, 0x022448);
|
||||
crtcs = nvif_rd32(&device->object, 0x612004) & 0xf;
|
||||
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);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
|
|
@ -92,5 +92,8 @@ gf119_head = {
|
|||
int
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue