root/drivers/gpu/drm/radeon/radeon_clocks.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. radeon_legacy_get_engine_clock
  2. radeon_legacy_get_memory_clock
  3. radeon_read_clocks_OF
  4. radeon_read_clocks_OF
  5. radeon_get_clock_info
  6. calc_eng_mem_clock
  7. radeon_legacy_set_engine_clock
  8. radeon_legacy_set_clock_gating

   1 /*
   2  * Copyright 2008 Advanced Micro Devices, Inc.
   3  * Copyright 2008 Red Hat Inc.
   4  * Copyright 2009 Jerome Glisse.
   5  *
   6  * Permission is hereby granted, free of charge, to any person obtaining a
   7  * copy of this software and associated documentation files (the "Software"),
   8  * to deal in the Software without restriction, including without limitation
   9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10  * and/or sell copies of the Software, and to permit persons to whom the
  11  * Software is furnished to do so, subject to the following conditions:
  12  *
  13  * The above copyright notice and this permission notice shall be included in
  14  * all copies or substantial portions of the Software.
  15  *
  16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22  * OTHER DEALINGS IN THE SOFTWARE.
  23  *
  24  * Authors: Dave Airlie
  25  *          Alex Deucher
  26  *          Jerome Glisse
  27  */
  28 
  29 #include <drm/drm_device.h>
  30 #include <drm/drm_pci.h>
  31 #include <drm/radeon_drm.h>
  32 
  33 #include "atom.h"
  34 #include "radeon.h"
  35 #include "radeon_asic.h"
  36 #include "radeon_reg.h"
  37 
  38 /* 10 khz */
  39 uint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev)
  40 {
  41         struct radeon_pll *spll = &rdev->clock.spll;
  42         uint32_t fb_div, ref_div, post_div, sclk;
  43 
  44         fb_div = RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV);
  45         fb_div = (fb_div >> RADEON_SPLL_FB_DIV_SHIFT) & RADEON_SPLL_FB_DIV_MASK;
  46         fb_div <<= 1;
  47         fb_div *= spll->reference_freq;
  48 
  49         ref_div =
  50             RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) & RADEON_M_SPLL_REF_DIV_MASK;
  51 
  52         if (ref_div == 0)
  53                 return 0;
  54 
  55         sclk = fb_div / ref_div;
  56 
  57         post_div = RREG32_PLL(RADEON_SCLK_CNTL) & RADEON_SCLK_SRC_SEL_MASK;
  58         if (post_div == 2)
  59                 sclk >>= 1;
  60         else if (post_div == 3)
  61                 sclk >>= 2;
  62         else if (post_div == 4)
  63                 sclk >>= 3;
  64 
  65         return sclk;
  66 }
  67 
  68 /* 10 khz */
  69 uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev)
  70 {
  71         struct radeon_pll *mpll = &rdev->clock.mpll;
  72         uint32_t fb_div, ref_div, post_div, mclk;
  73 
  74         fb_div = RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV);
  75         fb_div = (fb_div >> RADEON_MPLL_FB_DIV_SHIFT) & RADEON_MPLL_FB_DIV_MASK;
  76         fb_div <<= 1;
  77         fb_div *= mpll->reference_freq;
  78 
  79         ref_div =
  80             RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) & RADEON_M_SPLL_REF_DIV_MASK;
  81 
  82         if (ref_div == 0)
  83                 return 0;
  84 
  85         mclk = fb_div / ref_div;
  86 
  87         post_div = RREG32_PLL(RADEON_MCLK_CNTL) & 0x7;
  88         if (post_div == 2)
  89                 mclk >>= 1;
  90         else if (post_div == 3)
  91                 mclk >>= 2;
  92         else if (post_div == 4)
  93                 mclk >>= 3;
  94 
  95         return mclk;
  96 }
  97 
  98 #ifdef CONFIG_OF
  99 /*
 100  * Read XTAL (ref clock), SCLK and MCLK from Open Firmware device
 101  * tree. Hopefully, ATI OF driver is kind enough to fill these
 102  */
 103 static bool radeon_read_clocks_OF(struct drm_device *dev)
 104 {
 105         struct radeon_device *rdev = dev->dev_private;
 106         struct device_node *dp = rdev->pdev->dev.of_node;
 107         const u32 *val;
 108         struct radeon_pll *p1pll = &rdev->clock.p1pll;
 109         struct radeon_pll *p2pll = &rdev->clock.p2pll;
 110         struct radeon_pll *spll = &rdev->clock.spll;
 111         struct radeon_pll *mpll = &rdev->clock.mpll;
 112 
 113         if (dp == NULL)
 114                 return false;
 115         val = of_get_property(dp, "ATY,RefCLK", NULL);
 116         if (!val || !*val) {
 117                 pr_warn("radeonfb: No ATY,RefCLK property !\n");
 118                 return false;
 119         }
 120         p1pll->reference_freq = p2pll->reference_freq = (*val) / 10;
 121         p1pll->reference_div = RREG32_PLL(RADEON_PPLL_REF_DIV) & 0x3ff;
 122         if (p1pll->reference_div < 2)
 123                 p1pll->reference_div = 12;
 124         p2pll->reference_div = p1pll->reference_div;
 125 
 126         /* These aren't in the device-tree */
 127         if (rdev->family >= CHIP_R420) {
 128                 p1pll->pll_in_min = 100;
 129                 p1pll->pll_in_max = 1350;
 130                 p1pll->pll_out_min = 20000;
 131                 p1pll->pll_out_max = 50000;
 132                 p2pll->pll_in_min = 100;
 133                 p2pll->pll_in_max = 1350;
 134                 p2pll->pll_out_min = 20000;
 135                 p2pll->pll_out_max = 50000;
 136         } else {
 137                 p1pll->pll_in_min = 40;
 138                 p1pll->pll_in_max = 500;
 139                 p1pll->pll_out_min = 12500;
 140                 p1pll->pll_out_max = 35000;
 141                 p2pll->pll_in_min = 40;
 142                 p2pll->pll_in_max = 500;
 143                 p2pll->pll_out_min = 12500;
 144                 p2pll->pll_out_max = 35000;
 145         }
 146         /* not sure what the max should be in all cases */
 147         rdev->clock.max_pixel_clock = 35000;
 148 
 149         spll->reference_freq = mpll->reference_freq = p1pll->reference_freq;
 150         spll->reference_div = mpll->reference_div =
 151                 RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) &
 152                             RADEON_M_SPLL_REF_DIV_MASK;
 153 
 154         val = of_get_property(dp, "ATY,SCLK", NULL);
 155         if (val && *val)
 156                 rdev->clock.default_sclk = (*val) / 10;
 157         else
 158                 rdev->clock.default_sclk =
 159                         radeon_legacy_get_engine_clock(rdev);
 160 
 161         val = of_get_property(dp, "ATY,MCLK", NULL);
 162         if (val && *val)
 163                 rdev->clock.default_mclk = (*val) / 10;
 164         else
 165                 rdev->clock.default_mclk =
 166                         radeon_legacy_get_memory_clock(rdev);
 167 
 168         DRM_INFO("Using device-tree clock info\n");
 169 
 170         return true;
 171 }
 172 #else
 173 static bool radeon_read_clocks_OF(struct drm_device *dev)
 174 {
 175         return false;
 176 }
 177 #endif /* CONFIG_OF */
 178 
 179 void radeon_get_clock_info(struct drm_device *dev)
 180 {
 181         struct radeon_device *rdev = dev->dev_private;
 182         struct radeon_pll *p1pll = &rdev->clock.p1pll;
 183         struct radeon_pll *p2pll = &rdev->clock.p2pll;
 184         struct radeon_pll *dcpll = &rdev->clock.dcpll;
 185         struct radeon_pll *spll = &rdev->clock.spll;
 186         struct radeon_pll *mpll = &rdev->clock.mpll;
 187         int ret;
 188 
 189         if (rdev->is_atom_bios)
 190                 ret = radeon_atom_get_clock_info(dev);
 191         else
 192                 ret = radeon_combios_get_clock_info(dev);
 193         if (!ret)
 194                 ret = radeon_read_clocks_OF(dev);
 195 
 196         if (ret) {
 197                 if (p1pll->reference_div < 2) {
 198                         if (!ASIC_IS_AVIVO(rdev)) {
 199                                 u32 tmp = RREG32_PLL(RADEON_PPLL_REF_DIV);
 200                                 if (ASIC_IS_R300(rdev))
 201                                         p1pll->reference_div =
 202                                                 (tmp & R300_PPLL_REF_DIV_ACC_MASK) >> R300_PPLL_REF_DIV_ACC_SHIFT;
 203                                 else
 204                                         p1pll->reference_div = tmp & RADEON_PPLL_REF_DIV_MASK;
 205                                 if (p1pll->reference_div < 2)
 206                                         p1pll->reference_div = 12;
 207                         } else
 208                                 p1pll->reference_div = 12;
 209                 }
 210                 if (p2pll->reference_div < 2)
 211                         p2pll->reference_div = 12;
 212                 if (rdev->family < CHIP_RS600) {
 213                         if (spll->reference_div < 2)
 214                                 spll->reference_div =
 215                                         RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) &
 216                                         RADEON_M_SPLL_REF_DIV_MASK;
 217                 }
 218                 if (mpll->reference_div < 2)
 219                         mpll->reference_div = spll->reference_div;
 220         } else {
 221                 if (ASIC_IS_AVIVO(rdev)) {
 222                         /* TODO FALLBACK */
 223                 } else {
 224                         DRM_INFO("Using generic clock info\n");
 225 
 226                         /* may need to be per card */
 227                         rdev->clock.max_pixel_clock = 35000;
 228 
 229                         if (rdev->flags & RADEON_IS_IGP) {
 230                                 p1pll->reference_freq = 1432;
 231                                 p2pll->reference_freq = 1432;
 232                                 spll->reference_freq = 1432;
 233                                 mpll->reference_freq = 1432;
 234                         } else {
 235                                 p1pll->reference_freq = 2700;
 236                                 p2pll->reference_freq = 2700;
 237                                 spll->reference_freq = 2700;
 238                                 mpll->reference_freq = 2700;
 239                         }
 240                         p1pll->reference_div =
 241                             RREG32_PLL(RADEON_PPLL_REF_DIV) & 0x3ff;
 242                         if (p1pll->reference_div < 2)
 243                                 p1pll->reference_div = 12;
 244                         p2pll->reference_div = p1pll->reference_div;
 245 
 246                         if (rdev->family >= CHIP_R420) {
 247                                 p1pll->pll_in_min = 100;
 248                                 p1pll->pll_in_max = 1350;
 249                                 p1pll->pll_out_min = 20000;
 250                                 p1pll->pll_out_max = 50000;
 251                                 p2pll->pll_in_min = 100;
 252                                 p2pll->pll_in_max = 1350;
 253                                 p2pll->pll_out_min = 20000;
 254                                 p2pll->pll_out_max = 50000;
 255                         } else {
 256                                 p1pll->pll_in_min = 40;
 257                                 p1pll->pll_in_max = 500;
 258                                 p1pll->pll_out_min = 12500;
 259                                 p1pll->pll_out_max = 35000;
 260                                 p2pll->pll_in_min = 40;
 261                                 p2pll->pll_in_max = 500;
 262                                 p2pll->pll_out_min = 12500;
 263                                 p2pll->pll_out_max = 35000;
 264                         }
 265 
 266                         spll->reference_div =
 267                             RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) &
 268                             RADEON_M_SPLL_REF_DIV_MASK;
 269                         mpll->reference_div = spll->reference_div;
 270                         rdev->clock.default_sclk =
 271                             radeon_legacy_get_engine_clock(rdev);
 272                         rdev->clock.default_mclk =
 273                             radeon_legacy_get_memory_clock(rdev);
 274                 }
 275         }
 276 
 277         /* pixel clocks */
 278         if (ASIC_IS_AVIVO(rdev)) {
 279                 p1pll->min_post_div = 2;
 280                 p1pll->max_post_div = 0x7f;
 281                 p1pll->min_frac_feedback_div = 0;
 282                 p1pll->max_frac_feedback_div = 9;
 283                 p2pll->min_post_div = 2;
 284                 p2pll->max_post_div = 0x7f;
 285                 p2pll->min_frac_feedback_div = 0;
 286                 p2pll->max_frac_feedback_div = 9;
 287         } else {
 288                 p1pll->min_post_div = 1;
 289                 p1pll->max_post_div = 16;
 290                 p1pll->min_frac_feedback_div = 0;
 291                 p1pll->max_frac_feedback_div = 0;
 292                 p2pll->min_post_div = 1;
 293                 p2pll->max_post_div = 12;
 294                 p2pll->min_frac_feedback_div = 0;
 295                 p2pll->max_frac_feedback_div = 0;
 296         }
 297 
 298         /* dcpll is DCE4 only */
 299         dcpll->min_post_div = 2;
 300         dcpll->max_post_div = 0x7f;
 301         dcpll->min_frac_feedback_div = 0;
 302         dcpll->max_frac_feedback_div = 9;
 303         dcpll->min_ref_div = 2;
 304         dcpll->max_ref_div = 0x3ff;
 305         dcpll->min_feedback_div = 4;
 306         dcpll->max_feedback_div = 0xfff;
 307         dcpll->best_vco = 0;
 308 
 309         p1pll->min_ref_div = 2;
 310         p1pll->max_ref_div = 0x3ff;
 311         p1pll->min_feedback_div = 4;
 312         p1pll->max_feedback_div = 0x7ff;
 313         p1pll->best_vco = 0;
 314 
 315         p2pll->min_ref_div = 2;
 316         p2pll->max_ref_div = 0x3ff;
 317         p2pll->min_feedback_div = 4;
 318         p2pll->max_feedback_div = 0x7ff;
 319         p2pll->best_vco = 0;
 320 
 321         /* system clock */
 322         spll->min_post_div = 1;
 323         spll->max_post_div = 1;
 324         spll->min_ref_div = 2;
 325         spll->max_ref_div = 0xff;
 326         spll->min_feedback_div = 4;
 327         spll->max_feedback_div = 0xff;
 328         spll->best_vco = 0;
 329 
 330         /* memory clock */
 331         mpll->min_post_div = 1;
 332         mpll->max_post_div = 1;
 333         mpll->min_ref_div = 2;
 334         mpll->max_ref_div = 0xff;
 335         mpll->min_feedback_div = 4;
 336         mpll->max_feedback_div = 0xff;
 337         mpll->best_vco = 0;
 338 
 339         if (!rdev->clock.default_sclk)
 340                 rdev->clock.default_sclk = radeon_get_engine_clock(rdev);
 341         if ((!rdev->clock.default_mclk) && rdev->asic->pm.get_memory_clock)
 342                 rdev->clock.default_mclk = radeon_get_memory_clock(rdev);
 343 
 344         rdev->pm.current_sclk = rdev->clock.default_sclk;
 345         rdev->pm.current_mclk = rdev->clock.default_mclk;
 346 
 347 }
 348 
 349 /* 10 khz */
 350 static uint32_t calc_eng_mem_clock(struct radeon_device *rdev,
 351                                    uint32_t req_clock,
 352                                    int *fb_div, int *post_div)
 353 {
 354         struct radeon_pll *spll = &rdev->clock.spll;
 355         int ref_div = spll->reference_div;
 356 
 357         if (!ref_div)
 358                 ref_div =
 359                     RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) &
 360                     RADEON_M_SPLL_REF_DIV_MASK;
 361 
 362         if (req_clock < 15000) {
 363                 *post_div = 8;
 364                 req_clock *= 8;
 365         } else if (req_clock < 30000) {
 366                 *post_div = 4;
 367                 req_clock *= 4;
 368         } else if (req_clock < 60000) {
 369                 *post_div = 2;
 370                 req_clock *= 2;
 371         } else
 372                 *post_div = 1;
 373 
 374         req_clock *= ref_div;
 375         req_clock += spll->reference_freq;
 376         req_clock /= (2 * spll->reference_freq);
 377 
 378         *fb_div = req_clock & 0xff;
 379 
 380         req_clock = (req_clock & 0xffff) << 1;
 381         req_clock *= spll->reference_freq;
 382         req_clock /= ref_div;
 383         req_clock /= *post_div;
 384 
 385         return req_clock;
 386 }
 387 
 388 /* 10 khz */
 389 void radeon_legacy_set_engine_clock(struct radeon_device *rdev,
 390                                     uint32_t eng_clock)
 391 {
 392         uint32_t tmp;
 393         int fb_div, post_div;
 394 
 395         /* XXX: wait for idle */
 396 
 397         eng_clock = calc_eng_mem_clock(rdev, eng_clock, &fb_div, &post_div);
 398 
 399         tmp = RREG32_PLL(RADEON_CLK_PIN_CNTL);
 400         tmp &= ~RADEON_DONT_USE_XTALIN;
 401         WREG32_PLL(RADEON_CLK_PIN_CNTL, tmp);
 402 
 403         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 404         tmp &= ~RADEON_SCLK_SRC_SEL_MASK;
 405         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 406 
 407         udelay(10);
 408 
 409         tmp = RREG32_PLL(RADEON_SPLL_CNTL);
 410         tmp |= RADEON_SPLL_SLEEP;
 411         WREG32_PLL(RADEON_SPLL_CNTL, tmp);
 412 
 413         udelay(2);
 414 
 415         tmp = RREG32_PLL(RADEON_SPLL_CNTL);
 416         tmp |= RADEON_SPLL_RESET;
 417         WREG32_PLL(RADEON_SPLL_CNTL, tmp);
 418 
 419         udelay(200);
 420 
 421         tmp = RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV);
 422         tmp &= ~(RADEON_SPLL_FB_DIV_MASK << RADEON_SPLL_FB_DIV_SHIFT);
 423         tmp |= (fb_div & RADEON_SPLL_FB_DIV_MASK) << RADEON_SPLL_FB_DIV_SHIFT;
 424         WREG32_PLL(RADEON_M_SPLL_REF_FB_DIV, tmp);
 425 
 426         /* XXX: verify on different asics */
 427         tmp = RREG32_PLL(RADEON_SPLL_CNTL);
 428         tmp &= ~RADEON_SPLL_PVG_MASK;
 429         if ((eng_clock * post_div) >= 90000)
 430                 tmp |= (0x7 << RADEON_SPLL_PVG_SHIFT);
 431         else
 432                 tmp |= (0x4 << RADEON_SPLL_PVG_SHIFT);
 433         WREG32_PLL(RADEON_SPLL_CNTL, tmp);
 434 
 435         tmp = RREG32_PLL(RADEON_SPLL_CNTL);
 436         tmp &= ~RADEON_SPLL_SLEEP;
 437         WREG32_PLL(RADEON_SPLL_CNTL, tmp);
 438 
 439         udelay(2);
 440 
 441         tmp = RREG32_PLL(RADEON_SPLL_CNTL);
 442         tmp &= ~RADEON_SPLL_RESET;
 443         WREG32_PLL(RADEON_SPLL_CNTL, tmp);
 444 
 445         udelay(200);
 446 
 447         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 448         tmp &= ~RADEON_SCLK_SRC_SEL_MASK;
 449         switch (post_div) {
 450         case 1:
 451         default:
 452                 tmp |= 1;
 453                 break;
 454         case 2:
 455                 tmp |= 2;
 456                 break;
 457         case 4:
 458                 tmp |= 3;
 459                 break;
 460         case 8:
 461                 tmp |= 4;
 462                 break;
 463         }
 464         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 465 
 466         udelay(20);
 467 
 468         tmp = RREG32_PLL(RADEON_CLK_PIN_CNTL);
 469         tmp |= RADEON_DONT_USE_XTALIN;
 470         WREG32_PLL(RADEON_CLK_PIN_CNTL, tmp);
 471 
 472         udelay(10);
 473 }
 474 
 475 void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable)
 476 {
 477         uint32_t tmp;
 478 
 479         if (enable) {
 480                 if (rdev->flags & RADEON_SINGLE_CRTC) {
 481                         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 482                         if ((RREG32(RADEON_CONFIG_CNTL) &
 483                              RADEON_CFG_ATI_REV_ID_MASK) >
 484                             RADEON_CFG_ATI_REV_A13) {
 485                                 tmp &=
 486                                     ~(RADEON_SCLK_FORCE_CP |
 487                                       RADEON_SCLK_FORCE_RB);
 488                         }
 489                         tmp &=
 490                             ~(RADEON_SCLK_FORCE_HDP | RADEON_SCLK_FORCE_DISP1 |
 491                               RADEON_SCLK_FORCE_TOP | RADEON_SCLK_FORCE_SE |
 492                               RADEON_SCLK_FORCE_IDCT | RADEON_SCLK_FORCE_RE |
 493                               RADEON_SCLK_FORCE_PB | RADEON_SCLK_FORCE_TAM |
 494                               RADEON_SCLK_FORCE_TDM);
 495                         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 496                 } else if (ASIC_IS_R300(rdev)) {
 497                         if ((rdev->family == CHIP_RS400) ||
 498                             (rdev->family == CHIP_RS480)) {
 499                                 tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 500                                 tmp &=
 501                                     ~(RADEON_SCLK_FORCE_DISP2 |
 502                                       RADEON_SCLK_FORCE_CP |
 503                                       RADEON_SCLK_FORCE_HDP |
 504                                       RADEON_SCLK_FORCE_DISP1 |
 505                                       RADEON_SCLK_FORCE_TOP |
 506                                       RADEON_SCLK_FORCE_E2 | R300_SCLK_FORCE_VAP
 507                                       | RADEON_SCLK_FORCE_IDCT |
 508                                       RADEON_SCLK_FORCE_VIP | R300_SCLK_FORCE_SR
 509                                       | R300_SCLK_FORCE_PX | R300_SCLK_FORCE_TX
 510                                       | R300_SCLK_FORCE_US |
 511                                       RADEON_SCLK_FORCE_TV_SCLK |
 512                                       R300_SCLK_FORCE_SU |
 513                                       RADEON_SCLK_FORCE_OV0);
 514                                 tmp |= RADEON_DYN_STOP_LAT_MASK;
 515                                 tmp |=
 516                                     RADEON_SCLK_FORCE_TOP |
 517                                     RADEON_SCLK_FORCE_VIP;
 518                                 WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 519 
 520                                 tmp = RREG32_PLL(RADEON_SCLK_MORE_CNTL);
 521                                 tmp &= ~RADEON_SCLK_MORE_FORCEON;
 522                                 tmp |= RADEON_SCLK_MORE_MAX_DYN_STOP_LAT;
 523                                 WREG32_PLL(RADEON_SCLK_MORE_CNTL, tmp);
 524 
 525                                 tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
 526                                 tmp |= (RADEON_PIXCLK_ALWAYS_ONb |
 527                                         RADEON_PIXCLK_DAC_ALWAYS_ONb);
 528                                 WREG32_PLL(RADEON_VCLK_ECP_CNTL, tmp);
 529 
 530                                 tmp = RREG32_PLL(RADEON_PIXCLKS_CNTL);
 531                                 tmp |= (RADEON_PIX2CLK_ALWAYS_ONb |
 532                                         RADEON_PIX2CLK_DAC_ALWAYS_ONb |
 533                                         RADEON_DISP_TVOUT_PIXCLK_TV_ALWAYS_ONb |
 534                                         R300_DVOCLK_ALWAYS_ONb |
 535                                         RADEON_PIXCLK_BLEND_ALWAYS_ONb |
 536                                         RADEON_PIXCLK_GV_ALWAYS_ONb |
 537                                         R300_PIXCLK_DVO_ALWAYS_ONb |
 538                                         RADEON_PIXCLK_LVDS_ALWAYS_ONb |
 539                                         RADEON_PIXCLK_TMDS_ALWAYS_ONb |
 540                                         R300_PIXCLK_TRANS_ALWAYS_ONb |
 541                                         R300_PIXCLK_TVO_ALWAYS_ONb |
 542                                         R300_P2G2CLK_ALWAYS_ONb |
 543                                         R300_P2G2CLK_DAC_ALWAYS_ONb);
 544                                 WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp);
 545                         } else if (rdev->family >= CHIP_RV350) {
 546                                 tmp = RREG32_PLL(R300_SCLK_CNTL2);
 547                                 tmp &= ~(R300_SCLK_FORCE_TCL |
 548                                          R300_SCLK_FORCE_GA |
 549                                          R300_SCLK_FORCE_CBA);
 550                                 tmp |= (R300_SCLK_TCL_MAX_DYN_STOP_LAT |
 551                                         R300_SCLK_GA_MAX_DYN_STOP_LAT |
 552                                         R300_SCLK_CBA_MAX_DYN_STOP_LAT);
 553                                 WREG32_PLL(R300_SCLK_CNTL2, tmp);
 554 
 555                                 tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 556                                 tmp &=
 557                                     ~(RADEON_SCLK_FORCE_DISP2 |
 558                                       RADEON_SCLK_FORCE_CP |
 559                                       RADEON_SCLK_FORCE_HDP |
 560                                       RADEON_SCLK_FORCE_DISP1 |
 561                                       RADEON_SCLK_FORCE_TOP |
 562                                       RADEON_SCLK_FORCE_E2 | R300_SCLK_FORCE_VAP
 563                                       | RADEON_SCLK_FORCE_IDCT |
 564                                       RADEON_SCLK_FORCE_VIP | R300_SCLK_FORCE_SR
 565                                       | R300_SCLK_FORCE_PX | R300_SCLK_FORCE_TX
 566                                       | R300_SCLK_FORCE_US |
 567                                       RADEON_SCLK_FORCE_TV_SCLK |
 568                                       R300_SCLK_FORCE_SU |
 569                                       RADEON_SCLK_FORCE_OV0);
 570                                 tmp |= RADEON_DYN_STOP_LAT_MASK;
 571                                 WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 572 
 573                                 tmp = RREG32_PLL(RADEON_SCLK_MORE_CNTL);
 574                                 tmp &= ~RADEON_SCLK_MORE_FORCEON;
 575                                 tmp |= RADEON_SCLK_MORE_MAX_DYN_STOP_LAT;
 576                                 WREG32_PLL(RADEON_SCLK_MORE_CNTL, tmp);
 577 
 578                                 tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
 579                                 tmp |= (RADEON_PIXCLK_ALWAYS_ONb |
 580                                         RADEON_PIXCLK_DAC_ALWAYS_ONb);
 581                                 WREG32_PLL(RADEON_VCLK_ECP_CNTL, tmp);
 582 
 583                                 tmp = RREG32_PLL(RADEON_PIXCLKS_CNTL);
 584                                 tmp |= (RADEON_PIX2CLK_ALWAYS_ONb |
 585                                         RADEON_PIX2CLK_DAC_ALWAYS_ONb |
 586                                         RADEON_DISP_TVOUT_PIXCLK_TV_ALWAYS_ONb |
 587                                         R300_DVOCLK_ALWAYS_ONb |
 588                                         RADEON_PIXCLK_BLEND_ALWAYS_ONb |
 589                                         RADEON_PIXCLK_GV_ALWAYS_ONb |
 590                                         R300_PIXCLK_DVO_ALWAYS_ONb |
 591                                         RADEON_PIXCLK_LVDS_ALWAYS_ONb |
 592                                         RADEON_PIXCLK_TMDS_ALWAYS_ONb |
 593                                         R300_PIXCLK_TRANS_ALWAYS_ONb |
 594                                         R300_PIXCLK_TVO_ALWAYS_ONb |
 595                                         R300_P2G2CLK_ALWAYS_ONb |
 596                                         R300_P2G2CLK_DAC_ALWAYS_ONb);
 597                                 WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp);
 598 
 599                                 tmp = RREG32_PLL(RADEON_MCLK_MISC);
 600                                 tmp |= (RADEON_MC_MCLK_DYN_ENABLE |
 601                                         RADEON_IO_MCLK_DYN_ENABLE);
 602                                 WREG32_PLL(RADEON_MCLK_MISC, tmp);
 603 
 604                                 tmp = RREG32_PLL(RADEON_MCLK_CNTL);
 605                                 tmp |= (RADEON_FORCEON_MCLKA |
 606                                         RADEON_FORCEON_MCLKB);
 607 
 608                                 tmp &= ~(RADEON_FORCEON_YCLKA |
 609                                          RADEON_FORCEON_YCLKB |
 610                                          RADEON_FORCEON_MC);
 611 
 612                                 /* Some releases of vbios have set DISABLE_MC_MCLKA
 613                                    and DISABLE_MC_MCLKB bits in the vbios table.  Setting these
 614                                    bits will cause H/W hang when reading video memory with dynamic clocking
 615                                    enabled. */
 616                                 if ((tmp & R300_DISABLE_MC_MCLKA) &&
 617                                     (tmp & R300_DISABLE_MC_MCLKB)) {
 618                                         /* If both bits are set, then check the active channels */
 619                                         tmp = RREG32_PLL(RADEON_MCLK_CNTL);
 620                                         if (rdev->mc.vram_width == 64) {
 621                                                 if (RREG32(RADEON_MEM_CNTL) &
 622                                                     R300_MEM_USE_CD_CH_ONLY)
 623                                                         tmp &=
 624                                                             ~R300_DISABLE_MC_MCLKB;
 625                                                 else
 626                                                         tmp &=
 627                                                             ~R300_DISABLE_MC_MCLKA;
 628                                         } else {
 629                                                 tmp &= ~(R300_DISABLE_MC_MCLKA |
 630                                                          R300_DISABLE_MC_MCLKB);
 631                                         }
 632                                 }
 633 
 634                                 WREG32_PLL(RADEON_MCLK_CNTL, tmp);
 635                         } else {
 636                                 tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 637                                 tmp &= ~(R300_SCLK_FORCE_VAP);
 638                                 tmp |= RADEON_SCLK_FORCE_CP;
 639                                 WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 640                                 mdelay(15);
 641 
 642                                 tmp = RREG32_PLL(R300_SCLK_CNTL2);
 643                                 tmp &= ~(R300_SCLK_FORCE_TCL |
 644                                          R300_SCLK_FORCE_GA |
 645                                          R300_SCLK_FORCE_CBA);
 646                                 WREG32_PLL(R300_SCLK_CNTL2, tmp);
 647                         }
 648                 } else {
 649                         tmp = RREG32_PLL(RADEON_CLK_PWRMGT_CNTL);
 650 
 651                         tmp &= ~(RADEON_ACTIVE_HILO_LAT_MASK |
 652                                  RADEON_DISP_DYN_STOP_LAT_MASK |
 653                                  RADEON_DYN_STOP_MODE_MASK);
 654 
 655                         tmp |= (RADEON_ENGIN_DYNCLK_MODE |
 656                                 (0x01 << RADEON_ACTIVE_HILO_LAT_SHIFT));
 657                         WREG32_PLL(RADEON_CLK_PWRMGT_CNTL, tmp);
 658                         mdelay(15);
 659 
 660                         tmp = RREG32_PLL(RADEON_CLK_PIN_CNTL);
 661                         tmp |= RADEON_SCLK_DYN_START_CNTL;
 662                         WREG32_PLL(RADEON_CLK_PIN_CNTL, tmp);
 663                         mdelay(15);
 664 
 665                         /* When DRI is enabled, setting DYN_STOP_LAT to zero can cause some R200
 666                            to lockup randomly, leave them as set by BIOS.
 667                          */
 668                         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 669                         /*tmp &= RADEON_SCLK_SRC_SEL_MASK; */
 670                         tmp &= ~RADEON_SCLK_FORCEON_MASK;
 671 
 672                         /*RAGE_6::A11 A12 A12N1 A13, RV250::A11 A12, R300 */
 673                         if (((rdev->family == CHIP_RV250) &&
 674                              ((RREG32(RADEON_CONFIG_CNTL) &
 675                                RADEON_CFG_ATI_REV_ID_MASK) <
 676                               RADEON_CFG_ATI_REV_A13))
 677                             || ((rdev->family == CHIP_RV100)
 678                                 &&
 679                                 ((RREG32(RADEON_CONFIG_CNTL) &
 680                                   RADEON_CFG_ATI_REV_ID_MASK) <=
 681                                  RADEON_CFG_ATI_REV_A13))) {
 682                                 tmp |= RADEON_SCLK_FORCE_CP;
 683                                 tmp |= RADEON_SCLK_FORCE_VIP;
 684                         }
 685 
 686                         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 687 
 688                         if ((rdev->family == CHIP_RV200) ||
 689                             (rdev->family == CHIP_RV250) ||
 690                             (rdev->family == CHIP_RV280)) {
 691                                 tmp = RREG32_PLL(RADEON_SCLK_MORE_CNTL);
 692                                 tmp &= ~RADEON_SCLK_MORE_FORCEON;
 693 
 694                                 /* RV200::A11 A12 RV250::A11 A12 */
 695                                 if (((rdev->family == CHIP_RV200) ||
 696                                      (rdev->family == CHIP_RV250)) &&
 697                                     ((RREG32(RADEON_CONFIG_CNTL) &
 698                                       RADEON_CFG_ATI_REV_ID_MASK) <
 699                                      RADEON_CFG_ATI_REV_A13)) {
 700                                         tmp |= RADEON_SCLK_MORE_FORCEON;
 701                                 }
 702                                 WREG32_PLL(RADEON_SCLK_MORE_CNTL, tmp);
 703                                 mdelay(15);
 704                         }
 705 
 706                         /* RV200::A11 A12, RV250::A11 A12 */
 707                         if (((rdev->family == CHIP_RV200) ||
 708                              (rdev->family == CHIP_RV250)) &&
 709                             ((RREG32(RADEON_CONFIG_CNTL) &
 710                               RADEON_CFG_ATI_REV_ID_MASK) <
 711                              RADEON_CFG_ATI_REV_A13)) {
 712                                 tmp = RREG32_PLL(RADEON_PLL_PWRMGT_CNTL);
 713                                 tmp |= RADEON_TCL_BYPASS_DISABLE;
 714                                 WREG32_PLL(RADEON_PLL_PWRMGT_CNTL, tmp);
 715                         }
 716                         mdelay(15);
 717 
 718                         /*enable dynamic mode for display clocks (PIXCLK and PIX2CLK) */
 719                         tmp = RREG32_PLL(RADEON_PIXCLKS_CNTL);
 720                         tmp |= (RADEON_PIX2CLK_ALWAYS_ONb |
 721                                 RADEON_PIX2CLK_DAC_ALWAYS_ONb |
 722                                 RADEON_PIXCLK_BLEND_ALWAYS_ONb |
 723                                 RADEON_PIXCLK_GV_ALWAYS_ONb |
 724                                 RADEON_PIXCLK_DIG_TMDS_ALWAYS_ONb |
 725                                 RADEON_PIXCLK_LVDS_ALWAYS_ONb |
 726                                 RADEON_PIXCLK_TMDS_ALWAYS_ONb);
 727 
 728                         WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp);
 729                         mdelay(15);
 730 
 731                         tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
 732                         tmp |= (RADEON_PIXCLK_ALWAYS_ONb |
 733                                 RADEON_PIXCLK_DAC_ALWAYS_ONb);
 734 
 735                         WREG32_PLL(RADEON_VCLK_ECP_CNTL, tmp);
 736                         mdelay(15);
 737                 }
 738         } else {
 739                 /* Turn everything OFF (ForceON to everything) */
 740                 if (rdev->flags & RADEON_SINGLE_CRTC) {
 741                         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 742                         tmp |= (RADEON_SCLK_FORCE_CP | RADEON_SCLK_FORCE_HDP |
 743                                 RADEON_SCLK_FORCE_DISP1 | RADEON_SCLK_FORCE_TOP
 744                                 | RADEON_SCLK_FORCE_E2 | RADEON_SCLK_FORCE_SE |
 745                                 RADEON_SCLK_FORCE_IDCT | RADEON_SCLK_FORCE_VIP |
 746                                 RADEON_SCLK_FORCE_RE | RADEON_SCLK_FORCE_PB |
 747                                 RADEON_SCLK_FORCE_TAM | RADEON_SCLK_FORCE_TDM |
 748                                 RADEON_SCLK_FORCE_RB);
 749                         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 750                 } else if ((rdev->family == CHIP_RS400) ||
 751                            (rdev->family == CHIP_RS480)) {
 752                         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 753                         tmp |= (RADEON_SCLK_FORCE_DISP2 | RADEON_SCLK_FORCE_CP |
 754                                 RADEON_SCLK_FORCE_HDP | RADEON_SCLK_FORCE_DISP1
 755                                 | RADEON_SCLK_FORCE_TOP | RADEON_SCLK_FORCE_E2 |
 756                                 R300_SCLK_FORCE_VAP | RADEON_SCLK_FORCE_IDCT |
 757                                 RADEON_SCLK_FORCE_VIP | R300_SCLK_FORCE_SR |
 758                                 R300_SCLK_FORCE_PX | R300_SCLK_FORCE_TX |
 759                                 R300_SCLK_FORCE_US | RADEON_SCLK_FORCE_TV_SCLK |
 760                                 R300_SCLK_FORCE_SU | RADEON_SCLK_FORCE_OV0);
 761                         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 762 
 763                         tmp = RREG32_PLL(RADEON_SCLK_MORE_CNTL);
 764                         tmp |= RADEON_SCLK_MORE_FORCEON;
 765                         WREG32_PLL(RADEON_SCLK_MORE_CNTL, tmp);
 766 
 767                         tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
 768                         tmp &= ~(RADEON_PIXCLK_ALWAYS_ONb |
 769                                  RADEON_PIXCLK_DAC_ALWAYS_ONb |
 770                                  R300_DISP_DAC_PIXCLK_DAC_BLANK_OFF);
 771                         WREG32_PLL(RADEON_VCLK_ECP_CNTL, tmp);
 772 
 773                         tmp = RREG32_PLL(RADEON_PIXCLKS_CNTL);
 774                         tmp &= ~(RADEON_PIX2CLK_ALWAYS_ONb |
 775                                  RADEON_PIX2CLK_DAC_ALWAYS_ONb |
 776                                  RADEON_DISP_TVOUT_PIXCLK_TV_ALWAYS_ONb |
 777                                  R300_DVOCLK_ALWAYS_ONb |
 778                                  RADEON_PIXCLK_BLEND_ALWAYS_ONb |
 779                                  RADEON_PIXCLK_GV_ALWAYS_ONb |
 780                                  R300_PIXCLK_DVO_ALWAYS_ONb |
 781                                  RADEON_PIXCLK_LVDS_ALWAYS_ONb |
 782                                  RADEON_PIXCLK_TMDS_ALWAYS_ONb |
 783                                  R300_PIXCLK_TRANS_ALWAYS_ONb |
 784                                  R300_PIXCLK_TVO_ALWAYS_ONb |
 785                                  R300_P2G2CLK_ALWAYS_ONb |
 786                                  R300_P2G2CLK_DAC_ALWAYS_ONb |
 787                                  R300_DISP_DAC_PIXCLK_DAC2_BLANK_OFF);
 788                         WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp);
 789                 } else if (rdev->family >= CHIP_RV350) {
 790                         /* for RV350/M10, no delays are required. */
 791                         tmp = RREG32_PLL(R300_SCLK_CNTL2);
 792                         tmp |= (R300_SCLK_FORCE_TCL |
 793                                 R300_SCLK_FORCE_GA | R300_SCLK_FORCE_CBA);
 794                         WREG32_PLL(R300_SCLK_CNTL2, tmp);
 795 
 796                         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 797                         tmp |= (RADEON_SCLK_FORCE_DISP2 | RADEON_SCLK_FORCE_CP |
 798                                 RADEON_SCLK_FORCE_HDP | RADEON_SCLK_FORCE_DISP1
 799                                 | RADEON_SCLK_FORCE_TOP | RADEON_SCLK_FORCE_E2 |
 800                                 R300_SCLK_FORCE_VAP | RADEON_SCLK_FORCE_IDCT |
 801                                 RADEON_SCLK_FORCE_VIP | R300_SCLK_FORCE_SR |
 802                                 R300_SCLK_FORCE_PX | R300_SCLK_FORCE_TX |
 803                                 R300_SCLK_FORCE_US | RADEON_SCLK_FORCE_TV_SCLK |
 804                                 R300_SCLK_FORCE_SU | RADEON_SCLK_FORCE_OV0);
 805                         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 806 
 807                         tmp = RREG32_PLL(RADEON_SCLK_MORE_CNTL);
 808                         tmp |= RADEON_SCLK_MORE_FORCEON;
 809                         WREG32_PLL(RADEON_SCLK_MORE_CNTL, tmp);
 810 
 811                         tmp = RREG32_PLL(RADEON_MCLK_CNTL);
 812                         tmp |= (RADEON_FORCEON_MCLKA |
 813                                 RADEON_FORCEON_MCLKB |
 814                                 RADEON_FORCEON_YCLKA |
 815                                 RADEON_FORCEON_YCLKB | RADEON_FORCEON_MC);
 816                         WREG32_PLL(RADEON_MCLK_CNTL, tmp);
 817 
 818                         tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
 819                         tmp &= ~(RADEON_PIXCLK_ALWAYS_ONb |
 820                                  RADEON_PIXCLK_DAC_ALWAYS_ONb |
 821                                  R300_DISP_DAC_PIXCLK_DAC_BLANK_OFF);
 822                         WREG32_PLL(RADEON_VCLK_ECP_CNTL, tmp);
 823 
 824                         tmp = RREG32_PLL(RADEON_PIXCLKS_CNTL);
 825                         tmp &= ~(RADEON_PIX2CLK_ALWAYS_ONb |
 826                                  RADEON_PIX2CLK_DAC_ALWAYS_ONb |
 827                                  RADEON_DISP_TVOUT_PIXCLK_TV_ALWAYS_ONb |
 828                                  R300_DVOCLK_ALWAYS_ONb |
 829                                  RADEON_PIXCLK_BLEND_ALWAYS_ONb |
 830                                  RADEON_PIXCLK_GV_ALWAYS_ONb |
 831                                  R300_PIXCLK_DVO_ALWAYS_ONb |
 832                                  RADEON_PIXCLK_LVDS_ALWAYS_ONb |
 833                                  RADEON_PIXCLK_TMDS_ALWAYS_ONb |
 834                                  R300_PIXCLK_TRANS_ALWAYS_ONb |
 835                                  R300_PIXCLK_TVO_ALWAYS_ONb |
 836                                  R300_P2G2CLK_ALWAYS_ONb |
 837                                  R300_P2G2CLK_DAC_ALWAYS_ONb |
 838                                  R300_DISP_DAC_PIXCLK_DAC2_BLANK_OFF);
 839                         WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp);
 840                 } else {
 841                         tmp = RREG32_PLL(RADEON_SCLK_CNTL);
 842                         tmp |= (RADEON_SCLK_FORCE_CP | RADEON_SCLK_FORCE_E2);
 843                         tmp |= RADEON_SCLK_FORCE_SE;
 844 
 845                         if (rdev->flags & RADEON_SINGLE_CRTC) {
 846                                 tmp |= (RADEON_SCLK_FORCE_RB |
 847                                         RADEON_SCLK_FORCE_TDM |
 848                                         RADEON_SCLK_FORCE_TAM |
 849                                         RADEON_SCLK_FORCE_PB |
 850                                         RADEON_SCLK_FORCE_RE |
 851                                         RADEON_SCLK_FORCE_VIP |
 852                                         RADEON_SCLK_FORCE_IDCT |
 853                                         RADEON_SCLK_FORCE_TOP |
 854                                         RADEON_SCLK_FORCE_DISP1 |
 855                                         RADEON_SCLK_FORCE_DISP2 |
 856                                         RADEON_SCLK_FORCE_HDP);
 857                         } else if ((rdev->family == CHIP_R300) ||
 858                                    (rdev->family == CHIP_R350)) {
 859                                 tmp |= (RADEON_SCLK_FORCE_HDP |
 860                                         RADEON_SCLK_FORCE_DISP1 |
 861                                         RADEON_SCLK_FORCE_DISP2 |
 862                                         RADEON_SCLK_FORCE_TOP |
 863                                         RADEON_SCLK_FORCE_IDCT |
 864                                         RADEON_SCLK_FORCE_VIP);
 865                         }
 866                         WREG32_PLL(RADEON_SCLK_CNTL, tmp);
 867 
 868                         mdelay(16);
 869 
 870                         if ((rdev->family == CHIP_R300) ||
 871                             (rdev->family == CHIP_R350)) {
 872                                 tmp = RREG32_PLL(R300_SCLK_CNTL2);
 873                                 tmp |= (R300_SCLK_FORCE_TCL |
 874                                         R300_SCLK_FORCE_GA |
 875                                         R300_SCLK_FORCE_CBA);
 876                                 WREG32_PLL(R300_SCLK_CNTL2, tmp);
 877                                 mdelay(16);
 878                         }
 879 
 880                         if (rdev->flags & RADEON_IS_IGP) {
 881                                 tmp = RREG32_PLL(RADEON_MCLK_CNTL);
 882                                 tmp &= ~(RADEON_FORCEON_MCLKA |
 883                                          RADEON_FORCEON_YCLKA);
 884                                 WREG32_PLL(RADEON_MCLK_CNTL, tmp);
 885                                 mdelay(16);
 886                         }
 887 
 888                         if ((rdev->family == CHIP_RV200) ||
 889                             (rdev->family == CHIP_RV250) ||
 890                             (rdev->family == CHIP_RV280)) {
 891                                 tmp = RREG32_PLL(RADEON_SCLK_MORE_CNTL);
 892                                 tmp |= RADEON_SCLK_MORE_FORCEON;
 893                                 WREG32_PLL(RADEON_SCLK_MORE_CNTL, tmp);
 894                                 mdelay(16);
 895                         }
 896 
 897                         tmp = RREG32_PLL(RADEON_PIXCLKS_CNTL);
 898                         tmp &= ~(RADEON_PIX2CLK_ALWAYS_ONb |
 899                                  RADEON_PIX2CLK_DAC_ALWAYS_ONb |
 900                                  RADEON_PIXCLK_BLEND_ALWAYS_ONb |
 901                                  RADEON_PIXCLK_GV_ALWAYS_ONb |
 902                                  RADEON_PIXCLK_DIG_TMDS_ALWAYS_ONb |
 903                                  RADEON_PIXCLK_LVDS_ALWAYS_ONb |
 904                                  RADEON_PIXCLK_TMDS_ALWAYS_ONb);
 905 
 906                         WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp);
 907                         mdelay(16);
 908 
 909                         tmp = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
 910                         tmp &= ~(RADEON_PIXCLK_ALWAYS_ONb |
 911                                  RADEON_PIXCLK_DAC_ALWAYS_ONb);
 912                         WREG32_PLL(RADEON_VCLK_ECP_CNTL, tmp);
 913                 }
 914         }
 915 }
 916 

/* [<][>][^][v][top][bottom][index][help] */