summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/pstate/pstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/pstate/pstate.c')
-rw-r--r--drivers/gpu/nvgpu/pstate/pstate.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/pstate/pstate.c b/drivers/gpu/nvgpu/pstate/pstate.c
index e9b9775e..0dc15201 100644
--- a/drivers/gpu/nvgpu/pstate/pstate.c
+++ b/drivers/gpu/nvgpu/pstate/pstate.c
@@ -234,7 +234,7 @@ static int parse_pstate_entry_5x(struct gk20a *g,
234 memset(pstate, 0, sizeof(struct pstate)); 234 memset(pstate, 0, sizeof(struct pstate));
235 pstate->super.type = CTRL_PERF_PSTATE_TYPE_3X; 235 pstate->super.type = CTRL_PERF_PSTATE_TYPE_3X;
236 pstate->num = 0x0F - entry->pstate_level; 236 pstate->num = 0x0F - entry->pstate_level;
237 pstate->clklist.clksetinfolistsize = hdr->clock_entry_count; 237 pstate->clklist.num_info = hdr->clock_entry_count;
238 238
239 gk20a_dbg_info("pstate P%u", pstate->num); 239 gk20a_dbg_info("pstate P%u", pstate->num);
240 240
@@ -357,3 +357,41 @@ static int pstate_sw_setup(struct gk20a *g)
357done: 357done:
358 return err; 358 return err;
359} 359}
360
361static struct pstate *pstate_find(struct gk20a *g, u32 num)
362{
363 struct pstates *pstates = &(g->perf_pmu.pstatesobjs);
364 struct pstate *pstate;
365 u8 i;
366
367 gk20a_dbg_info("pstates = %p", pstates);
368
369 BOARDOBJGRP_FOR_EACH(&pstates->super.super,
370 struct pstate *, pstate, i) {
371 gk20a_dbg_info("pstate=%p num=%u (looking for num=%u)",
372 pstate, pstate->num, num);
373 if (pstate->num == num)
374 return pstate;
375 }
376 return NULL;
377}
378
379struct clk_set_info *pstate_get_clk_set_info(struct gk20a *g,
380 u32 pstate_num, enum nv_pmu_clk_clkwhich clkwhich)
381{
382 struct pstate *pstate = pstate_find(g, pstate_num);
383 struct clk_set_info *info;
384 u32 clkidx;
385
386 gk20a_dbg_info("pstate = %p", pstate);
387
388 if (!pstate)
389 return NULL;
390
391 for (clkidx = 0; clkidx < pstate->clklist.num_info; clkidx++) {
392 info = &pstate->clklist.clksetinfo[clkidx];
393 if (info->clkwhich == clkwhich)
394 return info;
395 }
396 return NULL;
397}