Commit 587debc9 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/acr: store a mask of LS falcons the HSFW can bootstrap

This will prevent reloading of HS FW where it's pointless, and bypass
hitting some timeouts.

Not a situation one should generally hit, but can occur with a messed
up firmware installation.
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 90e9cf74
...@@ -141,12 +141,19 @@ nvkm_acr_bootstrap_falcons(struct nvkm_device *device, unsigned long mask) ...@@ -141,12 +141,19 @@ nvkm_acr_bootstrap_falcons(struct nvkm_device *device, unsigned long mask)
struct nvkm_acr *acr = device->acr; struct nvkm_acr *acr = device->acr;
unsigned long id; unsigned long id;
/* If there's no LS FW managing bootstrapping of other LS falcons,
* we depend on the HS firmware being able to do it instead.
*/
if (!acrflcn) { if (!acrflcn) {
int ret = nvkm_acr_reload(acr); /* Which isn't possible everywhere... */
if (ret) if ((mask & acr->func->bootstrap_falcons) == mask) {
return ret; int ret = nvkm_acr_reload(acr);
if (ret)
return ret;
return acr->done ? 0 : -EINVAL; return acr->done ? 0 : -EINVAL;
}
return -ENOSYS;
} }
if (acrflcn->func->bootstrap_multiple_falcons) { if (acrflcn->func->bootstrap_multiple_falcons) {
......
...@@ -446,6 +446,8 @@ gm200_acr_0 = { ...@@ -446,6 +446,8 @@ gm200_acr_0 = {
.wpr_patch = gm200_acr_wpr_patch, .wpr_patch = gm200_acr_wpr_patch,
.wpr_check = gm200_acr_wpr_check, .wpr_check = gm200_acr_wpr_check,
.init = gm200_acr_init, .init = gm200_acr_init,
.bootstrap_falcons = BIT_ULL(NVKM_ACR_LSF_FECS) |
BIT_ULL(NVKM_ACR_LSF_GPCCS),
}; };
static int static int
......
...@@ -28,6 +28,7 @@ struct nvkm_acr_func { ...@@ -28,6 +28,7 @@ struct nvkm_acr_func {
void (*wpr_check)(struct nvkm_acr *, u64 *start, u64 *limit); void (*wpr_check)(struct nvkm_acr *, u64 *start, u64 *limit);
int (*init)(struct nvkm_acr *); int (*init)(struct nvkm_acr *);
void (*fini)(struct nvkm_acr *); void (*fini)(struct nvkm_acr *);
u64 bootstrap_falcons;
}; };
extern const struct nvkm_acr_func gm200_acr; extern const struct nvkm_acr_func gm200_acr;
......
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