diff options
author | Alexandre Courbot <acourbot@nvidia.com> | 2016-06-08 17:32:39 +0900 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2016-07-06 06:55:29 +1000 |
commit | 5ce4cda2c994cbbc978396b8c086ede858d85a89 (patch) | |
tree | 6e6123c59025e6428c2739b8cc1a98f2ae891c7a | |
parent | a8efc0264a809edcf8df8b0bfbe5b6940afe4c9a (diff) | |
download | nouveau-5ce4cda2c994cbbc978396b8c086ede858d85a89.tar.gz |
gr/gf100: handle secure boot errors
Handle and propagate secure boot errors. Failure to do so results in
Nouveau incorrectly believing init has succeeded and a completely
black display during boot. If we propagate the error, GR init will fail
and the user will at least have a working display.
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | drm/nouveau/nvkm/engine/gr/gf100.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drm/nouveau/nvkm/engine/gr/gf100.c b/drm/nouveau/nvkm/engine/gr/gf100.c index 7d14d058b..157919c78 100644 --- a/drm/nouveau/nvkm/engine/gr/gf100.c +++ b/drm/nouveau/nvkm/engine/gr/gf100.c @@ -1457,6 +1457,7 @@ gf100_gr_init_ctxctl(struct gf100_gr *gr) struct nvkm_device *device = subdev->device; struct nvkm_secboot *sb = device->secboot; int i; + int ret = 0; if (gr->firmware) { /* load fuc microcode */ @@ -1464,15 +1465,20 @@ gf100_gr_init_ctxctl(struct gf100_gr *gr) /* securely-managed falcons must be reset using secure boot */ if (nvkm_secboot_is_managed(sb, NVKM_SECBOOT_FALCON_FECS)) - nvkm_secboot_reset(sb, NVKM_SECBOOT_FALCON_FECS); + ret = nvkm_secboot_reset(sb, NVKM_SECBOOT_FALCON_FECS); else gf100_gr_init_fw(gr, 0x409000, &gr->fuc409c, &gr->fuc409d); + if (ret) + return ret; + if (nvkm_secboot_is_managed(sb, NVKM_SECBOOT_FALCON_GPCCS)) - nvkm_secboot_reset(sb, NVKM_SECBOOT_FALCON_GPCCS); + ret = nvkm_secboot_reset(sb, NVKM_SECBOOT_FALCON_GPCCS); else gf100_gr_init_fw(gr, 0x41a000, &gr->fuc41ac, &gr->fuc41ad); + if (ret) + return ret; nvkm_mc_unk260(device, 1); |