drm/nouveau/bios: suppress some parser errors when dry-running scripts

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Ben Skeggs 2013-04-15 14:47:05 +10:00
parent 3f196a045e
commit 28ec70f7fb
1 changed files with 33 additions and 19 deletions

View 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))