Message ID | 20220217034502.464312-1-dmitry.baryshkov@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | [1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx | expand |
Assuming this series is newer and supersedes https://patchwork.freedesktop.org/patch/464353/?series=97307&rev=2, please check below. On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote: > 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> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 10 ++++---- > drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 +++++++++++------------- > 2 files changed, 17 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > index d0653a9ec694..81a35c8d62e7 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -790,11 +790,9 @@ 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]); > + 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]); > } > } > > @@ -1102,7 +1100,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]); > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c > index 21d20373eb8b..cbbf77b17fc3 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c > @@ -11,6 +11,14 @@ > #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]; Shouldnt this be 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 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif, > 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);
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index d0653a9ec694..81a35c8d62e7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -790,11 +790,9 @@ 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]); + 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]); } } @@ -1102,7 +1100,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]); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c index 21d20373eb8b..cbbf77b17fc3 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c @@ -11,6 +11,14 @@ #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 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif, 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);
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> --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 10 ++++---- drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 +++++++++++------------- 2 files changed, 17 insertions(+), 22 deletions(-)