Later we will have situations where the expected and the current state
isn't the same.

Signed-off-by: Karol Herbst <karolher...@gmail.com>
Reviewed-by: Martin Peres <martin.pe...@free.fr>
Acked-by: Pierre Moreau <pierre.mor...@free.fr>
---
 drm/nouveau/include/nvkm/subdev/clk.h | 9 +++++----
 drm/nouveau/nvkm/subdev/clk/base.c    | 5 +++++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drm/nouveau/include/nvkm/subdev/clk.h 
b/drm/nouveau/include/nvkm/subdev/clk.h
index ebaa57eb..310df485 100644
--- a/drm/nouveau/include/nvkm/subdev/clk.h
+++ b/drm/nouveau/include/nvkm/subdev/clk.h
@@ -6,11 +6,11 @@
 struct nvbios_pll;
 struct nvkm_pll_vals;
 
-#define NVKM_CLK_PSTATE_BOOT    -1 /* POSTed default */
+#define NVKM_CLK_PSTATE_BOOT -1 /* POSTed default */
 
-#define NVKM_CLK_CSTATE_DEFAULT -1 /* POSTed default */
-#define NVKM_CLK_CSTATE_BASE    -2 /* pstate base */
-#define NVKM_CLK_CSTATE_AUTO    -3 /* highest possible */
+#define NVKM_CLK_CSTATE_BOOT -1 /* POSTed default */
+#define NVKM_CLK_CSTATE_BASE -2 /* pstate base */
+#define NVKM_CLK_CSTATE_AUTO -3 /* highest possible */
 
 enum nv_clk_src {
        nv_clk_src_crystal,
@@ -101,6 +101,7 @@ struct nvkm_clk {
        int ustate_ac; /* user-requested (-1 disabled, -2 perfmon) */
        int ustate_dc; /* user-requested (-1 disabled, -2 perfmon) */
        int astate; /* perfmon adjustment (base) */
+       int cstate_id;
        int temp;
 
        bool allow_reclock;
diff --git a/drm/nouveau/nvkm/subdev/clk/base.c 
b/drm/nouveau/nvkm/subdev/clk/base.c
index 85b9fb48..b2c1605e 100644
--- a/drm/nouveau/nvkm/subdev/clk/base.c
+++ b/drm/nouveau/nvkm/subdev/clk/base.c
@@ -167,6 +167,9 @@ nvkm_cstate_prog(struct nvkm_clk *clk, struct nvkm_pstate 
*pstate,
        struct nvkm_cstate *cstate;
        int ret;
 
+       if (cstate_id == NVKM_CLK_CSTATE_BOOT)
+               return 0;
+
        if (!list_empty(&pstate->cstates)) {
                cstate = nvkm_cstate_get(clk, pstate, cstate_id);
                cstate = nvkm_cstate_find_best(clk, pstate, cstate);
@@ -196,6 +199,7 @@ nvkm_cstate_prog(struct nvkm_clk *clk, struct nvkm_pstate 
*pstate,
                ret = clk->func->prog(clk);
                clk->func->tidy(clk);
        }
+       clk->cstate_id = cstate->id;
 
        if (volt) {
                ret = nvkm_volt_set_id(volt, cstate->voltage,
@@ -603,6 +607,7 @@ nvkm_clk_init(struct nvkm_subdev *subdev)
 
        clk->astate = NVKM_CLK_PSTATE_BOOT;
        clk->pstate_id = NVKM_CLK_PSTATE_BOOT;
+       clk->cstate_id = NVKM_CLK_CSTATE_BOOT;
        clk->temp = 90; /* reasonable default value */
        nvkm_clk_update(clk, true);
        return 0;
-- 
2.15.0

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

Reply via email to