The idea is to clear out the saved state, because after a resume we can't
know what the GPU is clocked to. The reclock is triggered by the call to
nvkm_clk_update later in nvkm_clk_init.

Signed-off-by: Karol Herbst <karolher...@gmail.com>
Reviewed-by: Martin Peres <martin.pe...@free.fr>
---
 drm/nouveau/nvkm/subdev/clk/base.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/clk/base.c 
b/drm/nouveau/nvkm/subdev/clk/base.c
index 54a4b7fa..bc65906e 100644
--- a/drm/nouveau/nvkm/subdev/clk/base.c
+++ b/drm/nouveau/nvkm/subdev/clk/base.c
@@ -627,11 +627,9 @@ nvkm_clk_init(struct nvkm_subdev *subdev)
        if (clk->func->init)
                return clk->func->init(clk);
 
-       clk->astate = NVKM_CLK_PSTATE_DEFAULT;
+       // after a resume we have no idea what clocks are set, reset the state
        clk->pstate = NULL;
-       clk->exp_cstateid = NVKM_CLK_CSTATE_DEFAULT;
        clk->cstate = NULL;
-       clk->temp = 90; /* reasonable default value */
        nvkm_clk_update(clk, true);
        return 0;
 }
@@ -685,8 +683,13 @@ nvkm_clk_ctor(const struct nvkm_clk_func *func, struct 
nvkm_device *device,
        clk->func = func;
        INIT_LIST_HEAD(&clk->states);
        clk->domains = func->domains;
+
+       clk->astate = NVKM_CLK_PSTATE_DEFAULT;
        clk->ustate_ac = -1;
        clk->ustate_dc = -1;
+       clk->exp_cstateid = NVKM_CLK_CSTATE_DEFAULT;
+       clk->temp = 90; /* reasonable default value */
+
        clk->allow_reclock = allow_reclock;
 
        INIT_WORK(&clk->work, nvkm_clk_update_work);
-- 
2.12.0

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to