drm/nouveau/bios: suppress some parser errors when dry-running scripts
authorBen Skeggs <bskeggs@redhat.com>
Mon, 15 Apr 2013 04:47:05 +0000 (14:47 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 26 Apr 2013 05:37:48 +0000 (15:37 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/subdev/bios/init.c

index 9c41b58d57e2511a2988447dbb46eb376d853868..3468347573435bf25a40c7a1d13c0cb104eb63ea 100644 (file)
@@ -64,27 +64,33 @@ init_exec_force(struct nvbios_init *init, bool exec)
 static inline int
 init_or(struct nvbios_init *init)
 {
-       if (init->outp)
-               return ffs(init->outp->or) - 1;
-       error("script needs OR!!\n");
+       if (init_exec(init)) {
+               if (init->outp)
+                       return ffs(init->outp->or) - 1;
+               error("script needs OR!!\n");
+       }
        return 0;
 }
 
 static inline int
 init_link(struct nvbios_init *init)
 {
-       if (init->outp)
-               return !(init->outp->sorconf.link & 1);
-       error("script needs OR link\n");
+       if (init_exec(init)) {
+               if (init->outp)
+                       return !(init->outp->sorconf.link & 1);
+               error("script needs OR link\n");
+       }
        return 0;
 }
 
 static inline int
 init_crtc(struct nvbios_init *init)
 {
-       if (init->crtc >= 0)
-               return init->crtc;
-       error("script needs crtc\n");
+       if (init_exec(init)) {
+               if (init->crtc >= 0)
+                       return init->crtc;
+               error("script needs crtc\n");
+       }
        return 0;
 }
 
@@ -92,16 +98,21 @@ static u8
 init_conn(struct nvbios_init *init)
 {
        struct nouveau_bios *bios = init->bios;
+       u8  ver, len;
+       u16 conn;
 
-       if (init->outp) {
-               u8  ver, len;
-               u16 conn = dcb_conn(bios, init->outp->connector, &ver, &len);
-               if (conn)
-                       return nv_ro08(bios, conn);
+       if (init_exec(init)) {
+               if (init->outp) {
+                       conn = init->outp->connector;
+                       conn = dcb_conn(bios, conn, &ver, &len);
+                       if (conn)
+                               return nv_ro08(bios, conn);
+               }
+
+               error("script needs connector type\n");
        }
 
-       error("script needs connector type\n");
-       return 0x00;
+       return 0xff;
 }
 
 static inline u32
@@ -227,7 +238,8 @@ init_i2c(struct nvbios_init *init, int index)
        } else
        if (index < 0) {
                if (!init->outp) {
-                       error("script needs output for i2c\n");
+                       if (init_exec(init))
+                               error("script needs output for i2c\n");
                        return NULL;
                }
 
@@ -544,7 +556,8 @@ init_tmds_reg(struct nvbios_init *init, u8 tmds)
                        return 0x6808b0 + dacoffset;
                }
 
-               error("tmds opcodes need dcb\n");
+               if (init_exec(init))
+                       error("tmds opcodes need dcb\n");
        } else {
                if (tmds < ARRAY_SIZE(pramdac_table))
                        return pramdac_table[tmds];
@@ -792,7 +805,8 @@ init_dp_condition(struct nvbios_init *init)
                        break;
                }
 
-               warn("script needs dp output table data\n");
+               if (init_exec(init))
+                       warn("script needs dp output table data\n");
                break;
        case 5:
                if (!(init_rdauxr(init, 0x0d) & 1))