drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Wed, 15 Jun 2022 12:57:01 +0000 (15:57 +0300)
committerRob Clark <robdclark@chromium.org>
Sun, 18 Sep 2022 16:38:02 +0000 (09:38 -0700)
Remove loops over hw_vbif. Instead always VBIF's idx as an index in the
array. This fixes an error in dpu_kms_hw_init(), where we fill
dpu_kms->hw_vbif[i], but check for an error pointer at
dpu_kms->hw_vbif[vbif_idx].

Fixes: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/489569/
Link: https://lore.kernel.org/r/20220615125703.24647-1-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c

index 8646fd0..c99c7a2 100644 (file)
@@ -823,12 +823,10 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
        _dpu_kms_mmu_destroy(dpu_kms);
 
        if (dpu_kms->catalog) {
-               for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
-                       u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
-
-                       if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx]) {
-                               dpu_hw_vbif_destroy(dpu_kms->hw_vbif[vbif_idx]);
-                               dpu_kms->hw_vbif[vbif_idx] = NULL;
+               for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
+                       if (dpu_kms->hw_vbif[i]) {
+                               dpu_hw_vbif_destroy(dpu_kms->hw_vbif[i]);
+                               dpu_kms->hw_vbif[i] = NULL;
                        }
                }
        }
@@ -1110,7 +1108,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
        for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
                u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
 
-               dpu_kms->hw_vbif[i] = dpu_hw_vbif_init(vbif_idx,
+               dpu_kms->hw_vbif[vbif_idx] = dpu_hw_vbif_init(vbif_idx,
                                dpu_kms->vbif[vbif_idx], dpu_kms->catalog);
                if (IS_ERR_OR_NULL(dpu_kms->hw_vbif[vbif_idx])) {
                        rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
index 21d2037..a18fb64 100644 (file)
 #include "dpu_hw_vbif.h"
 #include "dpu_trace.h"
 
+static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif vbif_idx)
+{
+       if (vbif_idx < ARRAY_SIZE(dpu_kms->hw_vbif))
+               return dpu_kms->hw_vbif[vbif_idx];
+
+       return NULL;
+}
+
 /**
  * _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
  * @vbif:      Pointer to hardware vbif driver
@@ -148,20 +156,15 @@ exit:
 void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
                struct dpu_vbif_set_ot_params *params)
 {
-       struct dpu_hw_vbif *vbif = NULL;
+       struct dpu_hw_vbif *vbif;
        struct dpu_hw_mdp *mdp;
        bool forced_on = false;
        u32 ot_lim;
-       int ret, i;
+       int ret;
 
        mdp = dpu_kms->hw_mdp;
 
-       for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
-               if (dpu_kms->hw_vbif[i] &&
-                               dpu_kms->hw_vbif[i]->idx == params->vbif_idx)
-                       vbif = dpu_kms->hw_vbif[i];
-       }
-
+       vbif = dpu_get_vbif(dpu_kms, params->vbif_idx);
        if (!vbif || !mdp) {
                DRM_DEBUG_ATOMIC("invalid arguments vbif %d mdp %d\n",
                                vbif != NULL, mdp != NULL);
@@ -204,7 +207,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
 void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
                struct dpu_vbif_set_qos_params *params)
 {
-       struct dpu_hw_vbif *vbif = NULL;
+       struct dpu_hw_vbif *vbif;
        struct dpu_hw_mdp *mdp;
        bool forced_on = false;
        const struct dpu_vbif_qos_tbl *qos_tbl;
@@ -216,13 +219,7 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
        }
        mdp = dpu_kms->hw_mdp;
 
-       for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
-               if (dpu_kms->hw_vbif[i] &&
-                               dpu_kms->hw_vbif[i]->idx == params->vbif_idx) {
-                       vbif = dpu_kms->hw_vbif[i];
-                       break;
-               }
-       }
+       vbif = dpu_get_vbif(dpu_kms, params->vbif_idx);
 
        if (!vbif || !vbif->cap) {
                DPU_ERROR("invalid vbif %d\n", params->vbif_idx);