Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68a64cad authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/pm: readback boot perflvl *before* parsing vbios



We might want/need the boot data to generate the other perflevels.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Signed-off-by: default avatarMartin Peres <martin.peres@labri.fr>
parent c7c039fd
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -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);

	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) {
	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);
	}

	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) {