diff mbox series

[2/2] drm/i915/display: Don't wait for vblank for LUT DSB programming

Message ID 20250225180905.1588084-3-chaitanya.kumar.borah@intel.com (mailing list archive)
State New
Headers show
Series drm/xe/display: Program double buffered LUT registers | expand

Commit Message

Borah, Chaitanya Kumar Feb. 25, 2025, 6:09 p.m. UTC
From PTL, LUT registers are made double buffered. With this change,
we don't need to wait for vblank to program them. Start DSB1 for
programming them without waiting for vblank.

Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jani Nikula Feb. 27, 2025, 12:40 p.m. UTC | #1
On Tue, 25 Feb 2025, Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com> wrote:
> From PTL, LUT registers are made double buffered. With this change,
> we don't need to wait for vblank to program them. Start DSB1 for
> programming them without waiting for vblank.
>
> Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 919e236a9650..9c3fdfcd6759 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -7352,6 +7352,7 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
>  {
>  	struct intel_crtc_state *new_crtc_state =
>  		intel_atomic_get_new_crtc_state(state, crtc);
> +	struct intel_display *display = to_intel_display(state);

Please always put display local variable first.

>  
>  	if (!new_crtc_state->use_dsb && !new_crtc_state->dsb_color_vblank)
>  		return;
> @@ -7408,7 +7409,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
>  
>  	if (new_crtc_state->dsb_color_vblank)
>  		intel_dsb_chain(state, new_crtc_state->dsb_commit,
> -				new_crtc_state->dsb_color_vblank, true);
> +				new_crtc_state->dsb_color_vblank,
> +				HAS_DOUBLE_BUFFERED_LUT(display) ? false : true);

HAS_DOUBLE_BUFFERED_LUT(display) ? false : true

=>

!HAS_DOUBLE_BUFFERED_LUT(display)


>  
>  	intel_dsb_finish(new_crtc_state->dsb_commit);
>  }
Ville Syrjälä Feb. 28, 2025, 4:31 p.m. UTC | #2
On Tue, Feb 25, 2025 at 11:39:05PM +0530, Chaitanya Kumar Borah wrote:
> >From PTL, LUT registers are made double buffered. With this change,
> we don't need to wait for vblank to program them. Start DSB1 for
> programming them without waiting for vblank.
> 
> Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 919e236a9650..9c3fdfcd6759 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -7352,6 +7352,7 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
>  {
>  	struct intel_crtc_state *new_crtc_state =
>  		intel_atomic_get_new_crtc_state(state, crtc);
> +	struct intel_display *display = to_intel_display(state);
>  
>  	if (!new_crtc_state->use_dsb && !new_crtc_state->dsb_color_vblank)
>  		return;
> @@ -7408,7 +7409,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
>  
>  	if (new_crtc_state->dsb_color_vblank)
>  		intel_dsb_chain(state, new_crtc_state->dsb_commit,
> -				new_crtc_state->dsb_color_vblank, true);
> +				new_crtc_state->dsb_color_vblank,
> +				HAS_DOUBLE_BUFFERED_LUT(display) ? false : true);

Using chaining for this is a bit ugly. GOSUB would seem more
appropriate. Here's a quick 1h effort to implement the basics
for that (completely untested):
https://github.com/vsyrjala/linux.git dsb_gosub

>  
>  	intel_dsb_finish(new_crtc_state->dsb_commit);
>  }
> -- 
> 2.25.1
Borah, Chaitanya Kumar March 4, 2025, 2:07 p.m. UTC | #3
Thank you, Jani, for the review.

