Skip to content

Commit

Permalink
drm/nouveau/pm: store voltage in microvolts
Browse files Browse the repository at this point in the history
Instead of 10s of millivolts, to match fermi vbios.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
  • Loading branch information
Ben Skeggs committed Sep 20, 2011
1 parent b6fd41e commit c345023
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 11 deletions.
8 changes: 4 additions & 4 deletions drivers/gpu/drm/nouveau/nouveau_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down
11 changes: 6 additions & 5 deletions drivers/gpu/drm/nouveau/nouveau_perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,15 +203,16 @@ 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;
case 0x21:
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 ||
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/nouveau/nouveau_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/nouveau/nouveau_volt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit c345023

Please sign in to comment.