drm/nouveau/pm: some fermi chipsets still use volt 0x30
authorBen Skeggs <bskeggs@redhat.com>
Fri, 10 Jun 2011 05:33:11 +0000 (15:33 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 20 Sep 2011 06:01:37 +0000 (16:01 +1000)
Fun, fun.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_drv.h
drivers/gpu/drm/nouveau/nouveau_perf.c
drivers/gpu/drm/nouveau/nouveau_volt.c

index 84a19a5..491158d 100644 (file)
@@ -420,6 +420,7 @@ struct nouveau_pm_voltage_level {
 
 struct nouveau_pm_voltage {
        bool supported;
+       u8 version;
        u8 vid_mask;
 
        struct nouveau_pm_voltage_level *level;
index 18d1d99..b0e995f 100644 (file)
@@ -146,16 +146,16 @@ nouveau_perf_voltage(struct drm_device *dev, struct bit_entry *P,
        id = perflvl->volt_min;
        perflvl->volt_min = 0;
 
-       /* pre-fermi vbios stores the voltage level directly in the
-        * perflvl entry as a multiple of 10mV
+       /* boards using voltage table version <0x40 store the voltage
+        * level directly in the perflvl entry as a multiple of 10mV
         */
-       if (dev_priv->card_type < NV_C0) {
+       if (dev_priv->engine.pm.voltage.version < 0x40) {
                perflvl->volt_min = id * 10000;
                perflvl->volt_max = perflvl->volt_min;
                return;
        }
 
-       /* from fermi onwards, the perflvl stores an index into yet another
+       /* on newer ones, the perflvl stores an index into yet another
         * vbios table containing a min/max voltage value for the perflvl
         */
        if (P->version != 2 || P->length < 34) {
index 5389aba..86d03e1 100644 (file)
@@ -204,7 +204,8 @@ nouveau_volt_init(struct drm_device *dev)
        }
 
        /* parse vbios entries into common format */
-       if (volt[0] < 0x40) {
+       voltage->version = volt[0];
+       if (voltage->version < 0x40) {
                voltage->nr_level = entries;
                voltage->level =
                        kcalloc(entries, sizeof(*voltage->level), GFP_KERNEL);