diff mbox

drm/i915: fix fastboot pfit disable hack to update pipe w/h

Message ID 1387478881-2357-1-git-send-email-jbarnes@virtuousgeek.org (mailing list archive)
State New, archived
Headers show

Commit Message

Jesse Barnes Dec. 19, 2013, 6:48 p.m. UTC
When fastbooting, we read out the pipe timings early on, and then in a
panel fitted config, disable the fitter later.  But we weren't updating
the pipe src h/w, which meant the mouse cursor was clipped to the
pfitted size rather than the native size set later.  Fix that up so the
cursor is visible in the new mode.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
---
 drivers/gpu/drm/i915/intel_display.c |    2 ++
 1 file changed, 2 insertions(+)

Comments

Jesse Barnes Jan. 6, 2014, 11:31 p.m. UTC | #1
On Thu, 19 Dec 2013 10:48:01 -0800
Jesse Barnes <jbarnes@virtuousgeek.org> wrote:

> When fastbooting, we read out the pipe timings early on, and then in a
> panel fitted config, disable the fitter later.  But we weren't updating
> the pipe src h/w, which meant the mouse cursor was clipped to the
> pfitted size rather than the native size set later.  Fix that up so the
> cursor is visible in the new mode.
> 
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> ---
>  drivers/gpu/drm/i915/intel_display.c |    2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 4d1357a..7e46d75 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2382,6 +2382,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
>  			I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
>  			I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
>  		}
> +		intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
> +		intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
>  	}
>  
>  	ret = dev_priv->display.update_plane(crtc, fb, x, y);

References: https://bugzilla.kernel.org/show_bug.cgi?id=67591
Daniel Vetter Jan. 7, 2014, 7:07 a.m. UTC | #2
On Tue, Jan 7, 2014 at 12:31 AM, Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> On Thu, 19 Dec 2013 10:48:01 -0800
> Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
>
>> When fastbooting, we read out the pipe timings early on, and then in a
>> panel fitted config, disable the fitter later.  But we weren't updating
>> the pipe src h/w, which meant the mouse cursor was clipped to the
>> pfitted size rather than the native size set later.  Fix that up so the
>> cursor is visible in the new mode.
>>
>> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
>> ---
>>  drivers/gpu/drm/i915/intel_display.c |    2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 4d1357a..7e46d75 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -2382,6 +2382,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
>>                       I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
>>                       I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
>>               }
>> +             intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
>> +             intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
>>       }
>>
>>       ret = dev_priv->display.update_plane(crtc, fb, x, y);
>
> References: https://bugzilla.kernel.org/show_bug.cgi?id=67591

The bug report doesn't say anything about the pipe config state
checker being unhappy. Are we missing a call to the checker for
fastboot somewhere to catch this stuff?
-Daniel
Jesse Barnes Jan. 7, 2014, 6:51 p.m. UTC | #3
On Tue, 7 Jan 2014 08:07:13 +0100
Daniel Vetter <daniel@ffwll.ch> wrote:

> On Tue, Jan 7, 2014 at 12:31 AM, Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> > On Thu, 19 Dec 2013 10:48:01 -0800
> > Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> >
> >> When fastbooting, we read out the pipe timings early on, and then in a
> >> panel fitted config, disable the fitter later.  But we weren't updating
> >> the pipe src h/w, which meant the mouse cursor was clipped to the
> >> pfitted size rather than the native size set later.  Fix that up so the
> >> cursor is visible in the new mode.
> >>
> >> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> >> ---
> >>  drivers/gpu/drm/i915/intel_display.c |    2 ++
> >>  1 file changed, 2 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> >> index 4d1357a..7e46d75 100644
> >> --- a/drivers/gpu/drm/i915/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/intel_display.c
> >> @@ -2382,6 +2382,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
> >>                       I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
> >>                       I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
> >>               }
> >> +             intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
> >> +             intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
> >>       }
> >>
> >>       ret = dev_priv->display.update_plane(crtc, fb, x, y);
> >
> > References: https://bugzilla.kernel.org/show_bug.cgi?id=67591
> 
> The bug report doesn't say anything about the pipe config state
> checker being unhappy. Are we missing a call to the checker for
> fastboot somewhere to catch this stuff?

Yeah I think so.  Cooking up a separate patch for that now...
Jesse Barnes Jan. 7, 2014, 6:52 p.m. UTC | #4
On Tue, 7 Jan 2014 08:07:13 +0100
Daniel Vetter <daniel@ffwll.ch> wrote:

> On Tue, Jan 7, 2014 at 12:31 AM, Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> > On Thu, 19 Dec 2013 10:48:01 -0800
> > Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
> >
> >> When fastbooting, we read out the pipe timings early on, and then in a
> >> panel fitted config, disable the fitter later.  But we weren't updating
> >> the pipe src h/w, which meant the mouse cursor was clipped to the
> >> pfitted size rather than the native size set later.  Fix that up so the
> >> cursor is visible in the new mode.
> >>
> >> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> >> ---
> >>  drivers/gpu/drm/i915/intel_display.c |    2 ++
> >>  1 file changed, 2 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> >> index 4d1357a..7e46d75 100644
> >> --- a/drivers/gpu/drm/i915/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/intel_display.c
> >> @@ -2382,6 +2382,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
> >>                       I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
> >>                       I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
> >>               }
> >> +             intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
> >> +             intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
> >>       }
> >>
> >>       ret = dev_priv->display.update_plane(crtc, fb, x, y);
> >
> > References: https://bugzilla.kernel.org/show_bug.cgi?id=67591
> 
> The bug report doesn't say anything about the pipe config state
> checker being unhappy. Are we missing a call to the checker for
> fastboot somewhere to catch this stuff?

Ah no, we do have a check there.  I guess since we never updated it we
were comparing two stale values?
Daniel Vetter Jan. 7, 2014, 8:08 p.m. UTC | #5
On Tue, Jan 7, 2014 at 7:52 PM, Jesse Barnes <jbarnes@virtuousgeek.org> wrote:
>> >> index 4d1357a..7e46d75 100644
>> >> --- a/drivers/gpu/drm/i915/intel_display.c
>> >> +++ b/drivers/gpu/drm/i915/intel_display.c
>> >> @@ -2382,6 +2382,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
>> >>                       I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
>> >>                       I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
>> >>               }
>> >> +             intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
>> >> +             intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
>> >>       }
>> >>
>> >>       ret = dev_priv->display.update_plane(crtc, fb, x, y);
>> >
>> > References: https://bugzilla.kernel.org/show_bug.cgi?id=67591
>>
>> The bug report doesn't say anything about the pipe config state
>> checker being unhappy. Are we missing a call to the checker for
>> fastboot somewhere to catch this stuff?
>
> Ah no, we do have a check there.  I guess since we never updated it we
> were comparing two stale values?

The hw values should reflect what we're writing into the PF_WIN_*
registers, but the sw side should be stale. I think a dpms on/off
should trigger a checker warning, but having one after each
fastboot'ed setCrtc might be benefitial in general. I just want to
make sure that we don't have more dragons lurking ...
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 4d1357a..7e46d75 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2382,6 +2382,8 @@  intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 			I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
 			I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
 		}
+		intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
+		intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
 	}
 
 	ret = dev_priv->display.update_plane(crtc, fb, x, y);