]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/nouveau/disp: move outp init/fini paths to chipset code
authorBen Skeggs <bskeggs@redhat.com>
Tue, 19 Sep 2023 21:56:32 +0000 (17:56 -0400)
committerLyude Paul <lyude@redhat.com>
Tue, 19 Sep 2023 22:22:24 +0000 (18:22 -0400)
- pre-nv5x doesn't use any of this
- preparation for GSP-RM

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Acked-by: Danilo Krummrich <me@dakr.org>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230919220442.202488-38-lyude@redhat.com
drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.h
drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c

index 1dbe68f9a0e07e6d6bb9aa5ecf52a0828b1ab57c..39f7e7ce9f4a2130f555c3372cb0312adb0b4b7f 100644 (file)
@@ -102,18 +102,14 @@ static int
 nvkm_disp_fini(struct nvkm_engine *engine, bool suspend)
 {
        struct nvkm_disp *disp = nvkm_disp(engine);
-       struct nvkm_conn *conn;
        struct nvkm_outp *outp;
 
        if (disp->func->fini)
                disp->func->fini(disp);
 
        list_for_each_entry(outp, &disp->outps, head) {
-               nvkm_outp_fini(outp);
-       }
-
-       list_for_each_entry(conn, &disp->conns, head) {
-               nvkm_conn_fini(conn);
+               if (outp->func->fini)
+                       outp->func->fini(outp);
        }
 
        return 0;
@@ -123,16 +119,12 @@ static int
 nvkm_disp_init(struct nvkm_engine *engine)
 {
        struct nvkm_disp *disp = nvkm_disp(engine);
-       struct nvkm_conn *conn;
        struct nvkm_outp *outp;
        struct nvkm_ior *ior;
 
-       list_for_each_entry(conn, &disp->conns, head) {
-               nvkm_conn_init(conn);
-       }
-
        list_for_each_entry(outp, &disp->outps, head) {
-               nvkm_outp_init(outp);
+               if (outp->func->init)
+                       outp->func->init(outp);
        }
 
        if (disp->func->init) {
@@ -156,9 +148,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
 {
        struct nvkm_disp *disp = nvkm_disp(engine);
        struct nvkm_subdev *subdev = &disp->engine.subdev;
-       struct nvkm_outp *outp;
        struct nvkm_head *head;
-       struct nvkm_ior *ior;
        int ret, i;
 
        if (disp->func->oneinit) {
@@ -167,19 +157,6 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
                        return ret;
        }
 
-       /* Enforce identity-mapped SOR assignment for panels, which have
-        * certain bits (ie. backlight controls) wired to a specific SOR.
-        */
-       list_for_each_entry(outp, &disp->outps, head) {
-               if (outp->conn->info.type == DCB_CONNECTOR_LVDS ||
-                   outp->conn->info.type == DCB_CONNECTOR_eDP) {
-                       ior = nvkm_ior_find(disp, SOR, ffs(outp->info.or) - 1);
-                       if (!WARN_ON(!ior))
-                               ior->identity = true;
-                       outp->identity = true;
-               }
-       }
-
        i = 0;
        list_for_each_entry(head, &disp->heads, head)
                i = max(i, head->id + 1);
index fbdae11378646f79f247ef09d436dd02325432be..ff88a5a5253a764d25417a62f6c4a47222434fc4 100644 (file)
 
 #include <nvif/event.h>
 
-void
-nvkm_conn_fini(struct nvkm_conn *conn)
-{
-}
-
-void
-nvkm_conn_init(struct nvkm_conn *conn)
-{
-}
-
 void
 nvkm_conn_del(struct nvkm_conn **pconn)
 {
index a0600e72b0ecdc04850c140cdb4696cf1d6f5e2b..01c3146c7066fb43133ba1cab535c437011b2e10 100644 (file)
@@ -19,8 +19,6 @@ struct nvkm_conn {
 int nvkm_conn_new(struct nvkm_disp *, int index, struct nvbios_connE *,
                  struct nvkm_conn **);
 void nvkm_conn_del(struct nvkm_conn **);
-void nvkm_conn_init(struct nvkm_conn *);
-void nvkm_conn_fini(struct nvkm_conn *);
 
 #define CONN_MSG(c,l,f,a...) do {                                              \
        struct nvkm_conn *_conn = (c);                                    \
index aaa7796946ceb30803836378f0e2689d7937ec53..b35fae96d855db5e5f803fd0cdf9221f32446118 100644 (file)
@@ -603,6 +603,7 @@ nvkm_dp_fini(struct nvkm_outp *outp)
 static void
 nvkm_dp_init(struct nvkm_outp *outp)
 {
+       nvkm_outp_init(outp);
        nvkm_dp_enable(outp, outp->dp.enabled);
 }
 
index 7343b24f10eb7bebcb35c935244e920809b58bae..4be09ec4fd5c2958468504975bc5cdcba60ce96c 100644 (file)
@@ -1586,6 +1586,7 @@ nv50_disp_oneinit(struct nvkm_disp *disp)
        struct nvkm_bios *bios = device->bios;
        struct nvkm_outp *outp, *outt, *pair;
        struct nvkm_conn *conn;
+       struct nvkm_ior *ior;
        int ret, i;
        u8  ver, hdr;
        u32 data;
@@ -1747,6 +1748,19 @@ nv50_disp_oneinit(struct nvkm_disp *disp)
                list_add_tail(&outp->conn->head, &disp->conns);
        }
 
+       /* Enforce identity-mapped SOR assignment for panels, which have
+        * certain bits (ie. backlight controls) wired to a specific SOR.
+        */
+       list_for_each_entry(outp, &disp->outps, head) {
+               if (outp->conn->info.type == DCB_CONNECTOR_LVDS ||
+                   outp->conn->info.type == DCB_CONNECTOR_eDP) {
+                       ior = nvkm_ior_find(disp, SOR, ffs(outp->info.or) - 1);
+                       if (!WARN_ON(!ior))
+                               ior->identity = true;
+                       outp->identity = true;
+               }
+       }
+
        return 0;
 }
 
index f1a3e623bb222d7e3f6d261576873d57ac77dd73..bfb2a4db8d644730e9f05b42871f043eeaaa95fa 100644 (file)
@@ -287,13 +287,6 @@ nvkm_outp_acquire(struct nvkm_outp *outp, bool hda)
        return 0;
 }
 
-void
-nvkm_outp_fini(struct nvkm_outp *outp)
-{
-       if (outp->func->fini)
-               outp->func->fini(outp);
-}
-
 struct nvkm_ior *
 nvkm_outp_inherit(struct nvkm_outp *outp)
 {
@@ -332,8 +325,8 @@ nvkm_outp_inherit(struct nvkm_outp *outp)
        return ior;
 }
 
-static void
-nvkm_outp_init_route(struct nvkm_outp *outp)
+void
+nvkm_outp_init(struct nvkm_outp *outp)
 {
        enum nvkm_ior_proto proto;
        enum nvkm_ior_type type;
@@ -365,14 +358,6 @@ nvkm_outp_init_route(struct nvkm_outp *outp)
        ior->arm.outp = outp;
 }
 
-void
-nvkm_outp_init(struct nvkm_outp *outp)
-{
-       nvkm_outp_init_route(outp);
-       if (outp->func->init)
-               outp->func->init(outp);
-}
-
 void
 nvkm_outp_del(struct nvkm_outp **poutp)
 {
@@ -420,6 +405,7 @@ nvkm_outp_new_(const struct nvkm_outp_func *func, struct nvkm_disp *disp,
 
 static const struct nvkm_outp_func
 nvkm_outp = {
+       .init = nvkm_outp_init,
        .detect = nvkm_outp_detect,
        .inherit = nvkm_outp_inherit,
        .acquire = nvkm_outp_acquire,