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

drm/nouveau: fix thinko in volt 0x1x parsing



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent e49f70f7
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ nouveau_volt_init(struct drm_device *dev)
	struct nvbios *bios = &dev_priv->vbios;
	struct bit_entry P;
	u8 *volt = NULL, *entry;
	int i, recordlen, entries, vidmask, vidshift;
	int i, headerlen, recordlen, entries, vidmask, vidshift;

	if (bios->type == NVBIOS_BIT) {
		if (bit_table(dev, 'P', &P))
@@ -142,18 +142,21 @@ nouveau_volt_init(struct drm_device *dev)
	case 0x10:
	case 0x11:
	case 0x12:
		recordlen = 5;
		headerlen = 5;
		recordlen = volt[1];
		entries   = volt[2];
		vidshift  = 0;
		vidmask   = volt[4];
		break;
	case 0x20:
		headerlen = volt[1];
		recordlen = volt[3];
		entries   = volt[2];
		vidshift  = 0; /* could be vidshift like 0x30? */
		vidmask   = volt[5];
		break;
	case 0x30:
		headerlen = volt[1];
		recordlen = volt[2];
		entries   = volt[3];
		vidshift  = hweight8(volt[5]);
@@ -190,7 +193,7 @@ nouveau_volt_init(struct drm_device *dev)
	if (!voltage->level)
		return;

	entry = volt + volt[1];
	entry = volt + headerlen;
	for (i = 0; i < entries; i++, entry += recordlen) {
		voltage->level[i].voltage = entry[0];
		voltage->level[i].vid     = entry[1] >> vidshift;