> -----Original Message-----
> From: Jani Nikula <jani.nikula@linux.intel.com>
> Sent: Thursday, February 27, 2025 6:11 PM
> To: Borah, Chaitanya Kumar <chaitanya.kumar.borah@intel.com>; intel-
> xe@lists.freedesktop.org; intel-gfx@lists.freedesktop.org
> Cc: ville.syrjala@linux.intel.com; Shankar, Uma <uma.shankar@intel.com>;
> Borah, Chaitanya Kumar <chaitanya.kumar.borah@intel.com>
> Subject: Re: [PATCH 2/2] drm/i915/display: Don't wait for vblank for LUT DSB
> programming
> 
> On Tue, 25 Feb 2025, Chaitanya Kumar Borah
> <chaitanya.kumar.borah@intel.com> wrote:
> > From PTL, LUT registers are made double buffered. With this change, we
> > don't need to wait for vblank to program them. Start DSB1 for
> > programming them without waiting for vblank.
> >
> > Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c
> > index 919e236a9650..9c3fdfcd6759 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -7352,6 +7352,7 @@ static void intel_atomic_dsb_finish(struct
> > intel_atomic_state *state,  {
> >  	struct intel_crtc_state *new_crtc_state =
> >  		intel_atomic_get_new_crtc_state(state, crtc);
> > +	struct intel_display *display = to_intel_display(state);
> 
> Please always put display local variable first.
> 

Ack.
What about the cases it is dependent on other local variables. Should we put it immediately after them?

> >
> >  	if (!new_crtc_state->use_dsb && !new_crtc_state->dsb_color_vblank)
> >  		return;
> > @@ -7408,7 +7409,8 @@ static void intel_atomic_dsb_finish(struct
> > intel_atomic_state *state,
> >
> >  	if (new_crtc_state->dsb_color_vblank)
> >  		intel_dsb_chain(state, new_crtc_state->dsb_commit,
> > -				new_crtc_state->dsb_color_vblank, true);
> > +				new_crtc_state->dsb_color_vblank,
> > +				HAS_DOUBLE_BUFFERED_LUT(display) ? false
> : true);
> 
> HAS_DOUBLE_BUFFERED_LUT(display) ? false : true
> 
> =>
> 
> !HAS_DOUBLE_BUFFERED_LUT(display)
> 

Ack.

Regards

Chaitanya

> 
> >
> >  	intel_dsb_finish(new_crtc_state->dsb_commit);
> >  }
> 
> --
> Jani Nikula, Intel
Borah, Chaitanya Kumar March 4, 2025, 2:31 p.m. UTC | #4
> -----Original Message-----
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Sent: Friday, February 28, 2025 10:02 PM
> To: Borah, Chaitanya Kumar <chaitanya.kumar.borah@intel.com>
> Cc: intel-xe@lists.freedesktop.org; intel-gfx@lists.freedesktop.org; Shankar,
> Uma <uma.shankar@intel.com>
> Subject: Re: [PATCH 2/2] drm/i915/display: Don't wait for vblank for LUT DSB
> programming
> 
> On Tue, Feb 25, 2025 at 11:39:05PM +0530, Chaitanya Kumar Borah wrote:
> > >From PTL, LUT registers are made double buffered. With this change,
> > we don't need to wait for vblank to program them. Start DSB1 for
> > programming them without waiting for vblank.
> >
> > Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c
> > index 919e236a9650..9c3fdfcd6759 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -7352,6 +7352,7 @@ static void intel_atomic_dsb_finish(struct
> > intel_atomic_state *state,  {
> >  	struct intel_crtc_state *new_crtc_state =
> >  		intel_atomic_get_new_crtc_state(state, crtc);
> > +	struct intel_display *display = to_intel_display(state);
> >
> >  	if (!new_crtc_state->use_dsb && !new_crtc_state->dsb_color_vblank)
> >  		return;
> > @@ -7408,7 +7409,8 @@ static void intel_atomic_dsb_finish(struct
> > intel_atomic_state *state,
> >
> >  	if (new_crtc_state->dsb_color_vblank)
> >  		intel_dsb_chain(state, new_crtc_state->dsb_commit,
> > -				new_crtc_state->dsb_color_vblank, true);
> > +				new_crtc_state->dsb_color_vblank,
> > +				HAS_DOUBLE_BUFFERED_LUT(display) ? false
> : true);
> 
> Using chaining for this is a bit ugly. GOSUB would seem more appropriate.
> Here's a quick 1h effort to implement the basics for that (completely
> untested):
> https://github.com/vsyrjala/linux.git dsb_gosub
> 

Thank you, Ville, for sharing this, I will give it a try.

Regards

Chaitanya

> >
> >  	intel_dsb_finish(new_crtc_state->dsb_commit);
> >  }
> > --
> > 2.25.1
> 
> --
> Ville Syrjälä
> Intel
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 919e236a9650..9c3fdfcd6759 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -7352,6 +7352,7 @@  static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
 {
 	struct intel_crtc_state *new_crtc_state =
 		intel_atomic_get_new_crtc_state(state, crtc);
+	struct intel_display *display = to_intel_display(state);
 
 	if (!new_crtc_state->use_dsb && !new_crtc_state->dsb_color_vblank)
 		return;
@@ -7408,7 +7409,8 @@  static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
 
 	if (new_crtc_state->dsb_color_vblank)
 		intel_dsb_chain(state, new_crtc_state->dsb_commit,
-				new_crtc_state->dsb_color_vblank, true);
+				new_crtc_state->dsb_color_vblank,
+				HAS_DOUBLE_BUFFERED_LUT(display) ? false : true);
 
 	intel_dsb_finish(new_crtc_state->dsb_commit);
 }