diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-06-09 03:45:31 (GMT) |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-09-20 06:01:02 (GMT) |
commit | c3450239c78a4ef6c10da13dfc18831f43dbe0c5 (patch) | |
tree | 57a7e350bf4e7e415c2eb8fc3ea3e2b17be65283 | |
parent | b6fd41e29dea9c6753b1843a77e50433e6123bcb (diff) | |
download | linux-fsl-qoriq-c3450239c78a4ef6c10da13dfc18831f43dbe0c5.tar.xz |
drm/nouveau/pm: store voltage in microvolts
Instead of 10s of millivolts, to match fermi vbios.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drv.h | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_perf.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_pm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_volt.c | 2 |
4 files changed, 12 insertions, 11 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h index d7d51de..39d6bb3 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h @@ -414,8 +414,8 @@ struct nouveau_gpio_engine { }; struct nouveau_pm_voltage_level { - u8 voltage; - u8 vid; + u32 voltage; /* microvolts */ + u8 vid; }; struct nouveau_pm_voltage { @@ -451,8 +451,8 @@ struct nouveau_pm_level { u32 unk05; u32 unk0a; - u8 voltage; - u8 fanspeed; + u32 voltage; /* microvolts */ + u8 fanspeed; u16 memscript; struct nouveau_pm_memtiming *timing; diff --git a/drivers/gpu/drm/nouveau/nouveau_perf.c b/drivers/gpu/drm/nouveau/nouveau_perf.c index ef9dec0..117ce16 100644 --- a/drivers/gpu/drm/nouveau/nouveau_perf.c +++ b/drivers/gpu/drm/nouveau/nouveau_perf.c @@ -203,7 +203,8 @@ nouveau_perf_init(struct drm_device *dev) case 0x13: case 0x15: perflvl->fanspeed = entry[55]; - perflvl->voltage = (recordlen > 56) ? entry[56] : 0; + if (recordlen > 56) + perflvl->voltage = entry[56] * 10000; perflvl->core = ROM32(entry[1]) * 10; perflvl->memory = ROM32(entry[5]) * 20; break; @@ -211,7 +212,7 @@ nouveau_perf_init(struct drm_device *dev) case 0x23: case 0x24: perflvl->fanspeed = entry[4]; - perflvl->voltage = entry[5]; + perflvl->voltage = entry[5] * 10000; perflvl->core = ROM16(entry[6]) * 1000; if (dev_priv->chipset == 0x49 || @@ -223,7 +224,7 @@ nouveau_perf_init(struct drm_device *dev) break; case 0x25: perflvl->fanspeed = entry[4]; - perflvl->voltage = entry[5]; + perflvl->voltage = entry[5] * 10000; perflvl->core = ROM16(entry[6]) * 1000; perflvl->shader = ROM16(entry[10]) * 1000; perflvl->memory = ROM16(entry[12]) * 1000; @@ -232,7 +233,7 @@ nouveau_perf_init(struct drm_device *dev) perflvl->memscript = ROM16(entry[2]); case 0x35: perflvl->fanspeed = entry[6]; - perflvl->voltage = entry[7]; + perflvl->voltage = entry[7] * 10000; perflvl->core = ROM16(entry[8]) * 1000; perflvl->shader = ROM16(entry[10]) * 1000; perflvl->memory = ROM16(entry[12]) * 1000; @@ -242,7 +243,7 @@ nouveau_perf_init(struct drm_device *dev) case 0x40: #define subent(n) entry[perf[2] + ((n) * perf[3])] perflvl->fanspeed = 0; /*XXX*/ - perflvl->voltage = entry[2]; + perflvl->voltage = entry[2] * 10000; if (dev_priv->card_type == NV_50) { perflvl->core = ROM16(subent(0)) & 0xfff; perflvl->shader = ROM16(subent(1)) & 0xfff; diff --git a/drivers/gpu/drm/nouveau/nouveau_pm.c b/drivers/gpu/drm/nouveau/nouveau_pm.c index da8d994..f5703ef 100644 --- a/drivers/gpu/drm/nouveau/nouveau_pm.c +++ b/drivers/gpu/drm/nouveau/nouveau_pm.c @@ -168,7 +168,7 @@ nouveau_pm_perflvl_info(struct nouveau_pm_level *perflvl, char *ptr, int len) v[0] = '\0'; if (perflvl->voltage) - snprintf(v, sizeof(v), " voltage %dmV", perflvl->voltage * 10); + snprintf(v, sizeof(v), " voltage %dmV", perflvl->voltage / 1000); f[0] = '\0'; if (perflvl->fanspeed) diff --git a/drivers/gpu/drm/nouveau/nouveau_volt.c b/drivers/gpu/drm/nouveau/nouveau_volt.c index 75e87274..9eec275 100644 --- a/drivers/gpu/drm/nouveau/nouveau_volt.c +++ b/drivers/gpu/drm/nouveau/nouveau_volt.c @@ -203,7 +203,7 @@ nouveau_volt_init(struct drm_device *dev) entry = volt + headerlen; for (i = 0; i < entries; i++, entry += recordlen) { - voltage->level[i].voltage = entry[0]; + voltage->level[i].voltage = entry[0] * 10000; voltage->level[i].vid = entry[1] >> vidshift; } voltage->nr_level = entries; |