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#include <linux/slab.h> 29#include <linux/seq_file.h> 30#include <linux/firmware.h> 31#include <linux/module.h> 32#include <drm/drmP.h> 33#include <drm/radeon_drm.h> 34#include "radeon.h" 35#include "radeon_asic.h" 36#include "radeon_audio.h" 37#include "radeon_mode.h" 38#include "r600d.h" 39#include "atom.h" 40#include "avivod.h" 41#include "radeon_ucode.h" 42 43/* Firmware Names */ 44MODULE_FIRMWARE("radeon/R600_pfp.bin"); 45MODULE_FIRMWARE("radeon/R600_me.bin"); 46MODULE_FIRMWARE("radeon/RV610_pfp.bin"); 47MODULE_FIRMWARE("radeon/RV610_me.bin"); 48MODULE_FIRMWARE("radeon/RV630_pfp.bin"); 49MODULE_FIRMWARE("radeon/RV630_me.bin"); 50MODULE_FIRMWARE("radeon/RV620_pfp.bin"); 51MODULE_FIRMWARE("radeon/RV620_me.bin"); 52MODULE_FIRMWARE("radeon/RV635_pfp.bin"); 53MODULE_FIRMWARE("radeon/RV635_me.bin"); 54MODULE_FIRMWARE("radeon/RV670_pfp.bin"); 55MODULE_FIRMWARE("radeon/RV670_me.bin"); 56MODULE_FIRMWARE("radeon/RS780_pfp.bin"); 57MODULE_FIRMWARE("radeon/RS780_me.bin"); 58MODULE_FIRMWARE("radeon/RV770_pfp.bin"); 59MODULE_FIRMWARE("radeon/RV770_me.bin"); 60MODULE_FIRMWARE("radeon/RV770_smc.bin"); 61MODULE_FIRMWARE("radeon/RV730_pfp.bin"); 62MODULE_FIRMWARE("radeon/RV730_me.bin"); 63MODULE_FIRMWARE("radeon/RV730_smc.bin"); 64MODULE_FIRMWARE("radeon/RV740_smc.bin"); 65MODULE_FIRMWARE("radeon/RV710_pfp.bin"); 66MODULE_FIRMWARE("radeon/RV710_me.bin"); 67MODULE_FIRMWARE("radeon/RV710_smc.bin"); 68MODULE_FIRMWARE("radeon/R600_rlc.bin"); 69MODULE_FIRMWARE("radeon/R700_rlc.bin"); 70MODULE_FIRMWARE("radeon/CEDAR_pfp.bin"); 71MODULE_FIRMWARE("radeon/CEDAR_me.bin"); 72MODULE_FIRMWARE("radeon/CEDAR_rlc.bin"); 73MODULE_FIRMWARE("radeon/CEDAR_smc.bin"); 74MODULE_FIRMWARE("radeon/REDWOOD_pfp.bin"); 75MODULE_FIRMWARE("radeon/REDWOOD_me.bin"); 76MODULE_FIRMWARE("radeon/REDWOOD_rlc.bin"); 77MODULE_FIRMWARE("radeon/REDWOOD_smc.bin"); 78MODULE_FIRMWARE("radeon/JUNIPER_pfp.bin"); 79MODULE_FIRMWARE("radeon/JUNIPER_me.bin"); 80MODULE_FIRMWARE("radeon/JUNIPER_rlc.bin"); 81MODULE_FIRMWARE("radeon/JUNIPER_smc.bin"); 82MODULE_FIRMWARE("radeon/CYPRESS_pfp.bin"); 83MODULE_FIRMWARE("radeon/CYPRESS_me.bin"); 84MODULE_FIRMWARE("radeon/CYPRESS_rlc.bin"); 85MODULE_FIRMWARE("radeon/CYPRESS_smc.bin"); 86MODULE_FIRMWARE("radeon/PALM_pfp.bin"); 87MODULE_FIRMWARE("radeon/PALM_me.bin"); 88MODULE_FIRMWARE("radeon/SUMO_rlc.bin"); 89MODULE_FIRMWARE("radeon/SUMO_pfp.bin"); 90MODULE_FIRMWARE("radeon/SUMO_me.bin"); 91MODULE_FIRMWARE("radeon/SUMO2_pfp.bin"); 92MODULE_FIRMWARE("radeon/SUMO2_me.bin"); 93 94static const u32 crtc_offsets[2] = 95{ 96 0, 97 AVIVO_D2CRTC_H_TOTAL - AVIVO_D1CRTC_H_TOTAL 98}; 99 100int r600_debugfs_mc_info_init(struct radeon_device *rdev); 101 102/* r600,rv610,rv630,rv620,rv635,rv670 */ 103int r600_mc_wait_for_idle(struct radeon_device *rdev); 104static void r600_gpu_init(struct radeon_device *rdev); 105void r600_fini(struct radeon_device *rdev); 106void r600_irq_disable(struct radeon_device *rdev); 107static void r600_pcie_gen2_enable(struct radeon_device *rdev); 108extern int evergreen_rlc_resume(struct radeon_device *rdev); 109extern void rv770_set_clk_bypass_mode(struct radeon_device *rdev); 110 111/** 112 * r600_get_allowed_info_register - fetch the register for the info ioctl 113 * 114 * @rdev: radeon_device pointer 115 * @reg: register offset in bytes 116 * @val: register value 117 * 118 * Returns 0 for success or -EINVAL for an invalid register 119 * 120 */ 121int r600_get_allowed_info_register(struct radeon_device *rdev, 122 u32 reg, u32 *val) 123{ 124 switch (reg) { 125 case GRBM_STATUS: 126 case GRBM_STATUS2: 127 case R_000E50_SRBM_STATUS: 128 case DMA_STATUS_REG: 129 case UVD_STATUS: 130 *val = RREG32(reg); 131 return 0; 132 default: 133 return -EINVAL; 134 } 135} 136 137/** 138 * r600_get_xclk - get the xclk 139 * 140 * @rdev: radeon_device pointer 141 * 142 * Returns the reference clock used by the gfx engine 143 * (r6xx, IGPs, APUs). 144 */ 145u32 r600_get_xclk(struct radeon_device *rdev) 146{ 147 return rdev->clock.spll.reference_freq; 148} 149 150int r600_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk) 151{ 152 unsigned fb_div = 0, ref_div, vclk_div = 0, dclk_div = 0; 153 int r; 154 155 /* bypass vclk and dclk with bclk */ 156 WREG32_P(CG_UPLL_FUNC_CNTL_2, 157 VCLK_SRC_SEL(1) | DCLK_SRC_SEL(1), 158 ~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK)); 159 160 /* assert BYPASS_EN, deassert UPLL_RESET, UPLL_SLEEP and UPLL_CTLREQ */ 161 WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_BYPASS_EN_MASK, ~( 162 UPLL_RESET_MASK | UPLL_SLEEP_MASK | UPLL_CTLREQ_MASK)); 163 164 if (rdev->family >= CHIP_RS780) 165 WREG32_P(GFX_MACRO_BYPASS_CNTL, UPLL_BYPASS_CNTL, 166 ~UPLL_BYPASS_CNTL); 167 168 if (!vclk || !dclk) { 169 /* keep the Bypass mode, put PLL to sleep */ 170 WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK); 171 return 0; 172 } 173 174 if (rdev->clock.spll.reference_freq == 10000) 175 ref_div = 34; 176 else 177 ref_div = 4; 178 179 r = radeon_uvd_calc_upll_dividers(rdev, vclk, dclk, 50000, 160000, 180 ref_div + 1, 0xFFF, 2, 30, ~0, 181 &fb_div, &vclk_div, &dclk_div); 182 if (r) 183 return r; 184 185 if (rdev->family >= CHIP_RV670 && rdev->family < CHIP_RS780) 186 fb_div >>= 1; 187 else 188 fb_div |= 1; 189 190 r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL); 191 if (r) 192 return r; 193 194 /* assert PLL_RESET */ 195 WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_RESET_MASK, ~UPLL_RESET_MASK); 196 197 /* For RS780 we have to choose ref clk */ 198 if (rdev->family >= CHIP_RS780) 199 WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_REFCLK_SRC_SEL_MASK, 200 ~UPLL_REFCLK_SRC_SEL_MASK); 201 202 /* set the required fb, ref and post divder values */ 203 WREG32_P(CG_UPLL_FUNC_CNTL, 204 UPLL_FB_DIV(fb_div) | 205 UPLL_REF_DIV(ref_div), 206 ~(UPLL_FB_DIV_MASK | UPLL_REF_DIV_MASK)); 207 WREG32_P(CG_UPLL_FUNC_CNTL_2, 208 UPLL_SW_HILEN(vclk_div >> 1) | 209 UPLL_SW_LOLEN((vclk_div >> 1) + (vclk_div & 1)) | 210 UPLL_SW_HILEN2(dclk_div >> 1) | 211 UPLL_SW_LOLEN2((dclk_div >> 1) + (dclk_div & 1)) | 212 UPLL_DIVEN_MASK | UPLL_DIVEN2_MASK, 213 ~UPLL_SW_MASK); 214 215 /* give the PLL some time to settle */ 216 mdelay(15); 217 218 /* deassert PLL_RESET */ 219 WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_RESET_MASK); 220 221 mdelay(15); 222 223 /* deassert BYPASS EN */ 224 WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_BYPASS_EN_MASK); 225 226 if (rdev->family >= CHIP_RS780) 227 WREG32_P(GFX_MACRO_BYPASS_CNTL, 0, ~UPLL_BYPASS_CNTL); 228 229 r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL); 230 if (r) 231 return r; 232 233 /* switch VCLK and DCLK selection */ 234 WREG32_P(CG_UPLL_FUNC_CNTL_2, 235 VCLK_SRC_SEL(2) | DCLK_SRC_SEL(2), 236 ~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK)); 237 238 mdelay(100); 239 240 return 0; 241} 242 243void dce3_program_fmt(struct drm_encoder *encoder) 244{ 245 struct drm_device *dev = encoder->dev; 246 struct radeon_device *rdev = dev->dev_private; 247 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 248 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); 249 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); 250 int bpc = 0; 251 u32 tmp = 0; 252 enum radeon_connector_dither dither = RADEON_FMT_DITHER_DISABLE; 253 254 if (connector) { 255 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 256 bpc = radeon_get_monitor_bpc(connector); 257 dither = radeon_connector->dither; 258 } 259 260 /* LVDS FMT is set up by atom */ 261 if (radeon_encoder->devices & ATOM_DEVICE_LCD_SUPPORT) 262 return; 263 264 /* not needed for analog */ 265 if ((radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1) || 266 (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2)) 267 return; 268 269 if (bpc == 0) 270 return; 271 272 switch (bpc) { 273 case 6: 274 if (dither == RADEON_FMT_DITHER_ENABLE) 275 /* XXX sort out optimal dither settings */ 276 tmp |= FMT_SPATIAL_DITHER_EN; 277 else 278 tmp |= FMT_TRUNCATE_EN; 279 break; 280 case 8: 281 if (dither == RADEON_FMT_DITHER_ENABLE) 282 /* XXX sort out optimal dither settings */ 283 tmp |= (FMT_SPATIAL_DITHER_EN | FMT_SPATIAL_DITHER_DEPTH); 284 else 285 tmp |= (FMT_TRUNCATE_EN | FMT_TRUNCATE_DEPTH); 286 break; 287 case 10: 288 default: 289 /* not needed */ 290 break; 291 } 292 293 WREG32(FMT_BIT_DEPTH_CONTROL + radeon_crtc->crtc_offset, tmp); 294} 295 296/* get temperature in millidegrees */ 297int rv6xx_get_temp(struct radeon_device *rdev) 298{ 299 u32 temp = (RREG32(CG_THERMAL_STATUS) & ASIC_T_MASK) >> 300 ASIC_T_SHIFT; 301 int actual_temp = temp & 0xff; 302 303 if (temp & 0x100) 304 actual_temp -= 256; 305 306 return actual_temp * 1000; 307} 308 309void r600_pm_get_dynpm_state(struct radeon_device *rdev) 310{ 311 int i; 312 313 rdev->pm.dynpm_can_upclock = true; 314 rdev->pm.dynpm_can_downclock = true; 315 316 /* power state array is low to high, default is first */ 317 if ((rdev->flags & RADEON_IS_IGP) || (rdev->family == CHIP_R600)) { 318 int min_power_state_index = 0; 319 320 if (rdev->pm.num_power_states > 2) 321 min_power_state_index = 1; 322 323 switch (rdev->pm.dynpm_planned_action) { 324 case DYNPM_ACTION_MINIMUM: 325 rdev->pm.requested_power_state_index = min_power_state_index; 326 rdev->pm.requested_clock_mode_index = 0; 327 rdev->pm.dynpm_can_downclock = false; 328 break; 329 case DYNPM_ACTION_DOWNCLOCK: 330 if (rdev->pm.current_power_state_index == min_power_state_index) { 331 rdev->pm.requested_power_state_index = rdev->pm.current_power_state_index; 332 rdev->pm.dynpm_can_downclock = false; 333 } else { 334 if (rdev->pm.active_crtc_count > 1) { 335 for (i = 0; i < rdev->pm.num_power_states; i++) { 336 if (rdev->pm.power_state[i].flags & RADEON_PM_STATE_SINGLE_DISPLAY_ONLY) 337 continue; 338 else if (i >= rdev->pm.current_power_state_index) { 339 rdev->pm.requested_power_state_index = 340 rdev->pm.current_power_state_index; 341 break; 342 } else { 343 rdev->pm.requested_power_state_index = i; 344 break; 345 } 346 } 347 } else { 348 if (rdev->pm.current_power_state_index == 0) 349 rdev->pm.requested_power_state_index = 350 rdev->pm.num_power_states - 1; 351 else 352 rdev->pm.requested_power_state_index = 353 rdev->pm.current_power_state_index - 1; 354 } 355 } 356 rdev->pm.requested_clock_mode_index = 0; 357 /* don't use the power state if crtcs are active and no display flag is set */ 358 if ((rdev->pm.active_crtc_count > 0) && 359 (rdev->pm.power_state[rdev->pm.requested_power_state_index]. 360 clock_info[rdev->pm.requested_clock_mode_index].flags & 361 RADEON_PM_MODE_NO_DISPLAY)) { 362 rdev->pm.requested_power_state_index++; 363 } 364 break; 365 case DYNPM_ACTION_UPCLOCK: 366 if (rdev->pm.current_power_state_index == (rdev->pm.num_power_states - 1)) { 367 rdev->pm.requested_power_state_index = rdev->pm.current_power_state_index; 368 rdev->pm.dynpm_can_upclock = false; 369 } else { 370 if (rdev->pm.active_crtc_count > 1) { 371 for (i = (rdev->pm.num_power_states - 1); i >= 0; i--) { 372 if (rdev->pm.power_state[i].flags & RADEON_PM_STATE_SINGLE_DISPLAY_ONLY) 373 continue; 374 else if (i <= rdev->pm.current_power_state_index) { 375 rdev->pm.requested_power_state_index = 376 rdev->pm.current_power_state_index; 377 break; 378 } else { 379 rdev->pm.requested_power_state_index = i; 380 break; 381 } 382 } 383 } else 384 rdev->pm.requested_power_state_index = 385 rdev->pm.current_power_state_index + 1; 386 } 387 rdev->pm.requested_clock_mode_index = 0; 388 break; 389 case DYNPM_ACTION_DEFAULT: 390 rdev->pm.requested_power_state_index = rdev->pm.default_power_state_index; 391 rdev->pm.requested_clock_mode_index = 0; 392 rdev->pm.dynpm_can_upclock = false; 393 break; 394 case DYNPM_ACTION_NONE: 395 default: 396 DRM_ERROR("Requested mode for not defined action\n"); 397 return; 398 } 399 } else { 400 /* XXX select a power state based on AC/DC, single/dualhead, etc. */ 401 /* for now just select the first power state and switch between clock modes */ 402 /* power state array is low to high, default is first (0) */ 403 if (rdev->pm.active_crtc_count > 1) { 404 rdev->pm.requested_power_state_index = -1; 405 /* start at 1 as we don't want the default mode */ 406 for (i = 1; i < rdev->pm.num_power_states; i++) { 407 if (rdev->pm.power_state[i].flags & RADEON_PM_STATE_SINGLE_DISPLAY_ONLY) 408 continue; 409 else if ((rdev->pm.power_state[i].type == POWER_STATE_TYPE_PERFORMANCE) || 410 (rdev->pm.power_state[i].type == POWER_STATE_TYPE_BATTERY)) { 411 rdev->pm.requested_power_state_index = i; 412 break; 413 } 414 } 415 /* if nothing selected, grab the default state. */ 416 if (rdev->pm.requested_power_state_index == -1) 417 rdev->pm.requested_power_state_index = 0; 418 } else 419 rdev->pm.requested_power_state_index = 1; 420 421 switch (rdev->pm.dynpm_planned_action) { 422 case DYNPM_ACTION_MINIMUM: 423 rdev->pm.requested_clock_mode_index = 0; 424 rdev->pm.dynpm_can_downclock = false; 425 break; 426 case DYNPM_ACTION_DOWNCLOCK: 427 if (rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index) { 428 if (rdev->pm.current_clock_mode_index == 0) { 429 rdev->pm.requested_clock_mode_index = 0; 430 rdev->pm.dynpm_can_downclock = false; 431 } else 432 rdev->pm.requested_clock_mode_index = 433 rdev->pm.current_clock_mode_index - 1; 434 } else { 435 rdev->pm.requested_clock_mode_index = 0; 436 rdev->pm.dynpm_can_downclock = false; 437 } 438 /* don't use the power state if crtcs are active and no display flag is set */ 439 if ((rdev->pm.active_crtc_count > 0) && 440 (rdev->pm.power_state[rdev->pm.requested_power_state_index]. 441 clock_info[rdev->pm.requested_clock_mode_index].flags & 442 RADEON_PM_MODE_NO_DISPLAY)) { 443 rdev->pm.requested_clock_mode_index++; 444 } 445 break; 446 case DYNPM_ACTION_UPCLOCK: 447 if (rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index) { 448 if (rdev->pm.current_clock_mode_index == 449 (rdev->pm.power_state[rdev->pm.requested_power_state_index].num_clock_modes - 1)) { 450 rdev->pm.requested_clock_mode_index = rdev->pm.current_clock_mode_index; 451 rdev->pm.dynpm_can_upclock = false; 452 } else 453 rdev->pm.requested_clock_mode_index = 454 rdev->pm.current_clock_mode_index + 1; 455 } else { 456 rdev->pm.requested_clock_mode_index = 457 rdev->pm.power_state[rdev->pm.requested_power_state_index].num_clock_modes - 1; 458 rdev->pm.dynpm_can_upclock = false; 459 } 460 break; 461 case DYNPM_ACTION_DEFAULT: 462 rdev->pm.requested_power_state_index = rdev->pm.default_power_state_index; 463 rdev->pm.requested_clock_mode_index = 0; 464 rdev->pm.dynpm_can_upclock = false; 465 break; 466 case DYNPM_ACTION_NONE: 467 default: 468 DRM_ERROR("Requested mode for not defined action\n"); 469 return; 470 } 471 } 472 473 DRM_DEBUG_DRIVER("Requested: e: %d m: %d p: %d\n", 474 rdev->pm.power_state[rdev->pm.requested_power_state_index]. 475 clock_info[rdev->pm.requested_clock_mode_index].sclk, 476 rdev->pm.power_state[rdev->pm.requested_power_state_index]. 477 clock_info[rdev->pm.requested_clock_mode_index].mclk, 478 rdev->pm.power_state[rdev->pm.requested_power_state_index]. 479 pcie_lanes); 480} 481 482void rs780_pm_init_profile(struct radeon_device *rdev) 483{ 484 if (rdev->pm.num_power_states == 2) { 485 /* default */ 486 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 487 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 488 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0; 489 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 0; 490 /* low sh */ 491 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = 0; 492 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = 0; 493 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0; 494 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0; 495 /* mid sh */ 496 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = 0; 497 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = 0; 498 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0; 499 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 0; 500 /* high sh */ 501 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = 0; 502 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = 1; 503 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0; 504 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 0; 505 /* low mh */ 506 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = 0; 507 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = 0; 508 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0; 509 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0; 510 /* mid mh */ 511 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = 0; 512 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = 0; 513 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0; 514 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 0; 515 /* high mh */ 516 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = 0; 517 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = 1; 518 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0; 519 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 0; 520 } else if (rdev->pm.num_power_states == 3) { 521 /* default */ 522 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 523 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 524 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0; 525 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 0; 526 /* low sh */ 527 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = 1; 528 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = 1; 529 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0; 530 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0; 531 /* mid sh */ 532 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = 1; 533 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = 1; 534 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0; 535 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 0; 536 /* high sh */ 537 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = 1; 538 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = 2; 539 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0; 540 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 0; 541 /* low mh */ 542 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = 1; 543 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = 1; 544 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0; 545 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0; 546 /* mid mh */ 547 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = 1; 548 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = 1; 549 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0; 550 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 0; 551 /* high mh */ 552 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = 1; 553 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = 2; 554 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0; 555 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 0; 556 } else { 557 /* default */ 558 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 559 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 560 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0; 561 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 0; 562 /* low sh */ 563 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = 2; 564 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = 2; 565 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0; 566 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0; 567 /* mid sh */ 568 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = 2; 569 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = 2; 570 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0; 571 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 0; 572 /* high sh */ 573 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = 2; 574 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = 3; 575 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0; 576 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 0; 577 /* low mh */ 578 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = 2; 579 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = 0; 580 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0; 581 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0; 582 /* mid mh */ 583 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = 2; 584 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = 0; 585 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0; 586 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 0; 587 /* high mh */ 588 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = 2; 589 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = 3; 590 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0; 591 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 0; 592 } 593} 594 595void r600_pm_init_profile(struct radeon_device *rdev) 596{ 597 int idx; 598 599 if (rdev->family == CHIP_R600) { 600 /* XXX */ 601 /* default */ 602 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 603 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 604 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0; 605 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 0; 606 /* low sh */ 607 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 608 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 609 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0; 610 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0; 611 /* mid sh */ 612 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 613 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 614 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0; 615 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 0; 616 /* high sh */ 617 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 618 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 619 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0; 620 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 0; 621 /* low mh */ 622 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 623 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 624 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0; 625 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0; 626 /* mid mh */ 627 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 628 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 629 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0; 630 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 0; 631 /* high mh */ 632 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 633 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 634 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0; 635 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 0; 636 } else { 637 if (rdev->pm.num_power_states < 4) { 638 /* default */ 639 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 640 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 641 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0; 642 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 2; 643 /* low sh */ 644 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = 1; 645 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = 1; 646 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0; 647 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0; 648 /* mid sh */ 649 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = 1; 650 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = 1; 651 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0; 652 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 1; 653 /* high sh */ 654 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = 1; 655 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = 1; 656 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0; 657 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 2; 658 /* low mh */ 659 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = 2; 660 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = 2; 661 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0; 662 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0; 663 /* low mh */ 664 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = 2; 665 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = 2; 666 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0; 667 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 1; 668 /* high mh */ 669 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = 2; 670 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = 2; 671 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0; 672 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 2; 673 } else { 674 /* default */ 675 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_ps_idx = rdev->pm.default_power_state_index; 676 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_ps_idx = rdev->pm.default_power_state_index; 677 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0; 678 rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 2; 679 /* low sh */ 680 if (rdev->flags & RADEON_IS_MOBILITY) 681 idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 0); 682 else 683 idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0); 684 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = idx; 685 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = idx; 686 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0; 687 rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0; 688 /* mid sh */ 689 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = idx; 690 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = idx; 691 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0; 692 rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 1; 693 /* high sh */ 694 idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0); 695 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = idx; 696 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = idx; 697 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0; 698 rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 2; 699 /* low mh */ 700 if (rdev->flags & RADEON_IS_MOBILITY) 701 idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 1); 702 else 703 idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1); 704 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = idx; 705 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = idx; 706 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0; 707 rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0; 708 /* mid mh */ 709 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = idx; 710 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = idx; 711 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0; 712 rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 1; 713 /* high mh */ 714 idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1); 715 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = idx; 716 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = idx; 717 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0; 718 rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 2; 719 } 720 } 721} 722 723void r600_pm_misc(struct radeon_device *rdev) 724{ 725 int req_ps_idx = rdev->pm.requested_power_state_index; 726 int req_cm_idx = rdev->pm.requested_clock_mode_index; 727 struct radeon_power_state *ps = &rdev->pm.power_state[req_ps_idx]; 728 struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage; 729 730 if ((voltage->type == VOLTAGE_SW) && voltage->voltage) { 731 /* 0xff01 is a flag rather then an actual voltage */ 732 if (voltage->voltage == 0xff01) 733 return; 734 if (voltage->voltage != rdev->pm.current_vddc) { 735 radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC); 736 rdev->pm.current_vddc = voltage->voltage; 737 DRM_DEBUG_DRIVER("Setting: v: %d\n", voltage->voltage); 738 } 739 } 740} 741 742bool r600_gui_idle(struct radeon_device *rdev) 743{ 744 if (RREG32(GRBM_STATUS) & GUI_ACTIVE) 745 return false; 746 else 747 return true; 748} 749 750/* hpd for digital panel detect/disconnect */ 751bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) 752{ 753 bool connected = false; 754 755 if (ASIC_IS_DCE3(rdev)) { 756 switch (hpd) { 757 case RADEON_HPD_1: 758 if (RREG32(DC_HPD1_INT_STATUS) & DC_HPDx_SENSE) 759 connected = true; 760 break; 761 case RADEON_HPD_2: 762 if (RREG32(DC_HPD2_INT_STATUS) & DC_HPDx_SENSE) 763 connected = true; 764 break; 765 case RADEON_HPD_3: 766 if (RREG32(DC_HPD3_INT_STATUS) & DC_HPDx_SENSE) 767 connected = true; 768 break; 769 case RADEON_HPD_4: 770 if (RREG32(DC_HPD4_INT_STATUS) & DC_HPDx_SENSE) 771 connected = true; 772 break; 773 /* DCE 3.2 */ 774 case RADEON_HPD_5: 775 if (RREG32(DC_HPD5_INT_STATUS) & DC_HPDx_SENSE) 776 connected = true; 777 break; 778 case RADEON_HPD_6: 779 if (RREG32(DC_HPD6_INT_STATUS) & DC_HPDx_SENSE) 780 connected = true; 781 break; 782 default: 783 break; 784 } 785 } else { 786 switch (hpd) { 787 case RADEON_HPD_1: 788 if (RREG32(DC_HOT_PLUG_DETECT1_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) 789 connected = true; 790 break; 791 case RADEON_HPD_2: 792 if (RREG32(DC_HOT_PLUG_DETECT2_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) 793 connected = true; 794 break; 795 case RADEON_HPD_3: 796 if (RREG32(DC_HOT_PLUG_DETECT3_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) 797 connected = true; 798 break; 799 default: 800 break; 801 } 802 } 803 return connected; 804} 805 806void r600_hpd_set_polarity(struct radeon_device *rdev, 807 enum radeon_hpd_id hpd) 808{ 809 u32 tmp; 810 bool connected = r600_hpd_sense(rdev, hpd); 811 812 if (ASIC_IS_DCE3(rdev)) { 813 switch (hpd) { 814 case RADEON_HPD_1: 815 tmp = RREG32(DC_HPD1_INT_CONTROL); 816 if (connected) 817 tmp &= ~DC_HPDx_INT_POLARITY; 818 else 819 tmp |= DC_HPDx_INT_POLARITY; 820 WREG32(DC_HPD1_INT_CONTROL, tmp); 821 break; 822 case RADEON_HPD_2: 823 tmp = RREG32(DC_HPD2_INT_CONTROL); 824 if (connected) 825 tmp &= ~DC_HPDx_INT_POLARITY; 826 else 827 tmp |= DC_HPDx_INT_POLARITY; 828 WREG32(DC_HPD2_INT_CONTROL, tmp); 829 break; 830 case RADEON_HPD_3: 831 tmp = RREG32(DC_HPD3_INT_CONTROL); 832 if (connected) 833 tmp &= ~DC_HPDx_INT_POLARITY; 834 else 835 tmp |= DC_HPDx_INT_POLARITY; 836 WREG32(DC_HPD3_INT_CONTROL, tmp); 837 break; 838 case RADEON_HPD_4: 839 tmp = RREG32(DC_HPD4_INT_CONTROL); 840 if (connected) 841 tmp &= ~DC_HPDx_INT_POLARITY; 842 else 843 tmp |= DC_HPDx_INT_POLARITY; 844 WREG32(DC_HPD4_INT_CONTROL, tmp); 845 break; 846 case RADEON_HPD_5: 847 tmp = RREG32(DC_HPD5_INT_CONTROL); 848 if (connected) 849 tmp &= ~DC_HPDx_INT_POLARITY; 850 else 851 tmp |= DC_HPDx_INT_POLARITY; 852 WREG32(DC_HPD5_INT_CONTROL, tmp); 853 break; 854 /* DCE 3.2 */ 855 case RADEON_HPD_6: 856 tmp = RREG32(DC_HPD6_INT_CONTROL); 857 if (connected) 858 tmp &= ~DC_HPDx_INT_POLARITY; 859 else 860 tmp |= DC_HPDx_INT_POLARITY; 861 WREG32(DC_HPD6_INT_CONTROL, tmp); 862 break; 863 default: 864 break; 865 } 866 } else { 867 switch (hpd) { 868 case RADEON_HPD_1: 869 tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL); 870 if (connected) 871 tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; 872 else 873 tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; 874 WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); 875 break; 876 case RADEON_HPD_2: 877 tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL); 878 if (connected) 879 tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; 880 else 881 tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; 882 WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); 883 break; 884 case RADEON_HPD_3: 885 tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL); 886 if (connected) 887 tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; 888 else 889 tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; 890 WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); 891 break; 892 default: 893 break; 894 } 895 } 896} 897 898void r600_hpd_init(struct radeon_device *rdev) 899{ 900 struct drm_device *dev = rdev->ddev; 901 struct drm_connector *connector; 902 unsigned enable = 0; 903 904 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 905 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 906 907 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP || 908 connector->connector_type == DRM_MODE_CONNECTOR_LVDS) { 909 /* don't try to enable hpd on eDP or LVDS avoid breaking the 910 * aux dp channel on imac and help (but not completely fix) 911 * https://bugzilla.redhat.com/show_bug.cgi?id=726143 912 */ 913 continue; 914 } 915 if (ASIC_IS_DCE3(rdev)) { 916 u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) | DC_HPDx_RX_INT_TIMER(0xfa); 917 if (ASIC_IS_DCE32(rdev)) 918 tmp |= DC_HPDx_EN; 919 920 switch (radeon_connector->hpd.hpd) { 921 case RADEON_HPD_1: 922 WREG32(DC_HPD1_CONTROL, tmp); 923 break; 924 case RADEON_HPD_2: 925 WREG32(DC_HPD2_CONTROL, tmp); 926 break; 927 case RADEON_HPD_3: 928 WREG32(DC_HPD3_CONTROL, tmp); 929 break; 930 case RADEON_HPD_4: 931 WREG32(DC_HPD4_CONTROL, tmp); 932 break; 933 /* DCE 3.2 */ 934 case RADEON_HPD_5: 935 WREG32(DC_HPD5_CONTROL, tmp); 936 break; 937 case RADEON_HPD_6: 938 WREG32(DC_HPD6_CONTROL, tmp); 939 break; 940 default: 941 break; 942 } 943 } else { 944 switch (radeon_connector->hpd.hpd) { 945 case RADEON_HPD_1: 946 WREG32(DC_HOT_PLUG_DETECT1_CONTROL, DC_HOT_PLUG_DETECTx_EN); 947 break; 948 case RADEON_HPD_2: 949 WREG32(DC_HOT_PLUG_DETECT2_CONTROL, DC_HOT_PLUG_DETECTx_EN); 950 break; 951 case RADEON_HPD_3: 952 WREG32(DC_HOT_PLUG_DETECT3_CONTROL, DC_HOT_PLUG_DETECTx_EN); 953 break; 954 default: 955 break; 956 } 957 } 958 enable |= 1 << radeon_connector->hpd.hpd; 959 radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); 960 } 961 radeon_irq_kms_enable_hpd(rdev, enable); 962} 963 964void r600_hpd_fini(struct radeon_device *rdev) 965{ 966 struct drm_device *dev = rdev->ddev; 967 struct drm_connector *connector; 968 unsigned disable = 0; 969 970 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 971 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 972 if (ASIC_IS_DCE3(rdev)) { 973 switch (radeon_connector->hpd.hpd) { 974 case RADEON_HPD_1: 975 WREG32(DC_HPD1_CONTROL, 0); 976 break; 977 case RADEON_HPD_2: 978 WREG32(DC_HPD2_CONTROL, 0); 979 break; 980 case RADEON_HPD_3: 981 WREG32(DC_HPD3_CONTROL, 0); 982 break; 983 case RADEON_HPD_4: 984 WREG32(DC_HPD4_CONTROL, 0); 985 break; 986 /* DCE 3.2 */ 987 case RADEON_HPD_5: 988 WREG32(DC_HPD5_CONTROL, 0); 989 break; 990 case RADEON_HPD_6: 991 WREG32(DC_HPD6_CONTROL, 0); 992 break; 993 default: 994 break; 995 } 996 } else { 997 switch (radeon_connector->hpd.hpd) { 998 case RADEON_HPD_1: 999 WREG32(DC_HOT_PLUG_DETECT1_CONTROL, 0); 1000 break; 1001 case RADEON_HPD_2: 1002 WREG32(DC_HOT_PLUG_DETECT2_CONTROL, 0); 1003 break; 1004 case RADEON_HPD_3: 1005 WREG32(DC_HOT_PLUG_DETECT3_CONTROL, 0); 1006 break; 1007 default: 1008 break; 1009 } 1010 } 1011 disable |= 1 << radeon_connector->hpd.hpd; 1012 } 1013 radeon_irq_kms_disable_hpd(rdev, disable); 1014} 1015 1016/* 1017 * R600 PCIE GART 1018 */ 1019void r600_pcie_gart_tlb_flush(struct radeon_device *rdev) 1020{ 1021 unsigned i; 1022 u32 tmp; 1023 1024 /* flush hdp cache so updates hit vram */ 1025 if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740) && 1026 !(rdev->flags & RADEON_IS_AGP)) { 1027 void __iomem *ptr = (void *)rdev->gart.ptr; 1028 u32 tmp; 1029 1030 /* r7xx hw bug. write to HDP_DEBUG1 followed by fb read 1031 * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL 1032 * This seems to cause problems on some AGP cards. Just use the old 1033 * method for them. 1034 */ 1035 WREG32(HDP_DEBUG1, 0); 1036 tmp = readl((void __iomem *)ptr); 1037 } else 1038 WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); 1039 1040 WREG32(VM_CONTEXT0_INVALIDATION_LOW_ADDR, rdev->mc.gtt_start >> 12); 1041 WREG32(VM_CONTEXT0_INVALIDATION_HIGH_ADDR, (rdev->mc.gtt_end - 1) >> 12); 1042 WREG32(VM_CONTEXT0_REQUEST_RESPONSE, REQUEST_TYPE(1)); 1043 for (i = 0; i < rdev->usec_timeout; i++) { 1044 /* read MC_STATUS */ 1045 tmp = RREG32(VM_CONTEXT0_REQUEST_RESPONSE); 1046 tmp = (tmp & RESPONSE_TYPE_MASK) >> RESPONSE_TYPE_SHIFT; 1047 if (tmp == 2) { 1048 printk(KERN_WARNING "[drm] r600 flush TLB failed\n"); 1049 return; 1050 } 1051 if (tmp) { 1052 return; 1053 } 1054 udelay(1); 1055 } 1056} 1057 1058int r600_pcie_gart_init(struct radeon_device *rdev) 1059{ 1060 int r; 1061 1062 if (rdev->gart.robj) { 1063 WARN(1, "R600 PCIE GART already initialized\n"); 1064 return 0; 1065 } 1066 /* Initialize common gart structure */ 1067 r = radeon_gart_init(rdev); 1068 if (r) 1069 return r; 1070 rdev->gart.table_size = rdev->gart.num_gpu_pages * 8; 1071 return radeon_gart_table_vram_alloc(rdev); 1072} 1073 1074static int r600_pcie_gart_enable(struct radeon_device *rdev) 1075{ 1076 u32 tmp; 1077 int r, i; 1078 1079 if (rdev->gart.robj == NULL) { 1080 dev_err(rdev->dev, "No VRAM object for PCIE GART.\n"); 1081 return -EINVAL; 1082 } 1083 r = radeon_gart_table_vram_pin(rdev); 1084 if (r) 1085 return r; 1086 1087 /* Setup L2 cache */ 1088 WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING | 1089 ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE | 1090 EFFECTIVE_L2_QUEUE_SIZE(7)); 1091 WREG32(VM_L2_CNTL2, 0); 1092 WREG32(VM_L2_CNTL3, BANK_SELECT_0(0) | BANK_SELECT_1(1)); 1093 /* Setup TLB control */ 1094 tmp = ENABLE_L1_TLB | ENABLE_L1_FRAGMENT_PROCESSING | 1095 SYSTEM_ACCESS_MODE_NOT_IN_SYS | 1096 EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5) | 1097 ENABLE_WAIT_L2_QUERY; 1098 WREG32(MC_VM_L1_TLB_MCB_RD_SYS_CNTL, tmp); 1099 WREG32(MC_VM_L1_TLB_MCB_WR_SYS_CNTL, tmp); 1100 WREG32(MC_VM_L1_TLB_MCB_RD_HDP_CNTL, tmp | ENABLE_L1_STRICT_ORDERING); 1101 WREG32(MC_VM_L1_TLB_MCB_WR_HDP_CNTL, tmp); 1102 WREG32(MC_VM_L1_TLB_MCD_RD_A_CNTL, tmp); 1103 WREG32(MC_VM_L1_TLB_MCD_WR_A_CNTL, tmp); 1104 WREG32(MC_VM_L1_TLB_MCD_RD_B_CNTL, tmp); 1105 WREG32(MC_VM_L1_TLB_MCD_WR_B_CNTL, tmp); 1106 WREG32(MC_VM_L1_TLB_MCB_RD_GFX_CNTL, tmp); 1107 WREG32(MC_VM_L1_TLB_MCB_WR_GFX_CNTL, tmp); 1108 WREG32(MC_VM_L1_TLB_MCB_RD_PDMA_CNTL, tmp); 1109 WREG32(MC_VM_L1_TLB_MCB_WR_PDMA_CNTL, tmp); 1110 WREG32(MC_VM_L1_TLB_MCB_RD_UVD_CNTL, tmp); 1111 WREG32(MC_VM_L1_TLB_MCB_WR_UVD_CNTL, tmp); 1112 WREG32(MC_VM_L1_TLB_MCB_RD_SEM_CNTL, tmp | ENABLE_SEMAPHORE_MODE); 1113 WREG32(MC_VM_L1_TLB_MCB_WR_SEM_CNTL, tmp | ENABLE_SEMAPHORE_MODE); 1114 WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12); 1115 WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR, rdev->mc.gtt_end >> 12); 1116 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR, rdev->gart.table_addr >> 12); 1117 WREG32(VM_CONTEXT0_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(0) | 1118 RANGE_PROTECTION_FAULT_ENABLE_DEFAULT); 1119 WREG32(VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR, 1120 (u32)(rdev->dummy_page.addr >> 12)); 1121 for (i = 1; i < 7; i++) 1122 WREG32(VM_CONTEXT0_CNTL + (i * 4), 0); 1123 1124 r600_pcie_gart_tlb_flush(rdev); 1125 DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n", 1126 (unsigned)(rdev->mc.gtt_size >> 20), 1127 (unsigned long long)rdev->gart.table_addr); 1128 rdev->gart.ready = true; 1129 return 0; 1130} 1131 1132static void r600_pcie_gart_disable(struct radeon_device *rdev) 1133{ 1134 u32 tmp; 1135 int i; 1136 1137 /* Disable all tables */ 1138 for (i = 0; i < 7; i++) 1139 WREG32(VM_CONTEXT0_CNTL + (i * 4), 0); 1140 1141 /* Disable L2 cache */ 1142 WREG32(VM_L2_CNTL, ENABLE_L2_FRAGMENT_PROCESSING | 1143 EFFECTIVE_L2_QUEUE_SIZE(7)); 1144 WREG32(VM_L2_CNTL3, BANK_SELECT_0(0) | BANK_SELECT_1(1)); 1145 /* Setup L1 TLB control */ 1146 tmp = EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5) | 1147 ENABLE_WAIT_L2_QUERY; 1148 WREG32(MC_VM_L1_TLB_MCD_RD_A_CNTL, tmp); 1149 WREG32(MC_VM_L1_TLB_MCD_WR_A_CNTL, tmp); 1150 WREG32(MC_VM_L1_TLB_MCD_RD_B_CNTL, tmp); 1151 WREG32(MC_VM_L1_TLB_MCD_WR_B_CNTL, tmp); 1152 WREG32(MC_VM_L1_TLB_MCB_RD_GFX_CNTL, tmp); 1153 WREG32(MC_VM_L1_TLB_MCB_WR_GFX_CNTL, tmp); 1154 WREG32(MC_VM_L1_TLB_MCB_RD_PDMA_CNTL, tmp); 1155 WREG32(MC_VM_L1_TLB_MCB_WR_PDMA_CNTL, tmp); 1156 WREG32(MC_VM_L1_TLB_MCB_RD_SEM_CNTL, tmp); 1157 WREG32(MC_VM_L1_TLB_MCB_WR_SEM_CNTL, tmp); 1158 WREG32(MC_VM_L1_TLB_MCB_RD_SYS_CNTL, tmp); 1159 WREG32(MC_VM_L1_TLB_MCB_WR_SYS_CNTL, tmp); 1160 WREG32(MC_VM_L1_TLB_MCB_RD_HDP_CNTL, tmp); 1161 WREG32(MC_VM_L1_TLB_MCB_WR_HDP_CNTL, tmp); 1162 WREG32(MC_VM_L1_TLB_MCB_RD_UVD_CNTL, tmp); 1163 WREG32(MC_VM_L1_TLB_MCB_WR_UVD_CNTL, tmp); 1164 radeon_gart_table_vram_unpin(rdev); 1165} 1166 1167static void r600_pcie_gart_fini(struct radeon_device *rdev) 1168{ 1169 radeon_gart_fini(rdev); 1170 r600_pcie_gart_disable(rdev); 1171 radeon_gart_table_vram_free(rdev); 1172} 1173 1174static void r600_agp_enable(struct radeon_device *rdev) 1175{ 1176 u32 tmp; 1177 int i; 1178 1179 /* Setup L2 cache */ 1180 WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING | 1181 ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE | 1182 EFFECTIVE_L2_QUEUE_SIZE(7)); 1183 WREG32(VM_L2_CNTL2, 0); 1184 WREG32(VM_L2_CNTL3, BANK_SELECT_0(0) | BANK_SELECT_1(1)); 1185 /* Setup TLB control */ 1186 tmp = ENABLE_L1_TLB | ENABLE_L1_FRAGMENT_PROCESSING | 1187 SYSTEM_ACCESS_MODE_NOT_IN_SYS | 1188 EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5) | 1189 ENABLE_WAIT_L2_QUERY; 1190 WREG32(MC_VM_L1_TLB_MCB_RD_SYS_CNTL, tmp); 1191 WREG32(MC_VM_L1_TLB_MCB_WR_SYS_CNTL, tmp); 1192 WREG32(MC_VM_L1_TLB_MCB_RD_HDP_CNTL, tmp | ENABLE_L1_STRICT_ORDERING); 1193 WREG32(MC_VM_L1_TLB_MCB_WR_HDP_CNTL, tmp); 1194 WREG32(MC_VM_L1_TLB_MCD_RD_A_CNTL, tmp); 1195 WREG32(MC_VM_L1_TLB_MCD_WR_A_CNTL, tmp); 1196 WREG32(MC_VM_L1_TLB_MCD_RD_B_CNTL, tmp); 1197 WREG32(MC_VM_L1_TLB_MCD_WR_B_CNTL, tmp); 1198 WREG32(MC_VM_L1_TLB_MCB_RD_GFX_CNTL, tmp); 1199 WREG32(MC_VM_L1_TLB_MCB_WR_GFX_CNTL, tmp); 1200 WREG32(MC_VM_L1_TLB_MCB_RD_PDMA_CNTL, tmp); 1201 WREG32(MC_VM_L1_TLB_MCB_WR_PDMA_CNTL, tmp); 1202 WREG32(MC_VM_L1_TLB_MCB_RD_SEM_CNTL, tmp | ENABLE_SEMAPHORE_MODE); 1203 WREG32(MC_VM_L1_TLB_MCB_WR_SEM_CNTL, tmp | ENABLE_SEMAPHORE_MODE); 1204 for (i = 0; i < 7; i++) 1205 WREG32(VM_CONTEXT0_CNTL + (i * 4), 0); 1206} 1207 1208int r600_mc_wait_for_idle(struct radeon_device *rdev) 1209{ 1210 unsigned i; 1211 u32 tmp; 1212 1213 for (i = 0; i < rdev->usec_timeout; i++) { 1214 /* read MC_STATUS */ 1215 tmp = RREG32(R_000E50_SRBM_STATUS) & 0x3F00; 1216 if (!tmp) 1217 return 0; 1218 udelay(1); 1219 } 1220 return -1; 1221} 1222 1223uint32_t rs780_mc_rreg(struct radeon_device *rdev, uint32_t reg) 1224{ 1225 unsigned long flags; 1226 uint32_t r; 1227 1228 spin_lock_irqsave(&rdev->mc_idx_lock, flags); 1229 WREG32(R_0028F8_MC_INDEX, S_0028F8_MC_IND_ADDR(reg)); 1230 r = RREG32(R_0028FC_MC_DATA); 1231 WREG32(R_0028F8_MC_INDEX, ~C_0028F8_MC_IND_ADDR); 1232 spin_unlock_irqrestore(&rdev->mc_idx_lock, flags); 1233 return r; 1234} 1235 1236void rs780_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) 1237{ 1238 unsigned long flags; 1239 1240 spin_lock_irqsave(&rdev->mc_idx_lock, flags); 1241 WREG32(R_0028F8_MC_INDEX, S_0028F8_MC_IND_ADDR(reg) | 1242 S_0028F8_MC_IND_WR_EN(1)); 1243 WREG32(R_0028FC_MC_DATA, v); 1244 WREG32(R_0028F8_MC_INDEX, 0x7F); 1245 spin_unlock_irqrestore(&rdev->mc_idx_lock, flags); 1246} 1247 1248static void r600_mc_program(struct radeon_device *rdev) 1249{ 1250 struct rv515_mc_save save; 1251 u32 tmp; 1252 int i, j; 1253 1254 /* Initialize HDP */ 1255 for (i = 0, j = 0; i < 32; i++, j += 0x18) { 1256 WREG32((0x2c14 + j), 0x00000000); 1257 WREG32((0x2c18 + j), 0x00000000); 1258 WREG32((0x2c1c + j), 0x00000000); 1259 WREG32((0x2c20 + j), 0x00000000); 1260 WREG32((0x2c24 + j), 0x00000000); 1261 } 1262 WREG32(HDP_REG_COHERENCY_FLUSH_CNTL, 0); 1263 1264 rv515_mc_stop(rdev, &save); 1265 if (r600_mc_wait_for_idle(rdev)) { 1266 dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); 1267 } 1268 /* Lockout access through VGA aperture (doesn't exist before R600) */ 1269 WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE); 1270 /* Update configuration */ 1271 if (rdev->flags & RADEON_IS_AGP) { 1272 if (rdev->mc.vram_start < rdev->mc.gtt_start) { 1273 /* VRAM before AGP */ 1274 WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, 1275 rdev->mc.vram_start >> 12); 1276 WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR, 1277 rdev->mc.gtt_end >> 12); 1278 } else { 1279 /* VRAM after AGP */ 1280 WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, 1281 rdev->mc.gtt_start >> 12); 1282 WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR, 1283 rdev->mc.vram_end >> 12); 1284 } 1285 } else { 1286 WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.vram_start >> 12); 1287 WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR, rdev->mc.vram_end >> 12); 1288 } 1289 WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, rdev->vram_scratch.gpu_addr >> 12); 1290 tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16; 1291 tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF); 1292 WREG32(MC_VM_FB_LOCATION, tmp); 1293 WREG32(HDP_NONSURFACE_BASE, (rdev->mc.vram_start >> 8)); 1294 WREG32(HDP_NONSURFACE_INFO, (2 << 7)); 1295 WREG32(HDP_NONSURFACE_SIZE, 0x3FFFFFFF); 1296 if (rdev->flags & RADEON_IS_AGP) { 1297 WREG32(MC_VM_AGP_TOP, rdev->mc.gtt_end >> 22); 1298 WREG32(MC_VM_AGP_BOT, rdev->mc.gtt_start >> 22); 1299 WREG32(MC_VM_AGP_BASE, rdev->mc.agp_base >> 22); 1300 } else { 1301 WREG32(MC_VM_AGP_BASE, 0); 1302 WREG32(MC_VM_AGP_TOP, 0x0FFFFFFF); 1303 WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF); 1304 } 1305 if (r600_mc_wait_for_idle(rdev)) { 1306 dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); 1307 } 1308 rv515_mc_resume(rdev, &save); 1309 /* we need to own VRAM, so turn off the VGA renderer here 1310 * to stop it overwriting our objects */ 1311 rv515_vga_render_disable(rdev); 1312} 1313 1314/** 1315 * r600_vram_gtt_location - try to find VRAM & GTT location 1316 * @rdev: radeon device structure holding all necessary informations 1317 * @mc: memory controller structure holding memory informations 1318 * 1319 * Function will place try to place VRAM at same place as in CPU (PCI) 1320 * address space as some GPU seems to have issue when we reprogram at 1321 * different address space. 1322 * 1323 * If there is not enough space to fit the unvisible VRAM after the 1324 * aperture then we limit the VRAM size to the aperture. 1325 * 1326 * If we are using AGP then place VRAM adjacent to AGP aperture are we need 1327 * them to be in one from GPU point of view so that we can program GPU to 1328 * catch access outside them (weird GPU policy see ??). 1329 * 1330 * This function will never fails, worst case are limiting VRAM or GTT. 1331 * 1332 * Note: GTT start, end, size should be initialized before calling this 1333 * function on AGP platform. 1334 */ 1335static void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) 1336{ 1337 u64 size_bf, size_af; 1338 1339 if (mc->mc_vram_size > 0xE0000000) { 1340 /* leave room for at least 512M GTT */ 1341 dev_warn(rdev->dev, "limiting VRAM\n"); 1342 mc->real_vram_size = 0xE0000000; 1343 mc->mc_vram_size = 0xE0000000; 1344 } 1345 if (rdev->flags & RADEON_IS_AGP) { 1346 size_bf = mc->gtt_start; 1347 size_af = mc->mc_mask - mc->gtt_end; 1348 if (size_bf > size_af) { 1349 if (mc->mc_vram_size > size_bf) { 1350 dev_warn(rdev->dev, "limiting VRAM\n"); 1351 mc->real_vram_size = size_bf; 1352 mc->mc_vram_size = size_bf; 1353 } 1354 mc->vram_start = mc->gtt_start - mc->mc_vram_size; 1355 } else { 1356 if (mc->mc_vram_size > size_af) { 1357 dev_warn(rdev->dev, "limiting VRAM\n"); 1358 mc->real_vram_size = size_af; 1359 mc->mc_vram_size = size_af; 1360 } 1361 mc->vram_start = mc->gtt_end + 1; 1362 } 1363 mc->vram_end = mc->vram_start + mc->mc_vram_size - 1; 1364 dev_info(rdev->dev, "VRAM: %lluM 0x%08llX - 0x%08llX (%lluM used)\n", 1365 mc->mc_vram_size >> 20, mc->vram_start, 1366 mc->vram_end, mc->real_vram_size >> 20); 1367 } else { 1368 u64 base = 0; 1369 if (rdev->flags & RADEON_IS_IGP) { 1370 base = RREG32(MC_VM_FB_LOCATION) & 0xFFFF; 1371 base <<= 24; 1372 } 1373 radeon_vram_location(rdev, &rdev->mc, base); 1374 rdev->mc.gtt_base_align = 0; 1375 radeon_gtt_location(rdev, mc); 1376 } 1377} 1378 1379static int r600_mc_init(struct radeon_device *rdev) 1380{ 1381 u32 tmp; 1382 int chansize, numchan; 1383 uint32_t h_addr, l_addr; 1384 unsigned long long k8_addr; 1385 1386 /* Get VRAM informations */ 1387 rdev->mc.vram_is_ddr = true; 1388 tmp = RREG32(RAMCFG); 1389 if (tmp & CHANSIZE_OVERRIDE) { 1390 chansize = 16; 1391 } else if (tmp & CHANSIZE_MASK) { 1392 chansize = 64; 1393 } else { 1394 chansize = 32; 1395 } 1396 tmp = RREG32(CHMAP); 1397 switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) { 1398 case 0: 1399 default: 1400 numchan = 1; 1401 break; 1402 case 1: 1403 numchan = 2; 1404 break; 1405 case 2: 1406 numchan = 4; 1407 break; 1408 case 3: 1409 numchan = 8; 1410 break; 1411 } 1412 rdev->mc.vram_width = numchan * chansize; 1413 /* Could aper size report 0 ? */ 1414 rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); 1415 rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); 1416 /* Setup GPU memory space */ 1417 rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE); 1418 rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE); 1419 rdev->mc.visible_vram_size = rdev->mc.aper_size; 1420 r600_vram_gtt_location(rdev, &rdev->mc); 1421 1422 if (rdev->flags & RADEON_IS_IGP) { 1423 rs690_pm_info(rdev); 1424 rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev); 1425 1426 if (rdev->family == CHIP_RS780 || rdev->family == CHIP_RS880) { 1427 /* Use K8 direct mapping for fast fb access. */ 1428 rdev->fastfb_working = false; 1429 h_addr = G_000012_K8_ADDR_EXT(RREG32_MC(R_000012_MC_MISC_UMA_CNTL)); 1430 l_addr = RREG32_MC(R_000011_K8_FB_LOCATION); 1431 k8_addr = ((unsigned long long)h_addr) << 32 | l_addr; 1432#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) 1433 if (k8_addr + rdev->mc.visible_vram_size < 0x100000000ULL) 1434#endif 1435 { 1436 /* FastFB shall be used with UMA memory. Here it is simply disabled when sideport 1437 * memory is present. 1438 */ 1439 if (rdev->mc.igp_sideport_enabled == false && radeon_fastfb == 1) { 1440 DRM_INFO("Direct mapping: aper base at 0x%llx, replaced by direct mapping base 0x%llx.\n", 1441 (unsigned long long)rdev->mc.aper_base, k8_addr); 1442 rdev->mc.aper_base = (resource_size_t)k8_addr; 1443 rdev->fastfb_working = true; 1444 } 1445 } 1446 } 1447 } 1448 1449 radeon_update_bandwidth_info(rdev); 1450 return 0; 1451} 1452 1453int r600_vram_scratch_init(struct radeon_device *rdev) 1454{ 1455 int r; 1456 1457 if (rdev->vram_scratch.robj == NULL) { 1458 r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, 1459 PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 1460 0, NULL, NULL, &rdev->vram_scratch.robj); 1461 if (r) { 1462 return r; 1463 } 1464 } 1465 1466 r = radeon_bo_reserve(rdev->vram_scratch.robj, false); 1467 if (unlikely(r != 0)) 1468 return r; 1469 r = radeon_bo_pin(rdev->vram_scratch.robj, 1470 RADEON_GEM_DOMAIN_VRAM, &rdev->vram_scratch.gpu_addr); 1471 if (r) { 1472 radeon_bo_unreserve(rdev->vram_scratch.robj); 1473 return r; 1474 } 1475 r = radeon_bo_kmap(rdev->vram_scratch.robj, 1476 (void **)&rdev->vram_scratch.ptr); 1477 if (r) 1478 radeon_bo_unpin(rdev->vram_scratch.robj); 1479 radeon_bo_unreserve(rdev->vram_scratch.robj); 1480 1481 return r; 1482} 1483 1484void r600_vram_scratch_fini(struct radeon_device *rdev) 1485{ 1486 int r; 1487 1488 if (rdev->vram_scratch.robj == NULL) { 1489 return; 1490 } 1491 r = radeon_bo_reserve(rdev->vram_scratch.robj, false); 1492 if (likely(r == 0)) { 1493 radeon_bo_kunmap(rdev->vram_scratch.robj); 1494 radeon_bo_unpin(rdev->vram_scratch.robj); 1495 radeon_bo_unreserve(rdev->vram_scratch.robj); 1496 } 1497 radeon_bo_unref(&rdev->vram_scratch.robj); 1498} 1499 1500void r600_set_bios_scratch_engine_hung(struct radeon_device *rdev, bool hung) 1501{ 1502 u32 tmp = RREG32(R600_BIOS_3_SCRATCH); 1503 1504 if (hung) 1505 tmp |= ATOM_S3_ASIC_GUI_ENGINE_HUNG; 1506 else 1507 tmp &= ~ATOM_S3_ASIC_GUI_ENGINE_HUNG; 1508 1509 WREG32(R600_BIOS_3_SCRATCH, tmp); 1510} 1511 1512static void r600_print_gpu_status_regs(struct radeon_device *rdev) 1513{ 1514 dev_info(rdev->dev, " R_008010_GRBM_STATUS = 0x%08X\n", 1515 RREG32(R_008010_GRBM_STATUS)); 1516 dev_info(rdev->dev, " R_008014_GRBM_STATUS2 = 0x%08X\n", 1517 RREG32(R_008014_GRBM_STATUS2)); 1518 dev_info(rdev->dev, " R_000E50_SRBM_STATUS = 0x%08X\n", 1519 RREG32(R_000E50_SRBM_STATUS)); 1520 dev_info(rdev->dev, " R_008674_CP_STALLED_STAT1 = 0x%08X\n", 1521 RREG32(CP_STALLED_STAT1)); 1522 dev_info(rdev->dev, " R_008678_CP_STALLED_STAT2 = 0x%08X\n", 1523 RREG32(CP_STALLED_STAT2)); 1524 dev_info(rdev->dev, " R_00867C_CP_BUSY_STAT = 0x%08X\n", 1525 RREG32(CP_BUSY_STAT)); 1526 dev_info(rdev->dev, " R_008680_CP_STAT = 0x%08X\n", 1527 RREG32(CP_STAT)); 1528 dev_info(rdev->dev, " R_00D034_DMA_STATUS_REG = 0x%08X\n", 1529 RREG32(DMA_STATUS_REG)); 1530} 1531 1532static bool r600_is_display_hung(struct radeon_device *rdev) 1533{ 1534 u32 crtc_hung = 0; 1535 u32 crtc_status[2]; 1536 u32 i, j, tmp; 1537 1538 for (i = 0; i < rdev->num_crtc; i++) { 1539 if (RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i]) & AVIVO_CRTC_EN) { 1540 crtc_status[i] = RREG32(AVIVO_D1CRTC_STATUS_HV_COUNT + crtc_offsets[i]); 1541 crtc_hung |= (1 << i); 1542 } 1543 } 1544 1545 for (j = 0; j < 10; j++) { 1546 for (i = 0; i < rdev->num_crtc; i++) { 1547 if (crtc_hung & (1 << i)) { 1548 tmp = RREG32(AVIVO_D1CRTC_STATUS_HV_COUNT + crtc_offsets[i]); 1549 if (tmp != crtc_status[i]) 1550 crtc_hung &= ~(1 << i); 1551 } 1552 } 1553 if (crtc_hung == 0) 1554 return false; 1555 udelay(100); 1556 } 1557 1558 return true; 1559} 1560 1561u32 r600_gpu_check_soft_reset(struct radeon_device *rdev) 1562{ 1563 u32 reset_mask = 0; 1564 u32 tmp; 1565 1566 /* GRBM_STATUS */ 1567 tmp = RREG32(R_008010_GRBM_STATUS); 1568 if (rdev->family >= CHIP_RV770) { 1569 if (G_008010_PA_BUSY(tmp) | G_008010_SC_BUSY(tmp) | 1570 G_008010_SH_BUSY(tmp) | G_008010_SX_BUSY(tmp) | 1571 G_008010_TA_BUSY(tmp) | G_008010_VGT_BUSY(tmp) | 1572 G_008010_DB03_BUSY(tmp) | G_008010_CB03_BUSY(tmp) | 1573 G_008010_SPI03_BUSY(tmp) | G_008010_VGT_BUSY_NO_DMA(tmp)) 1574 reset_mask |= RADEON_RESET_GFX; 1575 } else { 1576 if (G_008010_PA_BUSY(tmp) | G_008010_SC_BUSY(tmp) | 1577 G_008010_SH_BUSY(tmp) | G_008010_SX_BUSY(tmp) | 1578 G_008010_TA03_BUSY(tmp) | G_008010_VGT_BUSY(tmp) | 1579 G_008010_DB03_BUSY(tmp) | G_008010_CB03_BUSY(tmp) | 1580 G_008010_SPI03_BUSY(tmp) | G_008010_VGT_BUSY_NO_DMA(tmp)) 1581 reset_mask |= RADEON_RESET_GFX; 1582 } 1583 1584 if (G_008010_CF_RQ_PENDING(tmp) | G_008010_PF_RQ_PENDING(tmp) | 1585 G_008010_CP_BUSY(tmp) | G_008010_CP_COHERENCY_BUSY(tmp)) 1586 reset_mask |= RADEON_RESET_CP; 1587 1588 if (G_008010_GRBM_EE_BUSY(tmp)) 1589 reset_mask |= RADEON_RESET_GRBM | RADEON_RESET_GFX | RADEON_RESET_CP; 1590 1591 /* DMA_STATUS_REG */ 1592 tmp = RREG32(DMA_STATUS_REG); 1593 if (!(tmp & DMA_IDLE)) 1594 reset_mask |= RADEON_RESET_DMA; 1595 1596 /* SRBM_STATUS */ 1597 tmp = RREG32(R_000E50_SRBM_STATUS); 1598 if (G_000E50_RLC_RQ_PENDING(tmp) | G_000E50_RLC_BUSY(tmp)) 1599 reset_mask |= RADEON_RESET_RLC; 1600 1601 if (G_000E50_IH_BUSY(tmp)) 1602 reset_mask |= RADEON_RESET_IH; 1603 1604 if (G_000E50_SEM_BUSY(tmp)) 1605 reset_mask |= RADEON_RESET_SEM; 1606 1607 if (G_000E50_GRBM_RQ_PENDING(tmp)) 1608 reset_mask |= RADEON_RESET_GRBM; 1609 1610 if (G_000E50_VMC_BUSY(tmp)) 1611 reset_mask |= RADEON_RESET_VMC; 1612 1613 if (G_000E50_MCB_BUSY(tmp) | G_000E50_MCDZ_BUSY(tmp) | 1614 G_000E50_MCDY_BUSY(tmp) | G_000E50_MCDX_BUSY(tmp) | 1615 G_000E50_MCDW_BUSY(tmp)) 1616 reset_mask |= RADEON_RESET_MC; 1617 1618 if (r600_is_display_hung(rdev)) 1619 reset_mask |= RADEON_RESET_DISPLAY; 1620 1621 /* Skip MC reset as it's mostly likely not hung, just busy */ 1622 if (reset_mask & RADEON_RESET_MC) { 1623 DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask); 1624 reset_mask &= ~RADEON_RESET_MC; 1625 } 1626 1627 return reset_mask; 1628} 1629 1630static void r600_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) 1631{ 1632 struct rv515_mc_save save; 1633 u32 grbm_soft_reset = 0, srbm_soft_reset = 0; 1634 u32 tmp; 1635 1636 if (reset_mask == 0) 1637 return; 1638 1639 dev_info(rdev->dev, "GPU softreset: 0x%08X\n", reset_mask); 1640 1641 r600_print_gpu_status_regs(rdev); 1642 1643 /* Disable CP parsing/prefetching */ 1644 if (rdev->family >= CHIP_RV770) 1645 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1) | S_0086D8_CP_PFP_HALT(1)); 1646 else 1647 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); 1648 1649 /* disable the RLC */ 1650 WREG32(RLC_CNTL, 0); 1651 1652 if (reset_mask & RADEON_RESET_DMA) { 1653 /* Disable DMA */ 1654 tmp = RREG32(DMA_RB_CNTL); 1655 tmp &= ~DMA_RB_ENABLE; 1656 WREG32(DMA_RB_CNTL, tmp); 1657 } 1658 1659 mdelay(50); 1660 1661 rv515_mc_stop(rdev, &save); 1662 if (r600_mc_wait_for_idle(rdev)) { 1663 dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); 1664 } 1665 1666 if (reset_mask & (RADEON_RESET_GFX | RADEON_RESET_COMPUTE)) { 1667 if (rdev->family >= CHIP_RV770) 1668 grbm_soft_reset |= S_008020_SOFT_RESET_DB(1) | 1669 S_008020_SOFT_RESET_CB(1) | 1670 S_008020_SOFT_RESET_PA(1) | 1671 S_008020_SOFT_RESET_SC(1) | 1672 S_008020_SOFT_RESET_SPI(1) | 1673 S_008020_SOFT_RESET_SX(1) | 1674 S_008020_SOFT_RESET_SH(1) | 1675 S_008020_SOFT_RESET_TC(1) | 1676 S_008020_SOFT_RESET_TA(1) | 1677 S_008020_SOFT_RESET_VC(1) | 1678 S_008020_SOFT_RESET_VGT(1); 1679 else 1680 grbm_soft_reset |= S_008020_SOFT_RESET_CR(1) | 1681 S_008020_SOFT_RESET_DB(1) | 1682 S_008020_SOFT_RESET_CB(1) | 1683 S_008020_SOFT_RESET_PA(1) | 1684 S_008020_SOFT_RESET_SC(1) | 1685 S_008020_SOFT_RESET_SMX(1) | 1686 S_008020_SOFT_RESET_SPI(1) | 1687 S_008020_SOFT_RESET_SX(1) | 1688 S_008020_SOFT_RESET_SH(1) | 1689 S_008020_SOFT_RESET_TC(1) | 1690 S_008020_SOFT_RESET_TA(1) | 1691 S_008020_SOFT_RESET_VC(1) | 1692 S_008020_SOFT_RESET_VGT(1); 1693 } 1694 1695 if (reset_mask & RADEON_RESET_CP) { 1696 grbm_soft_reset |= S_008020_SOFT_RESET_CP(1) | 1697 S_008020_SOFT_RESET_VGT(1); 1698 1699 srbm_soft_reset |= S_000E60_SOFT_RESET_GRBM(1); 1700 } 1701 1702 if (reset_mask & RADEON_RESET_DMA) { 1703 if (rdev->family >= CHIP_RV770) 1704 srbm_soft_reset |= RV770_SOFT_RESET_DMA; 1705 else 1706 srbm_soft_reset |= SOFT_RESET_DMA; 1707 } 1708 1709 if (reset_mask & RADEON_RESET_RLC) 1710 srbm_soft_reset |= S_000E60_SOFT_RESET_RLC(1); 1711 1712 if (reset_mask & RADEON_RESET_SEM) 1713 srbm_soft_reset |= S_000E60_SOFT_RESET_SEM(1); 1714 1715 if (reset_mask & RADEON_RESET_IH) 1716 srbm_soft_reset |= S_000E60_SOFT_RESET_IH(1); 1717 1718 if (reset_mask & RADEON_RESET_GRBM) 1719 srbm_soft_reset |= S_000E60_SOFT_RESET_GRBM(1); 1720 1721 if (!(rdev->flags & RADEON_IS_IGP)) { 1722 if (reset_mask & RADEON_RESET_MC) 1723 srbm_soft_reset |= S_000E60_SOFT_RESET_MC(1); 1724 } 1725 1726 if (reset_mask & RADEON_RESET_VMC) 1727 srbm_soft_reset |= S_000E60_SOFT_RESET_VMC(1); 1728 1729 if (grbm_soft_reset) { 1730 tmp = RREG32(R_008020_GRBM_SOFT_RESET); 1731 tmp |= grbm_soft_reset; 1732 dev_info(rdev->dev, "R_008020_GRBM_SOFT_RESET=0x%08X\n", tmp); 1733 WREG32(R_008020_GRBM_SOFT_RESET, tmp); 1734 tmp = RREG32(R_008020_GRBM_SOFT_RESET); 1735 1736 udelay(50); 1737 1738 tmp &= ~grbm_soft_reset; 1739 WREG32(R_008020_GRBM_SOFT_RESET, tmp); 1740 tmp = RREG32(R_008020_GRBM_SOFT_RESET); 1741 } 1742 1743 if (srbm_soft_reset) { 1744 tmp = RREG32(SRBM_SOFT_RESET); 1745 tmp |= srbm_soft_reset; 1746 dev_info(rdev->dev, "SRBM_SOFT_RESET=0x%08X\n", tmp); 1747 WREG32(SRBM_SOFT_RESET, tmp); 1748 tmp = RREG32(SRBM_SOFT_RESET); 1749 1750 udelay(50); 1751 1752 tmp &= ~srbm_soft_reset; 1753 WREG32(SRBM_SOFT_RESET, tmp); 1754 tmp = RREG32(SRBM_SOFT_RESET); 1755 } 1756 1757 /* Wait a little for things to settle down */ 1758 mdelay(1); 1759 1760 rv515_mc_resume(rdev, &save); 1761 udelay(50); 1762 1763 r600_print_gpu_status_regs(rdev); 1764} 1765 1766static void r600_gpu_pci_config_reset(struct radeon_device *rdev) 1767{ 1768 struct rv515_mc_save save; 1769 u32 tmp, i; 1770 1771 dev_info(rdev->dev, "GPU pci config reset\n"); 1772 1773 /* disable dpm? */ 1774 1775 /* Disable CP parsing/prefetching */ 1776 if (rdev->family >= CHIP_RV770) 1777 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1) | S_0086D8_CP_PFP_HALT(1)); 1778 else 1779 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); 1780 1781 /* disable the RLC */ 1782 WREG32(RLC_CNTL, 0); 1783 1784 /* Disable DMA */ 1785 tmp = RREG32(DMA_RB_CNTL); 1786 tmp &= ~DMA_RB_ENABLE; 1787 WREG32(DMA_RB_CNTL, tmp); 1788 1789 mdelay(50); 1790 1791 /* set mclk/sclk to bypass */ 1792 if (rdev->family >= CHIP_RV770) 1793 rv770_set_clk_bypass_mode(rdev); 1794 /* disable BM */ 1795 pci_clear_master(rdev->pdev); 1796 /* disable mem access */ 1797 rv515_mc_stop(rdev, &save); 1798 if (r600_mc_wait_for_idle(rdev)) { 1799 dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); 1800 } 1801 1802 /* BIF reset workaround. Not sure if this is needed on 6xx */ 1803 tmp = RREG32(BUS_CNTL); 1804 tmp |= VGA_COHE_SPEC_TIMER_DIS; 1805 WREG32(BUS_CNTL, tmp); 1806 1807 tmp = RREG32(BIF_SCRATCH0); 1808 1809 /* reset */ 1810 radeon_pci_config_reset(rdev); 1811 mdelay(1); 1812 1813 /* BIF reset workaround. Not sure if this is needed on 6xx */ 1814 tmp = SOFT_RESET_BIF; 1815 WREG32(SRBM_SOFT_RESET, tmp); 1816 mdelay(1); 1817 WREG32(SRBM_SOFT_RESET, 0); 1818 1819 /* wait for asic to come out of reset */ 1820 for (i = 0; i < rdev->usec_timeout; i++) { 1821 if (RREG32(CONFIG_MEMSIZE) != 0xffffffff) 1822 break; 1823 udelay(1); 1824 } 1825} 1826 1827int r600_asic_reset(struct radeon_device *rdev) 1828{ 1829 u32 reset_mask; 1830 1831 reset_mask = r600_gpu_check_soft_reset(rdev); 1832 1833 if (reset_mask) 1834 r600_set_bios_scratch_engine_hung(rdev, true); 1835 1836 /* try soft reset */ 1837 r600_gpu_soft_reset(rdev, reset_mask); 1838 1839 reset_mask = r600_gpu_check_soft_reset(rdev); 1840 1841 /* try pci config reset */ 1842 if (reset_mask && radeon_hard_reset) 1843 r600_gpu_pci_config_reset(rdev); 1844 1845 reset_mask = r600_gpu_check_soft_reset(rdev); 1846 1847 if (!reset_mask) 1848 r600_set_bios_scratch_engine_hung(rdev, false); 1849 1850 return 0; 1851} 1852 1853/** 1854 * r600_gfx_is_lockup - Check if the GFX engine is locked up 1855 * 1856 * @rdev: radeon_device pointer 1857 * @ring: radeon_ring structure holding ring information 1858 * 1859 * Check if the GFX engine is locked up. 1860 * Returns true if the engine appears to be locked up, false if not. 1861 */ 1862bool r600_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring) 1863{ 1864 u32 reset_mask = r600_gpu_check_soft_reset(rdev); 1865 1866 if (!(reset_mask & (RADEON_RESET_GFX | 1867 RADEON_RESET_COMPUTE | 1868 RADEON_RESET_CP))) { 1869 radeon_ring_lockup_update(rdev, ring); 1870 return false; 1871 } 1872 return radeon_ring_test_lockup(rdev, ring); 1873} 1874 1875u32 r6xx_remap_render_backend(struct radeon_device *rdev, 1876 u32 tiling_pipe_num, 1877 u32 max_rb_num, 1878 u32 total_max_rb_num, 1879 u32 disabled_rb_mask) 1880{ 1881 u32 rendering_pipe_num, rb_num_width, req_rb_num; 1882 u32 pipe_rb_ratio, pipe_rb_remain, tmp; 1883 u32 data = 0, mask = 1 << (max_rb_num - 1); 1884 unsigned i, j; 1885 1886 /* mask out the RBs that don't exist on that asic */ 1887 tmp = disabled_rb_mask | ((0xff << max_rb_num) & 0xff); 1888 /* make sure at least one RB is available */ 1889 if ((tmp & 0xff) != 0xff) 1890 disabled_rb_mask = tmp; 1891 1892 rendering_pipe_num = 1 << tiling_pipe_num; 1893 req_rb_num = total_max_rb_num - r600_count_pipe_bits(disabled_rb_mask); 1894 BUG_ON(rendering_pipe_num < req_rb_num); 1895 1896 pipe_rb_ratio = rendering_pipe_num / req_rb_num; 1897 pipe_rb_remain = rendering_pipe_num - pipe_rb_ratio * req_rb_num; 1898 1899 if (rdev->family <= CHIP_RV740) { 1900 /* r6xx/r7xx */ 1901 rb_num_width = 2; 1902 } else { 1903 /* eg+ */ 1904 rb_num_width = 4; 1905 } 1906 1907 for (i = 0; i < max_rb_num; i++) { 1908 if (!(mask & disabled_rb_mask)) { 1909 for (j = 0; j < pipe_rb_ratio; j++) { 1910 data <<= rb_num_width; 1911 data |= max_rb_num - i - 1; 1912 } 1913 if (pipe_rb_remain) { 1914 data <<= rb_num_width; 1915 data |= max_rb_num - i - 1; 1916 pipe_rb_remain--; 1917 } 1918 } 1919 mask >>= 1; 1920 } 1921 1922 return data; 1923} 1924 1925int r600_count_pipe_bits(uint32_t val) 1926{ 1927 return hweight32(val); 1928} 1929 1930static void r600_gpu_init(struct radeon_device *rdev) 1931{ 1932 u32 tiling_config; 1933 u32 ramcfg; 1934 u32 cc_gc_shader_pipe_config; 1935 u32 tmp; 1936 int i, j; 1937 u32 sq_config; 1938 u32 sq_gpr_resource_mgmt_1 = 0; 1939 u32 sq_gpr_resource_mgmt_2 = 0; 1940 u32 sq_thread_resource_mgmt = 0; 1941 u32 sq_stack_resource_mgmt_1 = 0; 1942 u32 sq_stack_resource_mgmt_2 = 0; 1943 u32 disabled_rb_mask; 1944 1945 rdev->config.r600.tiling_group_size = 256; 1946 switch (rdev->family) { 1947 case CHIP_R600: 1948 rdev->config.r600.max_pipes = 4; 1949 rdev->config.r600.max_tile_pipes = 8; 1950 rdev->config.r600.max_simds = 4; 1951 rdev->config.r600.max_backends = 4; 1952 rdev->config.r600.max_gprs = 256; 1953 rdev->config.r600.max_threads = 192; 1954 rdev->config.r600.max_stack_entries = 256; 1955 rdev->config.r600.max_hw_contexts = 8; 1956 rdev->config.r600.max_gs_threads = 16; 1957 rdev->config.r600.sx_max_export_size = 128; 1958 rdev->config.r600.sx_max_export_pos_size = 16; 1959 rdev->config.r600.sx_max_export_smx_size = 128; 1960 rdev->config.r600.sq_num_cf_insts = 2; 1961 break; 1962 case CHIP_RV630: 1963 case CHIP_RV635: 1964 rdev->config.r600.max_pipes = 2; 1965 rdev->config.r600.max_tile_pipes = 2; 1966 rdev->config.r600.max_simds = 3; 1967 rdev->config.r600.max_backends = 1; 1968 rdev->config.r600.max_gprs = 128; 1969 rdev->config.r600.max_threads = 192; 1970 rdev->config.r600.max_stack_entries = 128; 1971 rdev->config.r600.max_hw_contexts = 8; 1972 rdev->config.r600.max_gs_threads = 4; 1973 rdev->config.r600.sx_max_export_size = 128; 1974 rdev->config.r600.sx_max_export_pos_size = 16; 1975 rdev->config.r600.sx_max_export_smx_size = 128; 1976 rdev->config.r600.sq_num_cf_insts = 2; 1977 break; 1978 case CHIP_RV610: 1979 case CHIP_RV620: 1980 case CHIP_RS780: 1981 case CHIP_RS880: 1982 rdev->config.r600.max_pipes = 1; 1983 rdev->config.r600.max_tile_pipes = 1; 1984 rdev->config.r600.max_simds = 2; 1985 rdev->config.r600.max_backends = 1; 1986 rdev->config.r600.max_gprs = 128; 1987 rdev->config.r600.max_threads = 192; 1988 rdev->config.r600.max_stack_entries = 128; 1989 rdev->config.r600.max_hw_contexts = 4; 1990 rdev->config.r600.max_gs_threads = 4; 1991 rdev->config.r600.sx_max_export_size = 128; 1992 rdev->config.r600.sx_max_export_pos_size = 16; 1993 rdev->config.r600.sx_max_export_smx_size = 128; 1994 rdev->config.r600.sq_num_cf_insts = 1; 1995 break; 1996 case CHIP_RV670: 1997 rdev->config.r600.max_pipes = 4; 1998 rdev->config.r600.max_tile_pipes = 4; 1999 rdev->config.r600.max_simds = 4; 2000 rdev->config.r600.max_backends = 4; 2001 rdev->config.r600.max_gprs = 192; 2002 rdev->config.r600.max_threads = 192; 2003 rdev->config.r600.max_stack_entries = 256; 2004 rdev->config.r600.max_hw_contexts = 8; 2005 rdev->config.r600.max_gs_threads = 16; 2006 rdev->config.r600.sx_max_export_size = 128; 2007 rdev->config.r600.sx_max_export_pos_size = 16; 2008 rdev->config.r600.sx_max_export_smx_size = 128; 2009 rdev->config.r600.sq_num_cf_insts = 2; 2010 break; 2011 default: 2012 break; 2013 } 2014 2015 /* Initialize HDP */ 2016 for (i = 0, j = 0; i < 32; i++, j += 0x18) { 2017 WREG32((0x2c14 + j), 0x00000000); 2018 WREG32((0x2c18 + j), 0x00000000); 2019 WREG32((0x2c1c + j), 0x00000000); 2020 WREG32((0x2c20 + j), 0x00000000); 2021 WREG32((0x2c24 + j), 0x00000000); 2022 } 2023 2024 WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff)); 2025 2026 /* Setup tiling */ 2027 tiling_config = 0; 2028 ramcfg = RREG32(RAMCFG); 2029 switch (rdev->config.r600.max_tile_pipes) { 2030 case 1: 2031 tiling_config |= PIPE_TILING(0); 2032 break; 2033 case 2: 2034 tiling_config |= PIPE_TILING(1); 2035 break; 2036 case 4: 2037 tiling_config |= PIPE_TILING(2); 2038 break; 2039 case 8: 2040 tiling_config |= PIPE_TILING(3); 2041 break; 2042 default: 2043 break; 2044 } 2045 rdev->config.r600.tiling_npipes = rdev->config.r600.max_tile_pipes; 2046 rdev->config.r600.tiling_nbanks = 4 << ((ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT); 2047 tiling_config |= BANK_TILING((ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT); 2048 tiling_config |= GROUP_SIZE((ramcfg & BURSTLENGTH_MASK) >> BURSTLENGTH_SHIFT); 2049 2050 tmp = (ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT; 2051 if (tmp > 3) { 2052 tiling_config |= ROW_TILING(3); 2053 tiling_config |= SAMPLE_SPLIT(3); 2054 } else { 2055 tiling_config |= ROW_TILING(tmp); 2056 tiling_config |= SAMPLE_SPLIT(tmp); 2057 } 2058 tiling_config |= BANK_SWAPS(1); 2059 2060 cc_gc_shader_pipe_config = RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0x00ffff00; 2061 tmp = rdev->config.r600.max_simds - 2062 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R6XX_MAX_SIMDS_MASK); 2063 rdev->config.r600.active_simds = tmp; 2064 2065 disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R6XX_MAX_BACKENDS_MASK; 2066 tmp = 0; 2067 for (i = 0; i < rdev->config.r600.max_backends; i++) 2068 tmp |= (1 << i); 2069 /* if all the backends are disabled, fix it up here */ 2070 if ((disabled_rb_mask & tmp) == tmp) { 2071 for (i = 0; i < rdev->config.r600.max_backends; i++) 2072 disabled_rb_mask &= ~(1 << i); 2073 } 2074 tmp = (tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT; 2075 tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.r600.max_backends, 2076 R6XX_MAX_BACKENDS, disabled_rb_mask); 2077 tiling_config |= tmp << 16; 2078 rdev->config.r600.backend_map = tmp; 2079 2080 rdev->config.r600.tile_config = tiling_config; 2081 WREG32(GB_TILING_CONFIG, tiling_config); 2082 WREG32(DCP_TILING_CONFIG, tiling_config & 0xffff); 2083 WREG32(HDP_TILING_CONFIG, tiling_config & 0xffff); 2084 WREG32(DMA_TILING_CONFIG, tiling_config & 0xffff); 2085 2086 tmp = R6XX_MAX_PIPES - r600_count_pipe_bits((cc_gc_shader_pipe_config & INACTIVE_QD_PIPES_MASK) >> 8); 2087 WREG32(VGT_OUT_DEALLOC_CNTL, (tmp * 4) & DEALLOC_DIST_MASK); 2088 WREG32(VGT_VERTEX_REUSE_BLOCK_CNTL, ((tmp * 4) - 2) & VTX_REUSE_DEPTH_MASK); 2089 2090 /* Setup some CP states */ 2091 WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) | ROQ_IB2_START(0x2b))); 2092 WREG32(CP_MEQ_THRESHOLDS, (MEQ_END(0x40) | ROQ_END(0x40))); 2093 2094 WREG32(TA_CNTL_AUX, (DISABLE_CUBE_ANISO | SYNC_GRADIENT | 2095 SYNC_WALKER | SYNC_ALIGNER)); 2096 /* Setup various GPU states */ 2097 if (rdev->family == CHIP_RV670) 2098 WREG32(ARB_GDEC_RD_CNTL, 0x00000021); 2099 2100 tmp = RREG32(SX_DEBUG_1); 2101 tmp |= SMX_EVENT_RELEASE; 2102 if ((rdev->family > CHIP_R600)) 2103 tmp |= ENABLE_NEW_SMX_ADDRESS; 2104 WREG32(SX_DEBUG_1, tmp); 2105 2106 if (((rdev->family) == CHIP_R600) || 2107 ((rdev->family) == CHIP_RV630) || 2108 ((rdev->family) == CHIP_RV610) || 2109 ((rdev->family) == CHIP_RV620) || 2110 ((rdev->family) == CHIP_RS780) || 2111 ((rdev->family) == CHIP_RS880)) { 2112 WREG32(DB_DEBUG, PREZ_MUST_WAIT_FOR_POSTZ_DONE); 2113 } else { 2114 WREG32(DB_DEBUG, 0); 2115 } 2116 WREG32(DB_WATERMARKS, (DEPTH_FREE(4) | DEPTH_CACHELINE_FREE(16) | 2117 DEPTH_FLUSH(16) | DEPTH_PENDING_FREE(4))); 2118 2119 WREG32(PA_SC_MULTI_CHIP_CNTL, 0); 2120 WREG32(VGT_NUM_INSTANCES, 0); 2121 2122 WREG32(SPI_CONFIG_CNTL, GPR_WRITE_PRIORITY(0)); 2123 WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(0)); 2124 2125 tmp = RREG32(SQ_MS_FIFO_SIZES); 2126 if (((rdev->family) == CHIP_RV610) || 2127 ((rdev->family) == CHIP_RV620) || 2128 ((rdev->family) == CHIP_RS780) || 2129 ((rdev->family) == CHIP_RS880)) { 2130 tmp = (CACHE_FIFO_SIZE(0xa) | 2131 FETCH_FIFO_HIWATER(0xa) | 2132 DONE_FIFO_HIWATER(0xe0) | 2133 ALU_UPDATE_FIFO_HIWATER(0x8)); 2134 } else if (((rdev->family) == CHIP_R600) || 2135 ((rdev->family) == CHIP_RV630)) { 2136 tmp &= ~DONE_FIFO_HIWATER(0xff); 2137 tmp |= DONE_FIFO_HIWATER(0x4); 2138 } 2139 WREG32(SQ_MS_FIFO_SIZES, tmp); 2140 2141 /* SQ_CONFIG, SQ_GPR_RESOURCE_MGMT, SQ_THREAD_RESOURCE_MGMT, SQ_STACK_RESOURCE_MGMT 2142 * should be adjusted as needed by the 2D/3D drivers. This just sets default values 2143 */ 2144 sq_config = RREG32(SQ_CONFIG); 2145 sq_config &= ~(PS_PRIO(3) | 2146 VS_PRIO(3) | 2147 GS_PRIO(3) | 2148 ES_PRIO(3)); 2149 sq_config |= (DX9_CONSTS | 2150 VC_ENABLE | 2151 PS_PRIO(0) | 2152 VS_PRIO(1) | 2153 GS_PRIO(2) | 2154 ES_PRIO(3)); 2155 2156 if ((rdev->family) == CHIP_R600) { 2157 sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(124) | 2158 NUM_VS_GPRS(124) | 2159 NUM_CLAUSE_TEMP_GPRS(4)); 2160 sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(0) | 2161 NUM_ES_GPRS(0)); 2162 sq_thread_resource_mgmt = (NUM_PS_THREADS(136) | 2163 NUM_VS_THREADS(48) | 2164 NUM_GS_THREADS(4) | 2165 NUM_ES_THREADS(4)); 2166 sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(128) | 2167 NUM_VS_STACK_ENTRIES(128)); 2168 sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(0) | 2169 NUM_ES_STACK_ENTRIES(0)); 2170 } else if (((rdev->family) == CHIP_RV610) || 2171 ((rdev->family) == CHIP_RV620) || 2172 ((rdev->family) == CHIP_RS780) || 2173 ((rdev->family) == CHIP_RS880)) { 2174 /* no vertex cache */ 2175 sq_config &= ~VC_ENABLE; 2176 2177 sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) | 2178 NUM_VS_GPRS(44) | 2179 NUM_CLAUSE_TEMP_GPRS(2)); 2180 sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(17) | 2181 NUM_ES_GPRS(17)); 2182 sq_thread_resource_mgmt = (NUM_PS_THREADS(79) | 2183 NUM_VS_THREADS(78) | 2184 NUM_GS_THREADS(4) | 2185 NUM_ES_THREADS(31)); 2186 sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(40) | 2187 NUM_VS_STACK_ENTRIES(40)); 2188 sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(32) | 2189 NUM_ES_STACK_ENTRIES(16)); 2190 } else if (((rdev->family) == CHIP_RV630) || 2191 ((rdev->family) == CHIP_RV635)) { 2192 sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) | 2193 NUM_VS_GPRS(44) | 2194 NUM_CLAUSE_TEMP_GPRS(2)); 2195 sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(18) | 2196 NUM_ES_GPRS(18)); 2197 sq_thread_resource_mgmt = (NUM_PS_THREADS(79) | 2198 NUM_VS_THREADS(78) | 2199 NUM_GS_THREADS(4) | 2200 NUM_ES_THREADS(31)); 2201 sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(40) | 2202 NUM_VS_STACK_ENTRIES(40)); 2203 sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(32) | 2204 NUM_ES_STACK_ENTRIES(16)); 2205 } else if ((rdev->family) == CHIP_RV670) { 2206 sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) | 2207 NUM_VS_GPRS(44) | 2208 NUM_CLAUSE_TEMP_GPRS(2)); 2209 sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(17) | 2210 NUM_ES_GPRS(17)); 2211 sq_thread_resource_mgmt = (NUM_PS_THREADS(79) | 2212 NUM_VS_THREADS(78) | 2213 NUM_GS_THREADS(4) | 2214 NUM_ES_THREADS(31)); 2215 sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(64) | 2216 NUM_VS_STACK_ENTRIES(64)); 2217 sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(64) | 2218 NUM_ES_STACK_ENTRIES(64)); 2219 } 2220 2221 WREG32(SQ_CONFIG, sq_config); 2222 WREG32(SQ_GPR_RESOURCE_MGMT_1, sq_gpr_resource_mgmt_1); 2223 WREG32(SQ_GPR_RESOURCE_MGMT_2, sq_gpr_resource_mgmt_2); 2224 WREG32(SQ_THREAD_RESOURCE_MGMT, sq_thread_resource_mgmt); 2225 WREG32(SQ_STACK_RESOURCE_MGMT_1, sq_stack_resource_mgmt_1); 2226 WREG32(SQ_STACK_RESOURCE_MGMT_2, sq_stack_resource_mgmt_2); 2227 2228 if (((rdev->family) == CHIP_RV610) || 2229 ((rdev->family) == CHIP_RV620) || 2230 ((rdev->family) == CHIP_RS780) || 2231 ((rdev->family) == CHIP_RS880)) { 2232 WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(TC_ONLY)); 2233 } else { 2234 WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(VC_AND_TC)); 2235 } 2236 2237 /* More default values. 2D/3D driver should adjust as needed */ 2238 WREG32(PA_SC_AA_SAMPLE_LOCS_2S, (S0_X(0xc) | S0_Y(0x4) | 2239 S1_X(0x4) | S1_Y(0xc))); 2240 WREG32(PA_SC_AA_SAMPLE_LOCS_4S, (S0_X(0xe) | S0_Y(0xe) | 2241 S1_X(0x2) | S1_Y(0x2) | 2242 S2_X(0xa) | S2_Y(0x6) | 2243 S3_X(0x6) | S3_Y(0xa))); 2244 WREG32(PA_SC_AA_SAMPLE_LOCS_8S_WD0, (S0_X(0xe) | S0_Y(0xb) | 2245 S1_X(0x4) | S1_Y(0xc) | 2246 S2_X(0x1) | S2_Y(0x6) | 2247 S3_X(0xa) | S3_Y(0xe))); 2248 WREG32(PA_SC_AA_SAMPLE_LOCS_8S_WD1, (S4_X(0x6) | S4_Y(0x1) | 2249 S5_X(0x0) | S5_Y(0x0) | 2250 S6_X(0xb) | S6_Y(0x4) | 2251 S7_X(0x7) | S7_Y(0x8))); 2252 2253 WREG32(VGT_STRMOUT_EN, 0); 2254 tmp = rdev->config.r600.max_pipes * 16; 2255 switch (rdev->family) { 2256 case CHIP_RV610: 2257 case CHIP_RV620: 2258 case CHIP_RS780: 2259 case CHIP_RS880: 2260 tmp += 32; 2261 break; 2262 case CHIP_RV670: 2263 tmp += 128; 2264 break; 2265 default: 2266 break; 2267 } 2268 if (tmp > 256) { 2269 tmp = 256; 2270 } 2271 WREG32(VGT_ES_PER_GS, 128); 2272 WREG32(VGT_GS_PER_ES, tmp); 2273 WREG32(VGT_GS_PER_VS, 2); 2274 WREG32(VGT_GS_VERTEX_REUSE, 16); 2275 2276 /* more default values. 2D/3D driver should adjust as needed */ 2277 WREG32(PA_SC_LINE_STIPPLE_STATE, 0); 2278 WREG32(VGT_STRMOUT_EN, 0); 2279 WREG32(SX_MISC, 0); 2280 WREG32(PA_SC_MODE_CNTL, 0); 2281 WREG32(PA_SC_AA_CONFIG, 0); 2282 WREG32(PA_SC_LINE_STIPPLE, 0); 2283 WREG32(SPI_INPUT_Z, 0); 2284 WREG32(SPI_PS_IN_CONTROL_0, NUM_INTERP(2)); 2285 WREG32(CB_COLOR7_FRAG, 0); 2286 2287 /* Clear render buffer base addresses */ 2288 WREG32(CB_COLOR0_BASE, 0); 2289 WREG32(CB_COLOR1_BASE, 0); 2290 WREG32(CB_COLOR2_BASE, 0); 2291 WREG32(CB_COLOR3_BASE, 0); 2292 WREG32(CB_COLOR4_BASE, 0); 2293 WREG32(CB_COLOR5_BASE, 0); 2294 WREG32(CB_COLOR6_BASE, 0); 2295 WREG32(CB_COLOR7_BASE, 0); 2296 WREG32(CB_COLOR7_FRAG, 0); 2297 2298 switch (rdev->family) { 2299 case CHIP_RV610: 2300 case CHIP_RV620: 2301 case CHIP_RS780: 2302 case CHIP_RS880: 2303 tmp = TC_L2_SIZE(8); 2304 break; 2305 case CHIP_RV630: 2306 case CHIP_RV635: 2307 tmp = TC_L2_SIZE(4); 2308 break; 2309 case CHIP_R600: 2310 tmp = TC_L2_SIZE(0) | L2_DISABLE_LATE_HIT; 2311 break; 2312 default: 2313 tmp = TC_L2_SIZE(0); 2314 break; 2315 } 2316 WREG32(TC_CNTL, tmp); 2317 2318 tmp = RREG32(HDP_HOST_PATH_CNTL); 2319 WREG32(HDP_HOST_PATH_CNTL, tmp); 2320 2321 tmp = RREG32(ARB_POP); 2322 tmp |= ENABLE_TC128; 2323 WREG32(ARB_POP, tmp); 2324 2325 WREG32(PA_SC_MULTI_CHIP_CNTL, 0); 2326 WREG32(PA_CL_ENHANCE, (CLIP_VTX_REORDER_ENA | 2327 NUM_CLIP_SEQ(3))); 2328 WREG32(PA_SC_ENHANCE, FORCE_EOV_MAX_CLK_CNT(4095)); 2329 WREG32(VC_ENHANCE, 0); 2330} 2331 2332 2333/* 2334 * Indirect registers accessor 2335 */ 2336u32 r600_pciep_rreg(struct radeon_device *rdev, u32 reg) 2337{ 2338 unsigned long flags; 2339 u32 r; 2340 2341 spin_lock_irqsave(&rdev->pciep_idx_lock, flags); 2342 WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); 2343 (void)RREG32(PCIE_PORT_INDEX); 2344 r = RREG32(PCIE_PORT_DATA); 2345 spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags); 2346 return r; 2347} 2348 2349void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v) 2350{ 2351 unsigned long flags; 2352 2353 spin_lock_irqsave(&rdev->pciep_idx_lock, flags); 2354 WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); 2355 (void)RREG32(PCIE_PORT_INDEX); 2356 WREG32(PCIE_PORT_DATA, (v)); 2357 (void)RREG32(PCIE_PORT_DATA); 2358 spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags); 2359} 2360 2361/* 2362 * CP & Ring 2363 */ 2364void r600_cp_stop(struct radeon_device *rdev) 2365{ 2366 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX) 2367 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 2368 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); 2369 WREG32(SCRATCH_UMSK, 0); 2370 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 2371} 2372 2373int r600_init_microcode(struct radeon_device *rdev) 2374{ 2375 const char *chip_name; 2376 const char *rlc_chip_name; 2377 const char *smc_chip_name = "RV770"; 2378 size_t pfp_req_size, me_req_size, rlc_req_size, smc_req_size = 0; 2379 char fw_name[30]; 2380 int err; 2381 2382 DRM_DEBUG("\n"); 2383 2384 switch (rdev->family) { 2385 case CHIP_R600: 2386 chip_name = "R600"; 2387 rlc_chip_name = "R600"; 2388 break; 2389 case CHIP_RV610: 2390 chip_name = "RV610"; 2391 rlc_chip_name = "R600"; 2392 break; 2393 case CHIP_RV630: 2394 chip_name = "RV630"; 2395 rlc_chip_name = "R600"; 2396 break; 2397 case CHIP_RV620: 2398 chip_name = "RV620"; 2399 rlc_chip_name = "R600"; 2400 break; 2401 case CHIP_RV635: 2402 chip_name = "RV635"; 2403 rlc_chip_name = "R600"; 2404 break; 2405 case CHIP_RV670: 2406 chip_name = "RV670"; 2407 rlc_chip_name = "R600"; 2408 break; 2409 case CHIP_RS780: 2410 case CHIP_RS880: 2411 chip_name = "RS780"; 2412 rlc_chip_name = "R600"; 2413 break; 2414 case CHIP_RV770: 2415 chip_name = "RV770"; 2416 rlc_chip_name = "R700"; 2417 smc_chip_name = "RV770"; 2418 smc_req_size = ALIGN(RV770_SMC_UCODE_SIZE, 4); 2419 break; 2420 case CHIP_RV730: 2421 chip_name = "RV730"; 2422 rlc_chip_name = "R700"; 2423 smc_chip_name = "RV730"; 2424 smc_req_size = ALIGN(RV730_SMC_UCODE_SIZE, 4); 2425 break; 2426 case CHIP_RV710: 2427 chip_name = "RV710"; 2428 rlc_chip_name = "R700"; 2429 smc_chip_name = "RV710"; 2430 smc_req_size = ALIGN(RV710_SMC_UCODE_SIZE, 4); 2431 break; 2432 case CHIP_RV740: 2433 chip_name = "RV730"; 2434 rlc_chip_name = "R700"; 2435 smc_chip_name = "RV740"; 2436 smc_req_size = ALIGN(RV740_SMC_UCODE_SIZE, 4); 2437 break; 2438 case CHIP_CEDAR: 2439 chip_name = "CEDAR"; 2440 rlc_chip_name = "CEDAR"; 2441 smc_chip_name = "CEDAR"; 2442 smc_req_size = ALIGN(CEDAR_SMC_UCODE_SIZE, 4); 2443 break; 2444 case CHIP_REDWOOD: 2445 chip_name = "REDWOOD"; 2446 rlc_chip_name = "REDWOOD"; 2447 smc_chip_name = "REDWOOD"; 2448 smc_req_size = ALIGN(REDWOOD_SMC_UCODE_SIZE, 4); 2449 break; 2450 case CHIP_JUNIPER: 2451 chip_name = "JUNIPER"; 2452 rlc_chip_name = "JUNIPER"; 2453 smc_chip_name = "JUNIPER"; 2454 smc_req_size = ALIGN(JUNIPER_SMC_UCODE_SIZE, 4); 2455 break; 2456 case CHIP_CYPRESS: 2457 case CHIP_HEMLOCK: 2458 chip_name = "CYPRESS"; 2459 rlc_chip_name = "CYPRESS"; 2460 smc_chip_name = "CYPRESS"; 2461 smc_req_size = ALIGN(CYPRESS_SMC_UCODE_SIZE, 4); 2462 break; 2463 case CHIP_PALM: 2464 chip_name = "PALM"; 2465 rlc_chip_name = "SUMO"; 2466 break; 2467 case CHIP_SUMO: 2468 chip_name = "SUMO"; 2469 rlc_chip_name = "SUMO"; 2470 break; 2471 case CHIP_SUMO2: 2472 chip_name = "SUMO2"; 2473 rlc_chip_name = "SUMO"; 2474 break; 2475 default: BUG(); 2476 } 2477 2478 if (rdev->family >= CHIP_CEDAR) { 2479 pfp_req_size = EVERGREEN_PFP_UCODE_SIZE * 4; 2480 me_req_size = EVERGREEN_PM4_UCODE_SIZE * 4; 2481 rlc_req_size = EVERGREEN_RLC_UCODE_SIZE * 4; 2482 } else if (rdev->family >= CHIP_RV770) { 2483 pfp_req_size = R700_PFP_UCODE_SIZE * 4; 2484 me_req_size = R700_PM4_UCODE_SIZE * 4; 2485 rlc_req_size = R700_RLC_UCODE_SIZE * 4; 2486 } else { 2487 pfp_req_size = R600_PFP_UCODE_SIZE * 4; 2488 me_req_size = R600_PM4_UCODE_SIZE * 12; 2489 rlc_req_size = R600_RLC_UCODE_SIZE * 4; 2490 } 2491 2492 DRM_INFO("Loading %s Microcode\n", chip_name); 2493 2494 snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); 2495 err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev); 2496 if (err) 2497 goto out; 2498 if (rdev->pfp_fw->size != pfp_req_size) { 2499 printk(KERN_ERR 2500 "r600_cp: Bogus length %zu in firmware \"%s\"\n", 2501 rdev->pfp_fw->size, fw_name); 2502 err = -EINVAL; 2503 goto out; 2504 } 2505 2506 snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); 2507 err = request_firmware(&rdev->me_fw, fw_name, rdev->dev); 2508 if (err) 2509 goto out; 2510 if (rdev->me_fw->size != me_req_size) { 2511 printk(KERN_ERR 2512 "r600_cp: Bogus length %zu in firmware \"%s\"\n", 2513 rdev->me_fw->size, fw_name); 2514 err = -EINVAL; 2515 } 2516 2517 snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name); 2518 err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev); 2519 if (err) 2520 goto out; 2521 if (rdev->rlc_fw->size != rlc_req_size) { 2522 printk(KERN_ERR 2523 "r600_rlc: Bogus length %zu in firmware \"%s\"\n", 2524 rdev->rlc_fw->size, fw_name); 2525 err = -EINVAL; 2526 } 2527 2528 if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_HEMLOCK)) { 2529 snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", smc_chip_name); 2530 err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev); 2531 if (err) { 2532 printk(KERN_ERR 2533 "smc: error loading firmware \"%s\"\n", 2534 fw_name); 2535 release_firmware(rdev->smc_fw); 2536 rdev->smc_fw = NULL; 2537 err = 0; 2538 } else if (rdev->smc_fw->size != smc_req_size) { 2539 printk(KERN_ERR 2540 "smc: Bogus length %zu in firmware \"%s\"\n", 2541 rdev->smc_fw->size, fw_name); 2542 err = -EINVAL; 2543 } 2544 } 2545 2546out: 2547 if (err) { 2548 if (err != -EINVAL) 2549 printk(KERN_ERR 2550 "r600_cp: Failed to load firmware \"%s\"\n", 2551 fw_name); 2552 release_firmware(rdev->pfp_fw); 2553 rdev->pfp_fw = NULL; 2554 release_firmware(rdev->me_fw); 2555 rdev->me_fw = NULL; 2556 release_firmware(rdev->rlc_fw); 2557 rdev->rlc_fw = NULL; 2558 release_firmware(rdev->smc_fw); 2559 rdev->smc_fw = NULL; 2560 } 2561 return err; 2562} 2563 2564u32 r600_gfx_get_rptr(struct radeon_device *rdev, 2565 struct radeon_ring *ring) 2566{ 2567 u32 rptr; 2568 2569 if (rdev->wb.enabled) 2570 rptr = rdev->wb.wb[ring->rptr_offs/4]; 2571 else 2572 rptr = RREG32(R600_CP_RB_RPTR); 2573 2574 return rptr; 2575} 2576 2577u32 r600_gfx_get_wptr(struct radeon_device *rdev, 2578 struct radeon_ring *ring) 2579{ 2580 u32 wptr; 2581 2582 wptr = RREG32(R600_CP_RB_WPTR); 2583 2584 return wptr; 2585} 2586 2587void r600_gfx_set_wptr(struct radeon_device *rdev, 2588 struct radeon_ring *ring) 2589{ 2590 WREG32(R600_CP_RB_WPTR, ring->wptr); 2591 (void)RREG32(R600_CP_RB_WPTR); 2592} 2593 2594static int r600_cp_load_microcode(struct radeon_device *rdev) 2595{ 2596 const __be32 *fw_data; 2597 int i; 2598 2599 if (!rdev->me_fw || !rdev->pfp_fw) 2600 return -EINVAL; 2601 2602 r600_cp_stop(rdev); 2603 2604 WREG32(CP_RB_CNTL, 2605#ifdef __BIG_ENDIAN 2606 BUF_SWAP_32BIT | 2607#endif 2608 RB_NO_UPDATE | RB_BLKSZ(15) | RB_BUFSZ(3)); 2609 2610 /* Reset cp */ 2611 WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP); 2612 RREG32(GRBM_SOFT_RESET); 2613 mdelay(15); 2614 WREG32(GRBM_SOFT_RESET, 0); 2615 2616 WREG32(CP_ME_RAM_WADDR, 0); 2617 2618 fw_data = (const __be32 *)rdev->me_fw->data; 2619 WREG32(CP_ME_RAM_WADDR, 0); 2620 for (i = 0; i < R600_PM4_UCODE_SIZE * 3; i++) 2621 WREG32(CP_ME_RAM_DATA, 2622 be32_to_cpup(fw_data++)); 2623 2624 fw_data = (const __be32 *)rdev->pfp_fw->data; 2625 WREG32(CP_PFP_UCODE_ADDR, 0); 2626 for (i = 0; i < R600_PFP_UCODE_SIZE; i++) 2627 WREG32(CP_PFP_UCODE_DATA, 2628 be32_to_cpup(fw_data++)); 2629 2630 WREG32(CP_PFP_UCODE_ADDR, 0); 2631 WREG32(CP_ME_RAM_WADDR, 0); 2632 WREG32(CP_ME_RAM_RADDR, 0); 2633 return 0; 2634} 2635 2636int r600_cp_start(struct radeon_device *rdev) 2637{ 2638 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 2639 int r; 2640 uint32_t cp_me; 2641 2642 r = radeon_ring_lock(rdev, ring, 7); 2643 if (r) { 2644 DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r); 2645 return r; 2646 } 2647 radeon_ring_write(ring, PACKET3(PACKET3_ME_INITIALIZE, 5)); 2648 radeon_ring_write(ring, 0x1); 2649 if (rdev->family >= CHIP_RV770) { 2650 radeon_ring_write(ring, 0x0); 2651 radeon_ring_write(ring, rdev->config.rv770.max_hw_contexts - 1); 2652 } else { 2653 radeon_ring_write(ring, 0x3); 2654 radeon_ring_write(ring, rdev->config.r600.max_hw_contexts - 1); 2655 } 2656 radeon_ring_write(ring, PACKET3_ME_INITIALIZE_DEVICE_ID(1)); 2657 radeon_ring_write(ring, 0); 2658 radeon_ring_write(ring, 0); 2659 radeon_ring_unlock_commit(rdev, ring, false); 2660 2661 cp_me = 0xff; 2662 WREG32(R_0086D8_CP_ME_CNTL, cp_me); 2663 return 0; 2664} 2665 2666int r600_cp_resume(struct radeon_device *rdev) 2667{ 2668 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 2669 u32 tmp; 2670 u32 rb_bufsz; 2671 int r; 2672 2673 /* Reset cp */ 2674 WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP); 2675 RREG32(GRBM_SOFT_RESET); 2676 mdelay(15); 2677 WREG32(GRBM_SOFT_RESET, 0); 2678 2679 /* Set ring buffer size */ 2680 rb_bufsz = order_base_2(ring->ring_size / 8); 2681 tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz; 2682#ifdef __BIG_ENDIAN 2683 tmp |= BUF_SWAP_32BIT; 2684#endif 2685 WREG32(CP_RB_CNTL, tmp); 2686 WREG32(CP_SEM_WAIT_TIMER, 0x0); 2687 2688 /* Set the write pointer delay */ 2689 WREG32(CP_RB_WPTR_DELAY, 0); 2690 2691 /* Initialize the ring buffer's read and write pointers */ 2692 WREG32(CP_RB_CNTL, tmp | RB_RPTR_WR_ENA); 2693 WREG32(CP_RB_RPTR_WR, 0); 2694 ring->wptr = 0; 2695 WREG32(CP_RB_WPTR, ring->wptr); 2696 2697 /* set the wb address whether it's enabled or not */ 2698 WREG32(CP_RB_RPTR_ADDR, 2699 ((rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFFFFFFFC)); 2700 WREG32(CP_RB_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFF); 2701 WREG32(SCRATCH_ADDR, ((rdev->wb.gpu_addr + RADEON_WB_SCRATCH_OFFSET) >> 8) & 0xFFFFFFFF); 2702 2703 if (rdev->wb.enabled) 2704 WREG32(SCRATCH_UMSK, 0xff); 2705 else { 2706 tmp |= RB_NO_UPDATE; 2707 WREG32(SCRATCH_UMSK, 0); 2708 } 2709 2710 mdelay(1); 2711 WREG32(CP_RB_CNTL, tmp); 2712 2713 WREG32(CP_RB_BASE, ring->gpu_addr >> 8); 2714 WREG32(CP_DEBUG, (1 << 27) | (1 << 28)); 2715 2716 r600_cp_start(rdev); 2717 ring->ready = true; 2718 r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring); 2719 if (r) { 2720 ring->ready = false; 2721 return r; 2722 } 2723 2724 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX) 2725 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 2726 2727 return 0; 2728} 2729 2730void r600_ring_init(struct radeon_device *rdev, struct radeon_ring *ring, unsigned ring_size) 2731{ 2732 u32 rb_bufsz; 2733 int r; 2734 2735 /* Align ring size */ 2736 rb_bufsz = order_base_2(ring_size / 8); 2737 ring_size = (1 << (rb_bufsz + 1)) * 4; 2738 ring->ring_size = ring_size; 2739 ring->align_mask = 16 - 1; 2740 2741 if (radeon_ring_supports_scratch_reg(rdev, ring)) { 2742 r = radeon_scratch_get(rdev, &ring->rptr_save_reg); 2743 if (r) { 2744 DRM_ERROR("failed to get scratch reg for rptr save (%d).\n", r); 2745 ring->rptr_save_reg = 0; 2746 } 2747 } 2748} 2749 2750void r600_cp_fini(struct radeon_device *rdev) 2751{ 2752 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 2753 r600_cp_stop(rdev); 2754 radeon_ring_fini(rdev, ring); 2755 radeon_scratch_free(rdev, ring->rptr_save_reg); 2756} 2757 2758/* 2759 * GPU scratch registers helpers function. 2760 */ 2761void r600_scratch_init(struct radeon_device *rdev) 2762{ 2763 int i; 2764 2765 rdev->scratch.num_reg = 7; 2766 rdev->scratch.reg_base = SCRATCH_REG0; 2767 for (i = 0; i < rdev->scratch.num_reg; i++) { 2768 rdev->scratch.free[i] = true; 2769 rdev->scratch.reg[i] = rdev->scratch.reg_base + (i * 4); 2770 } 2771} 2772 2773int r600_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) 2774{ 2775 uint32_t scratch; 2776 uint32_t tmp = 0; 2777 unsigned i; 2778 int r; 2779 2780 r = radeon_scratch_get(rdev, &scratch); 2781 if (r) { 2782 DRM_ERROR("radeon: cp failed to get scratch reg (%d).\n", r); 2783 return r; 2784 } 2785 WREG32(scratch, 0xCAFEDEAD); 2786 r = radeon_ring_lock(rdev, ring, 3); 2787 if (r) { 2788 DRM_ERROR("radeon: cp failed to lock ring %d (%d).\n", ring->idx, r); 2789 radeon_scratch_free(rdev, scratch); 2790 return r; 2791 } 2792 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 2793 radeon_ring_write(ring, ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); 2794 radeon_ring_write(ring, 0xDEADBEEF); 2795 radeon_ring_unlock_commit(rdev, ring, false); 2796 for (i = 0; i < rdev->usec_timeout; i++) { 2797 tmp = RREG32(scratch); 2798 if (tmp == 0xDEADBEEF) 2799 break; 2800 DRM_UDELAY(1); 2801 } 2802 if (i < rdev->usec_timeout) { 2803 DRM_INFO("ring test on %d succeeded in %d usecs\n", ring->idx, i); 2804 } else { 2805 DRM_ERROR("radeon: ring %d test failed (scratch(0x%04X)=0x%08X)\n", 2806 ring->idx, scratch, tmp); 2807 r = -EINVAL; 2808 } 2809 radeon_scratch_free(rdev, scratch); 2810 return r; 2811} 2812 2813/* 2814 * CP fences/semaphores 2815 */ 2816 2817void r600_fence_ring_emit(struct radeon_device *rdev, 2818 struct radeon_fence *fence) 2819{ 2820 struct radeon_ring *ring = &rdev->ring[fence->ring]; 2821 u32 cp_coher_cntl = PACKET3_TC_ACTION_ENA | PACKET3_VC_ACTION_ENA | 2822 PACKET3_SH_ACTION_ENA; 2823 2824 if (rdev->family >= CHIP_RV770) 2825 cp_coher_cntl |= PACKET3_FULL_CACHE_ENA; 2826 2827 if (rdev->wb.use_event) { 2828 u64 addr = rdev->fence_drv[fence->ring].gpu_addr; 2829 /* flush read cache over gart */ 2830 radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_SYNC, 3)); 2831 radeon_ring_write(ring, cp_coher_cntl); 2832 radeon_ring_write(ring, 0xFFFFFFFF); 2833 radeon_ring_write(ring, 0); 2834 radeon_ring_write(ring, 10); /* poll interval */ 2835 /* EVENT_WRITE_EOP - flush caches, send int */ 2836 radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); 2837 radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); 2838 radeon_ring_write(ring, lower_32_bits(addr)); 2839 radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); 2840 radeon_ring_write(ring, fence->seq); 2841 radeon_ring_write(ring, 0); 2842 } else { 2843 /* flush read cache over gart */ 2844 radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_SYNC, 3)); 2845 radeon_ring_write(ring, cp_coher_cntl); 2846 radeon_ring_write(ring, 0xFFFFFFFF); 2847 radeon_ring_write(ring, 0); 2848 radeon_ring_write(ring, 10); /* poll interval */ 2849 radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE, 0)); 2850 radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0)); 2851 /* wait for 3D idle clean */ 2852 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 2853 radeon_ring_write(ring, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET) >> 2); 2854 radeon_ring_write(ring, WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit); 2855 /* Emit fence sequence & fire IRQ */ 2856 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 2857 radeon_ring_write(ring, ((rdev->fence_drv[fence->ring].scratch_reg - PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); 2858 radeon_ring_write(ring, fence->seq); 2859 /* CP_INTERRUPT packet 3 no longer exists, use packet 0 */ 2860 radeon_ring_write(ring, PACKET0(CP_INT_STATUS, 0)); 2861 radeon_ring_write(ring, RB_INT_STAT); 2862 } 2863} 2864 2865/** 2866 * r600_semaphore_ring_emit - emit a semaphore on the CP ring 2867 * 2868 * @rdev: radeon_device pointer 2869 * @ring: radeon ring buffer object 2870 * @semaphore: radeon semaphore object 2871 * @emit_wait: Is this a sempahore wait? 2872 * 2873 * Emits a semaphore signal/wait packet to the CP ring and prevents the PFP 2874 * from running ahead of semaphore waits. 2875 */ 2876bool r600_semaphore_ring_emit(struct radeon_device *rdev, 2877 struct radeon_ring *ring, 2878 struct radeon_semaphore *semaphore, 2879 bool emit_wait) 2880{ 2881 uint64_t addr = semaphore->gpu_addr; 2882 unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; 2883 2884 if (rdev->family < CHIP_CAYMAN) 2885 sel |= PACKET3_SEM_WAIT_ON_SIGNAL; 2886 2887 radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); 2888 radeon_ring_write(ring, lower_32_bits(addr)); 2889 radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel); 2890 2891 /* PFP_SYNC_ME packet only exists on 7xx+, only enable it on eg+ */ 2892 if (emit_wait && (rdev->family >= CHIP_CEDAR)) { 2893 /* Prevent the PFP from running ahead of the semaphore wait */ 2894 radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0)); 2895 radeon_ring_write(ring, 0x0); 2896 } 2897 2898 return true; 2899} 2900 2901/** 2902 * r600_copy_cpdma - copy pages using the CP DMA engine 2903 * 2904 * @rdev: radeon_device pointer 2905 * @src_offset: src GPU address 2906 * @dst_offset: dst GPU address 2907 * @num_gpu_pages: number of GPU pages to xfer 2908 * @fence: radeon fence object 2909 * 2910 * Copy GPU paging using the CP DMA engine (r6xx+). 2911 * Used by the radeon ttm implementation to move pages if 2912 * registered as the asic copy callback. 2913 */ 2914struct radeon_fence *r600_copy_cpdma(struct radeon_device *rdev, 2915 uint64_t src_offset, uint64_t dst_offset, 2916 unsigned num_gpu_pages, 2917 struct reservation_object *resv) 2918{ 2919 struct radeon_fence *fence; 2920 struct radeon_sync sync; 2921 int ring_index = rdev->asic->copy.blit_ring_index; 2922 struct radeon_ring *ring = &rdev->ring[ring_index]; 2923 u32 size_in_bytes, cur_size_in_bytes, tmp; 2924 int i, num_loops; 2925 int r = 0; 2926 2927 radeon_sync_create(&sync); 2928 2929 size_in_bytes = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT); 2930 num_loops = DIV_ROUND_UP(size_in_bytes, 0x1fffff); 2931 r = radeon_ring_lock(rdev, ring, num_loops * 6 + 24); 2932 if (r) { 2933 DRM_ERROR("radeon: moving bo (%d).\n", r); 2934 radeon_sync_free(rdev, &sync, NULL); 2935 return ERR_PTR(r); 2936 } 2937 2938 radeon_sync_resv(rdev, &sync, resv, false); 2939 radeon_sync_rings(rdev, &sync, ring->idx); 2940 2941 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 2942 radeon_ring_write(ring, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET) >> 2); 2943 radeon_ring_write(ring, WAIT_3D_IDLE_bit); 2944 for (i = 0; i < num_loops; i++) { 2945 cur_size_in_bytes = size_in_bytes; 2946 if (cur_size_in_bytes > 0x1fffff) 2947 cur_size_in_bytes = 0x1fffff; 2948 size_in_bytes -= cur_size_in_bytes; 2949 tmp = upper_32_bits(src_offset) & 0xff; 2950 if (size_in_bytes == 0) 2951 tmp |= PACKET3_CP_DMA_CP_SYNC; 2952 radeon_ring_write(ring, PACKET3(PACKET3_CP_DMA, 4)); 2953 radeon_ring_write(ring, lower_32_bits(src_offset)); 2954 radeon_ring_write(ring, tmp); 2955 radeon_ring_write(ring, lower_32_bits(dst_offset)); 2956 radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); 2957 radeon_ring_write(ring, cur_size_in_bytes); 2958 src_offset += cur_size_in_bytes; 2959 dst_offset += cur_size_in_bytes; 2960 } 2961 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 2962 radeon_ring_write(ring, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET) >> 2); 2963 radeon_ring_write(ring, WAIT_CP_DMA_IDLE_bit); 2964 2965 r = radeon_fence_emit(rdev, &fence, ring->idx); 2966 if (r) { 2967 radeon_ring_unlock_undo(rdev, ring); 2968 radeon_sync_free(rdev, &sync, NULL); 2969 return ERR_PTR(r); 2970 } 2971 2972 radeon_ring_unlock_commit(rdev, ring, false); 2973 radeon_sync_free(rdev, &sync, fence); 2974 2975 return fence; 2976} 2977 2978int r600_set_surface_reg(struct radeon_device *rdev, int reg, 2979 uint32_t tiling_flags, uint32_t pitch, 2980 uint32_t offset, uint32_t obj_size) 2981{ 2982 /* FIXME: implement */ 2983 return 0; 2984} 2985 2986void r600_clear_surface_reg(struct radeon_device *rdev, int reg) 2987{ 2988 /* FIXME: implement */ 2989} 2990 2991static int r600_startup(struct radeon_device *rdev) 2992{ 2993 struct radeon_ring *ring; 2994 int r; 2995 2996 /* enable pcie gen2 link */ 2997 r600_pcie_gen2_enable(rdev); 2998 2999 /* scratch needs to be initialized before MC */ 3000 r = r600_vram_scratch_init(rdev); 3001 if (r) 3002 return r; 3003 3004 r600_mc_program(rdev); 3005 3006 if (rdev->flags & RADEON_IS_AGP) { 3007 r600_agp_enable(rdev); 3008 } else { 3009 r = r600_pcie_gart_enable(rdev); 3010 if (r) 3011 return r; 3012 } 3013 r600_gpu_init(rdev); 3014 3015 /* allocate wb buffer */ 3016 r = radeon_wb_init(rdev); 3017 if (r) 3018 return r; 3019 3020 r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX); 3021 if (r) { 3022 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r); 3023 return r; 3024 } 3025 3026 if (rdev->has_uvd) { 3027 r = uvd_v1_0_resume(rdev); 3028 if (!r) { 3029 r = radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_UVD_INDEX); 3030 if (r) { 3031 dev_err(rdev->dev, "failed initializing UVD fences (%d).\n", r); 3032 } 3033 } 3034 if (r) 3035 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0; 3036 } 3037 3038 /* Enable IRQ */ 3039 if (!rdev->irq.installed) { 3040 r = radeon_irq_kms_init(rdev); 3041 if (r) 3042 return r; 3043 } 3044 3045 r = r600_irq_init(rdev); 3046 if (r) { 3047 DRM_ERROR("radeon: IH init failed (%d).\n", r); 3048 radeon_irq_kms_fini(rdev); 3049 return r; 3050 } 3051 r600_irq_set(rdev); 3052 3053 ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 3054 r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET, 3055 RADEON_CP_PACKET2); 3056 if (r) 3057 return r; 3058 3059 r = r600_cp_load_microcode(rdev); 3060 if (r) 3061 return r; 3062 r = r600_cp_resume(rdev); 3063 if (r) 3064 return r; 3065 3066 if (rdev->has_uvd) { 3067 ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX]; 3068 if (ring->ring_size) { 3069 r = radeon_ring_init(rdev, ring, ring->ring_size, 0, 3070 RADEON_CP_PACKET2); 3071 if (!r) 3072 r = uvd_v1_0_init(rdev); 3073 if (r) 3074 DRM_ERROR("radeon: failed initializing UVD (%d).\n", r); 3075 } 3076 } 3077 3078 r = radeon_ib_pool_init(rdev); 3079 if (r) { 3080 dev_err(rdev->dev, "IB initialization failed (%d).\n", r); 3081 return r; 3082 } 3083 3084 r = radeon_audio_init(rdev); 3085 if (r) { 3086 DRM_ERROR("radeon: audio init failed\n"); 3087 return r; 3088 } 3089 3090 return 0; 3091} 3092 3093void r600_vga_set_state(struct radeon_device *rdev, bool state) 3094{ 3095 uint32_t temp; 3096 3097 temp = RREG32(CONFIG_CNTL); 3098 if (state == false) { 3099 temp &= ~(1<<0); 3100 temp |= (1<<1); 3101 } else { 3102 temp &= ~(1<<1); 3103 } 3104 WREG32(CONFIG_CNTL, temp); 3105} 3106 3107int r600_resume(struct radeon_device *rdev) 3108{ 3109 int r; 3110 3111 /* Do not reset GPU before posting, on r600 hw unlike on r500 hw, 3112 * posting will perform necessary task to bring back GPU into good 3113 * shape. 3114 */ 3115 /* post card */ 3116 atom_asic_init(rdev->mode_info.atom_context); 3117 3118 if (rdev->pm.pm_method == PM_METHOD_DPM) 3119 radeon_pm_resume(rdev); 3120 3121 rdev->accel_working = true; 3122 r = r600_startup(rdev); 3123 if (r) { 3124 DRM_ERROR("r600 startup failed on resume\n"); 3125 rdev->accel_working = false; 3126 return r; 3127 } 3128 3129 return r; 3130} 3131 3132int r600_suspend(struct radeon_device *rdev) 3133{ 3134 radeon_pm_suspend(rdev); 3135 radeon_audio_fini(rdev); 3136 r600_cp_stop(rdev); 3137 if (rdev->has_uvd) { 3138 uvd_v1_0_fini(rdev); 3139 radeon_uvd_suspend(rdev); 3140 } 3141 r600_irq_suspend(rdev); 3142 radeon_wb_disable(rdev); 3143 r600_pcie_gart_disable(rdev); 3144 3145 return 0; 3146} 3147 3148/* Plan is to move initialization in that function and use 3149 * helper function so that radeon_device_init pretty much 3150 * do nothing more than calling asic specific function. This 3151 * should also allow to remove a bunch of callback function 3152 * like vram_info. 3153 */ 3154int r600_init(struct radeon_device *rdev) 3155{ 3156 int r; 3157 3158 if (r600_debugfs_mc_info_init(rdev)) { 3159 DRM_ERROR("Failed to register debugfs file for mc !\n"); 3160 } 3161 /* Read BIOS */ 3162 if (!radeon_get_bios(rdev)) { 3163 if (ASIC_IS_AVIVO(rdev)) 3164 return -EINVAL; 3165 } 3166 /* Must be an ATOMBIOS */ 3167 if (!rdev->is_atom_bios) { 3168 dev_err(rdev->dev, "Expecting atombios for R600 GPU\n"); 3169 return -EINVAL; 3170 } 3171 r = radeon_atombios_init(rdev); 3172 if (r) 3173 return r; 3174 /* Post card if necessary */ 3175 if (!radeon_card_posted(rdev)) { 3176 if (!rdev->bios) { 3177 dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n"); 3178 return -EINVAL; 3179 } 3180 DRM_INFO("GPU not posted. posting now...\n"); 3181 atom_asic_init(rdev->mode_info.atom_context); 3182 } 3183 /* Initialize scratch registers */ 3184 r600_scratch_init(rdev); 3185 /* Initialize surface registers */ 3186 radeon_surface_init(rdev); 3187 /* Initialize clocks */ 3188 radeon_get_clock_info(rdev->ddev); 3189 /* Fence driver */ 3190 r = radeon_fence_driver_init(rdev); 3191 if (r) 3192 return r; 3193 if (rdev->flags & RADEON_IS_AGP) { 3194 r = radeon_agp_init(rdev); 3195 if (r) 3196 radeon_agp_disable(rdev); 3197 } 3198 r = r600_mc_init(rdev); 3199 if (r) 3200 return r; 3201 /* Memory manager */ 3202 r = radeon_bo_init(rdev); 3203 if (r) 3204 return r; 3205 3206 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { 3207 r = r600_init_microcode(rdev); 3208 if (r) { 3209 DRM_ERROR("Failed to load firmware!\n"); 3210 return r; 3211 } 3212 } 3213 3214 /* Initialize power management */ 3215 radeon_pm_init(rdev); 3216 3217 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; 3218 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); 3219 3220 if (rdev->has_uvd) { 3221 r = radeon_uvd_init(rdev); 3222 if (!r) { 3223 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_obj = NULL; 3224 r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_UVD_INDEX], 4096); 3225 } 3226 } 3227 3228 rdev->ih.ring_obj = NULL; 3229 r600_ih_ring_init(rdev, 64 * 1024); 3230 3231 r = r600_pcie_gart_init(rdev); 3232 if (r) 3233 return r; 3234 3235 rdev->accel_working = true; 3236 r = r600_startup(rdev); 3237 if (r) { 3238 dev_err(rdev->dev, "disabling GPU acceleration\n"); 3239 r600_cp_fini(rdev); 3240 r600_irq_fini(rdev); 3241 radeon_wb_fini(rdev); 3242 radeon_ib_pool_fini(rdev); 3243 radeon_irq_kms_fini(rdev); 3244 r600_pcie_gart_fini(rdev); 3245 rdev->accel_working = false; 3246 } 3247 3248 return 0; 3249} 3250 3251void r600_fini(struct radeon_device *rdev) 3252{ 3253 radeon_pm_fini(rdev); 3254 radeon_audio_fini(rdev); 3255 r600_cp_fini(rdev); 3256 r600_irq_fini(rdev); 3257 if (rdev->has_uvd) { 3258 uvd_v1_0_fini(rdev); 3259 radeon_uvd_fini(rdev); 3260 } 3261 radeon_wb_fini(rdev); 3262 radeon_ib_pool_fini(rdev); 3263 radeon_irq_kms_fini(rdev); 3264 r600_pcie_gart_fini(rdev); 3265 r600_vram_scratch_fini(rdev); 3266 radeon_agp_fini(rdev); 3267 radeon_gem_fini(rdev); 3268 radeon_fence_driver_fini(rdev); 3269 radeon_bo_fini(rdev); 3270 radeon_atombios_fini(rdev); 3271 kfree(rdev->bios); 3272 rdev->bios = NULL; 3273} 3274 3275 3276/* 3277 * CS stuff 3278 */ 3279void r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) 3280{ 3281 struct radeon_ring *ring = &rdev->ring[ib->ring]; 3282 u32 next_rptr; 3283 3284 if (ring->rptr_save_reg) { 3285 next_rptr = ring->wptr + 3 + 4; 3286 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 3287 radeon_ring_write(ring, ((ring->rptr_save_reg - 3288 PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); 3289 radeon_ring_write(ring, next_rptr); 3290 } else if (rdev->wb.enabled) { 3291 next_rptr = ring->wptr + 5 + 4; 3292 radeon_ring_write(ring, PACKET3(PACKET3_MEM_WRITE, 3)); 3293 radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); 3294 radeon_ring_write(ring, (upper_32_bits(ring->next_rptr_gpu_addr) & 0xff) | (1 << 18)); 3295 radeon_ring_write(ring, next_rptr); 3296 radeon_ring_write(ring, 0); 3297 } 3298 3299 radeon_ring_write(ring, PACKET3(PACKET3_INDIRECT_BUFFER, 2)); 3300 radeon_ring_write(ring, 3301#ifdef __BIG_ENDIAN 3302 (2 << 0) | 3303#endif 3304 (ib->gpu_addr & 0xFFFFFFFC)); 3305 radeon_ring_write(ring, upper_32_bits(ib->gpu_addr) & 0xFF); 3306 radeon_ring_write(ring, ib->length_dw); 3307} 3308 3309int r600_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) 3310{ 3311 struct radeon_ib ib; 3312 uint32_t scratch; 3313 uint32_t tmp = 0; 3314 unsigned i; 3315 int r; 3316 3317 r = radeon_scratch_get(rdev, &scratch); 3318 if (r) { 3319 DRM_ERROR("radeon: failed to get scratch reg (%d).\n", r); 3320 return r; 3321 } 3322 WREG32(scratch, 0xCAFEDEAD); 3323 r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); 3324 if (r) { 3325 DRM_ERROR("radeon: failed to get ib (%d).\n", r); 3326 goto free_scratch; 3327 } 3328 ib.ptr[0] = PACKET3(PACKET3_SET_CONFIG_REG, 1); 3329 ib.ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2); 3330 ib.ptr[2] = 0xDEADBEEF; 3331 ib.length_dw = 3; 3332 r = radeon_ib_schedule(rdev, &ib, NULL, false); 3333 if (r) { 3334 DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); 3335 goto free_ib; 3336 } 3337 r = radeon_fence_wait(ib.fence, false); 3338 if (r) { 3339 DRM_ERROR("radeon: fence wait failed (%d).\n", r); 3340 goto free_ib; 3341 } 3342 for (i = 0; i < rdev->usec_timeout; i++) { 3343 tmp = RREG32(scratch); 3344 if (tmp == 0xDEADBEEF) 3345 break; 3346 DRM_UDELAY(1); 3347 } 3348 if (i < rdev->usec_timeout) { 3349 DRM_INFO("ib test on ring %d succeeded in %u usecs\n", ib.fence->ring, i); 3350 } else { 3351 DRM_ERROR("radeon: ib test failed (scratch(0x%04X)=0x%08X)\n", 3352 scratch, tmp); 3353 r = -EINVAL; 3354 } 3355free_ib: 3356 radeon_ib_free(rdev, &ib); 3357free_scratch: 3358 radeon_scratch_free(rdev, scratch); 3359 return r; 3360} 3361 3362/* 3363 * Interrupts 3364 * 3365 * Interrupts use a ring buffer on r6xx/r7xx hardware. It works pretty 3366 * the same as the CP ring buffer, but in reverse. Rather than the CPU 3367 * writing to the ring and the GPU consuming, the GPU writes to the ring 3368 * and host consumes. As the host irq handler processes interrupts, it 3369 * increments the rptr. When the rptr catches up with the wptr, all the 3370 * current interrupts have been processed. 3371 */ 3372 3373void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size) 3374{ 3375 u32 rb_bufsz; 3376 3377 /* Align ring size */ 3378 rb_bufsz = order_base_2(ring_size / 4); 3379 ring_size = (1 << rb_bufsz) * 4; 3380 rdev->ih.ring_size = ring_size; 3381 rdev->ih.ptr_mask = rdev->ih.ring_size - 1; 3382 rdev->ih.rptr = 0; 3383} 3384 3385int r600_ih_ring_alloc(struct radeon_device *rdev) 3386{ 3387 int r; 3388 3389 /* Allocate ring buffer */ 3390 if (rdev->ih.ring_obj == NULL) { 3391 r = radeon_bo_create(rdev, rdev->ih.ring_size, 3392 PAGE_SIZE, true, 3393 RADEON_GEM_DOMAIN_GTT, 0, 3394 NULL, NULL, &rdev->ih.ring_obj); 3395 if (r) { 3396 DRM_ERROR("radeon: failed to create ih ring buffer (%d).\n", r); 3397 return r; 3398 } 3399 r = radeon_bo_reserve(rdev->ih.ring_obj, false); 3400 if (unlikely(r != 0)) 3401 return r; 3402 r = radeon_bo_pin(rdev->ih.ring_obj, 3403 RADEON_GEM_DOMAIN_GTT, 3404 &rdev->ih.gpu_addr); 3405 if (r) { 3406 radeon_bo_unreserve(rdev->ih.ring_obj); 3407 DRM_ERROR("radeon: failed to pin ih ring buffer (%d).\n", r); 3408 return r; 3409 } 3410 r = radeon_bo_kmap(rdev->ih.ring_obj, 3411 (void **)&rdev->ih.ring); 3412 radeon_bo_unreserve(rdev->ih.ring_obj); 3413 if (r) { 3414 DRM_ERROR("radeon: failed to map ih ring buffer (%d).\n", r); 3415 return r; 3416 } 3417 } 3418 return 0; 3419} 3420 3421void r600_ih_ring_fini(struct radeon_device *rdev) 3422{ 3423 int r; 3424 if (rdev->ih.ring_obj) { 3425 r = radeon_bo_reserve(rdev->ih.ring_obj, false); 3426 if (likely(r == 0)) { 3427 radeon_bo_kunmap(rdev->ih.ring_obj); 3428 radeon_bo_unpin(rdev->ih.ring_obj); 3429 radeon_bo_unreserve(rdev->ih.ring_obj); 3430 } 3431 radeon_bo_unref(&rdev->ih.ring_obj); 3432 rdev->ih.ring = NULL; 3433 rdev->ih.ring_obj = NULL; 3434 } 3435} 3436 3437void r600_rlc_stop(struct radeon_device *rdev) 3438{ 3439 3440 if ((rdev->family >= CHIP_RV770) && 3441 (rdev->family <= CHIP_RV740)) { 3442 /* r7xx asics need to soft reset RLC before halting */ 3443 WREG32(SRBM_SOFT_RESET, SOFT_RESET_RLC); 3444 RREG32(SRBM_SOFT_RESET); 3445 mdelay(15); 3446 WREG32(SRBM_SOFT_RESET, 0); 3447 RREG32(SRBM_SOFT_RESET); 3448 } 3449 3450 WREG32(RLC_CNTL, 0); 3451} 3452 3453static void r600_rlc_start(struct radeon_device *rdev) 3454{ 3455 WREG32(RLC_CNTL, RLC_ENABLE); 3456} 3457 3458static int r600_rlc_resume(struct radeon_device *rdev) 3459{ 3460 u32 i; 3461 const __be32 *fw_data; 3462 3463 if (!rdev->rlc_fw) 3464 return -EINVAL; 3465 3466 r600_rlc_stop(rdev); 3467 3468 WREG32(RLC_HB_CNTL, 0); 3469 3470 WREG32(RLC_HB_BASE, 0); 3471 WREG32(RLC_HB_RPTR, 0); 3472 WREG32(RLC_HB_WPTR, 0); 3473 WREG32(RLC_HB_WPTR_LSB_ADDR, 0); 3474 WREG32(RLC_HB_WPTR_MSB_ADDR, 0); 3475 WREG32(RLC_MC_CNTL, 0); 3476 WREG32(RLC_UCODE_CNTL, 0); 3477 3478 fw_data = (const __be32 *)rdev->rlc_fw->data; 3479 if (rdev->family >= CHIP_RV770) { 3480 for (i = 0; i < R700_RLC_UCODE_SIZE; i++) { 3481 WREG32(RLC_UCODE_ADDR, i); 3482 WREG32(RLC_UCODE_DATA, be32_to_cpup(fw_data++)); 3483 } 3484 } else { 3485 for (i = 0; i < R600_RLC_UCODE_SIZE; i++) { 3486 WREG32(RLC_UCODE_ADDR, i); 3487 WREG32(RLC_UCODE_DATA, be32_to_cpup(fw_data++)); 3488 } 3489 } 3490 WREG32(RLC_UCODE_ADDR, 0); 3491 3492 r600_rlc_start(rdev); 3493 3494 return 0; 3495} 3496 3497static void r600_enable_interrupts(struct radeon_device *rdev) 3498{ 3499 u32 ih_cntl = RREG32(IH_CNTL); 3500 u32 ih_rb_cntl = RREG32(IH_RB_CNTL); 3501 3502 ih_cntl |= ENABLE_INTR; 3503 ih_rb_cntl |= IH_RB_ENABLE; 3504 WREG32(IH_CNTL, ih_cntl); 3505 WREG32(IH_RB_CNTL, ih_rb_cntl); 3506 rdev->ih.enabled = true; 3507} 3508 3509void r600_disable_interrupts(struct radeon_device *rdev) 3510{ 3511 u32 ih_rb_cntl = RREG32(IH_RB_CNTL); 3512 u32 ih_cntl = RREG32(IH_CNTL); 3513 3514 ih_rb_cntl &= ~IH_RB_ENABLE; 3515 ih_cntl &= ~ENABLE_INTR; 3516 WREG32(IH_RB_CNTL, ih_rb_cntl); 3517 WREG32(IH_CNTL, ih_cntl); 3518 /* set rptr, wptr to 0 */ 3519 WREG32(IH_RB_RPTR, 0); 3520 WREG32(IH_RB_WPTR, 0); 3521 rdev->ih.enabled = false; 3522 rdev->ih.rptr = 0; 3523} 3524 3525static void r600_disable_interrupt_state(struct radeon_device *rdev) 3526{ 3527 u32 tmp; 3528 3529 WREG32(CP_INT_CNTL, CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE); 3530 tmp = RREG32(DMA_CNTL) & ~TRAP_ENABLE; 3531 WREG32(DMA_CNTL, tmp); 3532 WREG32(GRBM_INT_CNTL, 0); 3533 WREG32(DxMODE_INT_MASK, 0); 3534 WREG32(D1GRPH_INTERRUPT_CONTROL, 0); 3535 WREG32(D2GRPH_INTERRUPT_CONTROL, 0); 3536 if (ASIC_IS_DCE3(rdev)) { 3537 WREG32(DCE3_DACA_AUTODETECT_INT_CONTROL, 0); 3538 WREG32(DCE3_DACB_AUTODETECT_INT_CONTROL, 0); 3539 tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY; 3540 WREG32(DC_HPD1_INT_CONTROL, tmp); 3541 tmp = RREG32(DC_HPD2_INT_CONTROL) & DC_HPDx_INT_POLARITY; 3542 WREG32(DC_HPD2_INT_CONTROL, tmp); 3543 tmp = RREG32(DC_HPD3_INT_CONTROL) & DC_HPDx_INT_POLARITY; 3544 WREG32(DC_HPD3_INT_CONTROL, tmp); 3545 tmp = RREG32(DC_HPD4_INT_CONTROL) & DC_HPDx_INT_POLARITY; 3546 WREG32(DC_HPD4_INT_CONTROL, tmp); 3547 if (ASIC_IS_DCE32(rdev)) { 3548 tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY; 3549 WREG32(DC_HPD5_INT_CONTROL, tmp); 3550 tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY; 3551 WREG32(DC_HPD6_INT_CONTROL, tmp); 3552 tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET0) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3553 WREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET0, tmp); 3554 tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET1) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3555 WREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET1, tmp); 3556 } else { 3557 tmp = RREG32(HDMI0_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3558 WREG32(HDMI0_AUDIO_PACKET_CONTROL, tmp); 3559 tmp = RREG32(DCE3_HDMI1_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3560 WREG32(DCE3_HDMI1_AUDIO_PACKET_CONTROL, tmp); 3561 } 3562 } else { 3563 WREG32(DACA_AUTODETECT_INT_CONTROL, 0); 3564 WREG32(DACB_AUTODETECT_INT_CONTROL, 0); 3565 tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL) & DC_HOT_PLUG_DETECTx_INT_POLARITY; 3566 WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); 3567 tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL) & DC_HOT_PLUG_DETECTx_INT_POLARITY; 3568 WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); 3569 tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL) & DC_HOT_PLUG_DETECTx_INT_POLARITY; 3570 WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); 3571 tmp = RREG32(HDMI0_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3572 WREG32(HDMI0_AUDIO_PACKET_CONTROL, tmp); 3573 tmp = RREG32(HDMI1_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3574 WREG32(HDMI1_AUDIO_PACKET_CONTROL, tmp); 3575 } 3576} 3577 3578int r600_irq_init(struct radeon_device *rdev) 3579{ 3580 int ret = 0; 3581 int rb_bufsz; 3582 u32 interrupt_cntl, ih_cntl, ih_rb_cntl; 3583 3584 /* allocate ring */ 3585 ret = r600_ih_ring_alloc(rdev); 3586 if (ret) 3587 return ret; 3588 3589 /* disable irqs */ 3590 r600_disable_interrupts(rdev); 3591 3592 /* init rlc */ 3593 if (rdev->family >= CHIP_CEDAR) 3594 ret = evergreen_rlc_resume(rdev); 3595 else 3596 ret = r600_rlc_resume(rdev); 3597 if (ret) { 3598 r600_ih_ring_fini(rdev); 3599 return ret; 3600 } 3601 3602 /* setup interrupt control */ 3603 /* set dummy read address to ring address */ 3604 WREG32(INTERRUPT_CNTL2, rdev->ih.gpu_addr >> 8); 3605 interrupt_cntl = RREG32(INTERRUPT_CNTL); 3606 /* IH_DUMMY_RD_OVERRIDE=0 - dummy read disabled with msi, enabled without msi 3607 * IH_DUMMY_RD_OVERRIDE=1 - dummy read controlled by IH_DUMMY_RD_EN 3608 */ 3609 interrupt_cntl &= ~IH_DUMMY_RD_OVERRIDE; 3610 /* IH_REQ_NONSNOOP_EN=1 if ring is in non-cacheable memory, e.g., vram */ 3611 interrupt_cntl &= ~IH_REQ_NONSNOOP_EN; 3612 WREG32(INTERRUPT_CNTL, interrupt_cntl); 3613 3614 WREG32(IH_RB_BASE, rdev->ih.gpu_addr >> 8); 3615 rb_bufsz = order_base_2(rdev->ih.ring_size / 4); 3616 3617 ih_rb_cntl = (IH_WPTR_OVERFLOW_ENABLE | 3618 IH_WPTR_OVERFLOW_CLEAR | 3619 (rb_bufsz << 1)); 3620 3621 if (rdev->wb.enabled) 3622 ih_rb_cntl |= IH_WPTR_WRITEBACK_ENABLE; 3623 3624 /* set the writeback address whether it's enabled or not */ 3625 WREG32(IH_RB_WPTR_ADDR_LO, (rdev->wb.gpu_addr + R600_WB_IH_WPTR_OFFSET) & 0xFFFFFFFC); 3626 WREG32(IH_RB_WPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + R600_WB_IH_WPTR_OFFSET) & 0xFF); 3627 3628 WREG32(IH_RB_CNTL, ih_rb_cntl); 3629 3630 /* set rptr, wptr to 0 */ 3631 WREG32(IH_RB_RPTR, 0); 3632 WREG32(IH_RB_WPTR, 0); 3633 3634 /* Default settings for IH_CNTL (disabled at first) */ 3635 ih_cntl = MC_WRREQ_CREDIT(0x10) | MC_WR_CLEAN_CNT(0x10); 3636 /* RPTR_REARM only works if msi's are enabled */ 3637 if (rdev->msi_enabled) 3638 ih_cntl |= RPTR_REARM; 3639 WREG32(IH_CNTL, ih_cntl); 3640 3641 /* force the active interrupt state to all disabled */ 3642 if (rdev->family >= CHIP_CEDAR) 3643 evergreen_disable_interrupt_state(rdev); 3644 else 3645 r600_disable_interrupt_state(rdev); 3646 3647 /* at this point everything should be setup correctly to enable master */ 3648 pci_set_master(rdev->pdev); 3649 3650 /* enable irqs */ 3651 r600_enable_interrupts(rdev); 3652 3653 return ret; 3654} 3655 3656void r600_irq_suspend(struct radeon_device *rdev) 3657{ 3658 r600_irq_disable(rdev); 3659 r600_rlc_stop(rdev); 3660} 3661 3662void r600_irq_fini(struct radeon_device *rdev) 3663{ 3664 r600_irq_suspend(rdev); 3665 r600_ih_ring_fini(rdev); 3666} 3667 3668int r600_irq_set(struct radeon_device *rdev) 3669{ 3670 u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE; 3671 u32 mode_int = 0; 3672 u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0; 3673 u32 grbm_int_cntl = 0; 3674 u32 hdmi0, hdmi1; 3675 u32 dma_cntl; 3676 u32 thermal_int = 0; 3677 3678 if (!rdev->irq.installed) { 3679 WARN(1, "Can't enable IRQ/MSI because no handler is installed\n"); 3680 return -EINVAL; 3681 } 3682 /* don't enable anything if the ih is disabled */ 3683 if (!rdev->ih.enabled) { 3684 r600_disable_interrupts(rdev); 3685 /* force the active interrupt state to all disabled */ 3686 r600_disable_interrupt_state(rdev); 3687 return 0; 3688 } 3689 3690 if (ASIC_IS_DCE3(rdev)) { 3691 hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN; 3692 hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN; 3693 hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN; 3694 hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN; 3695 if (ASIC_IS_DCE32(rdev)) { 3696 hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN; 3697 hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN; 3698 hdmi0 = RREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET0) & ~AFMT_AZ_FORMAT_WTRIG_MASK; 3699 hdmi1 = RREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET1) & ~AFMT_AZ_FORMAT_WTRIG_MASK; 3700 } else { 3701 hdmi0 = RREG32(HDMI0_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3702 hdmi1 = RREG32(DCE3_HDMI1_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3703 } 3704 } else { 3705 hpd1 = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL) & ~DC_HPDx_INT_EN; 3706 hpd2 = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL) & ~DC_HPDx_INT_EN; 3707 hpd3 = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL) & ~DC_HPDx_INT_EN; 3708 hdmi0 = RREG32(HDMI0_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3709 hdmi1 = RREG32(HDMI1_AUDIO_PACKET_CONTROL) & ~HDMI0_AZ_FORMAT_WTRIG_MASK; 3710 } 3711 3712 dma_cntl = RREG32(DMA_CNTL) & ~TRAP_ENABLE; 3713 3714 if ((rdev->family > CHIP_R600) && (rdev->family < CHIP_RV770)) { 3715 thermal_int = RREG32(CG_THERMAL_INT) & 3716 ~(THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW); 3717 } else if (rdev->family >= CHIP_RV770) { 3718 thermal_int = RREG32(RV770_CG_THERMAL_INT) & 3719 ~(THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW); 3720 } 3721 if (rdev->irq.dpm_thermal) { 3722 DRM_DEBUG("dpm thermal\n"); 3723 thermal_int |= THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW; 3724 } 3725 3726 if (atomic_read(&rdev->irq.ring_int[RADEON_RING_TYPE_GFX_INDEX])) { 3727 DRM_DEBUG("r600_irq_set: sw int\n"); 3728 cp_int_cntl |= RB_INT_ENABLE; 3729 cp_int_cntl |= TIME_STAMP_INT_ENABLE; 3730 } 3731 3732 if (atomic_read(&rdev->irq.ring_int[R600_RING_TYPE_DMA_INDEX])) { 3733 DRM_DEBUG("r600_irq_set: sw int dma\n"); 3734 dma_cntl |= TRAP_ENABLE; 3735 } 3736 3737 if (rdev->irq.crtc_vblank_int[0] || 3738 atomic_read(&rdev->irq.pflip[0])) { 3739 DRM_DEBUG("r600_irq_set: vblank 0\n"); 3740 mode_int |= D1MODE_VBLANK_INT_MASK; 3741 } 3742 if (rdev->irq.crtc_vblank_int[1] || 3743 atomic_read(&rdev->irq.pflip[1])) { 3744 DRM_DEBUG("r600_irq_set: vblank 1\n"); 3745 mode_int |= D2MODE_VBLANK_INT_MASK; 3746 } 3747 if (rdev->irq.hpd[0]) { 3748 DRM_DEBUG("r600_irq_set: hpd 1\n"); 3749 hpd1 |= DC_HPDx_INT_EN; 3750 } 3751 if (rdev->irq.hpd[1]) { 3752 DRM_DEBUG("r600_irq_set: hpd 2\n"); 3753 hpd2 |= DC_HPDx_INT_EN; 3754 } 3755 if (rdev->irq.hpd[2]) { 3756 DRM_DEBUG("r600_irq_set: hpd 3\n"); 3757 hpd3 |= DC_HPDx_INT_EN; 3758 } 3759 if (rdev->irq.hpd[3]) { 3760 DRM_DEBUG("r600_irq_set: hpd 4\n"); 3761 hpd4 |= DC_HPDx_INT_EN; 3762 } 3763 if (rdev->irq.hpd[4]) { 3764 DRM_DEBUG("r600_irq_set: hpd 5\n"); 3765 hpd5 |= DC_HPDx_INT_EN; 3766 } 3767 if (rdev->irq.hpd[5]) { 3768 DRM_DEBUG("r600_irq_set: hpd 6\n"); 3769 hpd6 |= DC_HPDx_INT_EN; 3770 } 3771 if (rdev->irq.afmt[0]) { 3772 DRM_DEBUG("r600_irq_set: hdmi 0\n"); 3773 hdmi0 |= HDMI0_AZ_FORMAT_WTRIG_MASK; 3774 } 3775 if (rdev->irq.afmt[1]) { 3776 DRM_DEBUG("r600_irq_set: hdmi 0\n"); 3777 hdmi1 |= HDMI0_AZ_FORMAT_WTRIG_MASK; 3778 } 3779 3780 WREG32(CP_INT_CNTL, cp_int_cntl); 3781 WREG32(DMA_CNTL, dma_cntl); 3782 WREG32(DxMODE_INT_MASK, mode_int); 3783 WREG32(D1GRPH_INTERRUPT_CONTROL, DxGRPH_PFLIP_INT_MASK); 3784 WREG32(D2GRPH_INTERRUPT_CONTROL, DxGRPH_PFLIP_INT_MASK); 3785 WREG32(GRBM_INT_CNTL, grbm_int_cntl); 3786 if (ASIC_IS_DCE3(rdev)) { 3787 WREG32(DC_HPD1_INT_CONTROL, hpd1); 3788 WREG32(DC_HPD2_INT_CONTROL, hpd2); 3789 WREG32(DC_HPD3_INT_CONTROL, hpd3); 3790 WREG32(DC_HPD4_INT_CONTROL, hpd4); 3791 if (ASIC_IS_DCE32(rdev)) { 3792 WREG32(DC_HPD5_INT_CONTROL, hpd5); 3793 WREG32(DC_HPD6_INT_CONTROL, hpd6); 3794 WREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET0, hdmi0); 3795 WREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET1, hdmi1); 3796 } else { 3797 WREG32(HDMI0_AUDIO_PACKET_CONTROL, hdmi0); 3798 WREG32(DCE3_HDMI1_AUDIO_PACKET_CONTROL, hdmi1); 3799 } 3800 } else { 3801 WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, hpd1); 3802 WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); 3803 WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, hpd3); 3804 WREG32(HDMI0_AUDIO_PACKET_CONTROL, hdmi0); 3805 WREG32(HDMI1_AUDIO_PACKET_CONTROL, hdmi1); 3806 } 3807 if ((rdev->family > CHIP_R600) && (rdev->family < CHIP_RV770)) { 3808 WREG32(CG_THERMAL_INT, thermal_int); 3809 } else if (rdev->family >= CHIP_RV770) { 3810 WREG32(RV770_CG_THERMAL_INT, thermal_int); 3811 } 3812 3813 /* posting read */ 3814 RREG32(R_000E50_SRBM_STATUS); 3815 3816 return 0; 3817} 3818 3819static void r600_irq_ack(struct radeon_device *rdev) 3820{ 3821 u32 tmp; 3822 3823 if (ASIC_IS_DCE3(rdev)) { 3824 rdev->irq.stat_regs.r600.disp_int = RREG32(DCE3_DISP_INTERRUPT_STATUS); 3825 rdev->irq.stat_regs.r600.disp_int_cont = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE); 3826 rdev->irq.stat_regs.r600.disp_int_cont2 = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE2); 3827 if (ASIC_IS_DCE32(rdev)) { 3828 rdev->irq.stat_regs.r600.hdmi0_status = RREG32(AFMT_STATUS + DCE3_HDMI_OFFSET0); 3829 rdev->irq.stat_regs.r600.hdmi1_status = RREG32(AFMT_STATUS + DCE3_HDMI_OFFSET1); 3830 } else { 3831 rdev->irq.stat_regs.r600.hdmi0_status = RREG32(HDMI0_STATUS); 3832 rdev->irq.stat_regs.r600.hdmi1_status = RREG32(DCE3_HDMI1_STATUS); 3833 } 3834 } else { 3835 rdev->irq.stat_regs.r600.disp_int = RREG32(DISP_INTERRUPT_STATUS); 3836 rdev->irq.stat_regs.r600.disp_int_cont = RREG32(DISP_INTERRUPT_STATUS_CONTINUE); 3837 rdev->irq.stat_regs.r600.disp_int_cont2 = 0; 3838 rdev->irq.stat_regs.r600.hdmi0_status = RREG32(HDMI0_STATUS); 3839 rdev->irq.stat_regs.r600.hdmi1_status = RREG32(HDMI1_STATUS); 3840 } 3841 rdev->irq.stat_regs.r600.d1grph_int = RREG32(D1GRPH_INTERRUPT_STATUS); 3842 rdev->irq.stat_regs.r600.d2grph_int = RREG32(D2GRPH_INTERRUPT_STATUS); 3843 3844 if (rdev->irq.stat_regs.r600.d1grph_int & DxGRPH_PFLIP_INT_OCCURRED) 3845 WREG32(D1GRPH_INTERRUPT_STATUS, DxGRPH_PFLIP_INT_CLEAR); 3846 if (rdev->irq.stat_regs.r600.d2grph_int & DxGRPH_PFLIP_INT_OCCURRED) 3847 WREG32(D2GRPH_INTERRUPT_STATUS, DxGRPH_PFLIP_INT_CLEAR); 3848 if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VBLANK_INTERRUPT) 3849 WREG32(D1MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK); 3850 if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VLINE_INTERRUPT) 3851 WREG32(D1MODE_VLINE_STATUS, DxMODE_VLINE_ACK); 3852 if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VBLANK_INTERRUPT) 3853 WREG32(D2MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK); 3854 if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VLINE_INTERRUPT) 3855 WREG32(D2MODE_VLINE_STATUS, DxMODE_VLINE_ACK); 3856 if (rdev->irq.stat_regs.r600.disp_int & DC_HPD1_INTERRUPT) { 3857 if (ASIC_IS_DCE3(rdev)) { 3858 tmp = RREG32(DC_HPD1_INT_CONTROL); 3859 tmp |= DC_HPDx_INT_ACK; 3860 WREG32(DC_HPD1_INT_CONTROL, tmp); 3861 } else { 3862 tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL); 3863 tmp |= DC_HPDx_INT_ACK; 3864 WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); 3865 } 3866 } 3867 if (rdev->irq.stat_regs.r600.disp_int & DC_HPD2_INTERRUPT) { 3868 if (ASIC_IS_DCE3(rdev)) { 3869 tmp = RREG32(DC_HPD2_INT_CONTROL); 3870 tmp |= DC_HPDx_INT_ACK; 3871 WREG32(DC_HPD2_INT_CONTROL, tmp); 3872 } else { 3873 tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL); 3874 tmp |= DC_HPDx_INT_ACK; 3875 WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); 3876 } 3877 } 3878 if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD3_INTERRUPT) { 3879 if (ASIC_IS_DCE3(rdev)) { 3880 tmp = RREG32(DC_HPD3_INT_CONTROL); 3881 tmp |= DC_HPDx_INT_ACK; 3882 WREG32(DC_HPD3_INT_CONTROL, tmp); 3883 } else { 3884 tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL); 3885 tmp |= DC_HPDx_INT_ACK; 3886 WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); 3887 } 3888 } 3889 if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD4_INTERRUPT) { 3890 tmp = RREG32(DC_HPD4_INT_CONTROL); 3891 tmp |= DC_HPDx_INT_ACK; 3892 WREG32(DC_HPD4_INT_CONTROL, tmp); 3893 } 3894 if (ASIC_IS_DCE32(rdev)) { 3895 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD5_INTERRUPT) { 3896 tmp = RREG32(DC_HPD5_INT_CONTROL); 3897 tmp |= DC_HPDx_INT_ACK; 3898 WREG32(DC_HPD5_INT_CONTROL, tmp); 3899 } 3900 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT) { 3901 tmp = RREG32(DC_HPD5_INT_CONTROL); 3902 tmp |= DC_HPDx_INT_ACK; 3903 WREG32(DC_HPD6_INT_CONTROL, tmp); 3904 } 3905 if (rdev->irq.stat_regs.r600.hdmi0_status & AFMT_AZ_FORMAT_WTRIG) { 3906 tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET0); 3907 tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; 3908 WREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET0, tmp); 3909 } 3910 if (rdev->irq.stat_regs.r600.hdmi1_status & AFMT_AZ_FORMAT_WTRIG) { 3911 tmp = RREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET1); 3912 tmp |= AFMT_AZ_FORMAT_WTRIG_ACK; 3913 WREG32(AFMT_AUDIO_PACKET_CONTROL + DCE3_HDMI_OFFSET1, tmp); 3914 } 3915 } else { 3916 if (rdev->irq.stat_regs.r600.hdmi0_status & HDMI0_AZ_FORMAT_WTRIG) { 3917 tmp = RREG32(HDMI0_AUDIO_PACKET_CONTROL); 3918 tmp |= HDMI0_AZ_FORMAT_WTRIG_ACK; 3919 WREG32(HDMI0_AUDIO_PACKET_CONTROL, tmp); 3920 } 3921 if (rdev->irq.stat_regs.r600.hdmi1_status & HDMI0_AZ_FORMAT_WTRIG) { 3922 if (ASIC_IS_DCE3(rdev)) { 3923 tmp = RREG32(DCE3_HDMI1_AUDIO_PACKET_CONTROL); 3924 tmp |= HDMI0_AZ_FORMAT_WTRIG_ACK; 3925 WREG32(DCE3_HDMI1_AUDIO_PACKET_CONTROL, tmp); 3926 } else { 3927 tmp = RREG32(HDMI1_AUDIO_PACKET_CONTROL); 3928 tmp |= HDMI0_AZ_FORMAT_WTRIG_ACK; 3929 WREG32(HDMI1_AUDIO_PACKET_CONTROL, tmp); 3930 } 3931 } 3932 } 3933} 3934 3935void r600_irq_disable(struct radeon_device *rdev) 3936{ 3937 r600_disable_interrupts(rdev); 3938 /* Wait and acknowledge irq */ 3939 mdelay(1); 3940 r600_irq_ack(rdev); 3941 r600_disable_interrupt_state(rdev); 3942} 3943 3944static u32 r600_get_ih_wptr(struct radeon_device *rdev) 3945{ 3946 u32 wptr, tmp; 3947 3948 if (rdev->wb.enabled) 3949 wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]); 3950 else 3951 wptr = RREG32(IH_RB_WPTR); 3952 3953 if (wptr & RB_OVERFLOW) { 3954 wptr &= ~RB_OVERFLOW; 3955 /* When a ring buffer overflow happen start parsing interrupt 3956 * from the last not overwritten vector (wptr + 16). Hopefully 3957 * this should allow us to catchup. 3958 */ 3959 dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n", 3960 wptr, rdev->ih.rptr, (wptr + 16) & rdev->ih.ptr_mask); 3961 rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask; 3962 tmp = RREG32(IH_RB_CNTL); 3963 tmp |= IH_WPTR_OVERFLOW_CLEAR; 3964 WREG32(IH_RB_CNTL, tmp); 3965 } 3966 return (wptr & rdev->ih.ptr_mask); 3967} 3968 3969/* r600 IV Ring 3970 * Each IV ring entry is 128 bits: 3971 * [7:0] - interrupt source id 3972 * [31:8] - reserved 3973 * [59:32] - interrupt source data 3974 * [127:60] - reserved 3975 * 3976 * The basic interrupt vector entries 3977 * are decoded as follows: 3978 * src_id src_data description 3979 * 1 0 D1 Vblank 3980 * 1 1 D1 Vline 3981 * 5 0 D2 Vblank 3982 * 5 1 D2 Vline 3983 * 19 0 FP Hot plug detection A 3984 * 19 1 FP Hot plug detection B 3985 * 19 2 DAC A auto-detection 3986 * 19 3 DAC B auto-detection 3987 * 21 4 HDMI block A 3988 * 21 5 HDMI block B 3989 * 176 - CP_INT RB 3990 * 177 - CP_INT IB1 3991 * 178 - CP_INT IB2 3992 * 181 - EOP Interrupt 3993 * 233 - GUI Idle 3994 * 3995 * Note, these are based on r600 and may need to be 3996 * adjusted or added to on newer asics 3997 */ 3998 3999int r600_irq_process(struct radeon_device *rdev) 4000{ 4001 u32 wptr; 4002 u32 rptr; 4003 u32 src_id, src_data; 4004 u32 ring_index; 4005 bool queue_hotplug = false; 4006 bool queue_hdmi = false; 4007 bool queue_thermal = false; 4008 4009 if (!rdev->ih.enabled || rdev->shutdown) 4010 return IRQ_NONE; 4011 4012 /* No MSIs, need a dummy read to flush PCI DMAs */ 4013 if (!rdev->msi_enabled) 4014 RREG32(IH_RB_WPTR); 4015 4016 wptr = r600_get_ih_wptr(rdev); 4017 4018restart_ih: 4019 /* is somebody else already processing irqs? */ 4020 if (atomic_xchg(&rdev->ih.lock, 1)) 4021 return IRQ_NONE; 4022 4023 rptr = rdev->ih.rptr; 4024 DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr); 4025 4026 /* Order reading of wptr vs. reading of IH ring data */ 4027 rmb(); 4028 4029 /* display interrupts */ 4030 r600_irq_ack(rdev); 4031 4032 while (rptr != wptr) { 4033 /* wptr/rptr are in bytes! */ 4034 ring_index = rptr / 4; 4035 src_id = le32_to_cpu(rdev->ih.ring[ring_index]) & 0xff; 4036 src_data = le32_to_cpu(rdev->ih.ring[ring_index + 1]) & 0xfffffff; 4037 4038 switch (src_id) { 4039 case 1: /* D1 vblank/vline */ 4040 switch (src_data) { 4041 case 0: /* D1 vblank */ 4042 if (!(rdev->irq.stat_regs.r600.disp_int & LB_D1_VBLANK_INTERRUPT)) 4043 DRM_DEBUG("IH: D1 vblank - IH event w/o asserted irq bit?\n"); 4044 4045 if (rdev->irq.crtc_vblank_int[0]) { 4046 drm_handle_vblank(rdev->ddev, 0); 4047 rdev->pm.vblank_sync = true; 4048 wake_up(&rdev->irq.vblank_queue); 4049 } 4050 if (atomic_read(&rdev->irq.pflip[0])) 4051 radeon_crtc_handle_vblank(rdev, 0); 4052 rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VBLANK_INTERRUPT; 4053 DRM_DEBUG("IH: D1 vblank\n"); 4054 4055 break; 4056 case 1: /* D1 vline */ 4057 if (!(rdev->irq.stat_regs.r600.disp_int & LB_D1_VLINE_INTERRUPT)) 4058 DRM_DEBUG("IH: D1 vline - IH event w/o asserted irq bit?\n"); 4059 4060 rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VLINE_INTERRUPT; 4061 DRM_DEBUG("IH: D1 vline\n"); 4062 4063 break; 4064 default: 4065 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); 4066 break; 4067 } 4068 break; 4069 case 5: /* D2 vblank/vline */ 4070 switch (src_data) { 4071 case 0: /* D2 vblank */ 4072 if (!(rdev->irq.stat_regs.r600.disp_int & LB_D2_VBLANK_INTERRUPT)) 4073 DRM_DEBUG("IH: D2 vblank - IH event w/o asserted irq bit?\n"); 4074 4075 if (rdev->irq.crtc_vblank_int[1]) { 4076 drm_handle_vblank(rdev->ddev, 1); 4077 rdev->pm.vblank_sync = true; 4078 wake_up(&rdev->irq.vblank_queue); 4079 } 4080 if (atomic_read(&rdev->irq.pflip[1])) 4081 radeon_crtc_handle_vblank(rdev, 1); 4082 rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VBLANK_INTERRUPT; 4083 DRM_DEBUG("IH: D2 vblank\n"); 4084 4085 break; 4086 case 1: /* D1 vline */ 4087 if (!(rdev->irq.stat_regs.r600.disp_int & LB_D2_VLINE_INTERRUPT)) 4088 DRM_DEBUG("IH: D2 vline - IH event w/o asserted irq bit?\n"); 4089 4090 rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VLINE_INTERRUPT; 4091 DRM_DEBUG("IH: D2 vline\n"); 4092 4093 break; 4094 default: 4095 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); 4096 break; 4097 } 4098 break; 4099 case 9: /* D1 pflip */ 4100 DRM_DEBUG("IH: D1 flip\n"); 4101 if (radeon_use_pflipirq > 0) 4102 radeon_crtc_handle_flip(rdev, 0); 4103 break; 4104 case 11: /* D2 pflip */ 4105 DRM_DEBUG("IH: D2 flip\n"); 4106 if (radeon_use_pflipirq > 0) 4107 radeon_crtc_handle_flip(rdev, 1); 4108 break; 4109 case 19: /* HPD/DAC hotplug */ 4110 switch (src_data) { 4111 case 0: 4112 if (!(rdev->irq.stat_regs.r600.disp_int & DC_HPD1_INTERRUPT)) 4113 DRM_DEBUG("IH: HPD1 - IH event w/o asserted irq bit?\n"); 4114 4115 rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD1_INTERRUPT; 4116 queue_hotplug = true; 4117 DRM_DEBUG("IH: HPD1\n"); 4118 break; 4119 case 1: 4120 if (!(rdev->irq.stat_regs.r600.disp_int & DC_HPD2_INTERRUPT)) 4121 DRM_DEBUG("IH: HPD2 - IH event w/o asserted irq bit?\n"); 4122 4123 rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD2_INTERRUPT; 4124 queue_hotplug = true; 4125 DRM_DEBUG("IH: HPD2\n"); 4126 break; 4127 case 4: 4128 if (!(rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD3_INTERRUPT)) 4129 DRM_DEBUG("IH: HPD3 - IH event w/o asserted irq bit?\n"); 4130 4131 rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD3_INTERRUPT; 4132 queue_hotplug = true; 4133 DRM_DEBUG("IH: HPD3\n"); 4134 break; 4135 case 5: 4136 if (!(rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD4_INTERRUPT)) 4137 DRM_DEBUG("IH: HPD4 - IH event w/o asserted irq bit?\n"); 4138 4139 rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD4_INTERRUPT; 4140 queue_hotplug = true; 4141 DRM_DEBUG("IH: HPD4\n"); 4142 break; 4143 case 10: 4144 if (!(rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD5_INTERRUPT)) 4145 DRM_DEBUG("IH: HPD5 - IH event w/o asserted irq bit?\n"); 4146 4147 rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD5_INTERRUPT; 4148 queue_hotplug = true; 4149 DRM_DEBUG("IH: HPD5\n"); 4150 break; 4151 case 12: 4152 if (!(rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT)) 4153 DRM_DEBUG("IH: HPD6 - IH event w/o asserted irq bit?\n"); 4154 4155 rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD6_INTERRUPT; 4156 queue_hotplug = true; 4157 DRM_DEBUG("IH: HPD6\n"); 4158 4159 break; 4160 default: 4161 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); 4162 break; 4163 } 4164 break; 4165 case 21: /* hdmi */ 4166 switch (src_data) { 4167 case 4: 4168 if (!(rdev->irq.stat_regs.r600.hdmi0_status & HDMI0_AZ_FORMAT_WTRIG)) 4169 DRM_DEBUG("IH: HDMI0 - IH event w/o asserted irq bit?\n"); 4170 4171 rdev->irq.stat_regs.r600.hdmi0_status &= ~HDMI0_AZ_FORMAT_WTRIG; 4172 queue_hdmi = true; 4173 DRM_DEBUG("IH: HDMI0\n"); 4174 4175 break; 4176 case 5: 4177 if (!(rdev->irq.stat_regs.r600.hdmi1_status & HDMI0_AZ_FORMAT_WTRIG)) 4178 DRM_DEBUG("IH: HDMI1 - IH event w/o asserted irq bit?\n"); 4179 4180 rdev->irq.stat_regs.r600.hdmi1_status &= ~HDMI0_AZ_FORMAT_WTRIG; 4181 queue_hdmi = true; 4182 DRM_DEBUG("IH: HDMI1\n"); 4183 4184 break; 4185 default: 4186 DRM_ERROR("Unhandled interrupt: %d %d\n", src_id, src_data); 4187 break; 4188 } 4189 break; 4190 case 124: /* UVD */ 4191 DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data); 4192 radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX); 4193 break; 4194 case 176: /* CP_INT in ring buffer */ 4195 case 177: /* CP_INT in IB1 */ 4196 case 178: /* CP_INT in IB2 */ 4197 DRM_DEBUG("IH: CP int: 0x%08x\n", src_data); 4198 radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); 4199 break; 4200 case 181: /* CP EOP event */ 4201 DRM_DEBUG("IH: CP EOP\n"); 4202 radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); 4203 break; 4204 case 224: /* DMA trap event */ 4205 DRM_DEBUG("IH: DMA trap\n"); 4206 radeon_fence_process(rdev, R600_RING_TYPE_DMA_INDEX); 4207 break; 4208 case 230: /* thermal low to high */ 4209 DRM_DEBUG("IH: thermal low to high\n"); 4210 rdev->pm.dpm.thermal.high_to_low = false; 4211 queue_thermal = true; 4212 break; 4213 case 231: /* thermal high to low */ 4214 DRM_DEBUG("IH: thermal high to low\n"); 4215 rdev->pm.dpm.thermal.high_to_low = true; 4216 queue_thermal = true; 4217 break; 4218 case 233: /* GUI IDLE */ 4219 DRM_DEBUG("IH: GUI idle\n"); 4220 break; 4221 default: 4222 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); 4223 break; 4224 } 4225 4226 /* wptr/rptr are in bytes! */ 4227 rptr += 16; 4228 rptr &= rdev->ih.ptr_mask; 4229 WREG32(IH_RB_RPTR, rptr); 4230 } 4231 if (queue_hotplug) 4232 schedule_work(&rdev->hotplug_work); 4233 if (queue_hdmi) 4234 schedule_work(&rdev->audio_work); 4235 if (queue_thermal && rdev->pm.dpm_enabled) 4236 schedule_work(&rdev->pm.dpm.thermal.work); 4237 rdev->ih.rptr = rptr; 4238 atomic_set(&rdev->ih.lock, 0); 4239 4240 /* make sure wptr hasn't changed while processing */ 4241 wptr = r600_get_ih_wptr(rdev); 4242 if (wptr != rptr) 4243 goto restart_ih; 4244 4245 return IRQ_HANDLED; 4246} 4247 4248/* 4249 * Debugfs info 4250 */ 4251#if defined(CONFIG_DEBUG_FS) 4252 4253static int r600_debugfs_mc_info(struct seq_file *m, void *data) 4254{ 4255 struct drm_info_node *node = (struct drm_info_node *) m->private; 4256 struct drm_device *dev = node->minor->dev; 4257 struct radeon_device *rdev = dev->dev_private; 4258 4259 DREG32_SYS(m, rdev, R_000E50_SRBM_STATUS); 4260 DREG32_SYS(m, rdev, VM_L2_STATUS); 4261 return 0; 4262} 4263 4264static struct drm_info_list r600_mc_info_list[] = { 4265 {"r600_mc_info", r600_debugfs_mc_info, 0, NULL}, 4266}; 4267#endif 4268 4269int r600_debugfs_mc_info_init(struct radeon_device *rdev) 4270{ 4271#if defined(CONFIG_DEBUG_FS) 4272 return radeon_debugfs_add_files(rdev, r600_mc_info_list, ARRAY_SIZE(r600_mc_info_list)); 4273#else 4274 return 0; 4275#endif 4276} 4277 4278/** 4279 * r600_mmio_hdp_flush - flush Host Data Path cache via MMIO 4280 * rdev: radeon device structure 4281 * 4282 * Some R6XX/R7XX don't seem to take into account HDP flushes performed 4283 * through the ring buffer. This leads to corruption in rendering, see 4284 * http://bugzilla.kernel.org/show_bug.cgi?id=15186 . To avoid this, we 4285 * directly perform the HDP flush by writing the register through MMIO. 4286 */ 4287void r600_mmio_hdp_flush(struct radeon_device *rdev) 4288{ 4289 /* r7xx hw bug. write to HDP_DEBUG1 followed by fb read 4290 * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL. 4291 * This seems to cause problems on some AGP cards. Just use the old 4292 * method for them. 4293 */ 4294 if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740) && 4295 rdev->vram_scratch.ptr && !(rdev->flags & RADEON_IS_AGP)) { 4296 void __iomem *ptr = (void *)rdev->vram_scratch.ptr; 4297 u32 tmp; 4298 4299 WREG32(HDP_DEBUG1, 0); 4300 tmp = readl((void __iomem *)ptr); 4301 } else 4302 WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); 4303} 4304 4305void r600_set_pcie_lanes(struct radeon_device *rdev, int lanes) 4306{ 4307 u32 link_width_cntl, mask; 4308 4309 if (rdev->flags & RADEON_IS_IGP) 4310 return; 4311 4312 if (!(rdev->flags & RADEON_IS_PCIE)) 4313 return; 4314 4315 /* x2 cards have a special sequence */ 4316 if (ASIC_IS_X2(rdev)) 4317 return; 4318 4319 radeon_gui_idle(rdev); 4320 4321 switch (lanes) { 4322 case 0: 4323 mask = RADEON_PCIE_LC_LINK_WIDTH_X0; 4324 break; 4325 case 1: 4326 mask = RADEON_PCIE_LC_LINK_WIDTH_X1; 4327 break; 4328 case 2: 4329 mask = RADEON_PCIE_LC_LINK_WIDTH_X2; 4330 break; 4331 case 4: 4332 mask = RADEON_PCIE_LC_LINK_WIDTH_X4; 4333 break; 4334 case 8: 4335 mask = RADEON_PCIE_LC_LINK_WIDTH_X8; 4336 break; 4337 case 12: 4338 /* not actually supported */ 4339 mask = RADEON_PCIE_LC_LINK_WIDTH_X12; 4340 break; 4341 case 16: 4342 mask = RADEON_PCIE_LC_LINK_WIDTH_X16; 4343 break; 4344 default: 4345 DRM_ERROR("invalid pcie lane request: %d\n", lanes); 4346 return; 4347 } 4348 4349 link_width_cntl = RREG32_PCIE_PORT(RADEON_PCIE_LC_LINK_WIDTH_CNTL); 4350 link_width_cntl &= ~RADEON_PCIE_LC_LINK_WIDTH_MASK; 4351 link_width_cntl |= mask << RADEON_PCIE_LC_LINK_WIDTH_SHIFT; 4352 link_width_cntl |= (RADEON_PCIE_LC_RECONFIG_NOW | 4353 R600_PCIE_LC_RECONFIG_ARC_MISSING_ESCAPE); 4354 4355 WREG32_PCIE_PORT(RADEON_PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); 4356} 4357 4358int r600_get_pcie_lanes(struct radeon_device *rdev) 4359{ 4360 u32 link_width_cntl; 4361 4362 if (rdev->flags & RADEON_IS_IGP) 4363 return 0; 4364 4365 if (!(rdev->flags & RADEON_IS_PCIE)) 4366 return 0; 4367 4368 /* x2 cards have a special sequence */ 4369 if (ASIC_IS_X2(rdev)) 4370 return 0; 4371 4372 radeon_gui_idle(rdev); 4373 4374 link_width_cntl = RREG32_PCIE_PORT(RADEON_PCIE_LC_LINK_WIDTH_CNTL); 4375 4376 switch ((link_width_cntl & RADEON_PCIE_LC_LINK_WIDTH_RD_MASK) >> RADEON_PCIE_LC_LINK_WIDTH_RD_SHIFT) { 4377 case RADEON_PCIE_LC_LINK_WIDTH_X1: 4378 return 1; 4379 case RADEON_PCIE_LC_LINK_WIDTH_X2: 4380 return 2; 4381 case RADEON_PCIE_LC_LINK_WIDTH_X4: 4382 return 4; 4383 case RADEON_PCIE_LC_LINK_WIDTH_X8: 4384 return 8; 4385 case RADEON_PCIE_LC_LINK_WIDTH_X12: 4386 /* not actually supported */ 4387 return 12; 4388 case RADEON_PCIE_LC_LINK_WIDTH_X0: 4389 case RADEON_PCIE_LC_LINK_WIDTH_X16: 4390 default: 4391 return 16; 4392 } 4393} 4394 4395static void r600_pcie_gen2_enable(struct radeon_device *rdev) 4396{ 4397 u32 link_width_cntl, lanes, speed_cntl, training_cntl, tmp; 4398 u16 link_cntl2; 4399 4400 if (radeon_pcie_gen2 == 0) 4401 return; 4402 4403 if (rdev->flags & RADEON_IS_IGP) 4404 return; 4405 4406 if (!(rdev->flags & RADEON_IS_PCIE)) 4407 return; 4408 4409 /* x2 cards have a special sequence */ 4410 if (ASIC_IS_X2(rdev)) 4411 return; 4412 4413 /* only RV6xx+ chips are supported */ 4414 if (rdev->family <= CHIP_R600) 4415 return; 4416 4417 if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) && 4418 (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT)) 4419 return; 4420 4421 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 4422 if (speed_cntl & LC_CURRENT_DATA_RATE) { 4423 DRM_INFO("PCIE gen 2 link speeds already enabled\n"); 4424 return; 4425 } 4426 4427 DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); 4428 4429 /* 55 nm r6xx asics */ 4430 if ((rdev->family == CHIP_RV670) || 4431 (rdev->family == CHIP_RV620) || 4432 (rdev->family == CHIP_RV635)) { 4433 /* advertise upconfig capability */ 4434 link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 4435 link_width_cntl &= ~LC_UPCONFIGURE_DIS; 4436 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); 4437 link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 4438 if (link_width_cntl & LC_RENEGOTIATION_SUPPORT) { 4439 lanes = (link_width_cntl & LC_LINK_WIDTH_RD_MASK) >> LC_LINK_WIDTH_RD_SHIFT; 4440 link_width_cntl &= ~(LC_LINK_WIDTH_MASK | 4441 LC_RECONFIG_ARC_MISSING_ESCAPE); 4442 link_width_cntl |= lanes | LC_RECONFIG_NOW | LC_RENEGOTIATE_EN; 4443 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); 4444 } else { 4445 link_width_cntl |= LC_UPCONFIGURE_DIS; 4446 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); 4447 } 4448 } 4449 4450 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 4451 if ((speed_cntl & LC_OTHER_SIDE_EVER_SENT_GEN2) && 4452 (speed_cntl & LC_OTHER_SIDE_SUPPORTS_GEN2)) { 4453 4454 /* 55 nm r6xx asics */ 4455 if ((rdev->family == CHIP_RV670) || 4456 (rdev->family == CHIP_RV620) || 4457 (rdev->family == CHIP_RV635)) { 4458 WREG32(MM_CFGREGS_CNTL, 0x8); 4459 link_cntl2 = RREG32(0x4088); 4460 WREG32(MM_CFGREGS_CNTL, 0); 4461 /* not supported yet */ 4462 if (link_cntl2 & SELECTABLE_DEEMPHASIS) 4463 return; 4464 } 4465 4466 speed_cntl &= ~LC_SPEED_CHANGE_ATTEMPTS_ALLOWED_MASK; 4467 speed_cntl |= (0x3 << LC_SPEED_CHANGE_ATTEMPTS_ALLOWED_SHIFT); 4468 speed_cntl &= ~LC_VOLTAGE_TIMER_SEL_MASK; 4469 speed_cntl &= ~LC_FORCE_DIS_HW_SPEED_CHANGE; 4470 speed_cntl |= LC_FORCE_EN_HW_SPEED_CHANGE; 4471 WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); 4472 4473 tmp = RREG32(0x541c); 4474 WREG32(0x541c, tmp | 0x8); 4475 WREG32(MM_CFGREGS_CNTL, MM_WR_TO_CFG_EN); 4476 link_cntl2 = RREG16(0x4088); 4477 link_cntl2 &= ~TARGET_LINK_SPEED_MASK; 4478 link_cntl2 |= 0x2; 4479 WREG16(0x4088, link_cntl2); 4480 WREG32(MM_CFGREGS_CNTL, 0); 4481 4482 if ((rdev->family == CHIP_RV670) || 4483 (rdev->family == CHIP_RV620) || 4484 (rdev->family == CHIP_RV635)) { 4485 training_cntl = RREG32_PCIE_PORT(PCIE_LC_TRAINING_CNTL); 4486 training_cntl &= ~LC_POINT_7_PLUS_EN; 4487 WREG32_PCIE_PORT(PCIE_LC_TRAINING_CNTL, training_cntl); 4488 } else { 4489 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 4490 speed_cntl &= ~LC_TARGET_LINK_SPEED_OVERRIDE_EN; 4491 WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); 4492 } 4493 4494 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 4495 speed_cntl |= LC_GEN2_EN_STRAP; 4496 WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); 4497 4498 } else { 4499 link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 4500 /* XXX: only disable it if gen1 bridge vendor == 0x111d or 0x1106 */ 4501 if (1) 4502 link_width_cntl |= LC_UPCONFIGURE_DIS; 4503 else 4504 link_width_cntl &= ~LC_UPCONFIGURE_DIS; 4505 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); 4506 } 4507} 4508 4509/** 4510 * r600_get_gpu_clock_counter - return GPU clock counter snapshot 4511 * 4512 * @rdev: radeon_device pointer 4513 * 4514 * Fetches a GPU clock counter snapshot (R6xx-cayman). 4515 * Returns the 64 bit clock counter snapshot. 4516 */ 4517uint64_t r600_get_gpu_clock_counter(struct radeon_device *rdev) 4518{ 4519 uint64_t clock; 4520 4521 mutex_lock(&rdev->gpu_clock_mutex); 4522 WREG32(RLC_CAPTURE_GPU_CLOCK_COUNT, 1); 4523 clock = (uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_LSB) | 4524 ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL); 4525 mutex_unlock(&rdev->gpu_clock_mutex); 4526 return clock; 4527} 4528