http://bugs.freedesktop.org/show_bug.cgi?id=25741





--- Comment #13 from Luca Tettamanti <kronos...@gmail.com>  2009-12-29 02:48:46 
PST ---
(In reply to comment #12)
> Created an attachment (id=32336)
 --> (http://bugs.freedesktop.org/attachment.cgi?id=32336) [details]
> add missing breaks
> 
> This patch should fix it.

The EDID is back, the flickering is still there, but I think I see the problem.
The old code used "id" as offset into the asSS_Info array; now this is the
PPLL_SS_Info table on my M76:

data_table  0000ae26  #12  (PPLL_SS_Info):

  Size         000c
  Format Rev.  01
  Param Rev.   00
  Content Rev. 02

  00000000:            1e00 0101  2a01 0202                   ....*...

  0000:  ATOM_COMMON_TABLE_HEADER sHeader                    :
    0000:  USHORT usStructureSize                              = 0x000c    
(12)
    0002:  UCHAR ucTableFormatRevision                         = 0x01       (1)
    0003:  UCHAR ucTableContentRevision                        = 0x02       (2)
  0004:  ATOM_SPREAD_SPECTRUM_ASSIGNMENT asSS_Info       [0] :
    0004:  USHORT usSpreadSpectrumPercentage                   = 0x001e    
(30)
    0006:  UCHAR ucSpreadSpectrumType                          = 0x01       (1)
    0007:  UCHAR ucSS_Step                                     = 0x01       (1)
    0008:  UCHAR ucSS_Delay                                    = 0x2a      
(42)
    0009:  UCHAR ucSS_Id                                       = 0x01       (1)
    000a:  UCHAR ucRecommandedRef_Div                          = 0x02       (2)
    000b:  UCHAR ucSS_Range                                    = 0x02       (2)
[cut]

Note that the size is 12 bytes, so there's only one
ATOM_SPREAD_SPECTRUM_ASSIGNMENT; ucSS_Id in the LVDS block is 0x1 and the old
code ended up reading past the end of array. For example now it's trying to
set:

[   37.652741]   usSpreadSpectrumPercentage = 0xf8
[   37.652783]   ucSpreadSpectrumType       = 0x1
[   37.652824]   ucSS_Step                  = 0x2
[   37.652867]   ucSS_Delay                 = 0xf
[   37.652910]   ucSS_Range                 = 0x0
[   37.652953]   ucRecommendedRef_Div       = 0x3c

I guess that atombios validates the data and discards it. The new code picks up
the correct data... and causes flickering. Why is this causing flickering on
the _external_ display? I'm not sure what happens at boot when the outputs are
cloned, but with X running the outputs are "uncloned" and are using different
CRTCs; the kernel module enables SS on CRTC 1, and xrandr reports that it's
used by LVDS.


-- 
Configure bugmail: http://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to