[Intel-gfx] Breaking suspend/resume by the Pipe A quirk

Chris Wilson chris at chris-wilson.co.uk
Tue Jun 3 18:03:52 CEST 2014


On Tue, Jun 03, 2014 at 05:50:06PM +0200, Thomas Richter wrote:
> Am 03.06.2014 17:26, schrieb Chris Wilson:
> 
> >
> >I should have said VGA. Thinking about it, it is likely a shared DDC line
> >so that only a single EDID can be read.
> 
> Actually, it gets the EDID from the VGA panel just fine, also shows
> me the modes it supports. DVI1 has no edit, though it gets its
> allowable modes from the dvo_ds2501 module.
> 
> I now tried to relocate VGA1 to crtc 1, with Daniel's patch. Results
> are even weirder. I can *set* the resolution to 1280x1024 on VGA1,
> just that it does not deliver this resolution. My monitor claims
> (and my vision confirms) that this is still the same 1024x768 mode
> as on the internal panel.
> 
> I can again turn VGA off, relocate it to crtc 1, turn it on again,
> still says its a clone of DVI1 even though it's on a different crtc.
> 
> Chipset (lspci) says its a 82830M/MG graphics controller, PCI id
> 8086:3577. This *should* be a true 830MG (specs agree), thus I
> *believe* it should have two display pipes. The R31 is built around
> the very same chipset and has no problems with independent output.
> Looks like they shared the VGA and DVI output,and left the other
> output just dangling. Weird.
> 
> Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 2048 x 2048
> VGA1 connected 1280x1024+0+0 (0xa7) normal (normal left inverted
> right x axis y axis) 338mm x 270mm
> 	Identifier: 0x41
> 	Timestamp:  504191
> 	Subpixel:   unknown
> 	Gamma:      1.0:1.0:1.0
> 	Brightness: 1.0
> 	Clones:     DVI1
        ^^^^^^^^^^^^^^^^^

This is short for "Allowed Clones:", not "Active Clones:".

>   1280x1024 (0xa7)  108.0MHz +HSync +VSync *current +preferred
>         h: width  1280 start 1328 end 1440 total 1688 skew    0
> clock  64.0KHz
>         v: height 1024 start 1025 end 1028 total 1066
> clock  60.0Hz

>             DSPBCNTR: 0x99000000 (enabled, pipe B)
>           DSPBSTRIDE: 0x00002000 (8192 bytes)
>              DSPBPOS: 0x00000000 (0, 0)
>             DSPBSIZE: 0x0257031f (800, 600)
>             DSPBBASE: 0x04001000
>             DSPBSURF: 0x00000000
>          DSPBTILEOFF: 0x00000000
>            PIPEBCONF: 0x80000000 (enabled, single-wide)
>             PIPEBSRC: 0x031f0257 (800, 600)
>            PIPEBSTAT: 0x10000206 (status: CRC_DONE_ENABLE
>             HTOTAL_B: 0x041f031f (800 active, 1056 total)
>             HBLANK_B: 0x041f031f (800 start, 1056 end)
>              HSYNC_B: 0x03c70347 (840 start, 968 end)
>             VTOTAL_B: 0x02730257 (600 active, 628 total)
>             VBLANK_B: 0x02730257 (600 start, 628 end)
>              VSYNC_B: 0x025c0258 (601 start, 605 end)

It's even worse than you thought. Somewhere between userspace passing in
the mode, and the kernel setting it, it got lost.

> 	CRTC:       1
> 	CRTCs:      0 1
> 	Transform:  1.000000 0.000000 0.000000
> 	            0.000000 1.000000 0.000000
> 	            0.000000 0.000000 1.000000
> 	           filter:
>   1280x1024 (0xa7)  108.0MHz +HSync +VSync *current +preferred
>         h: width  1280 start 1328 end 1440 total 1688 skew    0
> clock  64.0KHz
>         v: height 1024 start 1025 end 1028 total 1066

> DVI1 connected 1280x1024+0+0 (0x43) normal (normal left inverted
                 ^^^^^^^^^^^^^

This means you have configured the two outputs in a mirrored mode, both
reading from the same portion of the framebuffer. So it just looks like
a cloned setup, with upset displays.

> right x axis y axis) 0mm x 0mm panning 1280x1024+0+0
> 	Identifier: 0x42
> 	Timestamp:  504191
> 	Subpixel:   horizontal rgb
> 	Gamma:      1.0:1.0:1.0
> 	Brightness: 1.0
> 	Clones:     VGA1
> 	CRTC:       0
> 	CRTCs:      0 1
> 	Panning:    1280x1024+0+0
> 	Tracking:   0x0+0+0
> 	Border:     0/0/0/0
> 	Transform:  1.000000 0.000000 0.000000
> 	            0.000000 1.000000 0.000000
> 	            0.000000 0.000000 1.000000
> 	           filter:
>   1024x768 (0x43)   65.0MHz -HSync -VSync *current
>         h: width  1024 start 1048 end 1184 total 1344 skew    0
> clock  48.4KHz
>         v: height  768 start  771 end  777 total  806
>            PIPEASTAT: 0x10000207 (status: CRC_DONE_ENABLE

>             DSPACNTR: 0x98000000 (enabled, pipe A)
>           DSPASTRIDE: 0x00002000 (8192 bytes)
>              DSPAPOS: 0x00000000 (0, 0)
>             DSPASIZE: 0x02ff03ff (1024, 768)
>             DSPABASE: 0x04000000
>             DSPASURF: 0x00000000
>          DSPATILEOFF: 0x00000000
>            PIPEACONF: 0x80000000 (enabled, single-wide)
>             PIPEASRC: 0x03ff02ff (1024, 768)
>             HTOTAL_A: 0x051f03ff (1024 active, 1312 total)
>             HBLANK_A: 0x051f03ff (1024 start, 1312 end)
>              HSYNC_A: 0x046f040f (1040 start, 1136 end)
>             VTOTAL_A: 0x031f02ff (768 active, 800 total)
>             VBLANK_A: 0x031f02ff (768 start, 800 end)
>              VSYNC_A: 0x03030300 (769 start, 772 end)

At least this is sane.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list