diff mbox

drm/radeon/kms/atom: initialize dig phy a bit later

Message ID BANLkTi=v6Cspi0MCWgshFQZ0Ogy3+uPR5A@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ari Savolainen June 2, 2011, 9:20 p.m. UTC
Commit ac89af1e1010640db072416c786f97391b85790f caused one of the monitors
attached to a dual head radeon gpu to have inverted colors (until the first
suspend/resume). Initializing dig phy a bit later fixes the problem.

---
 drivers/gpu/drm/radeon/radeon_display.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

Comments

Alex Deucher June 3, 2011, 4:46 p.m. UTC | #1
On Thu, Jun 2, 2011 at 5:20 PM, Ari Savolainen
<ari.m.savolainen@gmail.com> wrote:
> Commit ac89af1e1010640db072416c786f97391b85790f caused one of the monitors
> attached to a dual head radeon gpu to have inverted colors (until the first
> suspend/resume). Initializing dig phy a bit later fixes the problem.

Strange, I don't see why that would make a difference, I guess perhaps
there's some strange interaction between the hpd setup or the initial
clock/voltage setup on DCE5 hw.  What chip are you using?

Anyway, should be fine.

Acked-by: Alex Deucher <alexdeucher@gmail.com>

>
> ---
>  drivers/gpu/drm/radeon/radeon_display.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c
> b/drivers/gpu/drm/radeon/radeon_display.c
> index ae247ee..ddff2cf 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -1346,10 +1346,6 @@ int radeon_modeset_init(struct radeon_device *rdev)
>                return ret;
>        }
>
> -       /* init dig PHYs */
> -       if (rdev->is_atom_bios)
> -               radeon_atom_encoder_init(rdev);
> -
>        /* initialize hpd */
>        radeon_hpd_init(rdev);
>
> @@ -1359,6 +1355,10 @@ int radeon_modeset_init(struct radeon_device *rdev)
>        radeon_fbdev_init(rdev);
>        drm_kms_helper_poll_init(rdev->ddev);
>
> +       /* init dig PHYs */
> +       if (rdev->is_atom_bios)
> +               radeon_atom_encoder_init(rdev);
> +
>        return 0;
>  }
>
> --
> 1.7.4.1
>
Ari Savolainen June 3, 2011, 8:03 p.m. UTC | #2
I'm using ASUS EAH3650SILENTMG/HTDP.

I got the feeling that in my case, radeon_atom_encoder_prepare needed to be
called before radeon_atom_encoder_init (the call occurred during
radeon_fbdev_init). That ensured radeon_encoder->enc_priv->dig_encoder to have
a value other than -1 in the first call of atombios_dig_transmitter_setup (with
action=ATOM_TRANSMITTER_ACTION_INIT).  But I don't know the code well enough to
be sure about that.

Ari

2011/6/3 Alex Deucher <alexdeucher@gmail.com>:
> On Thu, Jun 2, 2011 at 5:20 PM, Ari Savolainen
> <ari.m.savolainen@gmail.com> wrote:
>> Commit ac89af1e1010640db072416c786f97391b85790f caused one of the monitors
>> attached to a dual head radeon gpu to have inverted colors (until the first
>> suspend/resume). Initializing dig phy a bit later fixes the problem.
>
> Strange, I don't see why that would make a difference, I guess perhaps
> there's some strange interaction between the hpd setup or the initial
> clock/voltage setup on DCE5 hw.  What chip are you using?
>
> Anyway, should be fine.
>
> Acked-by: Alex Deucher <alexdeucher@gmail.com>
>
>>
>> ---
>>  drivers/gpu/drm/radeon/radeon_display.c |    8 ++++----
>>  1 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/radeon_display.c
>> b/drivers/gpu/drm/radeon/radeon_display.c
>> index ae247ee..ddff2cf 100644
>> --- a/drivers/gpu/drm/radeon/radeon_display.c
>> +++ b/drivers/gpu/drm/radeon/radeon_display.c
>> @@ -1346,10 +1346,6 @@ int radeon_modeset_init(struct radeon_device *rdev)
>>                return ret;
>>        }
>>
>> -       /* init dig PHYs */
>> -       if (rdev->is_atom_bios)
>> -               radeon_atom_encoder_init(rdev);
>> -
>>        /* initialize hpd */
>>        radeon_hpd_init(rdev);
>>
>> @@ -1359,6 +1355,10 @@ int radeon_modeset_init(struct radeon_device *rdev)
>>        radeon_fbdev_init(rdev);
>>        drm_kms_helper_poll_init(rdev->ddev);
>>
>> +       /* init dig PHYs */
>> +       if (rdev->is_atom_bios)
>> +               radeon_atom_encoder_init(rdev);
>> +
>>        return 0;
>>  }
>>
>> --
>> 1.7.4.1
>>
>
Alex Deucher June 3, 2011, 8:21 p.m. UTC | #3
On Fri, Jun 3, 2011 at 4:03 PM, Ari Savolainen
<ari.m.savolainen@gmail.com> wrote:
> I'm using ASUS EAH3650SILENTMG/HTDP.
>
> I got the feeling that in my case, radeon_atom_encoder_prepare needed to be
> called before radeon_atom_encoder_init (the call occurred during
> radeon_fbdev_init). That ensured radeon_encoder->enc_priv->dig_encoder to have
> a value other than -1 in the first call of atombios_dig_transmitter_setup (with
> action=ATOM_TRANSMITTER_ACTION_INIT).  But I don't know the code well enough to
> be sure about that.

