Commit c3463aed authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/fb/gp102-: allow module to load even when scrubber binary is missing

Without relaxing this requirement, TU10x boards will fail to load without
an updated linux-firmware, and TU11x will completely fail to load because
FW isn't available yet.
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 1c338ed5
...@@ -125,6 +125,34 @@ nvkm_fb_oneinit(struct nvkm_subdev *subdev) ...@@ -125,6 +125,34 @@ nvkm_fb_oneinit(struct nvkm_subdev *subdev)
return nvkm_mm_init(&fb->tags, 0, 0, tags, 1); return nvkm_mm_init(&fb->tags, 0, 0, tags, 1);
} }
static int
nvkm_fb_init_scrub_vpr(struct nvkm_fb *fb)
{
struct nvkm_subdev *subdev = &fb->subdev;
int ret;
nvkm_debug(subdev, "VPR locked, running scrubber binary\n");
if (!fb->vpr_scrubber.size) {
nvkm_warn(subdev, "VPR locked, but no scrubber binary!\n");
return 0;
}
ret = fb->func->vpr.scrub(fb);
if (ret) {
nvkm_error(subdev, "VPR scrubber binary failed\n");
return ret;
}
if (fb->func->vpr.scrub_required(fb)) {
nvkm_error(subdev, "VPR still locked after scrub!\n");
return -EIO;
}
nvkm_debug(subdev, "VPR scrubber binary successful\n");
return 0;
}
static int static int
nvkm_fb_init(struct nvkm_subdev *subdev) nvkm_fb_init(struct nvkm_subdev *subdev)
{ {
...@@ -157,18 +185,9 @@ nvkm_fb_init(struct nvkm_subdev *subdev) ...@@ -157,18 +185,9 @@ nvkm_fb_init(struct nvkm_subdev *subdev)
if (fb->func->vpr.scrub_required && if (fb->func->vpr.scrub_required &&
fb->func->vpr.scrub_required(fb)) { fb->func->vpr.scrub_required(fb)) {
nvkm_debug(subdev, "VPR locked, running scrubber binary\n"); ret = nvkm_fb_init_scrub_vpr(fb);
ret = fb->func->vpr.scrub(fb);
if (ret) if (ret)
return ret; return ret;
if (fb->func->vpr.scrub_required(fb)) {
nvkm_error(subdev, "VPR still locked after scrub!\n");
return -EIO;
}
nvkm_debug(subdev, "VPR scrubber binary successful\n");
} }
return 0; return 0;
......
...@@ -120,8 +120,9 @@ gp102_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device, ...@@ -120,8 +120,9 @@ gp102_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device,
if (ret) if (ret)
return ret; return ret;
return nvkm_firmware_load_blob(&(*pfb)->subdev, "nvdec/scrubber", "", 0, nvkm_firmware_load_blob(&(*pfb)->subdev, "nvdec/scrubber", "", 0,
&(*pfb)->vpr_scrubber); &(*pfb)->vpr_scrubber);
return 0;
} }
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment