Bug 29985 - KMS TV Issue + Possible fix
Summary: KMS TV Issue + Possible fix
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/DRI/R600 (show other bugs)
Version: git
Hardware: x86 (IA32) Linux (All)
: medium normal
Assignee: Default DRI bug account
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-02 15:54 UTC by Andy Furniss
Modified: 2010-09-24 14:46 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
possible fix (2.41 KB, patch)
2010-09-03 10:06 UTC, Alex Deucher
Details | Splinter Review

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.