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: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -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)
|
|||||||
|
|
||||||
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,
|
|||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user