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