drm/nouveau/gsp: add hal for disp.get_active()
authorBen Skeggs <bskeggs@nvidia.com>
Thu, 14 Nov 2024 03:02:38 +0000 (13:02 +1000)
committerDave Airlie <airlied@redhat.com>
Sun, 18 May 2025 20:29:25 +0000 (06:29 +1000)
555.42.02 has incompatible changes to NV0073_CTRL_CMD_SYSTEM_GET_ACTIVE.

Signed-off-by: Ben Skeggs <bskeggs@nvidia.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Timur Tabi <ttabi@nvidia.com>
Tested-by: Timur Tabi <ttabi@nvidia.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/disp.c
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h

index 4df5b2b72d29e2480000b74e43def3a028203b17..97b7e54df61fe069129009072f231a5848b6a449 100644 (file)
@@ -724,7 +724,7 @@ r535_outp_acquire(struct nvkm_outp *outp, bool hda)
 }
 
 static int
-r535_disp_head_displayid(struct nvkm_disp *disp, int head, u32 *displayid)
+r535_disp_get_active(struct nvkm_disp *disp, unsigned head, u32 *displayid)
 {
        NV0073_CTRL_SYSTEM_GET_ACTIVE_PARAMS *ctrl;
        int ret;
@@ -757,7 +757,9 @@ r535_outp_inherit(struct nvkm_outp *outp)
        int ret;
 
        list_for_each_entry(head, &disp->heads, head) {
-               ret = r535_disp_head_displayid(disp, head->id, &displayid);
+               const struct nvkm_rm_api *rmapi = disp->rm.objcom.client->gsp->rm->api;
+
+               ret = rmapi->disp->get_active(disp, head->id, &displayid);
                if (WARN_ON(ret))
                        return NULL;
 
@@ -1758,6 +1760,7 @@ r535_disp = {
        .get_static_info = r535_disp_get_static_info,
        .get_supported = r535_disp_get_supported,
        .get_connect_state = r535_disp_get_connect_state,
+       .get_active = r535_disp_get_active,
        .bl_ctrl = r535_bl_ctrl,
        .dp = {
                .set_indexed_link_rates = r535_dp_set_indexed_link_rates,
index 58c745554544bec138449d1da6d88ff286b99960..f25539401b202f27ebee8a30625165608f6adbf3 100644 (file)
@@ -82,6 +82,7 @@ struct nvkm_rm_api {
                int (*get_static_info)(struct nvkm_disp *);
                int (*get_supported)(struct nvkm_disp *, unsigned long *display_mask);
                int (*get_connect_state)(struct nvkm_disp *, unsigned display_id);
+               int (*get_active)(struct nvkm_disp *, unsigned head, u32 *display_id);
 
                int (*bl_ctrl)(struct nvkm_disp *, unsigned display_id, bool set, int *val);