aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2015-03-20 01:28:52 -0400
committerBen Skeggs <bskeggs@redhat.com>2015-04-14 03:00:50 -0400
commitf02a0e849dbd16541a1e75ef8c8719bc5f611219 (patch)
treeb1ff83074c9816dde9b6b3e9582c828dfe382790 /drivers/gpu
parente1fc44fb9dbec4ff4e63c888d206a0bc4ca93f4f (diff)
drm/nouveau/pmu/gk208: implement gr power-up magic with gk110_pmu_pgob()
Before we moved gk110's implementation of this to pmu, the functions were identical. This commit just switches GK208 to use the new (more complete) implementation of the power-up sequence. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c39
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c1
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h2
4 files changed, 5 insertions, 39 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c
index ae6b853173b6..31d8e6055376 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c
@@ -152,43 +152,6 @@ gk208_gr_pack_mmio[] = {
152 * PGRAPH engine/subdev functions 152 * PGRAPH engine/subdev functions
153 ******************************************************************************/ 153 ******************************************************************************/
154 154
155static int
156gk208_gr_fini(struct nvkm_object *object, bool suspend)
157{
158 struct gf100_gr_priv *priv = (void *)object;
159 static const struct {
160 u32 addr;
161 u32 data;
162 } magic[] = {
163 { 0x020520, 0xfffffffc },
164 { 0x020524, 0xfffffffe },
165 { 0x020524, 0xfffffffc },
166 { 0x020524, 0xfffffff8 },
167 { 0x020524, 0xffffffe0 },
168 { 0x020530, 0xfffffffe },
169 { 0x02052c, 0xfffffffa },
170 { 0x02052c, 0xfffffff0 },
171 { 0x02052c, 0xffffffc0 },
172 { 0x02052c, 0xffffff00 },
173 { 0x02052c, 0xfffffc00 },
174 { 0x02052c, 0xfffcfc00 },
175 { 0x02052c, 0xfff0fc00 },
176 { 0x02052c, 0xff80fc00 },
177 { 0x020528, 0xfffffffe },
178 { 0x020528, 0xfffffffc },
179 };
180 int i;
181
182 nv_mask(priv, 0x000200, 0x08001000, 0x00000000);
183 nv_mask(priv, 0x0206b4, 0x00000000, 0x00000000);
184 for (i = 0; i < ARRAY_SIZE(magic); i++) {
185 nv_wr32(priv, magic[i].addr, magic[i].data);
186 nv_wait(priv, magic[i].addr, 0x80000000, 0x00000000);
187 }
188
189 return nvkm_gr_fini(&priv->base, suspend);
190}
191
192#include "fuc/hubgk208.fuc5.h" 155#include "fuc/hubgk208.fuc5.h"
193 156
194static struct gf100_gr_ucode 157static struct gf100_gr_ucode
@@ -216,7 +179,7 @@ gk208_gr_oclass = &(struct gf100_gr_oclass) {
216 .ctor = gf100_gr_ctor, 179 .ctor = gf100_gr_ctor,
217 .dtor = gf100_gr_dtor, 180 .dtor = gf100_gr_dtor,
218 .init = gk104_gr_init, 181 .init = gk104_gr_init,
219 .fini = gk208_gr_fini, 182 .fini = _nvkm_gr_fini,
220 }, 183 },
221 .cclass = &gk208_grctx_oclass, 184 .cclass = &gk208_grctx_oclass,
222 .sclass = gk208_gr_sclass, 185 .sclass = gk208_gr_sclass,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c
index e318745b8274..89bb94b0af8b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c
@@ -28,7 +28,7 @@
28 28
29#include <subdev/timer.h> 29#include <subdev/timer.h>
30 30
31static void 31void
32gk110_pmu_pgob(struct nvkm_pmu *pmu, bool enable) 32gk110_pmu_pgob(struct nvkm_pmu *pmu, bool enable)
33{ 33{
34 static const struct { 34 static const struct {
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c
index 6f9c09af1a49..b14134ef9ea5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c
@@ -37,4 +37,5 @@ gk208_pmu_oclass = &(struct nvkm_pmu_impl) {
37 .code.size = sizeof(gk208_pmu_code), 37 .code.size = sizeof(gk208_pmu_code),
38 .data.data = gk208_pmu_data, 38 .data.data = gk208_pmu_data,
39 .data.size = sizeof(gk208_pmu_data), 39 .data.size = sizeof(gk208_pmu_data),
40 .pgob = gk110_pmu_pgob,
40}.base; 41}.base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h
index 998410563bfd..799e7c8b88f5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h
@@ -40,4 +40,6 @@ struct nvkm_pmu_impl {
40 40
41 void (*pgob)(struct nvkm_pmu *, bool); 41 void (*pgob)(struct nvkm_pmu *, bool);
42}; 42};
43
44void gk110_pmu_pgob(struct nvkm_pmu *, bool);
43#endif 45#endif