aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
index 81c3567d4e67..ba6a868d4c95 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
@@ -109,18 +109,17 @@ nvkm_cstate_valid(struct nvkm_clk *clk, struct nvkm_cstate *cstate,
109 109
110static struct nvkm_cstate * 110static struct nvkm_cstate *
111nvkm_cstate_find_best(struct nvkm_clk *clk, struct nvkm_pstate *pstate, 111nvkm_cstate_find_best(struct nvkm_clk *clk, struct nvkm_pstate *pstate,
112 struct nvkm_cstate *start) 112 struct nvkm_cstate *cstate)
113{ 113{
114 struct nvkm_device *device = clk->subdev.device; 114 struct nvkm_device *device = clk->subdev.device;
115 struct nvkm_volt *volt = device->volt; 115 struct nvkm_volt *volt = device->volt;
116 struct nvkm_cstate *cstate;
117 int max_volt; 116 int max_volt;
118 117
119 if (!pstate || !start) 118 if (!pstate || !cstate)
120 return NULL; 119 return NULL;
121 120
122 if (!volt) 121 if (!volt)
123 return start; 122 return cstate;
124 123
125 max_volt = volt->max_uv; 124 max_volt = volt->max_uv;
126 if (volt->max0_id != 0xff) 125 if (volt->max0_id != 0xff)
@@ -133,8 +132,7 @@ nvkm_cstate_find_best(struct nvkm_clk *clk, struct nvkm_pstate *pstate,
133 max_volt = min(max_volt, 132 max_volt = min(max_volt,
134 nvkm_volt_map(volt, volt->max2_id, clk->temp)); 133 nvkm_volt_map(volt, volt->max2_id, clk->temp));
135 134
136 for (cstate = start; &cstate->head != &pstate->list; 135 list_for_each_entry_from_reverse(cstate, &pstate->list, head) {
137 cstate = list_prev_entry(cstate, head)) {
138 if (nvkm_cstate_valid(clk, cstate, max_volt, clk->temp)) 136 if (nvkm_cstate_valid(clk, cstate, max_volt, clk->temp))
139 break; 137 break;
140 } 138 }