drm/nouveau/pm: some fermi chipsets still use volt 0x30

Fun, fun.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index 84a19a5..491158d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -420,6 +420,7 @@
 
 struct nouveau_pm_voltage {
 	bool supported;
+	u8 version;
 	u8 vid_mask;
 
 	struct nouveau_pm_voltage_level *level;
diff --git a/drivers/gpu/drm/nouveau/nouveau_perf.c b/drivers/gpu/drm/nouveau/nouveau_perf.c
index 18d1d99..b0e995f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_perf.c
+++ b/drivers/gpu/drm/nouveau/nouveau_perf.c
@@ -146,16 +146,16 @@
 	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) {
diff --git a/drivers/gpu/drm/nouveau/nouveau_volt.c b/drivers/gpu/drm/nouveau/nouveau_volt.c
index 5389aba..86d03e1 100644
--- a/drivers/gpu/drm/nouveau/nouveau_volt.c
+++ b/drivers/gpu/drm/nouveau/nouveau_volt.c
@@ -204,7 +204,8 @@
 	}
 
 	/* 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);