]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/nouveau/disp: merge nv50_disp_new_() and nvkm_disp_new()
authorBen Skeggs <bskeggs@redhat.com>
Wed, 1 Jun 2022 10:46:28 +0000 (20:46 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 26 Jul 2022 23:05:47 +0000 (09:05 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
19 files changed:
drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/priv.h
drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.c

index d68d523fabddcb5fdfefc62734e6839c2edd7053..10d4a3359a3f0775133e965489194147bebe748e 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <core/client.h>
 #include <core/notify.h>
+#include <core/ramht.h>
 #include <subdev/bios.h>
 #include <subdev/bios/dcb.h>
 
@@ -394,8 +395,12 @@ nvkm_disp_dtor(struct nvkm_engine *engine)
        struct nvkm_head *head;
        void *data = disp;
 
-       if (disp->func->dtor)
-               data = disp->func->dtor(disp);
+       nvkm_ramht_del(&disp->ramht);
+       nvkm_gpuobj_del(&disp->inst);
+
+       nvkm_event_fini(&disp->uevent);
+       if (disp->super.wq)
+               destroy_workqueue(disp->super.wq);
 
        nvkm_event_fini(&disp->vblank);
        nvkm_event_fini(&disp->hpd);
@@ -436,23 +441,33 @@ nvkm_disp = {
 };
 
 int
-nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device,
-              enum nvkm_subdev_type type, int inst, struct nvkm_disp *disp)
+nvkm_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device,
+              enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp)
 {
+       struct nvkm_disp *disp;
+       int ret;
+
+       if (!(disp = *pdisp = kzalloc(sizeof(**pdisp), GFP_KERNEL)))
+               return -ENOMEM;
+
        disp->func = func;
        INIT_LIST_HEAD(&disp->heads);
        INIT_LIST_HEAD(&disp->iors);
        INIT_LIST_HEAD(&disp->outps);
        INIT_LIST_HEAD(&disp->conns);
        spin_lock_init(&disp->client.lock);
-       return nvkm_engine_ctor(&nvkm_disp, device, type, inst, true, &disp->engine);
-}
 
-int
-nvkm_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device,
-              enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp)
-{
-       if (!(*pdisp = kzalloc(sizeof(**pdisp), GFP_KERNEL)))
-               return -ENOMEM;
-       return nvkm_disp_ctor(func, device, type, inst, *pdisp);
+       ret = nvkm_engine_ctor(&nvkm_disp, device, type, inst, true, &disp->engine);
+       if (ret)
+               return ret;
+
+       if (func->super) {
+               disp->super.wq = create_singlethread_workqueue("nvkm-disp");
+               if (!disp->super.wq)
+                       return -ENOMEM;
+
+               INIT_WORK(&disp->super.work, func->super);
+       }
+
+       return nvkm_event_init(func->uevent, 1, ARRAY_SIZE(disp->chan), &disp->uevent);
 }
index 69ef40fe57d007a2e2c614e4c9b99165b770b4bc..af5d35149412ad9e0a411cdff2068347287d129e 100644 (file)
@@ -298,7 +298,6 @@ g84_disp_core_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 
 static const struct nvkm_disp_func
 g84_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -324,5 +323,5 @@ int
 g84_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
             struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&g84_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&g84_disp, device, type, inst, pdisp);
 }
index 6d5fd5c417049ef8f1c8dafd3cac44399ecc4c26..5c9a769ff3bdf3e028a76f89c9feca7920e7078d 100644 (file)
@@ -345,7 +345,6 @@ g94_disp_core_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 
 static const struct nvkm_disp_func
 g94_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -371,5 +370,5 @@ int
 g94_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
             struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&g94_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&g94_disp, device, type, inst, pdisp);
 }
index b3cfed2035d8bb3d50b4393071565eb2ea6187e1..c693ad09fc8314095e0054c15148650e8b4fc9be 100644 (file)
@@ -152,7 +152,6 @@ ga102_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 ga102_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = tu102_disp_init,
        .fini = gv100_disp_fini,
@@ -178,5 +177,5 @@ int
 ga102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&ga102_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&ga102_disp, device, type, inst, pdisp);
 }
