static int gf100_pm_ctor(struct nvkm_object *parent, struct nvkm_object *engine, struct nvkm_oclass *oclass, void *data, u32 size, struct nvkm_object **pobject) { struct gf100_pm_priv *priv; u32 mask; int ret; ret = nvkm_pm_create(parent, engine, oclass, &priv); *pobject = nv_object(priv); if (ret) return ret; ret = nvkm_perfdom_new(&priv->base, "pwr", 0, 0, 0, 0, gf100_pm_pwr); if (ret) return ret; /* HUB */ ret = nvkm_perfdom_new(&priv->base, "hub", 0, 0x1b0000, 0, 0x200, gf100_pm_hub); if (ret) return ret; /* GPC */ mask = (1 << nv_rd32(priv, 0x022430)) - 1; mask &= ~nv_rd32(priv, 0x022504); mask &= ~nv_rd32(priv, 0x022584); ret = nvkm_perfdom_new(&priv->base, "gpc", mask, 0x180000, 0x1000, 0x200, gf100_pm_gpc); if (ret) return ret; /* PART */ mask = (1 << nv_rd32(priv, 0x022438)) - 1; mask &= ~nv_rd32(priv, 0x022548); mask &= ~nv_rd32(priv, 0x0225c8); ret = nvkm_perfdom_new(&priv->base, "part", mask, 0x1a0000, 0x1000, 0x200, gf100_pm_part); if (ret) return ret; nv_engine(priv)->cclass = &nvkm_pm_cclass; nv_engine(priv)->sclass = nvkm_pm_sclass; priv->base.last = 7; return 0; }
static int gk110_pm_ctor(struct nvkm_object *parent, struct nvkm_object *engine, struct nvkm_oclass *oclass, void *data, u32 size, struct nvkm_object **pobject) { struct gf100_pm_priv *priv; int ret; ret = nvkm_pm_create(parent, engine, oclass, &priv); *pobject = nv_object(priv); if (ret) return ret; nv_engine(priv)->cclass = &nvkm_pm_cclass; nv_engine(priv)->sclass = nvkm_pm_sclass; return 0; }