diff mbox series

[v2,4/7] drm/msm/dpu: dont use encoder->crtc in atomic path

Message ID 1550107156-17625-5-git-send-email-jsanka@codeaurora.org (mailing list archive)
State New, archived
Headers show
Series move dpu resource parsing to encoder modeset | expand

Commit Message

Jeykumar Sankaran Feb. 14, 2019, 1:19 a.m. UTC
encoder->crtc is not really meaningful for atomic path. Use
crtc->encoder_mask to identify the crtc attached with
an encoder.

Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Sean Paul March 4, 2019, 6:09 p.m. UTC | #1
On Wed, Feb 13, 2019 at 05:19:13PM -0800, Jeykumar Sankaran wrote:
> encoder->crtc is not really meaningful for atomic path. Use
> crtc->encoder_mask to identify the crtc attached with
> an encoder.
> 
> Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
> ---
>  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 45617b9..0a19124 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -961,6 +961,7 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc,
>  	struct dpu_kms *dpu_kms;
>  	struct list_head *connector_list;
>  	struct drm_connector *conn = NULL, *conn_iter;
> +	struct drm_crtc *drm_crtc;
>  	struct dpu_rm_hw_iter pp_iter, ctl_iter;
>  	struct msm_display_topology topology;
>  	struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL };
> @@ -992,10 +993,14 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc,
>  		return;
>  	}
>  
> +	drm_for_each_crtc(drm_crtc, drm_enc->dev)
> +		if (drm_crtc->state->encoder_mask & drm_encoder_mask(drm_enc))
> +			break;

You should check whether you actually found the crtc, or are just using the last
one in the list.

Sean

> +
>  	topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode);
>  
>  	/* Reserve dynamic resources now. Indicating non-AtomicTest phase */
> -	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_enc->crtc->state,
> +	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_crtc->state,
>  			     topology, false);
>  	if (ret) {
>  		DPU_ERROR_ENC(dpu_enc,
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
Jeykumar Sankaran March 7, 2019, 2:03 a.m. UTC | #2
On 2019-03-04 10:09, Sean Paul wrote:
> On Wed, Feb 13, 2019 at 05:19:13PM -0800, Jeykumar Sankaran wrote:
>> encoder->crtc is not really meaningful for atomic path. Use
>> crtc->encoder_mask to identify the crtc attached with
>> an encoder.
>> 
>> Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
>> ---
>>  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>> index 45617b9..0a19124 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>> @@ -961,6 +961,7 @@ static void dpu_encoder_virt_mode_set(struct
> drm_encoder *drm_enc,
>>  	struct dpu_kms *dpu_kms;
>>  	struct list_head *connector_list;
>>  	struct drm_connector *conn = NULL, *conn_iter;
>> +	struct drm_crtc *drm_crtc;
>>  	struct dpu_rm_hw_iter pp_iter, ctl_iter;
>>  	struct msm_display_topology topology;
>>  	struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL };
>> @@ -992,10 +993,14 @@ static void dpu_encoder_virt_mode_set(struct
> drm_encoder *drm_enc,
>>  		return;
>>  	}
>> 
>> +	drm_for_each_crtc(drm_crtc, drm_enc->dev)
>> +		if (drm_crtc->state->encoder_mask &
> drm_encoder_mask(drm_enc))
>> +			break;
> 
> You should check whether you actually found the crtc, or are just using
> the last
> one in the list.
> 
I see you have pulled in the this entire series on msm-next. If it is 
the right
thing to do, I can address this comment in a separate patch on top 
instead of
posting v2.

Thanks
Jeykumar S.
> Sean
> 
>> +
>>  	topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode);
>> 
>>  	/* Reserve dynamic resources now. Indicating non-AtomicTest phase
> */
>> -	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_enc->crtc->state,
>> +	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_crtc->state,
>>  			     topology, false);
>>  	if (ret) {
>>  		DPU_ERROR_ENC(dpu_enc,
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum,
>> a Linux Foundation Collaborative Project
>>
Sean Paul March 7, 2019, 10:08 p.m. UTC | #3
On Wed, Mar 06, 2019 at 06:03:05PM -0800, Jeykumar Sankaran wrote:
> On 2019-03-04 10:09, Sean Paul wrote:
> > On Wed, Feb 13, 2019 at 05:19:13PM -0800, Jeykumar Sankaran wrote:
> > > encoder->crtc is not really meaningful for atomic path. Use
> > > crtc->encoder_mask to identify the crtc attached with
> > > an encoder.
> > > 
> > > Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
> > > ---
> > >  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++++-
> > >  1 file changed, 6 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > > index 45617b9..0a19124 100644
> > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > > @@ -961,6 +961,7 @@ static void dpu_encoder_virt_mode_set(struct
> > drm_encoder *drm_enc,
> > >  	struct dpu_kms *dpu_kms;
> > >  	struct list_head *connector_list;
> > >  	struct drm_connector *conn = NULL, *conn_iter;
> > > +	struct drm_crtc *drm_crtc;
> > >  	struct dpu_rm_hw_iter pp_iter, ctl_iter;
> > >  	struct msm_display_topology topology;
> > >  	struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL };
> > > @@ -992,10 +993,14 @@ static void dpu_encoder_virt_mode_set(struct
> > drm_encoder *drm_enc,
> > >  		return;
> > >  	}
> > > 
> > > +	drm_for_each_crtc(drm_crtc, drm_enc->dev)
> > > +		if (drm_crtc->state->encoder_mask &
> > drm_encoder_mask(drm_enc))
> > > +			break;
> > 
> > You should check whether you actually found the crtc, or are just using
> > the last
> > one in the list.
> > 
> I see you have pulled in the this entire series on msm-next. If it is the
> right
> thing to do, I can address this comment in a separate patch on top instead
> of
> posting v2.

Yes, please do.

Thanks,

Sean

> 
> Thanks
> Jeykumar S.
> > Sean
> > 
> > > +
> > >  	topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode);
> > > 
> > >  	/* Reserve dynamic resources now. Indicating non-AtomicTest phase
> > */
> > > -	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_enc->crtc->state,
> > > +	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_crtc->state,
> > >  			     topology, false);
> > >  	if (ret) {
> > >  		DPU_ERROR_ENC(dpu_enc,
> > > --
> > > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> > Forum,
> > > a Linux Foundation Collaborative Project
> > > 
> 
> -- 
> Jeykumar S
diff mbox series

Patch

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index 45617b9..0a19124 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -961,6 +961,7 @@  static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc,
 	struct dpu_kms *dpu_kms;
 	struct list_head *connector_list;
 	struct drm_connector *conn = NULL, *conn_iter;
+	struct drm_crtc *drm_crtc;
 	struct dpu_rm_hw_iter pp_iter, ctl_iter;
 	struct msm_display_topology topology;
 	struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL };
@@ -992,10 +993,14 @@  static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc,
 		return;
 	}
 
+	drm_for_each_crtc(drm_crtc, drm_enc->dev)
+		if (drm_crtc->state->encoder_mask & drm_encoder_mask(drm_enc))
+			break;
+
 	topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode);
 
 	/* Reserve dynamic resources now. Indicating non-AtomicTest phase */
-	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_enc->crtc->state,
+	ret = dpu_rm_reserve(&dpu_kms->rm, drm_enc, drm_crtc->state,
 			     topology, false);
 	if (ret) {
 		DPU_ERROR_ENC(dpu_enc,