index 492e2d23fd32f03ce7f5d899f572c952ce125cb6..75b7b41d572758d747cae53ba713480c46fdf3c4 100644 (file)
@@ -1202,7 +1202,6 @@ gf119_disp_init(struct nvkm_disp *disp)
 
 static const struct nvkm_disp_func
 gf119_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -1228,5 +1227,5 @@ int
 gf119_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gf119_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gf119_disp, device, type, inst, pdisp);
 }
index b7b7a0c230e132ad9424d71ce244e4575fa574d0..1c9a5e0d1dddd51233f5d085c160bb96bfbda1e2 100644 (file)
@@ -296,7 +296,6 @@ gk104_disp_core_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 
 static const struct nvkm_disp_func
 gk104_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -322,5 +321,5 @@ int
 gk104_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gk104_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gk104_disp, device, type, inst, pdisp);
 }
index d4097d3c085857e5a33e8e86a39eb18b28e041ed..018a92d6a69420188a5ed50558913471d14f81f0 100644 (file)
@@ -30,7 +30,6 @@
 
 static const struct nvkm_disp_func
 gk110_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -56,5 +55,5 @@ int
 gk110_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gk110_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gk110_disp, device, type, inst, pdisp);
 }
index 9a0a519e280fdba07ec6dd080bdf82018623df4f..301d7a9692c8806a2fd6f24b923d3dbdce92bb6a 100644 (file)
@@ -86,7 +86,6 @@ gm107_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 gm107_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -112,5 +111,5 @@ int
 gm107_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gm107_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gm107_disp, device, type, inst, pdisp);
 }
index 242c939e57152c4b730fe3f9c020d344a83546ba..c65d85b4299eb303a1aafd8210a1710461a4682d 100644 (file)
@@ -183,7 +183,6 @@ gm200_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 gm200_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -209,5 +208,5 @@ int
 gm200_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gm200_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gm200_disp, device, type, inst, pdisp);
 }
index 8b9effddbabd7458ec83138867adfd5b9141fd94..603b7188f1cf144ad846c1a77e3799ac1d2d429c 100644 (file)
@@ -101,7 +101,6 @@ gp100_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 gp100_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -126,5 +125,5 @@ int
 gp100_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gp100_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gp100_disp, device, type, inst, pdisp);
 }
index 5b8ca2d9eefa076518ae6861ae847270fed1c8da..5cafd7ce53825f15c1c10f75c6b9bf7436c6db3c 100644 (file)
@@ -172,7 +172,6 @@ gp102_disp_intr_error(struct nvkm_disp *disp, int chid)
 
 static const struct nvkm_disp_func
 gp102_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gf119_disp_init,
        .fini = gf119_disp_fini,
@@ -197,5 +196,5 @@ int
 gp102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gp102_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gp102_disp, device, type, inst, pdisp);
 }
index d7f9d141c09185e615f4ecf2f13ba2fc167ee7b7..31b5fd32e03adc08cab724b93c8a4a5d57519aeb 100644 (file)
@@ -80,7 +80,6 @@ gt200_disp_ovly_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 
 static const struct nvkm_disp_func
 gt200_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -106,5 +105,5 @@ int
 gt200_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gt200_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gt200_disp, device, type, inst, pdisp);
 }
index 42cc17d7116a33cb8e3b439465d57a7b347ec278..98d99e1c01b23d6ef0dacab1a244b536e2be9815 100644 (file)
@@ -173,7 +173,6 @@ gt215_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 gt215_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -199,5 +198,5 @@ int
 gt215_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gt215_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gt215_disp, device, type, inst, pdisp);
 }
index bb61ba6a2a249304cdf515e9be9f3ccda4ae5ff2..18c40e398ea57eb4560255ae3739d108f241d55e 100644 (file)
@@ -1285,7 +1285,6 @@ gv100_disp_init(struct nvkm_disp *disp)
 
 static const struct nvkm_disp_func
 gv100_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = gv100_disp_init,
        .fini = gv100_disp_fini,
@@ -1311,5 +1310,5 @@ int
 gv100_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&gv100_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&gv100_disp, device, type, inst, pdisp);
 }
index e23e3b80817f1133ea471914e5181eb01bdf574a..fb8bfb98c105ba9a4d3b345d2e3cfc6878c815d9 100644 (file)
@@ -54,7 +54,6 @@ mcp77_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 mcp77_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -80,5 +79,5 @@ int
 mcp77_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&mcp77_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&mcp77_disp, device, type, inst, pdisp);
 }
