[PATCH 35/37] drm/i915: program iCLKIP on Lynx Point

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Yeah, intel_display is becoming so huge.

Paulo, Jesse and I talked a bit about this in osts and I think a reorg
here would be good. What do you think about splitting it in something
similar to omap displays (drivers/video/omap)?

On Thu, Mar 22, 2012 at 7:31 AM, Daniel Vetter <daniel at ffwll.ch> wrote:
> On Wed, Mar 21, 2012 at 10:10:10PM -0300, Eugeni Dodonov wrote:
>> The iCLKIP clock is used to drive the VGA pixel clock on the PCH. In order
>> to do so, it must be programmed to properly do the clock ticks according
>> to the divisor, phase direction, phase increments and a special auxiliary
>> divisor for 20MHz clock.
>>
>> Those values can be programmed individually, by doing some math; or we
>> could use a pre-defined table of values for each modeset. For speed and
>> simplification, the idea was to just adopt the table of valid pixel clocks
>> and select the matching iCLKIP values from there.
>>
>> As a possible idea for the future, it would be possible to add a fallback
>> and calculate those values manually in case no match is found. But I don't
>> think we'll encounter a mode not covered by those table, and VGA is pretty
>> much going away in the future anyway.
>>
>> Signed-off-by: Eugeni Dodonov <eugeni.dodonov at intel.com>
>
> With stuff like this, intel_display.c has definitely grown into the
> unmanageable territory. Along Jesse's suggestion I think it would make
> sense to split out the pch and gmch modeset stuff into separate files (and
> leave all the other things like initialization, clock gating watermark
> functions, pageflip, cursors, power crap and what not else in
> intel_display.c). We could call these new files intel_pch_modeset.c and
> intel_gmch_modeset.c, they'd contain the respective crtc_mode_set function
> plus all associated support code.
>
> I'll leave this to you and Jesse to decide whether it makes sense as
> proposed and when you want to move the code. But I think we need to
> slaugther this dragon and cut it into more manageable pieces now.
>
> Jesse?
>
> Yours, Daniel
>
>> ---
>> ?drivers/gpu/drm/i915/intel_display.c | ?309 ++++++++++++++++++++++++++++++++++
>> ?1 file changed, 309 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 5f6cb35..a37e0b7 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -2761,6 +2761,312 @@ static const long hsw_ddi_buf_ctl_values[] = {
>> ? ? ? DDI_BUF_EMP_800MV_3_5DB_HSW
>> ?};
>>
>> +/* Available pixel clock values */
>> +struct iclk_vga_clock {
>> + ? ? u32 clock;
>> + ? ? u16 auxdiv;
>> + ? ? u16 divsel;
>> + ? ? u16 phasedir;
>> + ? ? u16 phaseinc;
>> +};
>> +
>> +static const struct iclk_vga_clock iclk_vga_clock_table[] = {
>> + ? ? {20000, 1, ? ? ?0x41, ? 0, ? ? ?0x20}, ?/* 20000 ppm=0 */
>> + ? ? {21000, 0, ? ? ?0x7E, ? 0, ? ? ?0x25}, ?/* 20999 ppm=-53 */
>> + ? ? {21912, 0, ? ? ?0x79, ? 0, ? ? ?0x0E}, ?/* 21912 ppm=12 */
>> + ? ? {22000, 0, ? ? ?0x78, ? 0, ? ? ?0x2F}, ?/* 21999 ppm=-58 */
>> + ? ? {23000, 0, ? ? ?0x73, ? 0, ? ? ?0x19}, ?/* 23000 ppm=6 */
>> + ? ? {24000, 0, ? ? ?0x6E, ? 0, ? ? ?0x20}, ?/* 24000 ppm=0 */
>> + ? ? {25000, 0, ? ? ?0x6A, ? 0, ? ? ?0x00}, ?/* 25000 ppm=0 */
>> + ? ? {25175, 0, ? ? ?0x69, ? 0, ? ? ?0x10}, ?/* 25175 ppm=-7 */
>> + ? ? {25200, 0, ? ? ?0x69, ? 0, ? ? ?0x09}, ?/* 25201 ppm=21 */
>> + ? ? {26000, 0, ? ? ?0x66, ? 1, ? ? ?0x0A}, ?/* 26001 ppm=24 */
>> + ? ? {27000, 0, ? ? ?0x62, ? 0, ? ? ?0x00}, ?/* 27000 ppm=0 */
>> + ? ? {27027, 0, ? ? ?0x62, ? 1, ? ? ?0x06}, ?/* 27025 ppm=-62 */
>> + ? ? {27500, 0, ? ? ?0x60, ? 0, ? ? ?0x0C}, ?/* 27498 ppm=-58 */
>> + ? ? {28000, 0, ? ? ?0x5E, ? 0, ? ? ?0x1B}, ?/* 28002 ppm=70 */
>> + ? ? {28320, 0, ? ? ?0x5D, ? 0, ? ? ?0x16}, ?/* 28319 ppm=-50 */
>> + ? ? {28322, 0, ? ? ?0x5D, ? 0, ? ? ?0x15}, ?/* 28323 ppm=44 */
>> + ? ? {29000, 0, ? ? ?0x5B, ? 0, ? ? ?0x07}, ?/* 28998 ppm=-64 */
>> + ? ? {30000, 0, ? ? ?0x58, ? 0, ? ? ?0x00}, ?/* 30000 ppm=0 */
>> + ? ? {31000, 0, ? ? ?0x55, ? 0, ? ? ?0x06}, ?/* 31001 ppm=35 */
>> + ? ? {31500, 0, ? ? ?0x54, ? 1, ? ? ?0x12}, ?/* 31498 ppm=-53 */
>> + ? ? {32000, 0, ? ? ?0x52, ? 0, ? ? ?0x18}, ?/* 32000 ppm=0 */
>> + ? ? {32500, 0, ? ? ?0x51, ? 0, ? ? ?0x05}, ?/* 32500 ppm=-15 */
>> + ? ? {33000, 0, ? ? ?0x50, ? 1, ? ? ?0x0C}, ?/* 33002 ppm=70 */
>> + ? ? {34000, 0, ? ? ?0x4D, ? 0, ? ? ?0x1A}, ?/* 34002 ppm=70 */
>> + ? ? {35000, 0, ? ? ?0x4B, ? 0, ? ? ?0x09}, ?/* 35001 ppm=29 */
>> + ? ? {35500, 0, ? ? ?0x4A, ? 0, ? ? ?0x04}, ?/* 35497 ppm=-82 */
>> + ? ? {36000, 0, ? ? ?0x49, ? 0, ? ? ?0x00}, ?/* 36000 ppm=0 */
>> + ? ? {37000, 0, ? ? ?0x47, ? 1, ? ? ?0x02}, ?/* 37002 ppm=58 */
>> + ? ? {38000, 0, ? ? ?0x45, ? 0, ? ? ?0x03}, ?/* 38003 ppm=82 */
>> + ? ? {39000, 0, ? ? ?0x43, ? 0, ? ? ?0x0F}, ?/* 38998 ppm=-53 */
>> + ? ? {40000, 0, ? ? ?0x41, ? 0, ? ? ?0x20}, ?/* 40000 ppm=0 */
>> + ? ? {40500, 0, ? ? ?0x41, ? 1, ? ? ?0x15}, ?/* 40497 ppm=-79 */
>> + ? ? {40541, 0, ? ? ?0x41, ? 1, ? ? ?0x1A}, ?/* 40544 ppm=95 */
>> + ? ? {41000, 0, ? ? ?0x40, ? 1, ? ? ?0x09}, ?/* 40996 ppm=-87 */
>> + ? ? {41540, 0, ? ? ?0x3F, ? 0, ? ? ?0x00}, ?/* 41538 ppm=-38 */
>> + ? ? {42000, 0, ? ? ?0x3E, ? 0, ? ? ?0x12}, ?/* 42003 ppm=70 */
>> + ? ? {43000, 0, ? ? ?0x3D, ? 1, ? ? ?0x0D}, ?/* 42996 ppm=-99 */
>> + ? ? {43163, 0, ? ? ?0x3D, ? 1, ? ? ?0x1D}, ?/* 43168 ppm=108 */
>> + ? ? {44000, 0, ? ? ?0x3B, ? 0, ? ? ?0x17}, ?/* 44003 ppm=70 */
>> + ? ? {44900, 0, ? ? ?0x3A, ? 0, ? ? ?0x09}, ?/* 44895 ppm=-117 */
>> + ? ? {45000, 0, ? ? ?0x3A, ? 0, ? ? ?0x00}, ?/* 45000 ppm=0 */
>> + ? ? {46000, 0, ? ? ?0x39, ? 1, ? ? ?0x13}, ?/* 45994 ppm=-128 */
>> + ? ? {47000, 0, ? ? ?0x37, ? 0, ? ? ?0x1D}, ?/* 46995 ppm=-110 */
>> + ? ? {48000, 0, ? ? ?0x36, ? 0, ? ? ?0x10}, ?/* 48000 ppm=0 */
>> + ? ? {49000, 0, ? ? ?0x35, ? 0, ? ? ?0x07}, ?/* 48993 ppm=-134 */
>> + ? ? {49500, 0, ? ? ?0x35, ? 1, ? ? ?0x1D}, ?/* 49499 ppm=-27 */
>> + ? ? {50000, 0, ? ? ?0x34, ? 0, ? ? ?0x00}, ?/* 50000 ppm=0 */
>> + ? ? {51000, 0, ? ? ?0x33, ? 1, ? ? ?0x04}, ?/* 51004 ppm=70 */
>> + ? ? {52000, 0, ? ? ?0x32, ? 1, ? ? ?0x05}, ?/* 52001 ppm=24 */
>> + ? ? {52406, 0, ? ? ?0x32, ? 1, ? ? ?0x1F}, ?/* 52411 ppm=101 */
>> + ? ? {53000, 0, ? ? ?0x31, ? 1, ? ? ?0x04}, ?/* 53006 ppm=116 */
>> + ? ? {54000, 0, ? ? ?0x30, ? 0, ? ? ?0x00}, ?/* 54000 ppm=0 */
>> + ? ? {54054, 0, ? ? ?0x30, ? 1, ? ? ?0x03}, ?/* 54051 ppm=-62 */
>> + ? ? {55000, 0, ? ? ?0x2F, ? 0, ? ? ?0x06}, ?/* 54997 ppm=-58 */
>> + ? ? {56000, 0, ? ? ?0x2E, ? 0, ? ? ?0x0E}, ?/* 55995 ppm=-93 */
>> + ? ? {56250, 0, ? ? ?0x2E, ? 0, ? ? ?0x00}, ?/* 56250 ppm=0 */
>> + ? ? {57000, 0, ? ? ?0x2D, ? 0, ? ? ?0x18}, ?/* 56992 ppm=-139 */
>> + ? ? {58000, 0, ? ? ?0x2D, ? 1, ? ? ?0x1D}, ?/* 58006 ppm=105 */
>> + ? ? {59000, 0, ? ? ?0x2C, ? 1, ? ? ?0x0F}, ?/* 58996 ppm=-64 */
>> + ? ? {60000, 0, ? ? ?0x2B, ? 0, ? ? ?0x00}, ?/* 60000 ppm=0 */
>> + ? ? {61000, 0, ? ? ?0x2A, ? 0, ? ? ?0x11}, ?/* 60995 ppm=-76 */
>> + ? ? {62000, 0, ? ? ?0x2A, ? 1, ? ? ?0x1D}, ?/* 62002 ppm=35 */
>> + ? ? {63000, 0, ? ? ?0x29, ? 1, ? ? ?0x09}, ?/* 62997 ppm=-53 */
>> + ? ? {64000, 0, ? ? ?0x28, ? 0, ? ? ?0x0C}, ?/* 64000 ppm=0 */
>> + ? ? {65000, 0, ? ? ?0x28, ? 1, ? ? ?0x1E}, ?/* 65011 ppm=174 */
>> + ? ? {66000, 0, ? ? ?0x27, ? 1, ? ? ?0x06}, ?/* 66005 ppm=70 */
>> + ? ? {66667, 0, ? ? ?0x26, ? 0, ? ? ?0x20}, ?/* 66667 ppm=-5 */
>> + ? ? {67000, 0, ? ? ?0x26, ? 0, ? ? ?0x13}, ?/* 67003 ppm=41 */
>> + ? ? {68000, 0, ? ? ?0x26, ? 1, ? ? ?0x13}, ?/* 68005 ppm=70 */
>> + ? ? {68179, 0, ? ? ?0x26, ? 1, ? ? ?0x19}, ?/* 68166 ppm=-196 */
>> + ? ? {69000, 0, ? ? ?0x25, ? 0, ? ? ?0x08}, ?/* 69010 ppm=139 */
>> + ? ? {70000, 0, ? ? ?0x25, ? 1, ? ? ?0x1B}, ?/* 69988 ppm=-174 */
>> + ? ? {71000, 0, ? ? ?0x24, ? 0, ? ? ?0x02}, ?/* 70994 ppm=-82 */
>> + ? ? {72000, 0, ? ? ?0x23, ? 0, ? ? ?0x20}, ?/* 72000 ppm=0 */
>> + ? ? {73000, 0, ? ? ?0x23, ? 1, ? ? ?0x01}, ?/* 73004 ppm=53 */
>> + ? ? {74000, 0, ? ? ?0x22, ? 0, ? ? ?0x1F}, ?/* 74004 ppm=58 */
>> + ? ? {74175, 0, ? ? ?0x22, ? 0, ? ? ?0x1A}, ?/* 74163 ppm=-161 */
>> + ? ? {74250, 0, ? ? ?0x22, ? 0, ? ? ?0x17}, ?/* 74259 ppm=118 */
>> + ? ? {74481, 0, ? ? ?0x22, ? 0, ? ? ?0x10}, ?/* 74483 ppm=24 */
>> + ? ? {75000, 0, ? ? ?0x22, ? 0, ? ? ?0x00}, ?/* 75000 ppm=0 */
>> + ? ? {76000, 0, ? ? ?0x22, ? 1, ? ? ?0x1E}, ?/* 75989 ppm=-139 */
>> + ? ? {77000, 0, ? ? ?0x21, ? 0, ? ? ?0x04}, ?/* 77005 ppm=70 */
>> + ? ? {78000, 0, ? ? ?0x21, ? 1, ? ? ?0x19}, ?/* 78014 ppm=174 */
>> + ? ? {78750, 0, ? ? ?0x20, ? 0, ? ? ?0x12}, ?/* 78760 ppm=131 */
>> + ? ? {79000, 0, ? ? ?0x20, ? 0, ? ? ?0x0B}, ?/* 79012 ppm=157 */
>> + ? ? {80000, 0, ? ? ?0x20, ? 1, ? ? ?0x10}, ?/* 80000 ppm=0 */
>> + ? ? {81000, 0, ? ? ?0x1F, ? 0, ? ? ?0x15}, ?/* 81013 ppm=157 */
>> + ? ? {81081, 0, ? ? ?0x1F, ? 0, ? ? ?0x13}, ?/* 81089 ppm=95 */
>> + ? ? {81624, 0, ? ? ?0x1F, ? 0, ? ? ?0x05}, ?/* 81625 ppm=12 */
>> + ? ? {82000, 0, ? ? ?0x1F, ? 1, ? ? ?0x05}, ?/* 82012 ppm=151 */
>> + ? ? {83000, 0, ? ? ?0x1F, ? 1, ? ? ?0x1E}, ?/* 82997 ppm=-35 */
>> + ? ? {83950, 0, ? ? ?0x1E, ? 0, ? ? ?0x0A}, ?/* 83965 ppm=179 */
>> + ? ? {84000, 0, ? ? ?0x1E, ? 0, ? ? ?0x09}, ?/* 84006 ppm=70 */
>> + ? ? {85000, 0, ? ? ?0x1E, ? 1, ? ? ?0x0F}, ?/* 84998 ppm=-29 */
>> + ? ? {86000, 0, ? ? ?0x1D, ? 0, ? ? ?0x19}, ?/* 86013 ppm=151 */
>> + ? ? {87000, 0, ? ? ?0x1D, ? 0, ? ? ?0x02}, ?/* 87009 ppm=105 */
>> + ? ? {88000, 0, ? ? ?0x1D, ? 1, ? ? ?0x14}, ?/* 87984 ppm=-186 */
>> + ? ? {89000, 0, ? ? ?0x1C, ? 0, ? ? ?0x16}, ?/* 88980 ppm=-220 */
>> + ? ? {90000, 0, ? ? ?0x1C, ? 0, ? ? ?0x00}, ?/* 90000 ppm=0 */
>> + ? ? {91000, 0, ? ? ?0x1C, ? 1, ? ? ?0x15}, ?/* 90995 ppm=-53 */
>> + ? ? {92000, 0, ? ? ?0x1B, ? 0, ? ? ?0x16}, ?/* 92013 ppm=139 */
>> + ? ? {93000, 0, ? ? ?0x1B, ? 0, ? ? ?0x02}, ?/* 93003 ppm=35 */
>> + ? ? {94000, 0, ? ? ?0x1B, ? 1, ? ? ?0x12}, ?/* 94015 ppm=163 */
>> + ? ? {94500, 0, ? ? ?0x1B, ? 1, ? ? ?0x1B}, ?/* 94478 ppm=-235 */
>> + ? ? {95000, 0, ? ? ?0x1A, ? 0, ? ? ?0x1B}, ?/* 94997 ppm=-29 */
>> + ? ? {95654, 0, ? ? ?0x1A, ? 0, ? ? ?0x0F}, ?/* 95628 ppm=-271 */
>> + ? ? {96000, 0, ? ? ?0x1A, ? 0, ? ? ?0x08}, ?/* 96000 ppm=0 */
>> + ? ? {97000, 0, ? ? ?0x1A, ? 1, ? ? ?0x0B}, ?/* 97024 ppm=249 */
>> + ? ? {98000, 0, ? ? ?0x1A, ? 1, ? ? ?0x1D}, ?/* 98015 ppm=151 */
>> + ? ? {99000, 0, ? ? ?0x19, ? 0, ? ? ?0x11}, ?/* 99026 ppm=261 */
>> + ? ? {100000, ? ? ? ?0, ? ? ?0x19, ? 0, ? ? ?0x00}, ?/* 100000 ppm=0 */
>> + ? ? {101000, ? ? ? ?0, ? ? ?0x19, ? 1, ? ? ?0x11}, ?/* 100994 ppm=-64 */
>> + ? ? {102000, ? ? ? ?0, ? ? ?0x18, ? 0, ? ? ?0x1E}, ?/* 102007 ppm=70 */
>> + ? ? {103000, ? ? ? ?0, ? ? ?0x18, ? 0, ? ? ?0x0E}, ?/* 102980 ppm=-197 */
>> + ? ? {104000, ? ? ? ?0, ? ? ?0x18, ? 1, ? ? ?0x02}, ?/* 103971 ppm=-278 */
>> + ? ? {105000, ? ? ? ?0, ? ? ?0x18, ? 1, ? ? ?0x12}, ?/* 104982 ppm=-174 */
>> + ? ? {106000, ? ? ? ?0, ? ? ?0x17, ? 0, ? ? ?0x1E}, ?/* 106012 ppm=116 */
>> + ? ? {107000, ? ? ? ?0, ? ? ?0x17, ? 0, ? ? ?0x0F}, ?/* 106997 ppm=-29 */
>> + ? ? {107214, ? ? ? ?0, ? ? ?0x17, ? 0, ? ? ?0x0C}, ?/* 107196 ppm=-168 */
>> + ? ? {108000, ? ? ? ?0, ? ? ?0x17, ? 0, ? ? ?0x00}, ?/* 108000 ppm=0 */
>> + ? ? {109000, ? ? ? ?0, ? ? ?0x17, ? 1, ? ? ?0x0F}, ?/* 109022 ppm=203 */
>> + ? ? {110000, ? ? ? ?0, ? ? ?0x17, ? 1, ? ? ?0x1D}, ?/* 109994 ppm=-58 */
>> + ? ? {110013, ? ? ? ?0, ? ? ?0x17, ? 1, ? ? ?0x1D}, ?/* 109994 ppm=-177 */
>> + ? ? {111000, ? ? ? ?0, ? ? ?0x16, ? 0, ? ? ?0x15}, ?/* 110983 ppm=-157 */
>> + ? ? {111263, ? ? ? ?0, ? ? ?0x16, ? 0, ? ? ?0x11}, ?/* 111269 ppm=55 */
>> + ? ? {111375, ? ? ? ?0, ? ? ?0x16, ? 0, ? ? ?0x10}, ?/* 111340 ppm=-313 */
>> + ? ? {112000, ? ? ? ?0, ? ? ?0x16, ? 0, ? ? ?0x07}, ?/* 111990 ppm=-93 */
>> + ? ? {113000, ? ? ? ?0, ? ? ?0x16, ? 1, ? ? ?0x07}, ?/* 113015 ppm=134 */
>> + ? ? {113309, ? ? ? ?0, ? ? ?0x16, ? 1, ? ? ?0x0B}, ?/* 113311 ppm=22 */
>> + ? ? {113100, ? ? ? ?0, ? ? ?0x16, ? 1, ? ? ?0x08}, ?/* 113089 ppm=-98 */
>> + ? ? {114000, ? ? ? ?0, ? ? ?0x16, ? 1, ? ? ?0x14}, ?/* 113984 ppm=-139 */
>> + ? ? {115000, ? ? ? ?0, ? ? ?0x15, ? 0, ? ? ?0x1F}, ?/* 114970 ppm=-261 */
>> + ? ? {116000, ? ? ? ?0, ? ? ?0x15, ? 0, ? ? ?0x12}, ?/* 115973 ppm=-232 */
>> + ? ? {117000, ? ? ? ?0, ? ? ?0x15, ? 0, ? ? ?0x05}, ?/* 116994 ppm=-53 */
>> + ? ? {118000, ? ? ? ?0, ? ? ?0x15, ? 1, ? ? ?0x08}, ?/* 118033 ppm=278 */
>> + ? ? {119000, ? ? ? ?0, ? ? ?0x15, ? 1, ? ? ?0x14}, ?/* 119008 ppm=70 */
>> + ? ? {119651, ? ? ? ?0, ? ? ?0x15, ? 1, ? ? ?0x1C}, ?/* 119668 ppm=139 */
>> + ? ? {120000, ? ? ? ?0, ? ? ?0x14, ? 0, ? ? ?0x20}, ?/* 120000 ppm=0 */
>> + ? ? {121000, ? ? ? ?0, ? ? ?0x14, ? 0, ? ? ?0x14}, ?/* 121008 ppm=70 */
>> + ? ? {122000, ? ? ? ?0, ? ? ?0x14, ? 0, ? ? ?0x08}, ?/* 122034 ppm=278 */
>> + ? ? {122614, ? ? ? ?0, ? ? ?0x14, ? 0, ? ? ?0x01}, ?/* 122640 ppm=214 */
>> + ? ? {123000, ? ? ? ?0, ? ? ?0x14, ? 1, ? ? ?0x03}, ?/* 122989 ppm=-87 */
>> + ? ? {123379, ? ? ? ?0, ? ? ?0x14, ? 1, ? ? ?0x07}, ?/* 123340 ppm=-313 */
>> + ? ? {124000, ? ? ? ?0, ? ? ?0x14, ? 1, ? ? ?0x0E}, ?/* 123960 ppm=-324 */
>> + ? ? {125000, ? ? ? ?0, ? ? ?0x14, ? 1, ? ? ?0x1A}, ?/* 125036 ppm=290 */
>> + ? ? {126000, ? ? ? ?0, ? ? ?0x13, ? 0, ? ? ?0x1B}, ?/* 126039 ppm=313 */
>> + ? ? {127000, ? ? ? ?0, ? ? ?0x13, ? 0, ? ? ?0x11}, ?/* 126965 ppm=-272 */
>> + ? ? {128000, ? ? ? ?0, ? ? ?0x13, ? 0, ? ? ?0x06}, ?/* 128000 ppm=0 */
>> + ? ? {129000, ? ? ? ?0, ? ? ?0x13, ? 1, ? ? ?0x04}, ?/* 128955 ppm=-348 */
>> + ? ? {129859, ? ? ? ?0, ? ? ?0x13, ? 1, ? ? ?0x0D}, ?/* 129827 ppm=-245 */
>> + ? ? {130000, ? ? ? ?0, ? ? ?0x13, ? 1, ? ? ?0x0F}, ?/* 130023 ppm=174 */
>> + ? ? {131000, ? ? ? ?0, ? ? ?0x13, ? 1, ? ? ?0x19}, ?/* 131008 ppm=64 */
>> + ? ? {131850, ? ? ? ?0, ? ? ?0x12, ? 0, ? ? ?0x1F}, ?/* 131808 ppm=-321 */
>> + ? ? {132000, ? ? ? ?0, ? ? ?0x12, ? 0, ? ? ?0x1D}, ?/* 132009 ppm=70 */
>> + ? ? {133000, ? ? ? ?0, ? ? ?0x12, ? 0, ? ? ?0x13}, ?/* 133025 ppm=192 */
>> + ? ? {133330, ? ? ? ?0, ? ? ?0x12, ? 0, ? ? ?0x10}, ?/* 133333 ppm=26 */
>> + ? ? {134000, ? ? ? ?0, ? ? ?0x12, ? 0, ? ? ?0x0A}, ?/* 133953 ppm=-348 */
>> + ? ? {135000, ? ? ? ?0, ? ? ?0x12, ? 0, ? ? ?0x00}, ?/* 135000 ppm=0 */
>> + ? ? {136000, ? ? ? ?0, ? ? ?0x12, ? 1, ? ? ?0x09}, ?/* 135956 ppm=-324 */
>> + ? ? {137000, ? ? ? ?0, ? ? ?0x12, ? 1, ? ? ?0x13}, ?/* 137034 ppm=249 */
>> + ? ? {138000, ? ? ? ?0, ? ? ?0x12, ? 1, ? ? ?0x1C}, ?/* 138019 ppm=139 */
>> + ? ? {139000, ? ? ? ?0, ? ? ?0x11, ? 0, ? ? ?0x1B}, ?/* 139019 ppm=134 */
>> + ? ? {139050, ? ? ? ?0, ? ? ?0x11, ? 0, ? ? ?0x1B}, ?/* 139019 ppm=-227 */
>> + ? ? {139054, ? ? ? ?0, ? ? ?0x11, ? 0, ? ? ?0x1B}, ?/* 139019 ppm=-256 */
>> + ? ? {140000, ? ? ? ?0, ? ? ?0x11, ? 0, ? ? ?0x12}, ?/* 140032 ppm=232 */
>> + ? ? {141000, ? ? ? ?0, ? ? ?0x11, ? 0, ? ? ?0x0A}, ?/* 140946 ppm=-382 */
>> + ? ? {142000, ? ? ? ?0, ? ? ?0x11, ? 0, ? ? ?0x01}, ?/* 141988 ppm=-82 */
>> + ? ? {143000, ? ? ? ?0, ? ? ?0x11, ? 1, ? ? ?0x08}, ?/* 143046 ppm=325 */
>> + ? ? {143472, ? ? ? ?0, ? ? ?0x11, ? 1, ? ? ?0x0C}, ?/* 143522 ppm=346 */
>> + ? ? {144000, ? ? ? ?0, ? ? ?0x11, ? 1, ? ? ?0x10}, ?/* 144000 ppm=0 */
>> + ? ? {145000, ? ? ? ?0, ? ? ?0x11, ? 1, ? ? ?0x18}, ?/* 144966 ppm=-232 */
>> + ? ? {146000, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x20}, ?/* 145946 ppm=-371 */
>> + ? ? {147000, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x18}, ?/* 146939 ppm=-417 */
>> + ? ? {147891, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x10}, ?/* 147945 ppm=367 */
>> + ? ? {148000, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x10}, ?/* 147945 ppm=-371 */
>> + ? ? {148350, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x0D}, ?/* 148326 ppm=-161 */
>> + ? ? {148500, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x0C}, ?/* 148454 ppm=-313 */
>> + ? ? {149000, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x08}, ?/* 148966 ppm=-232 */
>> + ? ? {150000, ? ? ? ?0, ? ? ?0x10, ? 0, ? ? ?0x00}, ?/* 150000 ppm=0 */
>> + ? ? {151000, ? ? ? ?0, ? ? ?0x10, ? 1, ? ? ?0x08}, ?/* 151049 ppm=325 */
>> + ? ? {152000, ? ? ? ?0, ? ? ?0x10, ? 1, ? ? ?0x0F}, ?/* 151979 ppm=-139 */
>> + ? ? {152280, ? ? ? ?0, ? ? ?0x10, ? 1, ? ? ?0x11}, ?/* 152247 ppm=-219 */
>> + ? ? {153000, ? ? ? ?0, ? ? ?0x10, ? 1, ? ? ?0x17}, ?/* 153056 ppm=365 */
>> + ? ? {154000, ? ? ? ?0, ? ? ?0x10, ? 1, ? ? ?0x1E}, ?/* 154011 ppm=70 */
>> + ? ? {155000, ? ? ? ?0, ? ? ?0x0F, ? 0, ? ? ?0x1B}, ?/* 154978 ppm=-145 */
>> + ? ? {156000, ? ? ? ?0, ? ? ?0x0F, ? 0, ? ? ?0x14}, ?/* 155957 ppm=-278 */
>> + ? ? {157000, ? ? ? ?0, ? ? ?0x0F, ? 0, ? ? ?0x0D}, ?/* 156948 ppm=-330 */
>> + ? ? {157500, ? ? ? ?0, ? ? ?0x0F, ? 0, ? ? ?0x09}, ?/* 157521 ppm=131 */
>> + ? ? {158000, ? ? ? ?0, ? ? ?0x0F, ? 0, ? ? ?0x06}, ?/* 157952 ppm=-301 */
>> + ? ? {159000, ? ? ? ?0, ? ? ?0x0F, ? 1, ? ? ?0x01}, ?/* 158970 ppm=-191 */
>> + ? ? {160000, ? ? ? ?0, ? ? ?0x0F, ? 1, ? ? ?0x08}, ?/* 160000 ppm=0 */
>> + ? ? {161000, ? ? ? ?0, ? ? ?0x0F, ? 1, ? ? ?0x0F}, ?/* 161044 ppm=273 */
>> + ? ? {162000, ? ? ? ?0, ? ? ?0x0F, ? 1, ? ? ?0x15}, ?/* 161949 ppm=-313 */
>> + ? ? {163000, ? ? ? ?0, ? ? ?0x0F, ? 1, ? ? ?0x1C}, ?/* 163019 ppm=116 */
>> + ? ? {164000, ? ? ? ?0, ? ? ?0x0E, ? 0, ? ? ?0x1E}, ?/* 163947 ppm=-324 */
>> + ? ? {165000, ? ? ? ?0, ? ? ?0x0E, ? 0, ? ? ?0x17}, ?/* 165043 ppm=261 */
>> + ? ? {166000, ? ? ? ?0, ? ? ?0x0E, ? 0, ? ? ?0x11}, ?/* 165994 ppm=-35 */
>> + ? ? {167000, ? ? ? ?0, ? ? ?0x0E, ? 0, ? ? ?0x0B}, ?/* 166957 ppm=-261 */
>> + ? ? {168000, ? ? ? ?0, ? ? ?0x0E, ? 0, ? ? ?0x05}, ?/* 167930 ppm=-417 */
>> + ? ? {169000, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x02}, ?/* 169080 ppm=475 */
>> + ? ? {169128, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x02}, ?/* 169080 ppm=-283 */
>> + ? ? {170000, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x08}, ?/* 170079 ppm=464 */
>> + ? ? {171000, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x0D}, ?/* 170920 ppm=-469 */
>> + ? ? {172000, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x13}, ?/* 171940 ppm=-348 */
>> + ? ? {172800, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x18}, ?/* 172800 ppm=0 */
>> + ? ? {173000, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x19}, ?/* 172973 ppm=-157 */
>> + ? ? {174000, ? ? ? ?0, ? ? ?0x0E, ? 1, ? ? ?0x1F}, ?/* 174018 ppm=105 */
>> + ? ? {174787, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x1D}, ?/* 174722 ppm=-373 */
>> + ? ? {175000, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x1B}, ?/* 175076 ppm=435 */
>> + ? ? {175500, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x19}, ?/* 175431 ppm=-391 */
>> + ? ? {176000, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x16}, ?/* 175967 ppm=-186 */
>> + ? ? {177000, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x10}, ?/* 177049 ppm=278 */
>> + ? ? {178000, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x0B}, ?/* 177961 ppm=-220 */
>> + ? ? {179000, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x05}, ?/* 179067 ppm=377 */
>> + ? ? {180000, ? ? ? ?0, ? ? ?0x0D, ? 0, ? ? ?0x00}, ?/* 180000 ppm=0 */
>> +};
>> +
>> +/* Program iCLKIP clock to the desired frequency */
>> +static void lpt_program_iclkip(struct drm_crtc *crtc)
>> +{
>> + ? ? struct drm_device *dev = crtc->dev;
>> + ? ? struct drm_i915_private *dev_priv = dev->dev_private;
>> + ? ? u32 auxdiv=0, divsel=0, phasedir=0, phaseinc=0, valid=0;
>> + ? ? u32 temp, i;
>> +
>> + ? ? /* Ungate pixel clock */
>> + ? ? I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_GATE);
>> +
>> + ? ? /* Disable SSCCTL */
>> + ? ? SBI_WRITE(dev_priv, SBI_SSCCTL6,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? SBI_READ(dev_priv, SBI_SSCCTL6) |
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SBI_SSCCTL_DISABLE);
>> +
>> + ? ? /* Calculating clock values for iCLKIP */
>> + ? ? for (i=0; i < ARRAY_SIZE(iclk_vga_clock_table); i++) {
>> + ? ? ? ? ? ? if (crtc->mode.clock == iclk_vga_clock_table[i].clock) {
>> + ? ? ? ? ? ? ? ? ? ? DRM_INFO("Found clock settings for %dKHz refresh rate\n",
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? crtc->mode.clock);
>> +
>> + ? ? ? ? ? ? ? ? ? ? auxdiv = iclk_vga_clock_table[i].auxdiv;
>> + ? ? ? ? ? ? ? ? ? ? divsel = iclk_vga_clock_table[i].divsel;
>> + ? ? ? ? ? ? ? ? ? ? phasedir = iclk_vga_clock_table[i].phasedir;
>> + ? ? ? ? ? ? ? ? ? ? phaseinc = iclk_vga_clock_table[i].phaseinc;
>> +
>> + ? ? ? ? ? ? ? ? ? ? valid = 1;
>> +
>> + ? ? ? ? ? ? ? ? ? ? break;
>> + ? ? ? ? ? ? }
>> + ? ? }
>> +
>> + ? ? if (!valid) {
>> + ? ? ? ? ? ? DRM_ERROR("Unable to find iCLKIP clock settings for %dKHz refresh rate\n",
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? crtc->mode.clock);
>> + ? ? ? ? ? ? return;
>> + ? ? }
>> +
>> + ? ? /* Program SSCDIVINTPHASE6 with values which HW team uses */
>> + ? ? DRM_DEBUG("Programming SSCDIVINTPHASE for %dKHz: auxdiv=%x, divsel=%x, phasedir=%x, phaseinc=%x\n",
>> + ? ? ? ? ? ? ? ? ? ? crtc->mode.clock,
>> + ? ? ? ? ? ? ? ? ? ? auxdiv,
>> + ? ? ? ? ? ? ? ? ? ? divsel,
>> + ? ? ? ? ? ? ? ? ? ? phasedir,
>> + ? ? ? ? ? ? ? ? ? ? phaseinc);
>> +
>> + ? ? /* Program SSCDIVINTPHASE6 */
>> + ? ? temp = SBI_READ(dev_priv, SBI_SSCDIVINTPHASE6);
>> + ? ? temp &= ~SBI_SSCDIVINTPHASE_DIVSEL_MASK;
>> + ? ? temp |= SBI_SSCDIVINTPHASE_DIVSEL(divsel);
>> + ? ? temp &= ~SBI_SSCDIVINTPHASE_INCVAL_MASK;
>> + ? ? temp |= SBI_SSCDIVINTPHASE_INCVAL(phaseinc);
>> + ? ? temp |= SBI_SSCDIVINTPHASE_DIR(phasedir);
>> + ? ? temp |= SBI_SSCDIVINTPHASE_PROPAGATE;
>> +
>> + ? ? SBI_WRITE(dev_priv,
>> + ? ? ? ? ? ? ? ? ? ? SBI_SSCDIVINTPHASE6,
>> + ? ? ? ? ? ? ? ? ? ? temp);
>> +
>> + ? ? /* Program SSCAUXDIV */
>> + ? ? SBI_WRITE(dev_priv,
>> + ? ? ? ? ? ? ? ? ? ? SBI_SSCAUXDIV6,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? SBI_READ(dev_priv, SBI_SSCAUXDIV6) |
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SBI_SSCAUXDIV_FINALDIV2SEL(auxdiv));
>> +
>> +
>> + ? ? /* Enable modulator and associated divider */
>> + ? ? SBI_WRITE(dev_priv, SBI_SSCCTL6,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? SBI_READ(dev_priv, SBI_SSCCTL6) &
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ~SBI_SSCCTL_DISABLE);
>> +
>> + ? ? /* Wait for initialization time */
>> + ? ? udelay(50);
>> +
>> + ? ? /* Gate pixel clock */
>> + ? ? I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_UNGATE);
>> +}
>> +
>>
>> ?/* Link training for HSW parts */
>> ?static void hsw_fdi_link_train(struct drm_crtc *crtc)
>> @@ -3182,6 +3488,9 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
>> ? ? ? ? ? ? ? /* DDIE clock is recommented for FDI connections */
>> ? ? ? ? ? ? ? I915_WRITE(PIPE_CLK_SEL(pipe),
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PIPE_CLK_SEL_DDIE);
>> +
>> + ? ? ? ? ? ? /* Program iCLKIP */
>> + ? ? ? ? ? ? lpt_program_iclkip(crtc);
>> ? ? ? }
>>
>> ? ? ? /* set transcoder timing, panel must allow it */
>> --
>> 1.7.9.2
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Mail: daniel at ffwll.ch
> Mobile: +41 (0)79 365 57 48
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
GPG: 0x905BE242 @ wwwkeys.pgp.net


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux