38,6 → 38,7 |
#include <drm/drmP.h> |
#include "radeon.h" |
#include "radeon_asic.h" |
#include "radeon_audio.h" |
#include "atom.h" |
#include "rs600d.h" |
|
586,11 → 587,8 |
radeon_gart_table_vram_free(rdev); |
} |
|
void rs600_gart_set_page(struct radeon_device *rdev, unsigned i, |
uint64_t addr, uint32_t flags) |
uint64_t rs600_gart_get_page_entry(uint64_t addr, uint32_t flags) |
{ |
void __iomem *ptr = (void *)rdev->gart.ptr; |
|
addr = addr & 0xFFFFFFFFFFFFF000ULL; |
addr |= R600_PTE_SYSTEM; |
if (flags & RADEON_GART_PAGE_VALID) |
601,9 → 599,16 |
addr |= R600_PTE_WRITEABLE; |
if (flags & RADEON_GART_PAGE_SNOOP) |
addr |= R600_PTE_SNOOPED; |
writeq(addr, ptr + (i * 8)); |
return addr; |
} |
|
void rs600_gart_set_page(struct radeon_device *rdev, unsigned i, |
uint64_t entry) |
{ |
void __iomem *ptr = (void *)rdev->gart.ptr; |
writeq(entry, ptr + (i * 8)); |
} |
|
int rs600_irq_set(struct radeon_device *rdev) |
{ |
uint32_t tmp = 0; |
650,6 → 655,10 |
WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); |
if (ASIC_IS_DCE2(rdev)) |
WREG32(R_007408_HDMI0_AUDIO_PACKET_CONTROL, hdmi0); |
|
/* posting read */ |
RREG32(R_000040_GEN_INT_CNTL); |
|
return 0; |
} |
|
734,21 → 743,21 |
/* Vertical blank interrupts */ |
if (G_007EDC_LB_D1_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
if (rdev->irq.crtc_vblank_int[0]) { |
// drm_handle_vblank(rdev->ddev, 0); |
drm_handle_vblank(rdev->ddev, 0); |
rdev->pm.vblank_sync = true; |
// wake_up(&rdev->irq.vblank_queue); |
wake_up(&rdev->irq.vblank_queue); |
} |
// if (rdev->irq.pflip[0]) |
// radeon_crtc_handle_flip(rdev, 0); |
if (atomic_read(&rdev->irq.pflip[0])) |
radeon_crtc_handle_vblank(rdev, 0); |
} |
if (G_007EDC_LB_D2_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
if (rdev->irq.crtc_vblank_int[1]) { |
// drm_handle_vblank(rdev->ddev, 1); |
drm_handle_vblank(rdev->ddev, 1); |
rdev->pm.vblank_sync = true; |
// wake_up(&rdev->irq.vblank_queue); |
wake_up(&rdev->irq.vblank_queue); |
} |
// if (rdev->irq.pflip[1]) |
// radeon_crtc_handle_flip(rdev, 1); |
if (atomic_read(&rdev->irq.pflip[1])) |
radeon_crtc_handle_vblank(rdev, 1); |
} |
if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
queue_hotplug = true; |
973,7 → 982,7 |
return r; |
} |
|
r = r600_audio_init(rdev); |
r = radeon_audio_init(rdev); |
if (r) { |
dev_err(rdev->dev, "failed initializing audio\n"); |
return r; |
983,6 → 992,22 |
} |
|
|
void rs600_fini(struct radeon_device *rdev) |
{ |
radeon_pm_fini(rdev); |
radeon_audio_fini(rdev); |
r100_cp_fini(rdev); |
radeon_wb_fini(rdev); |
radeon_ib_pool_fini(rdev); |
radeon_gem_fini(rdev); |
rs600_gart_fini(rdev); |
radeon_irq_kms_fini(rdev); |
radeon_fence_driver_fini(rdev); |
radeon_bo_fini(rdev); |
radeon_atombios_fini(rdev); |
kfree(rdev->bios); |
rdev->bios = NULL; |
} |
|
int rs600_init(struct radeon_device *rdev) |
{ |
1046,11 → 1071,11 |
if (r) { |
/* Somethings want wront with the accel init stop accel */ |
dev_err(rdev->dev, "Disabling GPU acceleration\n"); |
// r100_cp_fini(rdev); |
// r100_wb_fini(rdev); |
// r100_ib_fini(rdev); |
r100_cp_fini(rdev); |
radeon_wb_fini(rdev); |
radeon_ib_pool_fini(rdev); |
rs600_gart_fini(rdev); |
// radeon_irq_kms_fini(rdev); |
radeon_irq_kms_fini(rdev); |
rdev->accel_working = false; |
} |
return 0; |