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

Commit 3bb076af authored by Marcin Slusarz's avatar Marcin Slusarz Committed by Ben Skeggs
Browse files

drm/nouveau/bios: fix DCB v1.5 parsing



memcmp->nv_strncmp conversion, in addition to name change, should have
inverted the return value.

But nv_strncmp does not act like strncmp - it does not check for string
terminator, returns true/false instead of -1/0/1 and has different
parameters order.

Let's rename it to nv_memcmp and let it act like memcmp.

Signed-off-by: default avatarMarcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent d9c39056
Loading
Loading
Loading
Loading
+9 −5
Original line number Original line Diff line number Diff line
@@ -175,14 +175,18 @@ nv_mo32(void *obj, u32 addr, u32 mask, u32 data)
	return temp;
	return temp;
}
}


static inline bool
static inline int
nv_strncmp(void *obj, u32 addr, u32 len, const char *str)
nv_memcmp(void *obj, u32 addr, const char *str, u32 len)
{
{
	unsigned char c1, c2;

	while (len--) {
	while (len--) {
		if (nv_ro08(obj, addr++) != *(str++))
		c1 = nv_ro08(obj, addr++);
			return false;
		c2 = *(str++);
		if (c1 != c2)
			return c1 - c2;
	}
	}
	return true;
	return 0;
}
}


#endif
#endif
+1 −1
Original line number Original line Diff line number Diff line
@@ -64,7 +64,7 @@ dcb_table(struct nouveau_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
		}
		}
	} else
	} else
	if (*ver >= 0x15) {
	if (*ver >= 0x15) {
		if (!nv_strncmp(bios, dcb - 7, 7, "DEV_REC")) {
		if (!nv_memcmp(bios, dcb - 7, "DEV_REC", 7)) {
			u16 i2c = nv_ro16(bios, dcb + 2);
			u16 i2c = nv_ro16(bios, dcb + 2);
			*hdr = 4;
			*hdr = 4;
			*cnt = (i2c - dcb) / 10;
			*cnt = (i2c - dcb) / 10;