Subversion Repositories Kolibri OS

Rev

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
}