[Freedreno] [PATCH v2 1/2] drm/msm/dpu: retrieve DSI DSC struct at atomic_check()
Kuogee Hsieh
quic_khsieh at quicinc.com
Fri Jun 2 15:51:35 UTC 2023
>> }
>> + index = dpu_enc->disp_info.h_tile_instance[0];
>> + if (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_DSI)
>> + dpu_enc->dsc = msm_dsi_get_dsc_config(priv->dsi[index]);
>
> As discussed previously, one should not write to non-state objects
> from atomic_check. This chunk does.
yes, i did think about not to assign dsc here as we had discussed.
but the get_topology() below did need to know whether dsc is present or not.
otherwise, i have to create a local variable to pass into get_topology()
function.
The dsc is assigned here but not yet be used.
>
> Not to mention that this will start exploding once you try adding DP
> next to it.
>
> Please abstain from posting next revisions until the discussions on
> the previous one are more or less finished. For now this is NAK.
>
> Not to mention that this patch doesn't pass checkpatch.pl.
>
>> +
>> topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode,
>> crtc_state);
>> /*
>> @@ -1034,7 +1038,7 @@ static void
>> dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
>> struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC];
>> int num_lm, num_ctl, num_pp, num_dsc;
>> unsigned int dsc_mask = 0;
>> - int i;
>> + int index, i;
>> if (!drm_enc) {
>> DPU_ERROR("invalid encoder\n");
>> @@ -1055,6 +1059,10 @@ static void
>> dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
>> trace_dpu_enc_mode_set(DRMID(drm_enc));
>> + index = dpu_enc->disp_info.h_tile_instance[0];
>> + if (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_DSI)
>> + dpu_enc->dsc = msm_dsi_get_dsc_config(priv->dsi[index]);
>
> Doesn't this seem 100% same as the previous chunk? Doesn't it plead to
> be extracted to a helper function?
>
>> +
>> /* Query resource that have been reserved in atomic check step. */
>> num_pp = dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state,
>> drm_enc->base.id, DPU_HW_BLK_PINGPONG, hw_pp,
>> @@ -2121,8 +2129,10 @@ void dpu_encoder_helper_phys_cleanup(struct
>> dpu_encoder_phys *phys_enc)
>> phys_enc->hw_pp->merge_3d->idx);
>> }
>> - if (dpu_enc->dsc)
>> + if (dpu_enc->dsc) {
>> dpu_encoder_unprep_dsc(dpu_enc);
>> + dpu_enc->dsc = NULL;
>> + }
>> intf_cfg.stream_sel = 0; /* Don't care value for video mode */
>> intf_cfg.mode_3d = dpu_encoder_helper_get_3d_blend_mode(phys_enc);
>
More information about the Freedreno
mailing list