OSDN Git Service

drm/msm: don't store created planes, connectors and encoders
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Wed, 6 Apr 2022 10:12:47 +0000 (13:12 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 25 Apr 2022 21:50:47 +0000 (00:50 +0300)
There is no point now in storing arrays of creates planes, connectors
and encoders. Remove them from struct msm_drm_private.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/480945/
Link: https://lore.kernel.org/r/20220406101247.483649-4-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
drivers/gpu/drm/msm/dp/dp_display.c
drivers/gpu/drm/msm/dsi/dsi.c
drivers/gpu/drm/msm/hdmi/hdmi.c
drivers/gpu/drm/msm/msm_drv.h

index eb09766..8559727 100644 (file)
@@ -569,8 +569,6 @@ static int _dpu_kms_initialize_dsi(struct drm_device *dev,
                        return PTR_ERR(encoder);
                }
 
-               priv->encoders[priv->num_encoders++] = encoder;
-
                memset(&info, 0, sizeof(info));
                info.intf_type = encoder->encoder_type;
 
@@ -633,8 +631,6 @@ static int _dpu_kms_initialize_displayport(struct drm_device *dev,
                        return rc;
                }
 
-               priv->encoders[priv->num_encoders++] = encoder;
-
                info.num_of_h_tiles = 1;
                info.h_tile_instance[0] = i;
                info.capabilities = MSM_DISPLAY_CAP_VID_MODE;
@@ -679,6 +675,7 @@ static int _dpu_kms_setup_displays(struct drm_device *dev,
        return rc;
 }
 
+#define MAX_PLANES 20
 static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
 {
        struct drm_device *dev;
@@ -686,6 +683,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
        struct drm_plane *cursor_planes[MAX_PLANES] = { NULL };
        struct drm_crtc *crtc;
        struct drm_encoder *encoder;
+       unsigned int num_encoders;
 
        struct msm_drm_private *priv;
        struct dpu_mdss_cfg *catalog;
@@ -704,7 +702,11 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
        if (ret)
                return ret;
 
-       max_crtc_count = min(catalog->mixer_count, priv->num_encoders);
+       num_encoders = 0;
+       drm_for_each_encoder(encoder, dev)
+               num_encoders++;
+
+       max_crtc_count = min(catalog->mixer_count, num_encoders);
 
        /* Create the planes, keeping track of one primary/cursor per crtc */
        for (i = 0; i < catalog->sspp_count; i++) {
@@ -729,7 +731,6 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
                        ret = PTR_ERR(plane);
                        return ret;
                }
-               priv->planes[priv->num_planes++] = plane;
 
                if (type == DRM_PLANE_TYPE_CURSOR)
                        cursor_planes[cursor_planes_idx++] = plane;
index 834d16b..2512166 100644 (file)
@@ -229,9 +229,6 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
                        return PTR_ERR(connector);
                }
 
-               priv->encoders[priv->num_encoders++] = encoder;
-               priv->connectors[priv->num_connectors++] = connector;
-
                break;
        case DRM_MODE_ENCODER_TMDS:
                encoder = mdp4_dtv_encoder_init(dev);
@@ -252,8 +249,6 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
                        }
                }
 
-               priv->encoders[priv->num_encoders++] = encoder;
-
                break;
        case DRM_MODE_ENCODER_DSI:
                /* only DSI1 supported for now */
@@ -272,7 +267,6 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
 
                /* TODO: Add DMA_S later? */
                encoder->possible_crtcs = 1 << DMA_P;
-               priv->encoders[priv->num_encoders++] = encoder;
 
                ret = msm_dsi_modeset_init(priv->dsi[dsi_id], dev, encoder);
                if (ret) {
@@ -324,7 +318,6 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
                        ret = PTR_ERR(plane);
                        goto fail;
                }
