Subversion Repositories Kolibri OS

Rev

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);