aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
diff options
context:
space:
mode:
authorBen Skeggs <[email protected]>2020-01-15 06:34:21 +1000
committerBen Skeggs <[email protected]>2020-01-15 10:50:26 +1000
commit334815ef310a7ad2ba34039ba1f933d5edc80b56 (patch)
tree1cb5c75de7fb66baeedeb7350b8dd013b6f83e6b /drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
parent78b10b74030025f6a216a9b10afbe35ab05d32d1 (diff)
drm/nouveau/gsp: initialise SW state for falcon from constructor
This will allow us to register the falcon with ACR, and further customise its behaviour by providing the nvkm_falcon_func structure directly. Signed-off-by: Ben Skeggs <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c')
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
index 872280d926a9..5a32df0f9992 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
@@ -25,30 +25,17 @@
#include <subdev/acr.h>
#include <subdev/top.h>
-static int
-nvkm_gsp_oneinit(struct nvkm_subdev *subdev)
-{
- struct nvkm_gsp *gsp = nvkm_gsp(subdev);
-
- gsp->addr = nvkm_top_addr(subdev->device, subdev->index);
- if (!gsp->addr)
- return -EINVAL;
-
- return nvkm_falcon_v1_new(subdev, "GSP", gsp->addr, &gsp->falcon);
-}
-
static void *
nvkm_gsp_dtor(struct nvkm_subdev *subdev)
{
struct nvkm_gsp *gsp = nvkm_gsp(subdev);
- nvkm_falcon_del(&gsp->falcon);
+ nvkm_falcon_dtor(&gsp->falcon);
return gsp;
}
static const struct nvkm_subdev_func
nvkm_gsp = {
.dtor = nvkm_gsp_dtor,
- .oneinit = nvkm_gsp_oneinit,
};
int
@@ -66,5 +53,7 @@ nvkm_gsp_new_(const struct nvkm_gsp_fwif *fwif, struct nvkm_device *device,
if (IS_ERR(fwif))
return PTR_ERR(fwif);
- return 0;
+ return nvkm_falcon_ctor(fwif->flcn, &gsp->subdev,
+ nvkm_subdev_name[gsp->subdev.index], 0,
+ &gsp->falcon);
}