|
@@ -109,18 +109,17 @@ nvkm_cstate_valid(struct nvkm_clk *clk, struct nvkm_cstate *cstate,
|
|
|
|
|
|
static struct nvkm_cstate *
|
|
static struct nvkm_cstate *
|
|
nvkm_cstate_find_best(struct nvkm_clk *clk, struct nvkm_pstate *pstate,
|
|
nvkm_cstate_find_best(struct nvkm_clk *clk, struct nvkm_pstate *pstate,
|
|
- struct nvkm_cstate *start)
|
|
|
|
|
|
+ struct nvkm_cstate *cstate)
|
|
{
|
|
{
|
|
struct nvkm_device *device = clk->subdev.device;
|
|
struct nvkm_device *device = clk->subdev.device;
|
|
struct nvkm_volt *volt = device->volt;
|
|
struct nvkm_volt *volt = device->volt;
|
|
- struct nvkm_cstate *cstate;
|
|
|
|
int max_volt;
|
|
int max_volt;
|
|
|
|
|
|
- if (!pstate || !start)
|
|
|
|
|
|
+ if (!pstate || !cstate)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
if (!volt)
|
|
if (!volt)
|
|
- return start;
|
|
|
|
|
|
+ return cstate;
|
|
|
|
|
|
max_volt = volt->max_uv;
|
|
max_volt = volt->max_uv;
|
|
if (volt->max0_id != 0xff)
|
|
if (volt->max0_id != 0xff)
|
|
@@ -133,8 +132,7 @@ nvkm_cstate_find_best(struct nvkm_clk *clk, struct nvkm_pstate *pstate,
|
|
max_volt = min(max_volt,
|
|
max_volt = min(max_volt,
|
|
nvkm_volt_map(volt, volt->max2_id, clk->temp));
|
|
nvkm_volt_map(volt, volt->max2_id, clk->temp));
|
|
|
|
|
|
- for (cstate = start; &cstate->head != &pstate->list;
|
|
|
|
- cstate = list_prev_entry(cstate, head)) {
|
|
|
|
|
|
+ list_for_each_entry_from_reverse(cstate, &pstate->list, head) {
|
|
if (nvkm_cstate_valid(clk, cstate, max_volt, clk->temp))
|
|
if (nvkm_cstate_valid(clk, cstate, max_volt, clk->temp))
|
|
break;
|
|
break;
|
|
}
|
|
}
|