Skip to content

Commit

Permalink
drm/gk104/gr: therm magic needed on some kepler boards
Browse files Browse the repository at this point in the history
Not needed everywhere, and potentially not safe to do depending on how
the rest of PTHERM is configured...

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
  • Loading branch information
Ben Skeggs committed Mar 26, 2014
1 parent 6f1e9b9 commit 1f1ac3b
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion drivers/gpu/drm/nouveau/core/engine/graph/nve4.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,29 @@ nve4_graph_pack_mmio[] = {
* PGRAPH engine/subdev functions
******************************************************************************/

static int
nve4_graph_fini(struct nouveau_object *object, bool suspend)
{
struct nvc0_graph_priv *priv = (void *)object;

/*XXX: this is a nasty hack to power on gr on certain boards
* where it's disabled by therm, somehow. ideally it'd
* be nice to know when we should be doing this, and why,
* but, it's yet to be determined. for now we test for
* the particular mmio error that occurs in the situation,
* and then bash therm in the way nvidia do.
*/
nv_mask(priv, 0x000200, 0x08001000, 0x08001000);
nv_rd32(priv, 0x000200);
if (nv_rd32(priv, 0x400700) == 0xbadf1000) {
nv_mask(priv, 0x000200, 0x08001000, 0x00000000);
nv_rd32(priv, 0x000200);
nv_mask(priv, 0x020004, 0xc0000000, 0x40000000);
}

return nouveau_graph_fini(&priv->base, suspend);
}

int
nve4_graph_init(struct nouveau_object *object)
{
Expand Down Expand Up @@ -327,7 +350,7 @@ nve4_graph_oclass = &(struct nvc0_graph_oclass) {
.ctor = nvc0_graph_ctor,
.dtor = nvc0_graph_dtor,
.init = nve4_graph_init,
.fini = _nouveau_graph_fini,
.fini = nve4_graph_fini,
},
.cclass = &nve4_grctx_oclass,
.sclass = nve4_graph_sclass,
Expand Down

0 comments on commit 1f1ac3b

Please sign in to comment.