forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c
....@@ -20,40 +20,42 @@
2020 * DEALINGS IN THE SOFTWARE.
2121 */
2222 #include "priv.h"
23
-
24
-#include <engine/falcon.h>
25
-
26
-static int
27
-nvkm_nvdec_oneinit(struct nvkm_engine *engine)
28
-{
29
- struct nvkm_nvdec *nvdec = nvkm_nvdec(engine);
30
- return nvkm_falcon_v1_new(&nvdec->engine.subdev, "NVDEC", 0x84000,
31
- &nvdec->falcon);
32
-}
23
+#include <core/firmware.h>
3324
3425 static void *
3526 nvkm_nvdec_dtor(struct nvkm_engine *engine)
3627 {
3728 struct nvkm_nvdec *nvdec = nvkm_nvdec(engine);
38
- nvkm_falcon_del(&nvdec->falcon);
29
+ nvkm_falcon_dtor(&nvdec->falcon);
3930 return nvdec;
4031 }
4132
4233 static const struct nvkm_engine_func
4334 nvkm_nvdec = {
4435 .dtor = nvkm_nvdec_dtor,
45
- .oneinit = nvkm_nvdec_oneinit,
4636 };
4737
4838 int
49
-nvkm_nvdec_new_(struct nvkm_device *device, int index,
50
- struct nvkm_nvdec **pnvdec)
39
+nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, struct nvkm_device *device,
40
+ int index, struct nvkm_nvdec **pnvdec)
5141 {
5242 struct nvkm_nvdec *nvdec;
43
+ int ret;
5344
5445 if (!(nvdec = *pnvdec = kzalloc(sizeof(*nvdec), GFP_KERNEL)))
5546 return -ENOMEM;
5647
57
- return nvkm_engine_ctor(&nvkm_nvdec, device, index, true,
58
- &nvdec->engine);
48
+ ret = nvkm_engine_ctor(&nvkm_nvdec, device, index, true,
49
+ &nvdec->engine);
50
+ if (ret)
51
+ return ret;
52
+
53
+ fwif = nvkm_firmware_load(&nvdec->engine.subdev, fwif, "Nvdec", nvdec);
54
+ if (IS_ERR(fwif))
55
+ return -ENODEV;
56
+
57
+ nvdec->func = fwif->func;
58
+
59
+ return nvkm_falcon_ctor(nvdec->func->flcn, &nvdec->engine.subdev,
60
+ nvkm_subdev_name[index], 0, &nvdec->falcon);
5961 };