diff options
| author | Ben Skeggs <bskeggs@redhat.com> | 2014-03-05 14:46:48 +1000 | 
|---|---|---|
| committer | Ben Skeggs <bskeggs@redhat.com> | 2014-03-26 14:08:16 +1000 | 
| commit | 1f1ac3bf2a804911ad46076b10ce15364237a698 (patch) | |
| tree | aa5a6ec206fba9a6ffb9ae535ea97a978c80f6dc | |
| parent | 6f1e9b99b329238e3a3989785cf0dff67db78b1a (diff) | |
drm/gk104/gr: therm magic needed on some kepler boards
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>
| -rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/graph/nve4.c | 25 | 
1 files changed, 24 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nve4.c b/drivers/gpu/drm/nouveau/core/engine/graph/nve4.c index 6e73b18920b8..f7c011217175 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/nve4.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nve4.c @@ -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)  { @@ -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,  | 
