aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nouveau_pm.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2012-01-17 06:10:58 -0500
committerBen Skeggs <bskeggs@redhat.com>2012-03-13 03:08:03 -0400
commitfd99fd6100d3b7aaa8dc76888a38bbb15e8041bc (patch)
tree5bda24f2755bde247eb1e3a8ae143632351130ff /drivers/gpu/drm/nouveau/nouveau_pm.c
parent68a64cad07057c3395b3b18c282df884e87ff3d6 (diff)
drm/nouveau/pm: calculate memory timings at perflvl creation time
Statically generating the PFB register and MR values for each timing set turns out to be insufficient. There's at least one (so far) known piece of information which effects MR values which is stored in the perflvl entry on some chipsets (and in another table on later ones), which is disconnected from the timing table entries. After this change we will generate a timing set based on an input clock frequency instead, and have this data stored in the performance level data. Signed-off-by: Ben Skeggs <bskeggs@redhat.com> Signed-off-by: Martin Peres <martin.peres@labri.fr>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_pm.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_pm.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_pm.c b/drivers/gpu/drm/nouveau/nouveau_pm.c
index a9a2e367f9d1..4f299f4df71c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_pm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_pm.c
@@ -238,6 +238,7 @@ nouveau_pm_perflvl_get(struct drm_device *dev, struct nouveau_pm_level *perflvl)
238 if (ret > 0) 238 if (ret > 0)
239 perflvl->fanspeed = ret; 239 perflvl->fanspeed = ret;
240 240
241 nouveau_mem_timing_read(dev, &perflvl->timing);
241 return 0; 242 return 0;
242} 243}
243 244
@@ -793,8 +794,6 @@ nouveau_pm_init(struct drm_device *dev)
793 char info[256]; 794 char info[256];
794 int ret, i; 795 int ret, i;
795 796
796 nouveau_mem_timing_init(dev);
797
798 /* parse aux tables from vbios */ 797 /* parse aux tables from vbios */
799 nouveau_volt_init(dev); 798 nouveau_volt_init(dev);
800 nouveau_temp_init(dev); 799 nouveau_temp_init(dev);
@@ -807,7 +806,6 @@ nouveau_pm_init(struct drm_device *dev)
807 } 806 }
808 807
809 strncpy(pm->boot.name, "boot", 4); 808 strncpy(pm->boot.name, "boot", 4);
810 pm->boot.timing = &pm->memtimings.boot;
811 pm->cur = &pm->boot; 809 pm->cur = &pm->boot;
812 810
813 /* add performance levels from vbios */ 811 /* add performance levels from vbios */
@@ -857,7 +855,6 @@ nouveau_pm_fini(struct drm_device *dev)
857 nouveau_temp_fini(dev); 855 nouveau_temp_fini(dev);
858 nouveau_perf_fini(dev); 856 nouveau_perf_fini(dev);
859 nouveau_volt_fini(dev); 857 nouveau_volt_fini(dev);
860 nouveau_mem_timing_fini(dev);
861 858
862#if defined(CONFIG_ACPI) && defined(CONFIG_POWER_SUPPLY) 859#if defined(CONFIG_ACPI) && defined(CONFIG_POWER_SUPPLY)
863 unregister_acpi_notifier(&pm->acpi_nb); 860 unregister_acpi_notifier(&pm->acpi_nb);