[Freedreno] [PATCH v2 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
Abhinav Kumar
quic_abhinavk at quicinc.com
Mon Apr 25 19:36:08 UTC 2022
+ Vinod
Hi Dmitry
Can we also absorb https://patchwork.freedesktop.org/patch/483255/ into
this change?
Looks like they are touching the same code and can be absorbed easily.
Thanks
Abhinav
On 4/19/2022 9:20 AM, 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 at 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 e29796c4f27b..aadf032a190b 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..a18fb649301c 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);
More information about the Freedreno
mailing list