mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-17 07:54:54 +08:00
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>
This commit is contained in:
parent
6f1e9b99b3
commit
1f1ac3bf2a
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user