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

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
...@@ -175,14 +175,18 @@ nv_mo32(void *obj, u32 addr, u32 mask, u32 data) ...@@ -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
...@@ -64,7 +64,7 @@ dcb_table(struct nouveau_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment