[Intel-gfx] [PATCH 1/6] drm/i915: unconditionally copy mode into crtc at boot time

Daniel Vetter daniel at ffwll.ch
Tue Dec 17 09:00:28 CET 2013


On Mon, Dec 16, 2013 at 04:35:40PM -0800, Jesse Barnes wrote:
> On Thu, 12 Dec 2013 14:44:33 -0800
> Jesse Barnes <jbarnes at virtuousgeek.org> wrote:
> 
> > On Thu, 12 Dec 2013 23:39:39 +0100
> > Daniel Vetter <daniel at ffwll.ch> wrote:
> > 
> > > On Thu, Dec 12, 2013 at 01:29:39PM -0800, Jesse Barnes wrote:
> > > > On Thu, 12 Dec 2013 22:21:29 +0100
> > > > Daniel Vetter <daniel at ffwll.ch> wrote:
> > > > 
> > > > > On Thu, Dec 12, 2013 at 12:41:52PM -0800, Jesse Barnes wrote:
> > > > > > The BIOS code will need this to properly inherit the mode.
> > > > > > 
> > > > > > Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
> > > > > > ---
> > > > > >  drivers/gpu/drm/i915/intel_display.c | 2 +-
> > > > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > > > 
> > > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > > > > > index af3717a..1ae3d44 100644
> > > > > > --- a/drivers/gpu/drm/i915/intel_display.c
> > > > > > +++ b/drivers/gpu/drm/i915/intel_display.c
> > > > > > @@ -11175,7 +11175,7 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
> > > > > >  	 */
> > > > > >  	list_for_each_entry(crtc, &dev->mode_config.crtc_list,
> > > > > >  			    base.head) {
> > > > > > -		if (crtc->active && i915_fastboot) {
> > > > > > +		if (crtc->active) {
> > > > > 
> > > > > That's just enabling half of the fastboot hack, so nacked.
> > > > 
> > > > This part isn't the hack, but is required for fastboot.  Without this,
> > > > we'll end up with a bogus mode when we try to inherit from the BIOS.
> > > > So if you want to nack this I'll have to put the other BIOS bits under
> > > > fastboot as well.
> > > 
> > > crtc->config.pipe_src_w/h not good enough? I've thought that's what you've
> > > used in the last iteration, hence my suprise why we suddenly need to
> > > resurrect this hack here. All the information this hack exposes to
> > > crtc->mode is available in the pipe config, so I really don't think you
> > > neeed it.
> > > 
> > > Count me confused for now, please explain.
> > 
> > Yes, we read out all the data into the pipe config.  But if we don't
> > put that data into the CRTC proper, any subsequent code that uses the
> > CRTC mode will fail and think there's nothing there (resulting in fail
> > at fbcon DPMS time for example).
> 
> The actual warning w/o this change is:
> 
> [   17.088591] [drm:intel_pipe_config_compare] *ERROR* mismatch in pipe_src_w (expected 0, found 4096)
> [   17.088592] ------------[ cut here ]------------
> [   17.088619] WARNING: CPU: 1 PID: 534 at drivers/gpu/drm/i915/intel_display.c:9588 check_crtc_state+0x6bf/0xc90 [i915]()
> [   17.088619] pipe state doesn't match!
> ...
> [   17.088710]  [<ffffffffa02f2caf>] check_crtc_state+0x6bf/0xc90 [i915]
> [   17.088729]  [<ffffffffa03007ab>] intel_modeset_check_state+0x2bb/0x7b0 [i915]
> [   17.088745]  [<ffffffffa0300d35>] intel_set_mode+0x25/0x30 [i915]
> [   17.088762]  [<ffffffffa03015db>] intel_crtc_set_config+0x7ab/0x9a0 [i915]
> [   17.088777]  [<ffffffffa0133a4d>] drm_mode_set_config_internal+0x5d/0xe0 [drm]
> [   17.088783]  [<ffffffffa0184ea1>] drm_fb_helper_set_par+0x71/0xf0 [drm_kms_helper]
> [   17.088787]  [<ffffffff8135b301>] fb_set_var+0x191/0x430
> 
> So the first mode set from the fb layer is half baked, because the core
> DRM structures didn't have the right mode to pass down, and so we fall
> over.
> 
> I can fix this either by always copying the mode info into the core
> structs, or by putting the call to fbdev_init_bios under i915_fastboot
> as well.

Hm, I think I need to take a closer look here again since I really thought
it'd would Just Work. Hiding more behind the fastboot hack isn't really
what I want either, especially since we want to move from checking the
input mode to checking the pipe config for fastbooting. So having a single
piece which relies on that reconstructed mode would be rather ugly.

Can you please attach the full debug log for this?

Also, could this just be a side effect of the more fancy ->initial_config
logic, i.e. what happens if we disable that one?

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch



More information about the Intel-gfx mailing list