Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3450239 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/pm: store voltage in microvolts



Instead of 10s of millivolts, to match fermi vbios.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent b6fd41e2
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -414,7 +414,7 @@ struct nouveau_gpio_engine {
};

struct nouveau_pm_voltage_level {
	u8 voltage;
	u32 voltage; /* microvolts */
	u8  vid;
};

@@ -451,7 +451,7 @@ struct nouveau_pm_level {
	u32 unk05;
	u32 unk0a;

	u8 voltage;
	u32 voltage; /* microvolts */
	u8  fanspeed;

	u16 memscript;
+6 −5
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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;