NACK on the patch for now.  Let's try and sort this out.  INIT needs
to be called before the mode is set, so this needs to come before
fbdev sets the mode.  I'll send out a patch soon.

Alex

>
> Ari
>
> 2011/6/3 Alex Deucher <alexdeucher@gmail.com>:
>> On Thu, Jun 2, 2011 at 5:20 PM, Ari Savolainen
>> <ari.m.savolainen@gmail.com> wrote:
>>> Commit ac89af1e1010640db072416c786f97391b85790f caused one of the monitors
>>> attached to a dual head radeon gpu to have inverted colors (until the first
>>> suspend/resume). Initializing dig phy a bit later fixes the problem.
>>
>> Strange, I don't see why that would make a difference, I guess perhaps
>> there's some strange interaction between the hpd setup or the initial
>> clock/voltage setup on DCE5 hw.  What chip are you using?
>>
>> Anyway, should be fine.
>>
>> Acked-by: Alex Deucher <alexdeucher@gmail.com>
>>
>>>
>>> ---
>>>  drivers/gpu/drm/radeon/radeon_display.c |    8 ++++----
>>>  1 files changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/radeon/radeon_display.c
>>> b/drivers/gpu/drm/radeon/radeon_display.c
>>> index ae247ee..ddff2cf 100644
>>> --- a/drivers/gpu/drm/radeon/radeon_display.c
>>> +++ b/drivers/gpu/drm/radeon/radeon_display.c
>>> @@ -1346,10 +1346,6 @@ int radeon_modeset_init(struct radeon_device *rdev)
>>>                return ret;
>>>        }
>>>
>>> -       /* init dig PHYs */
>>> -       if (rdev->is_atom_bios)
>>> -               radeon_atom_encoder_init(rdev);
>>> -
>>>        /* initialize hpd */
>>>        radeon_hpd_init(rdev);
>>>
>>> @@ -1359,6 +1355,10 @@ int radeon_modeset_init(struct radeon_device *rdev)
>>>        radeon_fbdev_init(rdev);
>>>        drm_kms_helper_poll_init(rdev->ddev);
>>>
>>> +       /* init dig PHYs */
>>> +       if (rdev->is_atom_bios)
>>> +               radeon_atom_encoder_init(rdev);
>>> +
>>>        return 0;
>>>  }
>>>
>>> --
>>> 1.7.4.1
>>>
>>
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_display.c
b/drivers/gpu/drm/radeon/radeon_display.c
index ae247ee..ddff2cf 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -1346,10 +1346,6 @@  int radeon_modeset_init(struct radeon_device *rdev)
 		return ret;
 	}

-	/* init dig PHYs */
-	if (rdev->is_atom_bios)
-		radeon_atom_encoder_init(rdev);
-
 	/* initialize hpd */
 	radeon_hpd_init(rdev);

@@ -1359,6 +1355,10 @@  int radeon_modeset_init(struct radeon_device *rdev)
 	radeon_fbdev_init(rdev);
 	drm_kms_helper_poll_init(rdev->ddev);

+	/* init dig PHYs */
+	if (rdev->is_atom_bios)
+		radeon_atom_encoder_init(rdev);
+
 	return 0;
 }