index 2dc99897dc67993b194725f2bf424900ee51102d..8b9e97665805cbde72fb5adb30c371b8942006e5 100644 (file)
@@ -59,7 +59,6 @@ mcp89_sor_new(struct nvkm_disp *disp, int id)
 
 static const struct nvkm_disp_func
 mcp89_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -85,5 +84,5 @@ int
 mcp89_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&mcp89_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&mcp89_disp, device, type, inst, pdisp);
 }
index 056daf34e62c0dfb4eda7d19ee34b44b4313d2e9..1a3151528e7ee798737f4b16fbb3b415c90e5786 100644 (file)
@@ -1788,22 +1788,8 @@ nv50_disp_oneinit(struct nvkm_disp *disp)
                              0x1000, 0, disp->inst, &disp->ramht);
 }
 
-void *
-nv50_disp_dtor(struct nvkm_disp *disp)
-{
-       nvkm_ramht_del(&disp->ramht);
-       nvkm_gpuobj_del(&disp->inst);
-
-       nvkm_event_fini(&disp->uevent);
-       if (disp->super.wq)
-               destroy_workqueue(disp->super.wq);
-
-       return disp;
-}
-
 static const struct nvkm_disp_func
 nv50_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = nv50_disp_init,
        .fini = nv50_disp_fini,
@@ -1825,35 +1811,9 @@ nv50_disp = {
        }
 };
 
-int
-nv50_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device,
-              enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp)
-{
-       struct nvkm_disp *disp;
-       int ret;
-
-       if (!(disp = kzalloc(sizeof(*disp), GFP_KERNEL)))
-               return -ENOMEM;
-       disp->func = func;
-       *pdisp = disp;
-
-       ret = nvkm_disp_ctor(func, device, type, inst, disp);
-       if (ret)
-               return ret;
-
-       disp->super.wq = create_singlethread_workqueue("nvkm-disp");
-       if (!disp->super.wq)
-               return -ENOMEM;
-
-       INIT_WORK(&disp->super.work, func->super);
-
-       return nvkm_event_init(func->uevent, 1, ARRAY_SIZE(disp->chan),
-                              &disp->uevent);
-}
-
 int
 nv50_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
              struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&nv50_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&nv50_disp, device, type, inst, pdisp);
 }
index 472ff32d7879e36e8bf438a8620462730bb0259e..a73b453c630278386e64f7db5b3caf227e5cfa81 100644 (file)
@@ -15,7 +15,6 @@ int nvkm_disp_new_(const struct nvkm_disp_func *, struct nvkm_device *, enum nvk
 void nvkm_disp_vblank(struct nvkm_disp *, int head);
 
 struct nvkm_disp_func {
-       void *(*dtor)(struct nvkm_disp *);
        int (*oneinit)(struct nvkm_disp *);
        int (*init)(struct nvkm_disp *);
        void (*fini)(struct nvkm_disp *);
@@ -46,9 +45,6 @@ int  nvkm_disp_ntfy(struct nvkm_object *, u32, struct nvkm_event **);
 int nv04_disp_mthd(struct nvkm_object *, u32, void *, u32);
 int nv50_disp_root_mthd_(struct nvkm_object *, u32, void *, u32);
 
-int nv50_disp_new_(const struct nvkm_disp_func *, struct nvkm_device *, enum nvkm_subdev_type, int,
-                  struct nvkm_disp **);
-void *nv50_disp_dtor(struct nvkm_disp *);
 int nv50_disp_oneinit(struct nvkm_disp *);
 int nv50_disp_init(struct nvkm_disp *);
 void nv50_disp_fini(struct nvkm_disp *);
index 2c0a10d6af8cfa9f75faa584a8e98b56cf8a8151..b9cd706f545184919109e7a294abddbfd0786e13 100644 (file)
@@ -238,7 +238,6 @@ tu102_disp_init(struct nvkm_disp *disp)
 
 static const struct nvkm_disp_func
 tu102_disp = {
-       .dtor = nv50_disp_dtor,
        .oneinit = nv50_disp_oneinit,
        .init = tu102_disp_init,
        .fini = gv100_disp_fini,
@@ -264,5 +263,5 @@ int
 tu102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
               struct nvkm_disp **pdisp)
 {
-       return nv50_disp_new_(&tu102_disp, device, type, inst, pdisp);
+       return nvkm_disp_new_(&tu102_disp, device, type, inst, pdisp);
 }