555.42.02 has incompatible changes to
NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED.

Signed-off-by: Ben Skeggs <bske...@nvidia.com>
Reviewed-by: Dave Airlie <airl...@redhat.com>
Reviewed-by: Timur Tabi <tt...@nvidia.com>
Tested-by: Timur Tabi <tt...@nvidia.com>
---
 .../nouveau/nvkm/subdev/gsp/rm/r535/disp.c    | 42 +++++++++++--------
 .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h   |  1 +
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/disp.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/disp.c
index 389b2738f711..40c50d9fca0b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/disp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/disp.c
@@ -1442,6 +1442,21 @@ r535_disp_init(struct nvkm_disp *disp)
        return 0;
 }
 
+static int
+r535_disp_get_supported(struct nvkm_disp *disp, unsigned long *pmask)
+{
+       NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS *ctrl;
+
+       ctrl = nvkm_gsp_rm_ctrl_rd(&disp->rm.objcom,
+                                  NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED, 
sizeof(*ctrl));
+       if (IS_ERR(ctrl))
+               return PTR_ERR(ctrl);
+
+       *pmask = ctrl->displayMask;
+       nvkm_gsp_rm_ctrl_done(&disp->rm.objcom, ctrl);
+       return 0;
+}
+
 static int
 r535_disp_get_static_info(struct nvkm_disp *disp)
 {
@@ -1468,6 +1483,7 @@ r535_disp_oneinit(struct nvkm_disp *disp)
        struct nvkm_gsp *gsp = device->gsp;
        const struct nvkm_rm_api *rmapi = gsp->rm->api;
        NV2080_CTRL_INTERNAL_DISPLAY_WRITE_INST_MEM_PARAMS *ctrl;
+       unsigned long mask;
        int ret, i;
 
        /* RAMIN. */
@@ -1634,25 +1650,14 @@ r535_disp_oneinit(struct nvkm_disp *disp)
                        return ret;
        }
 
-       /* */
-       {
-               NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS *ctrl;
-               unsigned long mask;
-               int i;
-
-               ctrl = nvkm_gsp_rm_ctrl_rd(&disp->rm.objcom,
-                                          
NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED, sizeof(*ctrl));
-               if (IS_ERR(ctrl))
-                       return PTR_ERR(ctrl);
-
-               mask = ctrl->displayMask;
-               nvkm_gsp_rm_ctrl_done(&disp->rm.objcom, ctrl);
+       ret = rmapi->disp->get_supported(disp, &mask);
+       if (ret)
+               return ret;
 
-               for_each_set_bit(i, &mask, 32) {
-                       ret = r535_outp_new(disp, i);
-                       if (ret)
-                               return ret;
-               }
+       for_each_set_bit(i, &mask, 32) {
+               ret = r535_outp_new(disp, i);
+               if (ret)
+                       return ret;
        }
 
        ret = nvkm_event_init(&r535_disp_event, &gsp->subdev, 3, 32, 
&disp->rm.event);
@@ -1746,6 +1751,7 @@ r535_disp_new(const struct nvkm_disp_func *hw, struct 
nvkm_device *device,
 const struct nvkm_rm_api_disp
 r535_disp = {
        .get_static_info = r535_disp_get_static_info,
+       .get_supported = r535_disp_get_supported,
        .bl_ctrl = r535_bl_ctrl,
        .dp = {
                .set_indexed_link_rates = r535_dp_set_indexed_link_rates,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
index ce04ed9e3c27..3f0cb6790f00 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
@@ -80,6 +80,7 @@ struct nvkm_rm_api {
 
        const struct nvkm_rm_api_disp {
                int (*get_static_info)(struct nvkm_disp *);
+               int (*get_supported)(struct nvkm_disp *, unsigned long 
*display_mask);
 
                int (*bl_ctrl)(struct nvkm_disp *, unsigned display_id, bool 
set, int *val);
 
-- 
2.49.0

Reply via email to