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

Rodrigo Vivi rodrigo.vivi at gmail.com
Mon Mar 26 20:00:14 CEST 2012


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



More information about the Intel-gfx mailing list