init_or(struct nvbios_init *init)
{
if (init_exec(init)) {
- if (init->outp)
- return ffs(init->outp->or) - 1;
+ if (init->or >= 0)
+ return init->or;
error("script needs OR!!\n");
}
return 0;
init_link(struct nvbios_init *init)
{
if (init_exec(init)) {
- if (init->outp)
- return !(init->outp->sorconf.link & 1);
+ if (init->link)
+ return init->link == 2;
error("script needs OR link\n");
}
return 0;
nvbios_exec(struct nvbios_init *init)
{
struct nvkm_bios *bios = init->subdev->device->bios;
+
+ if (init->bios) {
+ init->or = init->outp ? ffs(init->outp->or) - 1 : -1;
+ init->link = init->outp ? init->outp->sorconf.link : 0;
+ }
+
init->nested++;
while (init->offset) {
u8 opcode = nvbios_rd08(bios, init->offset);