[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