drm/nouveau/bios/devinit: properly handle unknown generic conditions
authorBen Skeggs <bskeggs@redhat.com>
Wed, 17 Feb 2016 18:10:04 +0000 (04:10 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 14 Mar 2016 00:13:17 +0000 (10:13 +1000)
Upon encountering an unknown condition code, the script interpreter
is supposed to skip 'size' bytes and continue at the next devinit
token.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c

index c99b6676171bacb49ac9d1786a90f35da4c59e2c..38ed09fd3d2f0c22ef37868a8991f20f7df05bce 100644 (file)
@@ -795,11 +795,11 @@ init_generic_condition(struct nvbios_init *init)
        struct nvkm_bios *bios = init->bios;
        struct nvbios_dpout info;
        u8  cond = nvbios_rd08(bios, init->offset + 1);
-       u8  unkn = nvbios_rd08(bios, init->offset + 2);
+       u8  size = nvbios_rd08(bios, init->offset + 2);
        u8  ver, hdr, cnt, len;
        u16 data;
 
-       trace("GENERIC_CONDITION\t0x%02x 0x%02x\n", cond, unkn);
+       trace("GENERIC_CONDITION\t0x%02x 0x%02x\n", cond, size);
        init->offset += 3;
 
        switch (cond) {
@@ -829,6 +829,7 @@ init_generic_condition(struct nvbios_init *init)
                break;
        default:
                warn("INIT_GENERIC_CONDITON: unknown 0x%02x\n", cond);
+               init->offset += size;
                break;
        }
 }