Skip to content

Commit

Permalink
drm/nouveau/pm: readback boot perflvl *before* parsing vbios
Browse files Browse the repository at this point in the history
We might want/need the boot data to generate the other perflevels.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Martin Peres <martin.peres@labri.fr>
  • Loading branch information
Ben Skeggs committed Mar 13, 2012
1 parent c7c039f commit 68a64ca
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions drivers/gpu/drm/nouveau/nouveau_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -794,26 +794,34 @@ nouveau_pm_init(struct drm_device *dev)
int ret, i;

nouveau_mem_timing_init(dev);

/* parse aux tables from vbios */
nouveau_volt_init(dev);
nouveau_perf_init(dev);
nouveau_temp_init(dev);

/* determine current ("boot") performance level */
ret = nouveau_pm_perflvl_get(dev, &pm->boot);
if (ret) {
NV_ERROR(dev, "failed to determine boot perflvl\n");
return ret;
}

strncpy(pm->boot.name, "boot", 4);
pm->boot.timing = &pm->memtimings.boot;
pm->cur = &pm->boot;

/* add performance levels from vbios */
nouveau_perf_init(dev);

/* display available performance levels */
NV_INFO(dev, "%d available performance level(s)\n", pm->nr_perflvl);
for (i = 0; i < pm->nr_perflvl; i++) {
nouveau_pm_perflvl_info(&pm->perflvl[i], info, sizeof(info));
NV_INFO(dev, "%d:%s", pm->perflvl[i].id, info);
}

/* determine current ("boot") performance level */
ret = nouveau_pm_perflvl_get(dev, &pm->boot);
if (ret == 0) {
strncpy(pm->boot.name, "boot", 4);
pm->boot.timing = &pm->memtimings.boot;
pm->cur = &pm->boot;

nouveau_pm_perflvl_info(&pm->boot, info, sizeof(info));
NV_INFO(dev, "c:%s", info);
}
nouveau_pm_perflvl_info(&pm->boot, info, sizeof(info));
NV_INFO(dev, "c:%s", info);

/* switch performance levels now if requested */
if (nouveau_perflvl != NULL) {
Expand Down

0 comments on commit 68a64ca

Please sign in to comment.