Commit 446b05a0 authored by Ben Skeggs's avatar Ben Skeggs

drm/nv50/disp: enable interrupts and setup memory area

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent ab77214a
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include <engine/software.h> #include <engine/software.h>
#include <engine/disp.h> #include <engine/disp.h>
#include <subdev/timer.h>
#include "nv50.h" #include "nv50.h"
/******************************************************************************* /*******************************************************************************
...@@ -295,18 +297,39 @@ nv50_disp_base_init(struct nouveau_object *object) ...@@ -295,18 +297,39 @@ nv50_disp_base_init(struct nouveau_object *object)
nv_wr32(priv, 0x6101f0 + (i * 0x04), tmp); nv_wr32(priv, 0x6101f0 + (i * 0x04), tmp);
} }
/* intr 100 */ /* steal display away from vbios, or something like that */
/* 6194e8 shit */ if (nv_rd32(priv, 0x610024) & 0x00000100) {
/* intr */ nv_wr32(priv, 0x610024, 0x00000100);
/* set 610010 from engctx */ nv_mask(priv, 0x6194e8, 0x00000001, 0x00000000);
/* acquire mast? */ if (!nv_wait(priv, 0x6194e8, 0x00000002, 0x00000000)) {
nv_error(priv, "timeout acquiring display\n");
return -EBUSY;
}
}
/* point at display engine memory area (hash table, objects) */
nv_wr32(priv, 0x610010, (nv_gpuobj(object->parent)->addr >> 8) | 9);
/* enable supervisor interrupts, disable everything else */
nv_wr32(priv, 0x610024, 0x00000370);
nv_wr32(priv, 0x610020, 0x00000000);
return 0; return 0;
} }
static int static int
nv50_disp_base_fini(struct nouveau_object *object, bool suspend) nv50_disp_base_fini(struct nouveau_object *object, bool suspend)
{ {
struct nv50_disp_priv *priv = (void *)object->engine;
struct nv50_disp_base *base = (void *)object; struct nv50_disp_base *base = (void *)object;
/* disable all interrupts */
nv_wr32(priv, 0x610024, 0x00000000);
nv_wr32(priv, 0x610020, 0x00000000);
/* return control of display to vbios */
nv_mask(priv, 0x6194e8, 0x00000001, 0x00000001);
nv_wait(priv, 0x6194e8, 0x00000002, 0x00000002);
return nouveau_parent_fini(&base->base, suspend); return nouveau_parent_fini(&base->base, suspend);
} }
......
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