Rev 5271 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5271 | Rev 6104 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | * of the RS600 GART block). |
36 | * of the RS600 GART block). |
37 | */ |
37 | */ |
38 | #include |
38 | #include |
39 | #include "radeon.h" |
39 | #include "radeon.h" |
40 | #include "radeon_asic.h" |
40 | #include "radeon_asic.h" |
- | 41 | #include "radeon_audio.h" |
|
41 | #include "atom.h" |
42 | #include "atom.h" |
42 | #include "rs600d.h" |
43 | #include "rs600d.h" |
Line 43... | Line 44... | ||
43 | 44 | ||
Line 584... | Line 585... | ||
584 | radeon_gart_fini(rdev); |
585 | radeon_gart_fini(rdev); |
585 | rs600_gart_disable(rdev); |
586 | rs600_gart_disable(rdev); |
586 | radeon_gart_table_vram_free(rdev); |
587 | radeon_gart_table_vram_free(rdev); |
587 | } |
588 | } |
Line 588... | Line -... | ||
588 | - | ||
589 | void rs600_gart_set_page(struct radeon_device *rdev, unsigned i, |
589 | |
590 | uint64_t addr, uint32_t flags) |
590 | uint64_t rs600_gart_get_page_entry(uint64_t addr, uint32_t flags) |
591 | { |
- | |
592 | void __iomem *ptr = (void *)rdev->gart.ptr; |
- | |
593 | 591 | { |
|
594 | addr = addr & 0xFFFFFFFFFFFFF000ULL; |
592 | addr = addr & 0xFFFFFFFFFFFFF000ULL; |
595 | addr |= R600_PTE_SYSTEM; |
593 | addr |= R600_PTE_SYSTEM; |
596 | if (flags & RADEON_GART_PAGE_VALID) |
594 | if (flags & RADEON_GART_PAGE_VALID) |
597 | addr |= R600_PTE_VALID; |
595 | addr |= R600_PTE_VALID; |
598 | if (flags & RADEON_GART_PAGE_READ) |
596 | if (flags & RADEON_GART_PAGE_READ) |
599 | addr |= R600_PTE_READABLE; |
597 | addr |= R600_PTE_READABLE; |
600 | if (flags & RADEON_GART_PAGE_WRITE) |
598 | if (flags & RADEON_GART_PAGE_WRITE) |
601 | addr |= R600_PTE_WRITEABLE; |
599 | addr |= R600_PTE_WRITEABLE; |
602 | if (flags & RADEON_GART_PAGE_SNOOP) |
600 | if (flags & RADEON_GART_PAGE_SNOOP) |
- | 601 | addr |= R600_PTE_SNOOPED; |
|
- | 602 | return addr; |
|
- | 603 | } |
|
- | 604 | ||
- | 605 | void rs600_gart_set_page(struct radeon_device *rdev, unsigned i, |
|
- | 606 | uint64_t entry) |
|
- | 607 | { |
|
603 | addr |= R600_PTE_SNOOPED; |
608 | void __iomem *ptr = (void *)rdev->gart.ptr; |
604 | writeq(addr, ptr + (i * 8)); |
609 | writeq(entry, ptr + (i * 8)); |
Line 605... | Line 610... | ||
605 | } |
610 | } |
606 | 611 | ||
607 | int rs600_irq_set(struct radeon_device *rdev) |
612 | int rs600_irq_set(struct radeon_device *rdev) |
Line 648... | Line 653... | ||
648 | WREG32(R_006540_DxMODE_INT_MASK, mode_int); |
653 | WREG32(R_006540_DxMODE_INT_MASK, mode_int); |
649 | WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, hpd1); |
654 | WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, hpd1); |
650 | WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); |
655 | WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); |
651 | if (ASIC_IS_DCE2(rdev)) |
656 | if (ASIC_IS_DCE2(rdev)) |
652 | WREG32(R_007408_HDMI0_AUDIO_PACKET_CONTROL, hdmi0); |
657 | WREG32(R_007408_HDMI0_AUDIO_PACKET_CONTROL, hdmi0); |
- | 658 | ||
- | 659 | /* posting read */ |
|
- | 660 | RREG32(R_000040_GEN_INT_CNTL); |
|
- | 661 | ||
653 | return 0; |
662 | return 0; |
654 | } |
663 | } |
Line 655... | Line 664... | ||
655 | 664 | ||
656 | static inline u32 rs600_irq_ack(struct radeon_device *rdev) |
665 | static inline u32 rs600_irq_ack(struct radeon_device *rdev) |
Line 732... | Line 741... | ||
732 | radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); |
741 | radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); |
733 | } |
742 | } |
734 | /* Vertical blank interrupts */ |
743 | /* Vertical blank interrupts */ |
735 | if (G_007EDC_LB_D1_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
744 | if (G_007EDC_LB_D1_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
736 | if (rdev->irq.crtc_vblank_int[0]) { |
745 | if (rdev->irq.crtc_vblank_int[0]) { |
737 | // drm_handle_vblank(rdev->ddev, 0); |
746 | drm_handle_vblank(rdev->ddev, 0); |
738 | rdev->pm.vblank_sync = true; |
747 | rdev->pm.vblank_sync = true; |
739 | // wake_up(&rdev->irq.vblank_queue); |
748 | wake_up(&rdev->irq.vblank_queue); |
740 | } |
749 | } |
741 | // if (rdev->irq.pflip[0]) |
750 | if (atomic_read(&rdev->irq.pflip[0])) |
742 | // radeon_crtc_handle_flip(rdev, 0); |
751 | radeon_crtc_handle_vblank(rdev, 0); |
743 | } |
752 | } |
744 | if (G_007EDC_LB_D2_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
753 | if (G_007EDC_LB_D2_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
745 | if (rdev->irq.crtc_vblank_int[1]) { |
754 | if (rdev->irq.crtc_vblank_int[1]) { |
746 | // drm_handle_vblank(rdev->ddev, 1); |
755 | drm_handle_vblank(rdev->ddev, 1); |
747 | rdev->pm.vblank_sync = true; |
756 | rdev->pm.vblank_sync = true; |
748 | // wake_up(&rdev->irq.vblank_queue); |
757 | wake_up(&rdev->irq.vblank_queue); |
749 | } |
758 | } |
750 | // if (rdev->irq.pflip[1]) |
759 | if (atomic_read(&rdev->irq.pflip[1])) |
751 | // radeon_crtc_handle_flip(rdev, 1); |
760 | radeon_crtc_handle_vblank(rdev, 1); |
752 | } |
761 | } |
753 | if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
762 | if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) { |
754 | queue_hotplug = true; |
763 | queue_hotplug = true; |
755 | DRM_DEBUG("HPD1\n"); |
764 | DRM_DEBUG("HPD1\n"); |
756 | } |
765 | } |
Line 971... | Line 980... | ||
971 | if (r) { |
980 | if (r) { |
972 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
981 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
973 | return r; |
982 | return r; |
974 | } |
983 | } |
Line 975... | Line 984... | ||
975 | 984 | ||
976 | r = r600_audio_init(rdev); |
985 | r = radeon_audio_init(rdev); |
977 | if (r) { |
986 | if (r) { |
978 | dev_err(rdev->dev, "failed initializing audio\n"); |
987 | dev_err(rdev->dev, "failed initializing audio\n"); |
979 | return r; |
988 | return r; |
Line 980... | Line 989... | ||
980 | } |
989 | } |
981 | 990 | ||
Line -... | Line 991... | ||
- | 991 | return 0; |
|
- | 992 | } |
|
- | 993 | ||
- | 994 | ||
- | 995 | void rs600_fini(struct radeon_device *rdev) |
|
- | 996 | { |
|
- | 997 | radeon_pm_fini(rdev); |
|
- | 998 | radeon_audio_fini(rdev); |
|
- | 999 | r100_cp_fini(rdev); |
|
- | 1000 | radeon_wb_fini(rdev); |
|
- | 1001 | radeon_ib_pool_fini(rdev); |
|
- | 1002 | radeon_gem_fini(rdev); |
|
- | 1003 | rs600_gart_fini(rdev); |
|
- | 1004 | radeon_irq_kms_fini(rdev); |
|
- | 1005 | radeon_fence_driver_fini(rdev); |
|
- | 1006 | radeon_bo_fini(rdev); |
|
Line 982... | Line 1007... | ||
982 | return 0; |
1007 | radeon_atombios_fini(rdev); |
983 | } |
1008 | kfree(rdev->bios); |
984 | 1009 | rdev->bios = NULL; |
|
Line 1044... | Line 1069... | ||
1044 | rdev->accel_working = true; |
1069 | rdev->accel_working = true; |
1045 | r = rs600_startup(rdev); |
1070 | r = rs600_startup(rdev); |
1046 | if (r) { |
1071 | if (r) { |
1047 | /* Somethings want wront with the accel init stop accel */ |
1072 | /* Somethings want wront with the accel init stop accel */ |
1048 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); |
1073 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); |
1049 | // r100_cp_fini(rdev); |
1074 | r100_cp_fini(rdev); |
1050 | // r100_wb_fini(rdev); |
1075 | radeon_wb_fini(rdev); |
1051 | // r100_ib_fini(rdev); |
1076 | radeon_ib_pool_fini(rdev); |
1052 | rs600_gart_fini(rdev); |
1077 | rs600_gart_fini(rdev); |
1053 | // radeon_irq_kms_fini(rdev); |
1078 | radeon_irq_kms_fini(rdev); |
1054 | rdev->accel_working = false; |
1079 | rdev->accel_working = false; |
1055 | } |
1080 | } |
1056 | return 0; |
1081 | return 0; |
1057 | }><>>>>><>><> |
1082 | }><>>>>><>><> |