Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5271 | Rev 6104 | ||
---|---|---|---|
Line 642... | Line 642... | ||
642 | r = radeon_gart_init(rdev); |
642 | r = radeon_gart_init(rdev); |
643 | if (r) |
643 | if (r) |
644 | return r; |
644 | return r; |
645 | rdev->gart.table_size = rdev->gart.num_gpu_pages * 4; |
645 | rdev->gart.table_size = rdev->gart.num_gpu_pages * 4; |
646 | rdev->asic->gart.tlb_flush = &r100_pci_gart_tlb_flush; |
646 | rdev->asic->gart.tlb_flush = &r100_pci_gart_tlb_flush; |
- | 647 | rdev->asic->gart.get_page_entry = &r100_pci_gart_get_page_entry; |
|
647 | rdev->asic->gart.set_page = &r100_pci_gart_set_page; |
648 | rdev->asic->gart.set_page = &r100_pci_gart_set_page; |
648 | return radeon_gart_table_ram_alloc(rdev); |
649 | return radeon_gart_table_ram_alloc(rdev); |
649 | } |
650 | } |
Line 650... | Line 651... | ||
650 | 651 | ||
Line 679... | Line 680... | ||
679 | WREG32(RADEON_AIC_CNTL, tmp & ~RADEON_PCIGART_TRANSLATE_EN); |
680 | WREG32(RADEON_AIC_CNTL, tmp & ~RADEON_PCIGART_TRANSLATE_EN); |
680 | WREG32(RADEON_AIC_LO_ADDR, 0); |
681 | WREG32(RADEON_AIC_LO_ADDR, 0); |
681 | WREG32(RADEON_AIC_HI_ADDR, 0); |
682 | WREG32(RADEON_AIC_HI_ADDR, 0); |
682 | } |
683 | } |
Line -... | Line 684... | ||
- | 684 | ||
- | 685 | uint64_t r100_pci_gart_get_page_entry(uint64_t addr, uint32_t flags) |
|
- | 686 | { |
|
- | 687 | return addr; |
|
- | 688 | } |
|
683 | 689 | ||
684 | void r100_pci_gart_set_page(struct radeon_device *rdev, unsigned i, |
690 | void r100_pci_gart_set_page(struct radeon_device *rdev, unsigned i, |
685 | uint64_t addr, uint32_t flags) |
691 | uint64_t entry) |
686 | { |
692 | { |
687 | u32 *gtt = rdev->gart.ptr; |
693 | u32 *gtt = rdev->gart.ptr; |
688 | gtt[i] = cpu_to_le32(lower_32_bits(addr)); |
694 | gtt[i] = cpu_to_le32(lower_32_bits(entry)); |
Line 689... | Line 695... | ||
689 | } |
695 | } |
690 | 696 | ||
691 | void r100_pci_gart_fini(struct radeon_device *rdev) |
697 | void r100_pci_gart_fini(struct radeon_device *rdev) |
Line 720... | Line 726... | ||
720 | } |
726 | } |
721 | if (rdev->irq.hpd[1]) { |
727 | if (rdev->irq.hpd[1]) { |
722 | tmp |= RADEON_FP2_DETECT_MASK; |
728 | tmp |= RADEON_FP2_DETECT_MASK; |
723 | } |
729 | } |
724 | WREG32(RADEON_GEN_INT_CNTL, tmp); |
730 | WREG32(RADEON_GEN_INT_CNTL, tmp); |
- | 731 | ||
- | 732 | /* read back to post the write */ |
|
- | 733 | RREG32(RADEON_GEN_INT_CNTL); |
|
- | 734 | ||
725 | return 0; |
735 | return 0; |
726 | } |
736 | } |
Line 727... | Line 737... | ||
727 | 737 | ||
728 | void r100_irq_disable(struct radeon_device *rdev) |
738 | void r100_irq_disable(struct radeon_device *rdev) |
Line 767... | Line 777... | ||
767 | radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); |
777 | radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); |
768 | } |
778 | } |
769 | /* Vertical blank interrupts */ |
779 | /* Vertical blank interrupts */ |
770 | if (status & RADEON_CRTC_VBLANK_STAT) { |
780 | if (status & RADEON_CRTC_VBLANK_STAT) { |
771 | if (rdev->irq.crtc_vblank_int[0]) { |
781 | if (rdev->irq.crtc_vblank_int[0]) { |
772 | // drm_handle_vblank(rdev->ddev, 0); |
782 | drm_handle_vblank(rdev->ddev, 0); |
773 | rdev->pm.vblank_sync = true; |
783 | rdev->pm.vblank_sync = true; |
774 | // wake_up(&rdev->irq.vblank_queue); |
784 | wake_up(&rdev->irq.vblank_queue); |
775 | } |
785 | } |
776 | // if (rdev->irq.pflip[0]) |
786 | if (atomic_read(&rdev->irq.pflip[0])) |
777 | // radeon_crtc_handle_flip(rdev, 0); |
787 | radeon_crtc_handle_vblank(rdev, 0); |
778 | } |
788 | } |
779 | if (status & RADEON_CRTC2_VBLANK_STAT) { |
789 | if (status & RADEON_CRTC2_VBLANK_STAT) { |
780 | if (rdev->irq.crtc_vblank_int[1]) { |
790 | if (rdev->irq.crtc_vblank_int[1]) { |
781 | // drm_handle_vblank(rdev->ddev, 1); |
791 | drm_handle_vblank(rdev->ddev, 1); |
782 | rdev->pm.vblank_sync = true; |
792 | rdev->pm.vblank_sync = true; |
783 | // wake_up(&rdev->irq.vblank_queue); |
793 | wake_up(&rdev->irq.vblank_queue); |
784 | } |
794 | } |
785 | // if (rdev->irq.pflip[1]) |
795 | if (atomic_read(&rdev->irq.pflip[1])) |
786 | // radeon_crtc_handle_flip(rdev, 1); |
796 | radeon_crtc_handle_vblank(rdev, 1); |
787 | } |
797 | } |
788 | if (status & RADEON_FP_DETECT_STAT) { |
798 | if (status & RADEON_FP_DETECT_STAT) { |
789 | queue_hotplug = true; |
799 | queue_hotplug = true; |
790 | DRM_DEBUG("HPD1\n"); |
800 | DRM_DEBUG("HPD1\n"); |
791 | } |
801 | } |
Line 3201... | Line 3211... | ||
3201 | struct drm_display_mode *mode1 = NULL; |
3211 | struct drm_display_mode *mode1 = NULL; |
3202 | struct drm_display_mode *mode2 = NULL; |
3212 | struct drm_display_mode *mode2 = NULL; |
3203 | uint32_t pixel_bytes1 = 0; |
3213 | uint32_t pixel_bytes1 = 0; |
3204 | uint32_t pixel_bytes2 = 0; |
3214 | uint32_t pixel_bytes2 = 0; |
Line -... | Line 3215... | ||
- | 3215 | ||
- | 3216 | /* Guess line buffer size to be 8192 pixels */ |
|
- | 3217 | u32 lb_size = 8192; |
|
3205 | 3218 | ||
3206 | if (!rdev->mode_info.mode_config_initialized) |
3219 | if (!rdev->mode_info.mode_config_initialized) |
Line 3207... | Line 3220... | ||
3207 | return; |
3220 | return; |
Line 3615... | Line 3628... | ||
3615 | } |
3628 | } |
Line 3616... | Line 3629... | ||
3616 | 3629 | ||
3617 | DRM_DEBUG_KMS("GRPH2_BUFFER_CNTL from to %x\n", |
3630 | DRM_DEBUG_KMS("GRPH2_BUFFER_CNTL from to %x\n", |
3618 | (unsigned int)RREG32(RADEON_GRPH2_BUFFER_CNTL)); |
3631 | (unsigned int)RREG32(RADEON_GRPH2_BUFFER_CNTL)); |
- | 3632 | } |
|
- | 3633 | ||
- | 3634 | /* Save number of lines the linebuffer leads before the scanout */ |
|
- | 3635 | if (mode1) |
|
- | 3636 | rdev->mode_info.crtcs[0]->lb_vblank_lead_lines = DIV_ROUND_UP(lb_size, mode1->crtc_hdisplay); |
|
- | 3637 | ||
- | 3638 | if (mode2) |
|
3619 | } |
3639 | rdev->mode_info.crtcs[1]->lb_vblank_lead_lines = DIV_ROUND_UP(lb_size, mode2->crtc_hdisplay); |
Line 3620... | Line 3640... | ||
3620 | } |
3640 | } |
3621 | 3641 | ||
3622 | int r100_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) |
3642 | int r100_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) |
Line 3905... | Line 3925... | ||
3905 | } |
3925 | } |
Line 3906... | Line 3926... | ||
3906 | 3926 | ||
3907 | return 0; |
3927 | return 0; |
Line -... | Line 3928... | ||
- | 3928 | } |
|
- | 3929 | ||
- | 3930 | void r100_fini(struct radeon_device *rdev) |
|
- | 3931 | { |
|
- | 3932 | radeon_pm_fini(rdev); |
|
- | 3933 | r100_cp_fini(rdev); |
|
- | 3934 | radeon_wb_fini(rdev); |
|
- | 3935 | radeon_ib_pool_fini(rdev); |
|
- | 3936 | radeon_gem_fini(rdev); |
|
- | 3937 | if (rdev->flags & RADEON_IS_PCI) |
|
- | 3938 | r100_pci_gart_fini(rdev); |
|
- | 3939 | radeon_agp_fini(rdev); |
|
- | 3940 | radeon_irq_kms_fini(rdev); |
|
- | 3941 | radeon_fence_driver_fini(rdev); |
|
- | 3942 | radeon_bo_fini(rdev); |
|
- | 3943 | radeon_atombios_fini(rdev); |
|
- | 3944 | kfree(rdev->bios); |
|
- | 3945 | rdev->bios = NULL; |
|
3908 | } |
3946 | } |
3909 | 3947 | ||
3910 | /* |
3948 | /* |
3911 | * Due to how kexec works, it can leave the hw fully initialised when it |
3949 | * Due to how kexec works, it can leave the hw fully initialised when it |
3912 | * boots the new kernel. However doing our init sequence with the CP and |
3950 | * boots the new kernel. However doing our init sequence with the CP and |
Line 4004... | Line 4042... | ||
4004 | rdev->accel_working = true; |
4042 | rdev->accel_working = true; |
4005 | r = r100_startup(rdev); |
4043 | r = r100_startup(rdev); |
4006 | if (r) { |
4044 | if (r) { |
4007 | /* Somethings want wront with the accel init stop accel */ |
4045 | /* Somethings want wront with the accel init stop accel */ |
4008 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); |
4046 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); |
- | 4047 | r100_cp_fini(rdev); |
|
- | 4048 | radeon_wb_fini(rdev); |
|
- | 4049 | radeon_ib_pool_fini(rdev); |
|
- | 4050 | radeon_irq_kms_fini(rdev); |
|
4009 | if (rdev->flags & RADEON_IS_PCI) |
4051 | if (rdev->flags & RADEON_IS_PCI) |
4010 | r100_pci_gart_fini(rdev); |
4052 | r100_pci_gart_fini(rdev); |
4011 | rdev->accel_working = false; |
4053 | rdev->accel_working = false; |
4012 | } |
4054 | } |
4013 | return 0; |
4055 | return 0; |
4014 | } |
4056 | } |
Line -... | Line 4057... | ||
- | 4057 | ||
- | 4058 | uint32_t r100_mm_rreg_slow(struct radeon_device *rdev, uint32_t reg) |
|
- | 4059 | { |
|
- | 4060 | unsigned long flags; |
|
- | 4061 | uint32_t ret; |
|
- | 4062 | ||
- | 4063 | spin_lock_irqsave(&rdev->mmio_idx_lock, flags); |
|
- | 4064 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
|
- | 4065 | ret = readl(((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); |
|
- | 4066 | spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags); |
|
- | 4067 | return ret; |
|
- | 4068 | } |
|
- | 4069 | ||
- | 4070 | void r100_mm_wreg_slow(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
|
- | 4071 | { |
|
- | 4072 | unsigned long flags; |
|
- | 4073 | ||
- | 4074 | spin_lock_irqsave(&rdev->mmio_idx_lock, flags); |
|
- | 4075 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
|
- | 4076 | writel(v, ((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); |
|
- | 4077 | spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags); |
|
- | 4078 | } |
|
4015 | 4079 | ||
4016 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg) |
4080 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg) |
4017 | { |
4081 | { |
4018 | if (reg < rdev->rio_mem_size) |
4082 | if (reg < rdev->rio_mem_size) |
4019 | return ioread32(rdev->rio_mem + reg); |
4083 | return ioread32(rdev->rio_mem + reg); |