Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6

* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
drm/radeon/kms: fix r300 vram width calculations
drm/radeon/kms: rs400/480 MC setup is different than r300.
drm/radeon/kms: make initial state of load detect property correct.
drm/radeon/kms: disable HDMI audio for now on rv710/rv730
drm/radeon/kms: don't call suspend path before cleaning up GPU
drivers/gpu/drm/radeon/radeon_combios.c: fix warning
ati_pcigart: fix printk format warning
drm/r100/kms: Emit cache flush to the end of command buffer. (v2)
drm/radeon/kms: fix regression rendering issue on R6XX/R7XX
drm/radeon/kms: move blit initialization after we disabled VGA

+114 -61
+1 -1
drivers/gpu/drm/ati_pcigart.c
··· 113 113 114 114 if (pci_set_dma_mask(dev->pdev, gart_info->table_mask)) { 115 115 DRM_ERROR("fail to set dma mask to 0x%Lx\n", 116 - gart_info->table_mask); 116 + (unsigned long long)gart_info->table_mask); 117 117 ret = 1; 118 118 goto done; 119 119 }
+9 -5
drivers/gpu/drm/radeon/r100.c
··· 354 354 return RREG32(RADEON_CRTC2_CRNT_FRAME); 355 355 } 356 356 357 + /* Who ever call radeon_fence_emit should call ring_lock and ask 358 + * for enough space (today caller are ib schedule and buffer move) */ 357 359 void r100_fence_ring_emit(struct radeon_device *rdev, 358 360 struct radeon_fence *fence) 359 361 { 360 - /* Who ever call radeon_fence_emit should call ring_lock and ask 361 - * for enough space (today caller are ib schedule and buffer move) */ 362 + /* We have to make sure that caches are flushed before 363 + * CPU might read something from VRAM. */ 364 + radeon_ring_write(rdev, PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0)); 365 + radeon_ring_write(rdev, RADEON_RB3D_DC_FLUSH_ALL); 366 + radeon_ring_write(rdev, PACKET0(RADEON_RB3D_ZCACHE_CTLSTAT, 0)); 367 + radeon_ring_write(rdev, RADEON_RB3D_ZC_FLUSH_ALL); 362 368 /* Wait until IDLE & CLEAN */ 363 369 radeon_ring_write(rdev, PACKET0(0x1720, 0)); 364 370 radeon_ring_write(rdev, (1 << 16) | (1 << 17)); ··· 3375 3369 3376 3370 void r100_fini(struct radeon_device *rdev) 3377 3371 { 3378 - r100_suspend(rdev); 3379 3372 r100_cp_fini(rdev); 3380 3373 r100_wb_fini(rdev); 3381 3374 r100_ib_fini(rdev); ··· 3486 3481 if (r) { 3487 3482 /* Somethings want wront with the accel init stop accel */ 3488 3483 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 3489 - r100_suspend(rdev); 3490 3484 r100_cp_fini(rdev); 3491 3485 r100_wb_fini(rdev); 3492 3486 r100_ib_fini(rdev); 3487 + radeon_irq_kms_fini(rdev); 3493 3488 if (rdev->flags & RADEON_IS_PCI) 3494 3489 r100_pci_gart_fini(rdev); 3495 - radeon_irq_kms_fini(rdev); 3496 3490 rdev->accel_working = false; 3497 3491 } 3498 3492 return 0;
+9 -7
drivers/gpu/drm/radeon/r300.c
··· 506 506 507 507 /* DDR for all card after R300 & IGP */ 508 508 rdev->mc.vram_is_ddr = true; 509 + 509 510 tmp = RREG32(RADEON_MEM_CNTL); 510 - if (tmp & R300_MEM_NUM_CHANNELS_MASK) { 511 - rdev->mc.vram_width = 128; 512 - } else { 513 - rdev->mc.vram_width = 64; 511 + tmp &= R300_MEM_NUM_CHANNELS_MASK; 512 + switch (tmp) { 513 + case 0: rdev->mc.vram_width = 64; break; 514 + case 1: rdev->mc.vram_width = 128; break; 515 + case 2: rdev->mc.vram_width = 256; break; 516 + default: rdev->mc.vram_width = 128; break; 514 517 } 515 518 516 519 r100_vram_init_sizes(rdev); ··· 1330 1327 1331 1328 void r300_fini(struct radeon_device *rdev) 1332 1329 { 1333 - r300_suspend(rdev); 1334 1330 r100_cp_fini(rdev); 1335 1331 r100_wb_fini(rdev); 1336 1332 r100_ib_fini(rdev); ··· 1420 1418 if (r) { 1421 1419 /* Somethings want wront with the accel init stop accel */ 1422 1420 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 1423 - r300_suspend(rdev); 1424 1421 r100_cp_fini(rdev); 1425 1422 r100_wb_fini(rdev); 1426 1423 r100_ib_fini(rdev); 1424 + radeon_irq_kms_fini(rdev); 1427 1425 if (rdev->flags & RADEON_IS_PCIE) 1428 1426 rv370_pcie_gart_fini(rdev); 1429 1427 if (rdev->flags & RADEON_IS_PCI) 1430 1428 r100_pci_gart_fini(rdev); 1431 - radeon_irq_kms_fini(rdev); 1429 + radeon_agp_fini(rdev); 1432 1430 rdev->accel_working = false; 1433 1431 } 1434 1432 return 0;
+1 -2
drivers/gpu/drm/radeon/r420.c
··· 389 389 if (r) { 390 390 /* Somethings want wront with the accel init stop accel */ 391 391 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 392 - r420_suspend(rdev); 393 392 r100_cp_fini(rdev); 394 393 r100_wb_fini(rdev); 395 394 r100_ib_fini(rdev); 395 + radeon_irq_kms_fini(rdev); 396 396 if (rdev->flags & RADEON_IS_PCIE) 397 397 rv370_pcie_gart_fini(rdev); 398 398 if (rdev->flags & RADEON_IS_PCI) 399 399 r100_pci_gart_fini(rdev); 400 400 radeon_agp_fini(rdev); 401 - radeon_irq_kms_fini(rdev); 402 401 rdev->accel_working = false; 403 402 } 404 403 return 0;
+1 -2
drivers/gpu/drm/radeon/r520.c
··· 294 294 if (r) { 295 295 /* Somethings want wront with the accel init stop accel */ 296 296 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 297 - rv515_suspend(rdev); 298 297 r100_cp_fini(rdev); 299 298 r100_wb_fini(rdev); 300 299 r100_ib_fini(rdev); 300 + radeon_irq_kms_fini(rdev); 301 301 rv370_pcie_gart_fini(rdev); 302 302 radeon_agp_fini(rdev); 303 - radeon_irq_kms_fini(rdev); 304 303 rdev->accel_working = false; 305 304 } 306 305 return 0;
+34 -14
drivers/gpu/drm/radeon/r600.c
··· 1654 1654 rdev->cp.align_mask = 16 - 1; 1655 1655 } 1656 1656 1657 + void r600_cp_fini(struct radeon_device *rdev) 1658 + { 1659 + r600_cp_stop(rdev); 1660 + radeon_ring_fini(rdev); 1661 + } 1662 + 1657 1663 1658 1664 /* 1659 1665 * GPU scratch registers helpers function. ··· 1867 1861 return r; 1868 1862 } 1869 1863 r600_gpu_init(rdev); 1864 + r = r600_blit_init(rdev); 1865 + if (r) { 1866 + r600_blit_fini(rdev); 1867 + rdev->asic->copy = NULL; 1868 + dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); 1869 + } 1870 1870 /* pin copy shader into vram */ 1871 1871 if (rdev->r600_blit.shader_obj) { 1872 1872 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); ··· 2057 2045 r = r600_pcie_gart_init(rdev); 2058 2046 if (r) 2059 2047 return r; 2060 - r = r600_blit_init(rdev); 2061 - if (r) { 2062 - r600_blit_fini(rdev); 2063 - rdev->asic->copy = NULL; 2064 - dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); 2065 - } 2066 2048 2067 2049 rdev->accel_working = true; 2068 2050 r = r600_startup(rdev); 2069 2051 if (r) { 2070 - r600_suspend(rdev); 2052 + dev_err(rdev->dev, "disabling GPU acceleration\n"); 2053 + r600_cp_fini(rdev); 2071 2054 r600_wb_fini(rdev); 2072 - radeon_ring_fini(rdev); 2055 + r600_irq_fini(rdev); 2056 + radeon_irq_kms_fini(rdev); 2073 2057 r600_pcie_gart_fini(rdev); 2074 2058 rdev->accel_working = false; 2075 2059 } ··· 2091 2083 2092 2084 void r600_fini(struct radeon_device *rdev) 2093 2085 { 2094 - /* Suspend operations */ 2095 - r600_suspend(rdev); 2096 - 2097 2086 r600_audio_fini(rdev); 2098 2087 r600_blit_fini(rdev); 2088 + r600_cp_fini(rdev); 2089 + r600_wb_fini(rdev); 2099 2090 r600_irq_fini(rdev); 2100 2091 radeon_irq_kms_fini(rdev); 2101 - radeon_ring_fini(rdev); 2102 - r600_wb_fini(rdev); 2103 2092 r600_pcie_gart_fini(rdev); 2093 + radeon_agp_fini(rdev); 2104 2094 radeon_gem_fini(rdev); 2105 2095 radeon_fence_driver_fini(rdev); 2106 2096 radeon_clocks_fini(rdev); 2107 - radeon_agp_fini(rdev); 2108 2097 radeon_bo_fini(rdev); 2109 2098 radeon_atombios_fini(rdev); 2110 2099 kfree(rdev->bios); ··· 2904 2899 #else 2905 2900 return 0; 2906 2901 #endif 2902 + } 2903 + 2904 + /** 2905 + * r600_ioctl_wait_idle - flush host path cache on wait idle ioctl 2906 + * rdev: radeon device structure 2907 + * bo: buffer object struct which userspace is waiting for idle 2908 + * 2909 + * Some R6XX/R7XX doesn't seems to take into account HDP flush performed 2910 + * through ring buffer, this leads to corruption in rendering, see 2911 + * http://bugzilla.kernel.org/show_bug.cgi?id=15186 to avoid this we 2912 + * directly perform HDP flush by writing register through MMIO. 2913 + */ 2914 + void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo) 2915 + { 2916 + WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); 2907 2917 }
+1 -1
drivers/gpu/drm/radeon/r600_audio.c
··· 35 35 */ 36 36 static int r600_audio_chipset_supported(struct radeon_device *rdev) 37 37 { 38 - return rdev->family >= CHIP_R600 38 + return (rdev->family >= CHIP_R600 && rdev->family < CHIP_RV710) 39 39 || rdev->family == CHIP_RS600 40 40 || rdev->family == CHIP_RS690 41 41 || rdev->family == CHIP_RS740;
+8
drivers/gpu/drm/radeon/radeon.h
··· 661 661 void (*hpd_fini)(struct radeon_device *rdev); 662 662 bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); 663 663 void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); 664 + /* ioctl hw specific callback. Some hw might want to perform special 665 + * operation on specific ioctl. For instance on wait idle some hw 666 + * might want to perform and HDP flush through MMIO as it seems that 667 + * some R6XX/R7XX hw doesn't take HDP flush into account if programmed 668 + * through ring. 669 + */ 670 + void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); 664 671 }; 665 672 666 673 /* ··· 1150 1143 extern void r600_cp_stop(struct radeon_device *rdev); 1151 1144 extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size); 1152 1145 extern int r600_cp_resume(struct radeon_device *rdev); 1146 + extern void r600_cp_fini(struct radeon_device *rdev); 1153 1147 extern int r600_count_pipe_bits(uint32_t val); 1154 1148 extern int r600_gart_clear_page(struct radeon_device *rdev, int i); 1155 1149 extern int r600_mc_wait_for_idle(struct radeon_device *rdev);
+11
drivers/gpu/drm/radeon/radeon_asic.h
··· 117 117 .hpd_fini = &r100_hpd_fini, 118 118 .hpd_sense = &r100_hpd_sense, 119 119 .hpd_set_polarity = &r100_hpd_set_polarity, 120 + .ioctl_wait_idle = NULL, 120 121 }; 121 122 122 123 ··· 177 176 .hpd_fini = &r100_hpd_fini, 178 177 .hpd_sense = &r100_hpd_sense, 179 178 .hpd_set_polarity = &r100_hpd_set_polarity, 179 + .ioctl_wait_idle = NULL, 180 180 }; 181 181 182 182 /* ··· 221 219 .hpd_fini = &r100_hpd_fini, 222 220 .hpd_sense = &r100_hpd_sense, 223 221 .hpd_set_polarity = &r100_hpd_set_polarity, 222 + .ioctl_wait_idle = NULL, 224 223 }; 225 224 226 225 ··· 270 267 .hpd_fini = &r100_hpd_fini, 271 268 .hpd_sense = &r100_hpd_sense, 272 269 .hpd_set_polarity = &r100_hpd_set_polarity, 270 + .ioctl_wait_idle = NULL, 273 271 }; 274 272 275 273 ··· 327 323 .hpd_fini = &rs600_hpd_fini, 328 324 .hpd_sense = &rs600_hpd_sense, 329 325 .hpd_set_polarity = &rs600_hpd_set_polarity, 326 + .ioctl_wait_idle = NULL, 330 327 }; 331 328 332 329 ··· 375 370 .hpd_fini = &rs600_hpd_fini, 376 371 .hpd_sense = &rs600_hpd_sense, 377 372 .hpd_set_polarity = &rs600_hpd_set_polarity, 373 + .ioctl_wait_idle = NULL, 378 374 }; 379 375 380 376 ··· 427 421 .hpd_fini = &rs600_hpd_fini, 428 422 .hpd_sense = &rs600_hpd_sense, 429 423 .hpd_set_polarity = &rs600_hpd_set_polarity, 424 + .ioctl_wait_idle = NULL, 430 425 }; 431 426 432 427 ··· 470 463 .hpd_fini = &rs600_hpd_fini, 471 464 .hpd_sense = &rs600_hpd_sense, 472 465 .hpd_set_polarity = &rs600_hpd_set_polarity, 466 + .ioctl_wait_idle = NULL, 473 467 }; 474 468 475 469 /* ··· 512 504 bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd); 513 505 void r600_hpd_set_polarity(struct radeon_device *rdev, 514 506 enum radeon_hpd_id hpd); 507 + extern void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo); 515 508 516 509 static struct radeon_asic r600_asic = { 517 510 .init = &r600_init, ··· 547 538 .hpd_fini = &r600_hpd_fini, 548 539 .hpd_sense = &r600_hpd_sense, 549 540 .hpd_set_polarity = &r600_hpd_set_polarity, 541 + .ioctl_wait_idle = r600_ioctl_wait_idle, 550 542 }; 551 543 552 544 /* ··· 592 582 .hpd_fini = &r600_hpd_fini, 593 583 .hpd_sense = &r600_hpd_sense, 594 584 .hpd_set_polarity = &r600_hpd_set_polarity, 585 + .ioctl_wait_idle = r600_ioctl_wait_idle, 595 586 }; 596 587 597 588 #endif
+1 -2
drivers/gpu/drm/radeon/radeon_combios.c
··· 971 971 lvds->native_mode.vdisplay); 972 972 973 973 lvds->panel_vcc_delay = RBIOS16(lcd_info + 0x2c); 974 - if (lvds->panel_vcc_delay > 2000 || lvds->panel_vcc_delay < 0) 975 - lvds->panel_vcc_delay = 2000; 974 + lvds->panel_vcc_delay = min_t(u16, lvds->panel_vcc_delay, 2000); 976 975 977 976 lvds->panel_pwr_delay = RBIOS8(lcd_info + 0x24); 978 977 lvds->panel_digon_delay = RBIOS16(lcd_info + 0x38) & 0xf;
+1 -1
drivers/gpu/drm/radeon/radeon_connectors.c
··· 1343 1343 radeon_connector->dac_load_detect = false; 1344 1344 drm_connector_attach_property(&radeon_connector->base, 1345 1345 rdev->mode_info.load_detect_property, 1346 - 1); 1346 + radeon_connector->dac_load_detect); 1347 1347 drm_connector_attach_property(&radeon_connector->base, 1348 1348 rdev->mode_info.tv_std_property, 1349 1349 radeon_combios_get_tv_info(rdev));
+3
drivers/gpu/drm/radeon/radeon_gem.c
··· 308 308 } 309 309 robj = gobj->driver_private; 310 310 r = radeon_bo_wait(robj, NULL, false); 311 + /* callback hw specific functions if any */ 312 + if (robj->rdev->asic->ioctl_wait_idle) 313 + robj->rdev->asic->ioctl_wait_idle(robj->rdev, robj); 311 314 mutex_lock(&dev->struct_mutex); 312 315 drm_gem_object_unreference(gobj); 313 316 mutex_unlock(&dev->struct_mutex);
+21 -7
drivers/gpu/drm/radeon/rs400.c
··· 223 223 return 0; 224 224 } 225 225 226 + int rs400_mc_wait_for_idle(struct radeon_device *rdev) 227 + { 228 + unsigned i; 229 + uint32_t tmp; 230 + 231 + for (i = 0; i < rdev->usec_timeout; i++) { 232 + /* read MC_STATUS */ 233 + tmp = RREG32(0x0150); 234 + if (tmp & (1 << 2)) { 235 + return 0; 236 + } 237 + DRM_UDELAY(1); 238 + } 239 + return -1; 240 + } 241 + 226 242 void rs400_gpu_init(struct radeon_device *rdev) 227 243 { 228 244 /* FIXME: HDP same place on rs400 ? */ 229 245 r100_hdp_reset(rdev); 230 246 /* FIXME: is this correct ? */ 231 247 r420_pipes_init(rdev); 232 - if (r300_mc_wait_for_idle(rdev)) { 233 - printk(KERN_WARNING "Failed to wait MC idle while " 234 - "programming pipes. Bad things might happen.\n"); 248 + if (rs400_mc_wait_for_idle(rdev)) { 249 + printk(KERN_WARNING "rs400: Failed to wait MC idle while " 250 + "programming pipes. Bad things might happen. %08x\n", RREG32(0x150)); 235 251 } 236 252 } 237 253 ··· 386 370 r100_mc_stop(rdev, &save); 387 371 388 372 /* Wait for mc idle */ 389 - if (r300_mc_wait_for_idle(rdev)) 390 - dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n"); 373 + if (rs400_mc_wait_for_idle(rdev)) 374 + dev_warn(rdev->dev, "rs400: Wait MC idle timeout before updating MC.\n"); 391 375 WREG32(R_000148_MC_FB_LOCATION, 392 376 S_000148_MC_FB_START(rdev->mc.vram_start >> 16) | 393 377 S_000148_MC_FB_TOP(rdev->mc.vram_end >> 16)); ··· 464 448 465 449 void rs400_fini(struct radeon_device *rdev) 466 450 { 467 - rs400_suspend(rdev); 468 451 r100_cp_fini(rdev); 469 452 r100_wb_fini(rdev); 470 453 r100_ib_fini(rdev); ··· 542 527 if (r) { 543 528 /* Somethings want wront with the accel init stop accel */ 544 529 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 545 - rs400_suspend(rdev); 546 530 r100_cp_fini(rdev); 547 531 r100_wb_fini(rdev); 548 532 r100_ib_fini(rdev);
-2
drivers/gpu/drm/radeon/rs600.c
··· 610 610 611 611 void rs600_fini(struct radeon_device *rdev) 612 612 { 613 - rs600_suspend(rdev); 614 613 r100_cp_fini(rdev); 615 614 r100_wb_fini(rdev); 616 615 r100_ib_fini(rdev); ··· 688 689 if (r) { 689 690 /* Somethings want wront with the accel init stop accel */ 690 691 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 691 - rs600_suspend(rdev); 692 692 r100_cp_fini(rdev); 693 693 r100_wb_fini(rdev); 694 694 r100_ib_fini(rdev);
-2
drivers/gpu/drm/radeon/rs690.c
··· 676 676 677 677 void rs690_fini(struct radeon_device *rdev) 678 678 { 679 - rs690_suspend(rdev); 680 679 r100_cp_fini(rdev); 681 680 r100_wb_fini(rdev); 682 681 r100_ib_fini(rdev); ··· 755 756 if (r) { 756 757 /* Somethings want wront with the accel init stop accel */ 757 758 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 758 - rs690_suspend(rdev); 759 759 r100_cp_fini(rdev); 760 760 r100_wb_fini(rdev); 761 761 r100_ib_fini(rdev);
+1 -3
drivers/gpu/drm/radeon/rv515.c
··· 537 537 538 538 void rv515_fini(struct radeon_device *rdev) 539 539 { 540 - rv515_suspend(rdev); 541 540 r100_cp_fini(rdev); 542 541 r100_wb_fini(rdev); 543 542 r100_ib_fini(rdev); ··· 614 615 if (r) { 615 616 /* Somethings want wront with the accel init stop accel */ 616 617 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 617 - rv515_suspend(rdev); 618 618 r100_cp_fini(rdev); 619 619 r100_wb_fini(rdev); 620 620 r100_ib_fini(rdev); 621 + radeon_irq_kms_fini(rdev); 621 622 rv370_pcie_gart_fini(rdev); 622 623 radeon_agp_fini(rdev); 623 - radeon_irq_kms_fini(rdev); 624 624 rdev->accel_working = false; 625 625 } 626 626 return 0;
+12 -12
drivers/gpu/drm/radeon/rv770.c
··· 887 887 return r; 888 888 } 889 889 rv770_gpu_init(rdev); 890 + r = r600_blit_init(rdev); 891 + if (r) { 892 + r600_blit_fini(rdev); 893 + rdev->asic->copy = NULL; 894 + dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); 895 + } 890 896 /* pin copy shader into vram */ 891 897 if (rdev->r600_blit.shader_obj) { 892 898 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); ··· 1061 1055 r = r600_pcie_gart_init(rdev); 1062 1056 if (r) 1063 1057 return r; 1064 - r = r600_blit_init(rdev); 1065 - if (r) { 1066 - r600_blit_fini(rdev); 1067 - rdev->asic->copy = NULL; 1068 - dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); 1069 - } 1070 1058 1071 1059 rdev->accel_working = true; 1072 1060 r = rv770_startup(rdev); 1073 1061 if (r) { 1074 - rv770_suspend(rdev); 1062 + dev_err(rdev->dev, "disabling GPU acceleration\n"); 1063 + r600_cp_fini(rdev); 1075 1064 r600_wb_fini(rdev); 1076 - radeon_ring_fini(rdev); 1065 + r600_irq_fini(rdev); 1066 + radeon_irq_kms_fini(rdev); 1077 1067 rv770_pcie_gart_fini(rdev); 1078 1068 rdev->accel_working = false; 1079 1069 } ··· 1091 1089 1092 1090 void rv770_fini(struct radeon_device *rdev) 1093 1091 { 1094 - rv770_suspend(rdev); 1095 - 1096 1092 r600_blit_fini(rdev); 1093 + r600_cp_fini(rdev); 1094 + r600_wb_fini(rdev); 1097 1095 r600_irq_fini(rdev); 1098 1096 radeon_irq_kms_fini(rdev); 1099 - radeon_ring_fini(rdev); 1100 - r600_wb_fini(rdev); 1101 1097 rv770_pcie_gart_fini(rdev); 1102 1098 radeon_gem_fini(rdev); 1103 1099 radeon_fence_driver_fini(rdev);