drm/nouveau/devinit: use new devinit script interpreter entry-point
authorBen Skeggs <bskeggs@redhat.com>
Fri, 19 May 2017 13:59:34 +0000 (23:59 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 16 Jun 2017 04:04:44 +0000 (14:04 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c

index b1256ab..2095f43 100644 (file)
@@ -2308,32 +2308,18 @@ nvbios_post(struct nvkm_subdev *subdev, bool execute)
        if (execute)
                nvkm_debug(subdev, "running init tables\n");
        while (!ret && (data = (init_script(bios, ++i)))) {
-               struct nvbios_init init = {
-                       .subdev = subdev,
-                       .bios = bios,
-                       .offset = data,
-                       .outp = NULL,
-                       .head = -1,
-                       .execute = execute ? 1 : 0,
-               };
-
-               ret = nvbios_exec(&init);
+               ret = nvbios_init(subdev, data,
+                       init.execute = execute ? 1 : 0;
+                     );
        }
 
        /* the vbios parser will run this right after the normal init
         * tables, whereas the binary driver appears to run it later.
         */
        if (!ret && (data = init_unknown_script(bios))) {
-               struct nvbios_init init = {
-                       .subdev = subdev,
-                       .bios = bios,
-                       .offset = data,
-                       .outp = NULL,
-                       .head = -1,
-                       .execute = execute ? 1 : 0,
-               };
-
-               ret = nvbios_exec(&init);
+               ret = nvbios_init(subdev, data,
+                       init.execute = execute ? 1 : 0;
+                     );
        }
 
        return ret;
index 59362f8..d7947c4 100644 (file)
@@ -137,16 +137,11 @@ nv50_devinit_init(struct nvkm_devinit *base)
        while (init->base.post && dcb_outp_parse(bios, i, &ver, &hdr, &outp)) {
                if (nvbios_outp_match(bios, outp.hasht, outp.hashm,
                                      &ver, &hdr, &cnt, &len, &info)) {
-                       struct nvbios_init exec = {
-                               .subdev = subdev,
-                               .bios = bios,
-                               .offset = info.script[0],
-                               .outp = &outp,
-                               .crtc = -1,
-                               .execute = 1,
-                       };
-
-                       nvbios_exec(&exec);
+                       nvbios_init(subdev, info.script[0],
+                               init.outp = &outp;
+                               init.or   = ffs(outp.or) - 1;
+                               init.link = outp.sorconf.link == 2;
+                       );
                }
                i++;
        }