diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_asic.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 244 |
1 files changed, 225 insertions, 19 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 25e1dd197791..b2449629537d 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -94,7 +94,7 @@ static void radeon_register_accessor_init(struct radeon_device *rdev) | |||
94 | rdev->mc_rreg = &rs600_mc_rreg; | 94 | rdev->mc_rreg = &rs600_mc_rreg; |
95 | rdev->mc_wreg = &rs600_mc_wreg; | 95 | rdev->mc_wreg = &rs600_mc_wreg; |
96 | } | 96 | } |
97 | if ((rdev->family >= CHIP_R600) && (rdev->family <= CHIP_RV740)) { | 97 | if (rdev->family >= CHIP_R600) { |
98 | rdev->pciep_rreg = &r600_pciep_rreg; | 98 | rdev->pciep_rreg = &r600_pciep_rreg; |
99 | rdev->pciep_wreg = &r600_pciep_wreg; | 99 | rdev->pciep_wreg = &r600_pciep_wreg; |
100 | } | 100 | } |
@@ -171,6 +171,9 @@ static struct radeon_asic r100_asic = { | |||
171 | .pm_finish = &r100_pm_finish, | 171 | .pm_finish = &r100_pm_finish, |
172 | .pm_init_profile = &r100_pm_init_profile, | 172 | .pm_init_profile = &r100_pm_init_profile, |
173 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 173 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
174 | .pre_page_flip = &r100_pre_page_flip, | ||
175 | .page_flip = &r100_page_flip, | ||
176 | .post_page_flip = &r100_post_page_flip, | ||
174 | }; | 177 | }; |
175 | 178 | ||
176 | static struct radeon_asic r200_asic = { | 179 | static struct radeon_asic r200_asic = { |
@@ -215,6 +218,9 @@ static struct radeon_asic r200_asic = { | |||
215 | .pm_finish = &r100_pm_finish, | 218 | .pm_finish = &r100_pm_finish, |
216 | .pm_init_profile = &r100_pm_init_profile, | 219 | .pm_init_profile = &r100_pm_init_profile, |
217 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 220 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
221 | .pre_page_flip = &r100_pre_page_flip, | ||
222 | .page_flip = &r100_page_flip, | ||
223 | .post_page_flip = &r100_post_page_flip, | ||
218 | }; | 224 | }; |
219 | 225 | ||
220 | static struct radeon_asic r300_asic = { | 226 | static struct radeon_asic r300_asic = { |
@@ -260,6 +266,9 @@ static struct radeon_asic r300_asic = { | |||
260 | .pm_finish = &r100_pm_finish, | 266 | .pm_finish = &r100_pm_finish, |
261 | .pm_init_profile = &r100_pm_init_profile, | 267 | .pm_init_profile = &r100_pm_init_profile, |
262 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 268 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
269 | .pre_page_flip = &r100_pre_page_flip, | ||
270 | .page_flip = &r100_page_flip, | ||
271 | .post_page_flip = &r100_post_page_flip, | ||
263 | }; | 272 | }; |
264 | 273 | ||
265 | static struct radeon_asic r300_asic_pcie = { | 274 | static struct radeon_asic r300_asic_pcie = { |
@@ -304,6 +313,9 @@ static struct radeon_asic r300_asic_pcie = { | |||
304 | .pm_finish = &r100_pm_finish, | 313 | .pm_finish = &r100_pm_finish, |
305 | .pm_init_profile = &r100_pm_init_profile, | 314 | .pm_init_profile = &r100_pm_init_profile, |
306 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 315 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
316 | .pre_page_flip = &r100_pre_page_flip, | ||
317 | .page_flip = &r100_page_flip, | ||
318 | .post_page_flip = &r100_post_page_flip, | ||
307 | }; | 319 | }; |
308 | 320 | ||
309 | static struct radeon_asic r420_asic = { | 321 | static struct radeon_asic r420_asic = { |
@@ -349,6 +361,9 @@ static struct radeon_asic r420_asic = { | |||
349 | .pm_finish = &r100_pm_finish, | 361 | .pm_finish = &r100_pm_finish, |
350 | .pm_init_profile = &r420_pm_init_profile, | 362 | .pm_init_profile = &r420_pm_init_profile, |
351 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 363 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
364 | .pre_page_flip = &r100_pre_page_flip, | ||
365 | .page_flip = &r100_page_flip, | ||
366 | .post_page_flip = &r100_post_page_flip, | ||
352 | }; | 367 | }; |
353 | 368 | ||
354 | static struct radeon_asic rs400_asic = { | 369 | static struct radeon_asic rs400_asic = { |
@@ -394,6 +409,9 @@ static struct radeon_asic rs400_asic = { | |||
394 | .pm_finish = &r100_pm_finish, | 409 | .pm_finish = &r100_pm_finish, |
395 | .pm_init_profile = &r100_pm_init_profile, | 410 | .pm_init_profile = &r100_pm_init_profile, |
396 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 411 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
412 | .pre_page_flip = &r100_pre_page_flip, | ||
413 | .page_flip = &r100_page_flip, | ||
414 | .post_page_flip = &r100_post_page_flip, | ||
397 | }; | 415 | }; |
398 | 416 | ||
399 | static struct radeon_asic rs600_asic = { | 417 | static struct radeon_asic rs600_asic = { |
@@ -439,6 +457,9 @@ static struct radeon_asic rs600_asic = { | |||
439 | .pm_finish = &rs600_pm_finish, | 457 | .pm_finish = &rs600_pm_finish, |
440 | .pm_init_profile = &r420_pm_init_profile, | 458 | .pm_init_profile = &r420_pm_init_profile, |
441 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 459 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
460 | .pre_page_flip = &rs600_pre_page_flip, | ||
461 | .page_flip = &rs600_page_flip, | ||
462 | .post_page_flip = &rs600_post_page_flip, | ||
442 | }; | 463 | }; |
443 | 464 | ||
444 | static struct radeon_asic rs690_asic = { | 465 | static struct radeon_asic rs690_asic = { |
@@ -484,6 +505,9 @@ static struct radeon_asic rs690_asic = { | |||
484 | .pm_finish = &rs600_pm_finish, | 505 | .pm_finish = &rs600_pm_finish, |
485 | .pm_init_profile = &r420_pm_init_profile, | 506 | .pm_init_profile = &r420_pm_init_profile, |
486 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 507 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
508 | .pre_page_flip = &rs600_pre_page_flip, | ||
509 | .page_flip = &rs600_page_flip, | ||
510 | .post_page_flip = &rs600_post_page_flip, | ||
487 | }; | 511 | }; |
488 | 512 | ||
489 | static struct radeon_asic rv515_asic = { | 513 | static struct radeon_asic rv515_asic = { |
@@ -529,6 +553,9 @@ static struct radeon_asic rv515_asic = { | |||
529 | .pm_finish = &rs600_pm_finish, | 553 | .pm_finish = &rs600_pm_finish, |
530 | .pm_init_profile = &r420_pm_init_profile, | 554 | .pm_init_profile = &r420_pm_init_profile, |
531 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 555 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
556 | .pre_page_flip = &rs600_pre_page_flip, | ||
557 | .page_flip = &rs600_page_flip, | ||
558 | .post_page_flip = &rs600_post_page_flip, | ||
532 | }; | 559 | }; |
533 | 560 | ||
534 | static struct radeon_asic r520_asic = { | 561 | static struct radeon_asic r520_asic = { |
@@ -574,6 +601,9 @@ static struct radeon_asic r520_asic = { | |||
574 | .pm_finish = &rs600_pm_finish, | 601 | .pm_finish = &rs600_pm_finish, |
575 | .pm_init_profile = &r420_pm_init_profile, | 602 | .pm_init_profile = &r420_pm_init_profile, |
576 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, | 603 | .pm_get_dynpm_state = &r100_pm_get_dynpm_state, |
604 | .pre_page_flip = &rs600_pre_page_flip, | ||
605 | .page_flip = &rs600_page_flip, | ||
606 | .post_page_flip = &rs600_post_page_flip, | ||
577 | }; | 607 | }; |
578 | 608 | ||
579 | static struct radeon_asic r600_asic = { | 609 | static struct radeon_asic r600_asic = { |
@@ -601,8 +631,8 @@ static struct radeon_asic r600_asic = { | |||
601 | .set_engine_clock = &radeon_atom_set_engine_clock, | 631 | .set_engine_clock = &radeon_atom_set_engine_clock, |
602 | .get_memory_clock = &radeon_atom_get_memory_clock, | 632 | .get_memory_clock = &radeon_atom_get_memory_clock, |
603 | .set_memory_clock = &radeon_atom_set_memory_clock, | 633 | .set_memory_clock = &radeon_atom_set_memory_clock, |
604 | .get_pcie_lanes = &rv370_get_pcie_lanes, | 634 | .get_pcie_lanes = &r600_get_pcie_lanes, |
605 | .set_pcie_lanes = NULL, | 635 | .set_pcie_lanes = &r600_set_pcie_lanes, |
606 | .set_clock_gating = NULL, | 636 | .set_clock_gating = NULL, |
607 | .set_surface_reg = r600_set_surface_reg, | 637 | .set_surface_reg = r600_set_surface_reg, |
608 | .clear_surface_reg = r600_clear_surface_reg, | 638 | .clear_surface_reg = r600_clear_surface_reg, |
@@ -618,6 +648,9 @@ static struct radeon_asic r600_asic = { | |||
618 | .pm_finish = &rs600_pm_finish, | 648 | .pm_finish = &rs600_pm_finish, |
619 | .pm_init_profile = &r600_pm_init_profile, | 649 | .pm_init_profile = &r600_pm_init_profile, |
620 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | 650 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, |
651 | .pre_page_flip = &rs600_pre_page_flip, | ||
652 | .page_flip = &rs600_page_flip, | ||
653 | .post_page_flip = &rs600_post_page_flip, | ||
621 | }; | 654 | }; |
622 | 655 | ||
623 | static struct radeon_asic rs780_asic = { | 656 | static struct radeon_asic rs780_asic = { |
@@ -662,6 +695,9 @@ static struct radeon_asic rs780_asic = { | |||
662 | .pm_finish = &rs600_pm_finish, | 695 | .pm_finish = &rs600_pm_finish, |
663 | .pm_init_profile = &rs780_pm_init_profile, | 696 | .pm_init_profile = &rs780_pm_init_profile, |
664 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | 697 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, |
698 | .pre_page_flip = &rs600_pre_page_flip, | ||
699 | .page_flip = &rs600_page_flip, | ||
700 | .post_page_flip = &rs600_post_page_flip, | ||
665 | }; | 701 | }; |
666 | 702 | ||
667 | static struct radeon_asic rv770_asic = { | 703 | static struct radeon_asic rv770_asic = { |
@@ -689,8 +725,8 @@ static struct radeon_asic rv770_asic = { | |||
689 | .set_engine_clock = &radeon_atom_set_engine_clock, | 725 | .set_engine_clock = &radeon_atom_set_engine_clock, |
690 | .get_memory_clock = &radeon_atom_get_memory_clock, | 726 | .get_memory_clock = &radeon_atom_get_memory_clock, |
691 | .set_memory_clock = &radeon_atom_set_memory_clock, | 727 | .set_memory_clock = &radeon_atom_set_memory_clock, |
692 | .get_pcie_lanes = &rv370_get_pcie_lanes, | 728 | .get_pcie_lanes = &r600_get_pcie_lanes, |
693 | .set_pcie_lanes = NULL, | 729 | .set_pcie_lanes = &r600_set_pcie_lanes, |
694 | .set_clock_gating = &radeon_atom_set_clock_gating, | 730 | .set_clock_gating = &radeon_atom_set_clock_gating, |
695 | .set_surface_reg = r600_set_surface_reg, | 731 | .set_surface_reg = r600_set_surface_reg, |
696 | .clear_surface_reg = r600_clear_surface_reg, | 732 | .clear_surface_reg = r600_clear_surface_reg, |
@@ -706,6 +742,9 @@ static struct radeon_asic rv770_asic = { | |||
706 | .pm_finish = &rs600_pm_finish, | 742 | .pm_finish = &rs600_pm_finish, |
707 | .pm_init_profile = &r600_pm_init_profile, | 743 | .pm_init_profile = &r600_pm_init_profile, |
708 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | 744 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, |
745 | .pre_page_flip = &rs600_pre_page_flip, | ||
746 | .page_flip = &rv770_page_flip, | ||
747 | .post_page_flip = &rs600_post_page_flip, | ||
709 | }; | 748 | }; |
710 | 749 | ||
711 | static struct radeon_asic evergreen_asic = { | 750 | static struct radeon_asic evergreen_asic = { |
@@ -720,19 +759,66 @@ static struct radeon_asic evergreen_asic = { | |||
720 | .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, | 759 | .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, |
721 | .gart_set_page = &rs600_gart_set_page, | 760 | .gart_set_page = &rs600_gart_set_page, |
722 | .ring_test = &r600_ring_test, | 761 | .ring_test = &r600_ring_test, |
723 | .ring_ib_execute = &r600_ring_ib_execute, | 762 | .ring_ib_execute = &evergreen_ring_ib_execute, |
724 | .irq_set = &evergreen_irq_set, | 763 | .irq_set = &evergreen_irq_set, |
725 | .irq_process = &evergreen_irq_process, | 764 | .irq_process = &evergreen_irq_process, |
726 | .get_vblank_counter = &evergreen_get_vblank_counter, | 765 | .get_vblank_counter = &evergreen_get_vblank_counter, |
727 | .fence_ring_emit = &r600_fence_ring_emit, | 766 | .fence_ring_emit = &r600_fence_ring_emit, |
728 | .cs_parse = &evergreen_cs_parse, | 767 | .cs_parse = &evergreen_cs_parse, |
729 | .copy_blit = NULL, | 768 | .copy_blit = &evergreen_copy_blit, |
730 | .copy_dma = NULL, | 769 | .copy_dma = &evergreen_copy_blit, |
731 | .copy = NULL, | 770 | .copy = &evergreen_copy_blit, |
732 | .get_engine_clock = &radeon_atom_get_engine_clock, | 771 | .get_engine_clock = &radeon_atom_get_engine_clock, |
733 | .set_engine_clock = &radeon_atom_set_engine_clock, | 772 | .set_engine_clock = &radeon_atom_set_engine_clock, |
734 | .get_memory_clock = &radeon_atom_get_memory_clock, | 773 | .get_memory_clock = &radeon_atom_get_memory_clock, |
735 | .set_memory_clock = &radeon_atom_set_memory_clock, | 774 | .set_memory_clock = &radeon_atom_set_memory_clock, |
775 | .get_pcie_lanes = &r600_get_pcie_lanes, | ||
776 | .set_pcie_lanes = &r600_set_pcie_lanes, | ||
777 | .set_clock_gating = NULL, | ||
778 | .set_surface_reg = r600_set_surface_reg, | ||
779 | .clear_surface_reg = r600_clear_surface_reg, | ||
780 | .bandwidth_update = &evergreen_bandwidth_update, | ||
781 | .hpd_init = &evergreen_hpd_init, | ||
782 | .hpd_fini = &evergreen_hpd_fini, | ||
783 | .hpd_sense = &evergreen_hpd_sense, | ||
784 | .hpd_set_polarity = &evergreen_hpd_set_polarity, | ||
785 | .ioctl_wait_idle = r600_ioctl_wait_idle, | ||
786 | .gui_idle = &r600_gui_idle, | ||
787 | .pm_misc = &evergreen_pm_misc, | ||
788 | .pm_prepare = &evergreen_pm_prepare, | ||
789 | .pm_finish = &evergreen_pm_finish, | ||
790 | .pm_init_profile = &r600_pm_init_profile, | ||
791 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | ||
792 | .pre_page_flip = &evergreen_pre_page_flip, | ||
793 | .page_flip = &evergreen_page_flip, | ||
794 | .post_page_flip = &evergreen_post_page_flip, | ||
795 | }; | ||
796 | |||
797 | static struct radeon_asic sumo_asic = { | ||
798 | .init = &evergreen_init, | ||
799 | .fini = &evergreen_fini, | ||
800 | .suspend = &evergreen_suspend, | ||
801 | .resume = &evergreen_resume, | ||
802 | .cp_commit = &r600_cp_commit, | ||
803 | .gpu_is_lockup = &evergreen_gpu_is_lockup, | ||
804 | .asic_reset = &evergreen_asic_reset, | ||
805 | .vga_set_state = &r600_vga_set_state, | ||
806 | .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, | ||
807 | .gart_set_page = &rs600_gart_set_page, | ||
808 | .ring_test = &r600_ring_test, | ||
809 | .ring_ib_execute = &evergreen_ring_ib_execute, | ||
810 | .irq_set = &evergreen_irq_set, | ||
811 | .irq_process = &evergreen_irq_process, | ||
812 | .get_vblank_counter = &evergreen_get_vblank_counter, | ||
813 | .fence_ring_emit = &r600_fence_ring_emit, | ||
814 | .cs_parse = &evergreen_cs_parse, | ||
815 | .copy_blit = &evergreen_copy_blit, | ||
816 | .copy_dma = &evergreen_copy_blit, | ||
817 | .copy = &evergreen_copy_blit, | ||
818 | .get_engine_clock = &radeon_atom_get_engine_clock, | ||
819 | .set_engine_clock = &radeon_atom_set_engine_clock, | ||
820 | .get_memory_clock = NULL, | ||
821 | .set_memory_clock = NULL, | ||
736 | .get_pcie_lanes = NULL, | 822 | .get_pcie_lanes = NULL, |
737 | .set_pcie_lanes = NULL, | 823 | .set_pcie_lanes = NULL, |
738 | .set_clock_gating = NULL, | 824 | .set_clock_gating = NULL, |
@@ -743,17 +829,122 @@ static struct radeon_asic evergreen_asic = { | |||
743 | .hpd_fini = &evergreen_hpd_fini, | 829 | .hpd_fini = &evergreen_hpd_fini, |
744 | .hpd_sense = &evergreen_hpd_sense, | 830 | .hpd_sense = &evergreen_hpd_sense, |
745 | .hpd_set_polarity = &evergreen_hpd_set_polarity, | 831 | .hpd_set_polarity = &evergreen_hpd_set_polarity, |
832 | .ioctl_wait_idle = r600_ioctl_wait_idle, | ||
833 | .gui_idle = &r600_gui_idle, | ||
834 | .pm_misc = &evergreen_pm_misc, | ||
835 | .pm_prepare = &evergreen_pm_prepare, | ||
836 | .pm_finish = &evergreen_pm_finish, | ||
837 | .pm_init_profile = &rs780_pm_init_profile, | ||
838 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | ||
839 | .pre_page_flip = &evergreen_pre_page_flip, | ||
840 | .page_flip = &evergreen_page_flip, | ||
841 | .post_page_flip = &evergreen_post_page_flip, | ||
842 | }; | ||
843 | |||
844 | static struct radeon_asic btc_asic = { | ||
845 | .init = &evergreen_init, | ||
846 | .fini = &evergreen_fini, | ||
847 | .suspend = &evergreen_suspend, | ||
848 | .resume = &evergreen_resume, | ||
849 | .cp_commit = &r600_cp_commit, | ||
850 | .gpu_is_lockup = &evergreen_gpu_is_lockup, | ||
851 | .asic_reset = &evergreen_asic_reset, | ||
852 | .vga_set_state = &r600_vga_set_state, | ||
853 | .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, | ||
854 | .gart_set_page = &rs600_gart_set_page, | ||
855 | .ring_test = &r600_ring_test, | ||
856 | .ring_ib_execute = &evergreen_ring_ib_execute, | ||
857 | .irq_set = &evergreen_irq_set, | ||
858 | .irq_process = &evergreen_irq_process, | ||
859 | .get_vblank_counter = &evergreen_get_vblank_counter, | ||
860 | .fence_ring_emit = &r600_fence_ring_emit, | ||
861 | .cs_parse = &evergreen_cs_parse, | ||
862 | .copy_blit = &evergreen_copy_blit, | ||
863 | .copy_dma = &evergreen_copy_blit, | ||
864 | .copy = &evergreen_copy_blit, | ||
865 | .get_engine_clock = &radeon_atom_get_engine_clock, | ||
866 | .set_engine_clock = &radeon_atom_set_engine_clock, | ||
867 | .get_memory_clock = &radeon_atom_get_memory_clock, | ||
868 | .set_memory_clock = &radeon_atom_set_memory_clock, | ||
869 | .get_pcie_lanes = NULL, | ||
870 | .set_pcie_lanes = NULL, | ||
871 | .set_clock_gating = NULL, | ||
872 | .set_surface_reg = r600_set_surface_reg, | ||
873 | .clear_surface_reg = r600_clear_surface_reg, | ||
874 | .bandwidth_update = &evergreen_bandwidth_update, | ||
875 | .hpd_init = &evergreen_hpd_init, | ||
876 | .hpd_fini = &evergreen_hpd_fini, | ||
877 | .hpd_sense = &evergreen_hpd_sense, | ||
878 | .hpd_set_polarity = &evergreen_hpd_set_polarity, | ||
879 | .ioctl_wait_idle = r600_ioctl_wait_idle, | ||
746 | .gui_idle = &r600_gui_idle, | 880 | .gui_idle = &r600_gui_idle, |
747 | .pm_misc = &evergreen_pm_misc, | 881 | .pm_misc = &evergreen_pm_misc, |
748 | .pm_prepare = &evergreen_pm_prepare, | 882 | .pm_prepare = &evergreen_pm_prepare, |
749 | .pm_finish = &evergreen_pm_finish, | 883 | .pm_finish = &evergreen_pm_finish, |
750 | .pm_init_profile = &r600_pm_init_profile, | 884 | .pm_init_profile = &r600_pm_init_profile, |
751 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | 885 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, |
886 | .pre_page_flip = &evergreen_pre_page_flip, | ||
887 | .page_flip = &evergreen_page_flip, | ||
888 | .post_page_flip = &evergreen_post_page_flip, | ||
889 | }; | ||
890 | |||
891 | static struct radeon_asic cayman_asic = { | ||
892 | .init = &cayman_init, | ||
893 | .fini = &cayman_fini, | ||
894 | .suspend = &cayman_suspend, | ||
895 | .resume = &cayman_resume, | ||
896 | .cp_commit = &r600_cp_commit, | ||
897 | .gpu_is_lockup = &cayman_gpu_is_lockup, | ||
898 | .asic_reset = &cayman_asic_reset, | ||
899 | .vga_set_state = &r600_vga_set_state, | ||
900 | .gart_tlb_flush = &cayman_pcie_gart_tlb_flush, | ||
901 | .gart_set_page = &rs600_gart_set_page, | ||
902 | .ring_test = &r600_ring_test, | ||
903 | .ring_ib_execute = &evergreen_ring_ib_execute, | ||
904 | .irq_set = &evergreen_irq_set, | ||
905 | .irq_process = &evergreen_irq_process, | ||
906 | .get_vblank_counter = &evergreen_get_vblank_counter, | ||
907 | .fence_ring_emit = &r600_fence_ring_emit, | ||
908 | .cs_parse = &evergreen_cs_parse, | ||
909 | .copy_blit = &evergreen_copy_blit, | ||
910 | .copy_dma = &evergreen_copy_blit, | ||
911 | .copy = &evergreen_copy_blit, | ||
912 | .get_engine_clock = &radeon_atom_get_engine_clock, | ||
913 | .set_engine_clock = &radeon_atom_set_engine_clock, | ||
914 | .get_memory_clock = &radeon_atom_get_memory_clock, | ||
915 | .set_memory_clock = &radeon_atom_set_memory_clock, | ||
916 | .get_pcie_lanes = NULL, | ||
917 | .set_pcie_lanes = NULL, | ||
918 | .set_clock_gating = NULL, | ||
919 | .set_surface_reg = r600_set_surface_reg, | ||
920 | .clear_surface_reg = r600_clear_surface_reg, | ||
921 | .bandwidth_update = &evergreen_bandwidth_update, | ||
922 | .hpd_init = &evergreen_hpd_init, | ||
923 | .hpd_fini = &evergreen_hpd_fini, | ||
924 | .hpd_sense = &evergreen_hpd_sense, | ||
925 | .hpd_set_polarity = &evergreen_hpd_set_polarity, | ||
926 | .ioctl_wait_idle = r600_ioctl_wait_idle, | ||
927 | .gui_idle = &r600_gui_idle, | ||
928 | .pm_misc = &evergreen_pm_misc, | ||
929 | .pm_prepare = &evergreen_pm_prepare, | ||
930 | .pm_finish = &evergreen_pm_finish, | ||
931 | .pm_init_profile = &r600_pm_init_profile, | ||
932 | .pm_get_dynpm_state = &r600_pm_get_dynpm_state, | ||
933 | .pre_page_flip = &evergreen_pre_page_flip, | ||
934 | .page_flip = &evergreen_page_flip, | ||
935 | .post_page_flip = &evergreen_post_page_flip, | ||
752 | }; | 936 | }; |
753 | 937 | ||
754 | int radeon_asic_init(struct radeon_device *rdev) | 938 | int radeon_asic_init(struct radeon_device *rdev) |
755 | { | 939 | { |
756 | radeon_register_accessor_init(rdev); | 940 | radeon_register_accessor_init(rdev); |
941 | |||
942 | /* set the number of crtcs */ | ||
943 | if (rdev->flags & RADEON_SINGLE_CRTC) | ||
944 | rdev->num_crtc = 1; | ||
945 | else | ||
946 | rdev->num_crtc = 2; | ||
947 | |||
757 | switch (rdev->family) { | 948 | switch (rdev->family) { |
758 | case CHIP_R100: | 949 | case CHIP_R100: |
759 | case CHIP_RV100: | 950 | case CHIP_RV100: |
@@ -833,8 +1024,33 @@ int radeon_asic_init(struct radeon_device *rdev) | |||
833 | case CHIP_JUNIPER: | 1024 | case CHIP_JUNIPER: |
834 | case CHIP_CYPRESS: | 1025 | case CHIP_CYPRESS: |
835 | case CHIP_HEMLOCK: | 1026 | case CHIP_HEMLOCK: |
1027 | /* set num crtcs */ | ||
1028 | if (rdev->family == CHIP_CEDAR) | ||
1029 | rdev->num_crtc = 4; | ||
1030 | else | ||
1031 | rdev->num_crtc = 6; | ||
836 | rdev->asic = &evergreen_asic; | 1032 | rdev->asic = &evergreen_asic; |
837 | break; | 1033 | break; |
1034 | case CHIP_PALM: | ||
1035 | case CHIP_SUMO: | ||
1036 | case CHIP_SUMO2: | ||
1037 | rdev->asic = &sumo_asic; | ||
1038 | break; | ||
1039 | case CHIP_BARTS: | ||
1040 | case CHIP_TURKS: | ||
1041 | case CHIP_CAICOS: | ||
1042 | /* set num crtcs */ | ||
1043 | if (rdev->family == CHIP_CAICOS) | ||
1044 | rdev->num_crtc = 4; | ||
1045 | else | ||
1046 | rdev->num_crtc = 6; | ||
1047 | rdev->asic = &btc_asic; | ||
1048 | break; | ||
1049 | case CHIP_CAYMAN: | ||
1050 | rdev->asic = &cayman_asic; | ||
1051 | /* set num crtcs */ | ||
1052 | rdev->num_crtc = 6; | ||
1053 | break; | ||
838 | default: | 1054 | default: |
839 | /* FIXME: not supported yet */ | 1055 | /* FIXME: not supported yet */ |
840 | return -EINVAL; | 1056 | return -EINVAL; |
@@ -845,16 +1061,6 @@ int radeon_asic_init(struct radeon_device *rdev) | |||
845 | rdev->asic->set_memory_clock = NULL; | 1061 | rdev->asic->set_memory_clock = NULL; |
846 | } | 1062 | } |
847 | 1063 | ||
848 | /* set the number of crtcs */ | ||
849 | if (rdev->flags & RADEON_SINGLE_CRTC) | ||
850 | rdev->num_crtc = 1; | ||
851 | else { | ||
852 | if (ASIC_IS_DCE4(rdev)) | ||
853 | rdev->num_crtc = 6; | ||
854 | else | ||
855 | rdev->num_crtc = 2; | ||
856 | } | ||
857 | |||
858 | return 0; | 1064 | return 0; |
859 | } | 1065 | } |
860 | 1066 | ||