Linux 3.x: Flickering when logging into GNOME Shell or Unity

Alex Deucher alexdeucher at gmail.com
Fri Oct 19 06:35:50 PDT 2012


On Fri, Oct 19, 2012 at 9:34 AM, Alex Deucher <alexdeucher at gmail.com> wrote:
> On Fri, Oct 19, 2012 at 9:10 AM, Paul Menzel
> <paulepanter at users.sourceforge.net> wrote:
>> Am Donnerstag, den 18.10.2012, 18:14 -0400 schrieb Alex Deucher:
>>> On Wed, Oct 17, 2012 at 4:48 PM, Paul Menzel wrote:
>>> > Am Mittwoch, den 17.10.2012, 16:25 -0400 schrieb Alex Deucher:
>>> >> On Wed, Oct 17, 2012 at 11:26 AM, Paul Menzel wrote:
>>> >
>>> >> > Am Mittwoch, den 17.10.2012, 16:49 +0200 schrieb Paul Menzel:
>>> >> >
>>> >> >> setting up an ASUS M2A-VM after some months with
>>> >> >>
>>> >> >>         [    3.178337] [drm] initializing kernel modesetting (RS690 0x1002:0x791E 0x1043:0x826D).
>>> >> >>
>>> >> >> logging in into GNOME Shell (GNOME 3) or for testing with Ubuntu 12.04
>>> >> >> and Unity, the image flickers for a second and then works normally.
>>> >> >>
>>> >> >> Turning on debugging
>>> >> >>
>>> >> >>         /sys/module/drm/parameters$ echo "0x06" | sudo tee debug
>>> >> >>         sudo: unable to resolve host granit
>>> >> >>         0x06
>>> >> >>
>>> >> >> before logging in, the following is logged. Looking at the source code,
>>> >> >> I do not see that this is supposed to be a problem. But maybe you can
>>> >> >> figure out more.
>>> >> >>
>>> >> >>         [  454.896408] [drm:drm_mode_addfb], [FB:41]
>>> >> >>         [  454.896427] [drm:radeon_crtc_page_flip], flip-ioctl() cur_fbo = ffff880072438400, cur_bbo = ffff880037072400
>>> >> >
>>> >> > trying Linux 3.5
>>> >> >
>>> >> >         $ dpkg -l linux-image-3.5* | grep ii | tr -s ' ' | cut -d ' ' -f 2-4
>>> >> >         linux-image-3.5-trunk-amd64 3.5.5-1~experimental.1 amd64
>>> >> >
>>> >> > the flickering is still there.
>>> >>
>>> >> I don't see anything wrong in the log.  Does the flicker occur at
>>> >> regular intervals or just at start up?
>>> >
>>> > As far as I see, one second after hitting enter in the graphical login
>>> > manager (LightDM in this case).
>>> >
>>> >> I suspect the flicker may be due to your desktop environment probing
>>> >> for monitors at startup
>>> >
>>> > Hmm. Only a VGA monitor is detected and I do not see that issue on
>>> > different system where I tested GNOME Shell to reproduce this. I have
>>> > test Unity too again.
>>>
>>> Depends on the system and what connectors they have and whether or not
>>> they support load detection.
>>
>> Is there a way to find out? This is an ASUS M2A-VM [1] with a VGA and
>> DVI connector.
>
> The VGA and S-video ports on your system support load detection.  I
> don't know what your other system supports.
>
>>
>>> > Though the probing should be in the logs somehow? But there are not
>>> > during the time of login.
>>> >
>>> >> which causes a flicker if nothing is attached to the analog ports
>>> >> (VGA, s-video) as that results in a load detection operation to probe
>>> >> for old monitors without EDIDs or analog TVs.
>>> >
>>> > Any hint on how to rule that out? Disable some outputs on the command
>>> > line or so?
>>>
>>> Depending on what is doing the probing you could try starting bare X
>>> without a desktop environment.  Or disable the analog outputs you
>>> aren't using in your xorg.conf.  E.g.,
>>>
>>>   Section "Monitor"
>>>     Identifier "S-video"
>>>     Option "Disable" "true"
>>>   EndSection
>>
>> I added that to the new file `/etc/X11/xorg.conf.d/99-disable.conf` also
>> disabling HDMI-0 and DVI-0. Nothing changed though after restarting the
>> graphical login manager (logging out and back in).
>
> You can try this kernel patch to disable load detection in the driver
> altogether:
>
> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c
> b/drivers/gpu/drm/radeon/atombios_encoders.c
> index 57c8277..3ffa5bb 100644
> --- a/drivers/gpu/drm/radeon/atombios_encoders.c
> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
> @@ -2197,6 +2197,8 @@ atombios_dac_load_detect(struct drm_encoder
> *encoder, struct drm_connector *conn
>         struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
>         struct radeon_connector *radeon_connector =
> to_radeon_connector(connector);
>
> +       return true;
> +
>         if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT |
>                                        ATOM_DEVICE_CV_SUPPORT |
>                                        ATOM_DEVICE_CRT_SUPPORT)) {
>
>

Actually this patch will disable load detection and tell you when it's
being called:

diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c
b/drivers/gpu/drm/radeon/atombios_encoders.c
index 57c8277..b456da0 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -2197,6 +2197,9 @@ atombios_dac_load_detect(struct drm_encoder
*encoder, struct drm_connector *conn
        struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
        struct radeon_connector *radeon_connector =
to_radeon_connector(connector);

+       DRM_INFO("skipping load detection\n");
+       return true;
+
        if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT |
                                       ATOM_DEVICE_CV_SUPPORT |
                                       ATOM_DEVICE_CRT_SUPPORT)) {


More information about the dri-devel mailing list