Bug 29985

Summary: KMS TV Issue + Possible fix
Product: Mesa Reporter: Andy Furniss <adf.lists>
Component: Drivers/DRI/R600Assignee: Default DRI bug account <dri-devel>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium    
Version: git   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: possible fix

Description Andy Furniss 2010-09-02 15:54:06 UTC
Running an rv790 I haven't used s-vid TV for a while so am a month late noticing it had regressed on d-r-t.

Booting old kernels and then using git reset I found the guilty commit to be -

commit 5b1714d386a2f0c0d270e3abe1ac39ad1b0ba010
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Tue Aug 3 19:59:20 2010 -0400

    drm/radeon/kms: enable underscan option for digital connectors

As it won't revert from d-r-t head I took a closer look and thought this bit to be suspicious -

@@ -1176,10 +1170,8 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
        atombios_crtc_set_pll(crtc, adjusted_mode);
        atombios_enable_ss(crtc);
 
-       if (ASIC_IS_DCE4(rdev))
+       if (ASIC_IS_AVIVO(rdev))
                atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
-       else if (ASIC_IS_AVIVO(rdev))
-               atombios_crtc_set_timing(crtc, adjusted_mode);
        else {
                atombios_crtc_set_timing(crtc, adjusted_mode);
                if (radeon_crtc->crtc_id == 0)


So I edited by hand to swap back the atombios_crtc_set_timing for AVIVO and the other one for the rest -

diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 577239a..40ca121 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -1208,9 +1208,9 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
        atombios_enable_ss(crtc);
 
        if (ASIC_IS_AVIVO(rdev))
-               atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
-       else {
                atombios_crtc_set_timing(crtc, adjusted_mode);
+       else {
+               atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
                if (radeon_crtc->crtc_id == 0)
                        atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
                radeon_legacy_atom_fixup(crtc);


and now have working TV again. I also tested turning on underscan on my DVI monitor and it still works.
Comment 1 Andy Furniss 2010-09-03 09:39:04 UTC
(In reply to comment #0)

> So I edited by hand to swap back the atombios_crtc_set_timing for AVIVO and the

Of course this may well mess up non AVIVO who were getting atombios_crtc_set_timing.
Comment 2 Alex Deucher 2010-09-03 10:06:06 UTC
Created attachment 38406 [details] [review]
possible fix

Does this patch fix it?
Comment 3 Andy Furniss 2010-09-03 11:48:27 UTC
(In reply to comment #2)
> Created an attachment (id=38406) [details]
> possible fix
> 
> Does this patch fix it?

Yes that fixes it, thanks.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.