-               priv->planes[priv->num_planes++] = plane;
        }
 
        for (i = 0; i < ARRAY_SIZE(mdp4_crtcs); i++) {
index 5322d1c..72ec33b 100644 (file)
@@ -322,7 +322,6 @@ static struct drm_encoder *construct_encoder(struct mdp5_kms *mdp5_kms,
                                             struct mdp5_ctl *ctl)
 {
        struct drm_device *dev = mdp5_kms->dev;
-       struct msm_drm_private *priv = dev->dev_private;
        struct drm_encoder *encoder;
 
        encoder = mdp5_encoder_init(dev, intf, ctl);
@@ -331,8 +330,6 @@ static struct drm_encoder *construct_encoder(struct mdp5_kms *mdp5_kms,
                return encoder;
        }
 
-       priv->encoders[priv->num_encoders++] = encoder;
-
        return encoder;
 }
 
@@ -438,6 +435,7 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
        struct drm_plane *primary[MAX_BASES] = { NULL };
        struct drm_plane *cursor[MAX_BASES] = { NULL };
        struct drm_encoder *encoder;
+       unsigned int num_encoders;
 
        /*
         * Construct encoders and modeset initialize connector devices
@@ -449,12 +447,16 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
                        goto fail;
        }
 
+       num_encoders = 0;
+       drm_for_each_encoder(encoder, dev)
+               num_encoders++;
+
        /*
         * We should ideally have less number of encoders (set up by parsing
         * the MDP5 interfaces) than the number of layer mixers present in HW,
         * but let's be safe here anyway
         */
-       num_crtcs = min(priv->num_encoders, mdp5_kms->num_hwmixers);
+       num_crtcs = min(num_encoders, mdp5_kms->num_hwmixers);
 
        /*
         * Construct planes equaling the number of hw pipes, and CRTCs for the
@@ -479,7 +481,6 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
                        DRM_DEV_ERROR(dev->dev, "failed to construct plane %d (%d)\n", i, ret);
                        goto fail;
                }
-               priv->planes[priv->num_planes++] = plane;
 
                if (type == DRM_PLANE_TYPE_PRIMARY)
                        primary[pi++] = plane;
index 178b774..ad7a18a 100644 (file)
@@ -1541,8 +1541,6 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
 
        dp_priv->panel->connector = dp_display->connector;
 
-       priv->connectors[priv->num_connectors++] = dp_display->connector;
-
        dp_display->bridge = msm_dp_bridge_init(dp_display, dev, encoder);
        if (IS_ERR(dp_display->bridge)) {
                ret = PTR_ERR(dp_display->bridge);
index c12e66a..1fe020e 100644 (file)
@@ -273,7 +273,6 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,
        }
 
        priv->bridges[priv->num_bridges++]       = msm_dsi->bridge;
-       priv->connectors[priv->num_connectors++] = msm_dsi->connector;
 
        return 0;
 fail:
index ec32435..baa6f1a 100644 (file)
@@ -322,7 +322,6 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi,
        }
 
        priv->bridges[priv->num_bridges++]       = hdmi->bridge;
-       priv->connectors[priv->num_connectors++] = hdmi->connector;
 
        platform_set_drvdata(pdev, hdmi);
 
index fb8c230..c01d376 100644 (file)
@@ -46,10 +46,7 @@ struct msm_gem_vma;
 struct msm_disp_state;
 
 #define MAX_CRTCS      8
-#define MAX_PLANES     20
-#define MAX_ENCODERS   8
 #define MAX_BRIDGES    8
-#define MAX_CONNECTORS 8
 
 #define FRAC_16_16(mult, div)    (((mult) << 16) / (div))
 
@@ -182,23 +179,14 @@ struct msm_drm_private {
 
        struct workqueue_struct *wq;
 
-       unsigned int num_planes;
-       struct drm_plane *planes[MAX_PLANES];
-
        unsigned int num_crtcs;
        struct drm_crtc *crtcs[MAX_CRTCS];
 
        struct msm_drm_thread event_thread[MAX_CRTCS];
 
-       unsigned int num_encoders;
-       struct drm_encoder *encoders[MAX_ENCODERS];
-
        unsigned int num_bridges;
        struct drm_bridge *bridges[MAX_BRIDGES];
 
-       unsigned int num_connectors;
-       struct drm_connector *connectors[MAX_CONNECTORS];
-
        /* Properties */
        struct drm_property *plane_property[PLANE_PROP_MAX_NUM];