Commit 4d3df19a authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/bios/pll: check BIT table version before trying to parse it

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 2781c928
...@@ -81,9 +81,11 @@ static u16 ...@@ -81,9 +81,11 @@ static u16
pll_limits_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len) pll_limits_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
{ {
struct bit_entry bit_C; struct bit_entry bit_C;
u16 data = 0x0000;
if (!bit_entry(bios, 'C', &bit_C) && bit_C.length >= 10) { if (!bit_entry(bios, 'C', &bit_C)) {
u16 data = nvbios_rd16(bios, bit_C.offset + 8); if (bit_C.version == 1 && bit_C.length >= 10)
data = nvbios_rd16(bios, bit_C.offset + 8);
if (data) { if (data) {
*ver = nvbios_rd08(bios, data + 0); *ver = nvbios_rd08(bios, data + 0);
*hdr = nvbios_rd08(bios, data + 1); *hdr = nvbios_rd08(bios, data + 1);
...@@ -94,7 +96,7 @@ pll_limits_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len) ...@@ -94,7 +96,7 @@ pll_limits_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
} }
if (bmp_version(bios) >= 0x0524) { if (bmp_version(bios) >= 0x0524) {
u16 data = nvbios_rd16(bios, bios->bmp_offset + 142); data = nvbios_rd16(bios, bios->bmp_offset + 142);
if (data) { if (data) {
*ver = nvbios_rd08(bios, data + 0); *ver = nvbios_rd08(bios, data + 0);
*hdr = 1; *hdr = 1;
...@@ -105,7 +107,7 @@ pll_limits_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len) ...@@ -105,7 +107,7 @@ pll_limits_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
} }
*ver = 0x00; *ver = 0x00;
return 0x0000; return data;
} }
static struct pll_mapping * static struct pll_mapping *
......
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