drm/nouveau/pm: readback boot perflvl *before* parsing vbios
authorBen Skeggs <bskeggs@redhat.com>
Mon, 23 Jan 2012 03:47:02 +0000 (13:47 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 13 Mar 2012 07:07:55 +0000 (17:07 +1000)
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>
drivers/gpu/drm/nouveau/nouveau_pm.c

index 8a742596d0959597a2514e9a035167bc9cc7ed44..a9a2e367f9d1f688f7d595774b2e1d72c9a5c61e 100644 (file)
@@ -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) {