diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vi.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vi.c | 988 |
1 files changed, 216 insertions, 772 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index c0d9aad7126f..25c0a71b257d 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
@@ -121,8 +121,8 @@ static u32 vi_smc_rreg(struct amdgpu_device *adev, u32 reg) | |||
121 | u32 r; | 121 | u32 r; |
122 | 122 | ||
123 | spin_lock_irqsave(&adev->smc_idx_lock, flags); | 123 | spin_lock_irqsave(&adev->smc_idx_lock, flags); |
124 | WREG32(mmSMC_IND_INDEX_0, (reg)); | 124 | WREG32(mmSMC_IND_INDEX_11, (reg)); |
125 | r = RREG32(mmSMC_IND_DATA_0); | 125 | r = RREG32(mmSMC_IND_DATA_11); |
126 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); | 126 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); |
127 | return r; | 127 | return r; |
128 | } | 128 | } |
@@ -132,8 +132,8 @@ static void vi_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v) | |||
132 | unsigned long flags; | 132 | unsigned long flags; |
133 | 133 | ||
134 | spin_lock_irqsave(&adev->smc_idx_lock, flags); | 134 | spin_lock_irqsave(&adev->smc_idx_lock, flags); |
135 | WREG32(mmSMC_IND_INDEX_0, (reg)); | 135 | WREG32(mmSMC_IND_INDEX_11, (reg)); |
136 | WREG32(mmSMC_IND_DATA_0, (v)); | 136 | WREG32(mmSMC_IND_DATA_11, (v)); |
137 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); | 137 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); |
138 | } | 138 | } |
139 | 139 | ||
@@ -437,12 +437,12 @@ static bool vi_read_bios_from_rom(struct amdgpu_device *adev, | |||
437 | /* take the smc lock since we are using the smc index */ | 437 | /* take the smc lock since we are using the smc index */ |
438 | spin_lock_irqsave(&adev->smc_idx_lock, flags); | 438 | spin_lock_irqsave(&adev->smc_idx_lock, flags); |
439 | /* set rom index to 0 */ | 439 | /* set rom index to 0 */ |
440 | WREG32(mmSMC_IND_INDEX_0, ixROM_INDEX); | 440 | WREG32(mmSMC_IND_INDEX_11, ixROM_INDEX); |
441 | WREG32(mmSMC_IND_DATA_0, 0); | 441 | WREG32(mmSMC_IND_DATA_11, 0); |
442 | /* set index to data for continous read */ | 442 | /* set index to data for continous read */ |
443 | WREG32(mmSMC_IND_INDEX_0, ixROM_DATA); | 443 | WREG32(mmSMC_IND_INDEX_11, ixROM_DATA); |
444 | for (i = 0; i < length_dw; i++) | 444 | for (i = 0; i < length_dw; i++) |
445 | dw_ptr[i] = RREG32(mmSMC_IND_DATA_0); | 445 | dw_ptr[i] = RREG32(mmSMC_IND_DATA_11); |
446 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); | 446 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); |
447 | 447 | ||
448 | return true; | 448 | return true; |
@@ -556,21 +556,100 @@ static const struct amdgpu_allowed_register_entry vi_allowed_read_registers[] = | |||
556 | {mmPA_SC_RASTER_CONFIG_1, false, true}, | 556 | {mmPA_SC_RASTER_CONFIG_1, false, true}, |
557 | }; | 557 | }; |
558 | 558 | ||
559 | static uint32_t vi_read_indexed_register(struct amdgpu_device *adev, u32 se_num, | 559 | static uint32_t vi_get_register_value(struct amdgpu_device *adev, |
560 | u32 sh_num, u32 reg_offset) | 560 | bool indexed, u32 se_num, |
561 | { | 561 | u32 sh_num, u32 reg_offset) |
562 | uint32_t val; | 562 | { |
563 | if (indexed) { | ||
564 | uint32_t val; | ||
565 | unsigned se_idx = (se_num == 0xffffffff) ? 0 : se_num; | ||
566 | unsigned sh_idx = (sh_num == 0xffffffff) ? 0 : sh_num; | ||
567 | |||
568 | switch (reg_offset) { | ||
569 | case mmCC_RB_BACKEND_DISABLE: | ||
570 | return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable; | ||
571 | case mmGC_USER_RB_BACKEND_DISABLE: | ||
572 | return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable; | ||
573 | case mmPA_SC_RASTER_CONFIG: | ||
574 | return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config; | ||
575 | case mmPA_SC_RASTER_CONFIG_1: | ||
576 | return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config_1; | ||
577 | } | ||
563 | 578 | ||
564 | mutex_lock(&adev->grbm_idx_mutex); | 579 | mutex_lock(&adev->grbm_idx_mutex); |
565 | if (se_num != 0xffffffff || sh_num != 0xffffffff) | 580 | if (se_num != 0xffffffff || sh_num != 0xffffffff) |
566 | amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); | 581 | amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); |
567 | 582 | ||
568 | val = RREG32(reg_offset); | 583 | val = RREG32(reg_offset); |
569 | 584 | ||
570 | if (se_num != 0xffffffff || sh_num != 0xffffffff) | 585 | if (se_num != 0xffffffff || sh_num != 0xffffffff) |
571 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); | 586 | amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); |
572 | mutex_unlock(&adev->grbm_idx_mutex); | 587 | mutex_unlock(&adev->grbm_idx_mutex); |
573 | return val; | 588 | return val; |
589 | } else { | ||
590 | unsigned idx; | ||
591 | |||
592 | switch (reg_offset) { | ||
593 | case mmGB_ADDR_CONFIG: | ||
594 | return adev->gfx.config.gb_addr_config; | ||
595 | case mmMC_ARB_RAMCFG: | ||
596 | return adev->gfx.config.mc_arb_ramcfg; | ||
597 | case mmGB_TILE_MODE0: | ||
598 | case mmGB_TILE_MODE1: | ||
599 | case mmGB_TILE_MODE2: | ||
600 | case mmGB_TILE_MODE3: | ||
601 | case mmGB_TILE_MODE4: | ||
602 | case mmGB_TILE_MODE5: | ||
603 | case mmGB_TILE_MODE6: | ||
604 | case mmGB_TILE_MODE7: | ||
605 | case mmGB_TILE_MODE8: | ||
606 | case mmGB_TILE_MODE9: | ||
607 | case mmGB_TILE_MODE10: | ||
608 | case mmGB_TILE_MODE11: | ||
609 | case mmGB_TILE_MODE12: | ||
610 | case mmGB_TILE_MODE13: | ||
611 | case mmGB_TILE_MODE14: | ||
612 | case mmGB_TILE_MODE15: | ||
613 | case mmGB_TILE_MODE16: | ||
614 | case mmGB_TILE_MODE17: | ||
615 | case mmGB_TILE_MODE18: | ||
616 | case mmGB_TILE_MODE19: | ||
617 | case mmGB_TILE_MODE20: | ||
618 | case mmGB_TILE_MODE21: | ||
619 | case mmGB_TILE_MODE22: | ||
620 | case mmGB_TILE_MODE23: | ||
621 | case mmGB_TILE_MODE24: | ||
622 | case mmGB_TILE_MODE25: | ||
623 | case mmGB_TILE_MODE26: | ||
624 | case mmGB_TILE_MODE27: | ||
625 | case mmGB_TILE_MODE28: | ||
626 | case mmGB_TILE_MODE29: | ||
627 | case mmGB_TILE_MODE30: | ||
628 | case mmGB_TILE_MODE31: | ||
629 | idx = (reg_offset - mmGB_TILE_MODE0); | ||
630 | return adev->gfx.config.tile_mode_array[idx]; | ||
631 | case mmGB_MACROTILE_MODE0: | ||
632 | case mmGB_MACROTILE_MODE1: | ||
633 | case mmGB_MACROTILE_MODE2: | ||
634 | case mmGB_MACROTILE_MODE3: | ||
635 | case mmGB_MACROTILE_MODE4: | ||
636 | case mmGB_MACROTILE_MODE5: | ||
637 | case mmGB_MACROTILE_MODE6: | ||
638 | case mmGB_MACROTILE_MODE7: | ||
639 | case mmGB_MACROTILE_MODE8: | ||
640 | case mmGB_MACROTILE_MODE9: | ||
641 | case mmGB_MACROTILE_MODE10: | ||
642 | case mmGB_MACROTILE_MODE11: | ||
643 | case mmGB_MACROTILE_MODE12: | ||
644 | case mmGB_MACROTILE_MODE13: | ||
645 | case mmGB_MACROTILE_MODE14: | ||
646 | case mmGB_MACROTILE_MODE15: | ||
647 | idx = (reg_offset - mmGB_MACROTILE_MODE0); | ||
648 | return adev->gfx.config.macrotile_mode_array[idx]; | ||
649 | default: | ||
650 | return RREG32(reg_offset); | ||
651 | } | ||
652 | } | ||
574 | } | 653 | } |
575 | 654 | ||
576 | static int vi_read_register(struct amdgpu_device *adev, u32 se_num, | 655 | static int vi_read_register(struct amdgpu_device *adev, u32 se_num, |
@@ -605,10 +684,9 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num, | |||
605 | if (reg_offset != asic_register_entry->reg_offset) | 684 | if (reg_offset != asic_register_entry->reg_offset) |
606 | continue; | 685 | continue; |
607 | if (!asic_register_entry->untouched) | 686 | if (!asic_register_entry->untouched) |
608 | *value = asic_register_entry->grbm_indexed ? | 687 | *value = vi_get_register_value(adev, |
609 | vi_read_indexed_register(adev, se_num, | 688 | asic_register_entry->grbm_indexed, |
610 | sh_num, reg_offset) : | 689 | se_num, sh_num, reg_offset); |
611 | RREG32(reg_offset); | ||
612 | return 0; | 690 | return 0; |
613 | } | 691 | } |
614 | } | 692 | } |
@@ -618,10 +696,9 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num, | |||
618 | continue; | 696 | continue; |
619 | 697 | ||
620 | if (!vi_allowed_read_registers[i].untouched) | 698 | if (!vi_allowed_read_registers[i].untouched) |
621 | *value = vi_allowed_read_registers[i].grbm_indexed ? | 699 | *value = vi_get_register_value(adev, |
622 | vi_read_indexed_register(adev, se_num, | 700 | vi_allowed_read_registers[i].grbm_indexed, |
623 | sh_num, reg_offset) : | 701 | se_num, sh_num, reg_offset); |
624 | RREG32(reg_offset); | ||
625 | return 0; | 702 | return 0; |
626 | } | 703 | } |
627 | return -EINVAL; | 704 | return -EINVAL; |
@@ -652,18 +729,6 @@ static int vi_gpu_pci_config_reset(struct amdgpu_device *adev) | |||
652 | return -EINVAL; | 729 | return -EINVAL; |
653 | } | 730 | } |
654 | 731 | ||
655 | static void vi_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung) | ||
656 | { | ||
657 | u32 tmp = RREG32(mmBIOS_SCRATCH_3); | ||
658 | |||
659 | if (hung) | ||
660 | tmp |= ATOM_S3_ASIC_GUI_ENGINE_HUNG; | ||
661 | else | ||
662 | tmp &= ~ATOM_S3_ASIC_GUI_ENGINE_HUNG; | ||
663 | |||
664 | WREG32(mmBIOS_SCRATCH_3, tmp); | ||
665 | } | ||
666 | |||
667 | /** | 732 | /** |
668 | * vi_asic_reset - soft reset GPU | 733 | * vi_asic_reset - soft reset GPU |
669 | * | 734 | * |
@@ -677,11 +742,11 @@ static int vi_asic_reset(struct amdgpu_device *adev) | |||
677 | { | 742 | { |
678 | int r; | 743 | int r; |
679 | 744 | ||
680 | vi_set_bios_scratch_engine_hung(adev, true); | 745 | amdgpu_atombios_scratch_regs_engine_hung(adev, true); |
681 | 746 | ||
682 | r = vi_gpu_pci_config_reset(adev); | 747 | r = vi_gpu_pci_config_reset(adev); |
683 | 748 | ||
684 | vi_set_bios_scratch_engine_hung(adev, false); | 749 | amdgpu_atombios_scratch_regs_engine_hung(adev, false); |
685 | 750 | ||
686 | return r; | 751 | return r; |
687 | } | 752 | } |
@@ -781,734 +846,6 @@ static void vi_enable_doorbell_aperture(struct amdgpu_device *adev, | |||
781 | WREG32(mmBIF_DOORBELL_APER_EN, tmp); | 846 | WREG32(mmBIF_DOORBELL_APER_EN, tmp); |
782 | } | 847 | } |
783 | 848 | ||
784 | /* topaz has no DCE, UVD, VCE */ | ||
785 | static const struct amdgpu_ip_block_version topaz_ip_blocks[] = | ||
786 | { | ||
787 | /* ORDER MATTERS! */ | ||
788 | { | ||
789 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
790 | .major = 2, | ||
791 | .minor = 0, | ||
792 | .rev = 0, | ||
793 | .funcs = &vi_common_ip_funcs, | ||
794 | }, | ||
795 | { | ||
796 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
797 | .major = 7, | ||
798 | .minor = 4, | ||
799 | .rev = 0, | ||
800 | .funcs = &gmc_v7_0_ip_funcs, | ||
801 | }, | ||
802 | { | ||
803 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
804 | .major = 2, | ||
805 | .minor = 4, | ||
806 | .rev = 0, | ||
807 | .funcs = &iceland_ih_ip_funcs, | ||
808 | }, | ||
809 | { | ||
810 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
811 | .major = 7, | ||
812 | .minor = 1, | ||
813 | .rev = 0, | ||
814 | .funcs = &amdgpu_pp_ip_funcs, | ||
815 | }, | ||
816 | { | ||
817 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
818 | .major = 8, | ||
819 | .minor = 0, | ||
820 | .rev = 0, | ||
821 | .funcs = &gfx_v8_0_ip_funcs, | ||
822 | }, | ||
823 | { | ||
824 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
825 | .major = 2, | ||
826 | .minor = 4, | ||
827 | .rev = 0, | ||
828 | .funcs = &sdma_v2_4_ip_funcs, | ||
829 | }, | ||
830 | }; | ||
831 | |||
832 | static const struct amdgpu_ip_block_version topaz_ip_blocks_vd[] = | ||
833 | { | ||
834 | /* ORDER MATTERS! */ | ||
835 | { | ||
836 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
837 | .major = 2, | ||
838 | .minor = 0, | ||
839 | .rev = 0, | ||
840 | .funcs = &vi_common_ip_funcs, | ||
841 | }, | ||
842 | { | ||
843 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
844 | .major = 7, | ||
845 | .minor = 4, | ||
846 | .rev = 0, | ||
847 | .funcs = &gmc_v7_0_ip_funcs, | ||
848 | }, | ||
849 | { | ||
850 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
851 | .major = 2, | ||
852 | .minor = 4, | ||
853 | .rev = 0, | ||
854 | .funcs = &iceland_ih_ip_funcs, | ||
855 | }, | ||
856 | { | ||
857 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
858 | .major = 7, | ||
859 | .minor = 1, | ||
860 | .rev = 0, | ||
861 | .funcs = &amdgpu_pp_ip_funcs, | ||
862 | }, | ||
863 | { | ||
864 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
865 | .major = 1, | ||
866 | .minor = 0, | ||
867 | .rev = 0, | ||
868 | .funcs = &dce_virtual_ip_funcs, | ||
869 | }, | ||
870 | { | ||
871 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
872 | .major = 8, | ||
873 | .minor = 0, | ||
874 | .rev = 0, | ||
875 | .funcs = &gfx_v8_0_ip_funcs, | ||
876 | }, | ||
877 | { | ||
878 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
879 | .major = 2, | ||
880 | .minor = 4, | ||
881 | .rev = 0, | ||
882 | .funcs = &sdma_v2_4_ip_funcs, | ||
883 | }, | ||
884 | }; | ||
885 | |||
886 | static const struct amdgpu_ip_block_version tonga_ip_blocks[] = | ||
887 | { | ||
888 | /* ORDER MATTERS! */ | ||
889 | { | ||
890 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
891 | .major = 2, | ||
892 | .minor = 0, | ||
893 | .rev = 0, | ||
894 | .funcs = &vi_common_ip_funcs, | ||
895 | }, | ||
896 | { | ||
897 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
898 | .major = 8, | ||
899 | .minor = 0, | ||
900 | .rev = 0, | ||
901 | .funcs = &gmc_v8_0_ip_funcs, | ||
902 | }, | ||
903 | { | ||
904 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
905 | .major = 3, | ||
906 | .minor = 0, | ||
907 | .rev = 0, | ||
908 | .funcs = &tonga_ih_ip_funcs, | ||
909 | }, | ||
910 | { | ||
911 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
912 | .major = 7, | ||
913 | .minor = 1, | ||
914 | .rev = 0, | ||
915 | .funcs = &amdgpu_pp_ip_funcs, | ||
916 | }, | ||
917 | { | ||
918 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
919 | .major = 10, | ||
920 | .minor = 0, | ||
921 | .rev = 0, | ||
922 | .funcs = &dce_v10_0_ip_funcs, | ||
923 | }, | ||
924 | { | ||
925 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
926 | .major = 8, | ||
927 | .minor = 0, | ||
928 | .rev = 0, | ||
929 | .funcs = &gfx_v8_0_ip_funcs, | ||
930 | }, | ||
931 | { | ||
932 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
933 | .major = 3, | ||
934 | .minor = 0, | ||
935 | .rev = 0, | ||
936 | .funcs = &sdma_v3_0_ip_funcs, | ||
937 | }, | ||
938 | { | ||
939 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
940 | .major = 5, | ||
941 | .minor = 0, | ||
942 | .rev = 0, | ||
943 | .funcs = &uvd_v5_0_ip_funcs, | ||
944 | }, | ||
945 | { | ||
946 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
947 | .major = 3, | ||
948 | .minor = 0, | ||
949 | .rev = 0, | ||
950 | .funcs = &vce_v3_0_ip_funcs, | ||
951 | }, | ||
952 | }; | ||
953 | |||
954 | static const struct amdgpu_ip_block_version tonga_ip_blocks_vd[] = | ||
955 | { | ||
956 | /* ORDER MATTERS! */ | ||
957 | { | ||
958 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
959 | .major = 2, | ||
960 | .minor = 0, | ||
961 | .rev = 0, | ||
962 | .funcs = &vi_common_ip_funcs, | ||
963 | }, | ||
964 | { | ||
965 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
966 | .major = 8, | ||
967 | .minor = 0, | ||
968 | .rev = 0, | ||
969 | .funcs = &gmc_v8_0_ip_funcs, | ||
970 | }, | ||
971 | { | ||
972 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
973 | .major = 3, | ||
974 | .minor = 0, | ||
975 | .rev = 0, | ||
976 | .funcs = &tonga_ih_ip_funcs, | ||
977 | }, | ||
978 | { | ||
979 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
980 | .major = 7, | ||
981 | .minor = 1, | ||
982 | .rev = 0, | ||
983 | .funcs = &amdgpu_pp_ip_funcs, | ||
984 | }, | ||
985 | { | ||
986 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
987 | .major = 10, | ||
988 | .minor = 0, | ||
989 | .rev = 0, | ||
990 | .funcs = &dce_virtual_ip_funcs, | ||
991 | }, | ||
992 | { | ||
993 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
994 | .major = 8, | ||
995 | .minor = 0, | ||
996 | .rev = 0, | ||
997 | .funcs = &gfx_v8_0_ip_funcs, | ||
998 | }, | ||
999 | { | ||
1000 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1001 | .major = 3, | ||
1002 | .minor = 0, | ||
1003 | .rev = 0, | ||
1004 | .funcs = &sdma_v3_0_ip_funcs, | ||
1005 | }, | ||
1006 | { | ||
1007 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1008 | .major = 5, | ||
1009 | .minor = 0, | ||
1010 | .rev = 0, | ||
1011 | .funcs = &uvd_v5_0_ip_funcs, | ||
1012 | }, | ||
1013 | { | ||
1014 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1015 | .major = 3, | ||
1016 | .minor = 0, | ||
1017 | .rev = 0, | ||
1018 | .funcs = &vce_v3_0_ip_funcs, | ||
1019 | }, | ||
1020 | }; | ||
1021 | |||
1022 | static const struct amdgpu_ip_block_version fiji_ip_blocks[] = | ||
1023 | { | ||
1024 | /* ORDER MATTERS! */ | ||
1025 | { | ||
1026 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1027 | .major = 2, | ||
1028 | .minor = 0, | ||
1029 | .rev = 0, | ||
1030 | .funcs = &vi_common_ip_funcs, | ||
1031 | }, | ||
1032 | { | ||
1033 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1034 | .major = 8, | ||
1035 | .minor = 5, | ||
1036 | .rev = 0, | ||
1037 | .funcs = &gmc_v8_0_ip_funcs, | ||
1038 | }, | ||
1039 | { | ||
1040 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1041 | .major = 3, | ||
1042 | .minor = 0, | ||
1043 | .rev = 0, | ||
1044 | .funcs = &tonga_ih_ip_funcs, | ||
1045 | }, | ||
1046 | { | ||
1047 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1048 | .major = 7, | ||
1049 | .minor = 1, | ||
1050 | .rev = 0, | ||
1051 | .funcs = &amdgpu_pp_ip_funcs, | ||
1052 | }, | ||
1053 | { | ||
1054 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1055 | .major = 10, | ||
1056 | .minor = 1, | ||
1057 | .rev = 0, | ||
1058 | .funcs = &dce_v10_0_ip_funcs, | ||
1059 | }, | ||
1060 | { | ||
1061 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1062 | .major = 8, | ||
1063 | .minor = 0, | ||
1064 | .rev = 0, | ||
1065 | .funcs = &gfx_v8_0_ip_funcs, | ||
1066 | }, | ||
1067 | { | ||
1068 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1069 | .major = 3, | ||
1070 | .minor = 0, | ||
1071 | .rev = 0, | ||
1072 | .funcs = &sdma_v3_0_ip_funcs, | ||
1073 | }, | ||
1074 | { | ||
1075 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1076 | .major = 6, | ||
1077 | .minor = 0, | ||
1078 | .rev = 0, | ||
1079 | .funcs = &uvd_v6_0_ip_funcs, | ||
1080 | }, | ||
1081 | { | ||
1082 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1083 | .major = 3, | ||
1084 | .minor = 0, | ||
1085 | .rev = 0, | ||
1086 | .funcs = &vce_v3_0_ip_funcs, | ||
1087 | }, | ||
1088 | }; | ||
1089 | |||
1090 | static const struct amdgpu_ip_block_version fiji_ip_blocks_vd[] = | ||
1091 | { | ||
1092 | /* ORDER MATTERS! */ | ||
1093 | { | ||
1094 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1095 | .major = 2, | ||
1096 | .minor = 0, | ||
1097 | .rev = 0, | ||
1098 | .funcs = &vi_common_ip_funcs, | ||
1099 | }, | ||
1100 | { | ||
1101 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1102 | .major = 8, | ||
1103 | .minor = 5, | ||
1104 | .rev = 0, | ||
1105 | .funcs = &gmc_v8_0_ip_funcs, | ||
1106 | }, | ||
1107 | { | ||
1108 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1109 | .major = 3, | ||
1110 | .minor = 0, | ||
1111 | .rev = 0, | ||
1112 | .funcs = &tonga_ih_ip_funcs, | ||
1113 | }, | ||
1114 | { | ||
1115 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1116 | .major = 7, | ||
1117 | .minor = 1, | ||
1118 | .rev = 0, | ||
1119 | .funcs = &amdgpu_pp_ip_funcs, | ||
1120 | }, | ||
1121 | { | ||
1122 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1123 | .major = 10, | ||
1124 | .minor = 1, | ||
1125 | .rev = 0, | ||
1126 | .funcs = &dce_virtual_ip_funcs, | ||
1127 | }, | ||
1128 | { | ||
1129 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1130 | .major = 8, | ||
1131 | .minor = 0, | ||
1132 | .rev = 0, | ||
1133 | .funcs = &gfx_v8_0_ip_funcs, | ||
1134 | }, | ||
1135 | { | ||
1136 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1137 | .major = 3, | ||
1138 | .minor = 0, | ||
1139 | .rev = 0, | ||
1140 | .funcs = &sdma_v3_0_ip_funcs, | ||
1141 | }, | ||
1142 | { | ||
1143 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1144 | .major = 6, | ||
1145 | .minor = 0, | ||
1146 | .rev = 0, | ||
1147 | .funcs = &uvd_v6_0_ip_funcs, | ||
1148 | }, | ||
1149 | { | ||
1150 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1151 | .major = 3, | ||
1152 | .minor = 0, | ||
1153 | .rev = 0, | ||
1154 | .funcs = &vce_v3_0_ip_funcs, | ||
1155 | }, | ||
1156 | }; | ||
1157 | |||
1158 | static const struct amdgpu_ip_block_version polaris11_ip_blocks[] = | ||
1159 | { | ||
1160 | /* ORDER MATTERS! */ | ||
1161 | { | ||
1162 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1163 | .major = 2, | ||
1164 | .minor = 0, | ||
1165 | .rev = 0, | ||
1166 | .funcs = &vi_common_ip_funcs, | ||
1167 | }, | ||
1168 | { | ||
1169 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1170 | .major = 8, | ||
1171 | .minor = 1, | ||
1172 | .rev = 0, | ||
1173 | .funcs = &gmc_v8_0_ip_funcs, | ||
1174 | }, | ||
1175 | { | ||
1176 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1177 | .major = 3, | ||
1178 | .minor = 1, | ||
1179 | .rev = 0, | ||
1180 | .funcs = &tonga_ih_ip_funcs, | ||
1181 | }, | ||
1182 | { | ||
1183 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1184 | .major = 7, | ||
1185 | .minor = 2, | ||
1186 | .rev = 0, | ||
1187 | .funcs = &amdgpu_pp_ip_funcs, | ||
1188 | }, | ||
1189 | { | ||
1190 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1191 | .major = 11, | ||
1192 | .minor = 2, | ||
1193 | .rev = 0, | ||
1194 | .funcs = &dce_v11_0_ip_funcs, | ||
1195 | }, | ||
1196 | { | ||
1197 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1198 | .major = 8, | ||
1199 | .minor = 0, | ||
1200 | .rev = 0, | ||
1201 | .funcs = &gfx_v8_0_ip_funcs, | ||
1202 | }, | ||
1203 | { | ||
1204 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1205 | .major = 3, | ||
1206 | .minor = 1, | ||
1207 | .rev = 0, | ||
1208 | .funcs = &sdma_v3_0_ip_funcs, | ||
1209 | }, | ||
1210 | { | ||
1211 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1212 | .major = 6, | ||
1213 | .minor = 3, | ||
1214 | .rev = 0, | ||
1215 | .funcs = &uvd_v6_0_ip_funcs, | ||
1216 | }, | ||
1217 | { | ||
1218 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1219 | .major = 3, | ||
1220 | .minor = 4, | ||
1221 | .rev = 0, | ||
1222 | .funcs = &vce_v3_0_ip_funcs, | ||
1223 | }, | ||
1224 | }; | ||
1225 | |||
1226 | static const struct amdgpu_ip_block_version polaris11_ip_blocks_vd[] = | ||
1227 | { | ||
1228 | /* ORDER MATTERS! */ | ||
1229 | { | ||
1230 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1231 | .major = 2, | ||
1232 | .minor = 0, | ||
1233 | .rev = 0, | ||
1234 | .funcs = &vi_common_ip_funcs, | ||
1235 | }, | ||
1236 | { | ||
1237 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1238 | .major = 8, | ||
1239 | .minor = 1, | ||
1240 | .rev = 0, | ||
1241 | .funcs = &gmc_v8_0_ip_funcs, | ||
1242 | }, | ||
1243 | { | ||
1244 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1245 | .major = 3, | ||
1246 | .minor = 1, | ||
1247 | .rev = 0, | ||
1248 | .funcs = &tonga_ih_ip_funcs, | ||
1249 | }, | ||
1250 | { | ||
1251 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1252 | .major = 7, | ||
1253 | .minor = 2, | ||
1254 | .rev = 0, | ||
1255 | .funcs = &amdgpu_pp_ip_funcs, | ||
1256 | }, | ||
1257 | { | ||
1258 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1259 | .major = 11, | ||
1260 | .minor = 2, | ||
1261 | .rev = 0, | ||
1262 | .funcs = &dce_virtual_ip_funcs, | ||
1263 | }, | ||
1264 | { | ||
1265 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1266 | .major = 8, | ||
1267 | .minor = 0, | ||
1268 | .rev = 0, | ||
1269 | .funcs = &gfx_v8_0_ip_funcs, | ||
1270 | }, | ||
1271 | { | ||
1272 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1273 | .major = 3, | ||
1274 | .minor = 1, | ||
1275 | .rev = 0, | ||
1276 | .funcs = &sdma_v3_0_ip_funcs, | ||
1277 | }, | ||
1278 | { | ||
1279 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1280 | .major = 6, | ||
1281 | .minor = 3, | ||
1282 | .rev = 0, | ||
1283 | .funcs = &uvd_v6_0_ip_funcs, | ||
1284 | }, | ||
1285 | { | ||
1286 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1287 | .major = 3, | ||
1288 | .minor = 4, | ||
1289 | .rev = 0, | ||
1290 | .funcs = &vce_v3_0_ip_funcs, | ||
1291 | }, | ||
1292 | }; | ||
1293 | |||
1294 | static const struct amdgpu_ip_block_version cz_ip_blocks[] = | ||
1295 | { | ||
1296 | /* ORDER MATTERS! */ | ||
1297 | { | ||
1298 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1299 | .major = 2, | ||
1300 | .minor = 0, | ||
1301 | .rev = 0, | ||
1302 | .funcs = &vi_common_ip_funcs, | ||
1303 | }, | ||
1304 | { | ||
1305 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1306 | .major = 8, | ||
1307 | .minor = 0, | ||
1308 | .rev = 0, | ||
1309 | .funcs = &gmc_v8_0_ip_funcs, | ||
1310 | }, | ||
1311 | { | ||
1312 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1313 | .major = 3, | ||
1314 | .minor = 0, | ||
1315 | .rev = 0, | ||
1316 | .funcs = &cz_ih_ip_funcs, | ||
1317 | }, | ||
1318 | { | ||
1319 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1320 | .major = 8, | ||
1321 | .minor = 0, | ||
1322 | .rev = 0, | ||
1323 | .funcs = &amdgpu_pp_ip_funcs | ||
1324 | }, | ||
1325 | { | ||
1326 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1327 | .major = 11, | ||
1328 | .minor = 0, | ||
1329 | .rev = 0, | ||
1330 | .funcs = &dce_v11_0_ip_funcs, | ||
1331 | }, | ||
1332 | { | ||
1333 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1334 | .major = 8, | ||
1335 | .minor = 0, | ||
1336 | .rev = 0, | ||
1337 | .funcs = &gfx_v8_0_ip_funcs, | ||
1338 | }, | ||
1339 | { | ||
1340 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1341 | .major = 3, | ||
1342 | .minor = 0, | ||
1343 | .rev = 0, | ||
1344 | .funcs = &sdma_v3_0_ip_funcs, | ||
1345 | }, | ||
1346 | { | ||
1347 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1348 | .major = 6, | ||
1349 | .minor = 0, | ||
1350 | .rev = 0, | ||
1351 | .funcs = &uvd_v6_0_ip_funcs, | ||
1352 | }, | ||
1353 | { | ||
1354 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1355 | .major = 3, | ||
1356 | .minor = 0, | ||
1357 | .rev = 0, | ||
1358 | .funcs = &vce_v3_0_ip_funcs, | ||
1359 | }, | ||
1360 | #if defined(CONFIG_DRM_AMD_ACP) | ||
1361 | { | ||
1362 | .type = AMD_IP_BLOCK_TYPE_ACP, | ||
1363 | .major = 2, | ||
1364 | .minor = 2, | ||
1365 | .rev = 0, | ||
1366 | .funcs = &acp_ip_funcs, | ||
1367 | }, | ||
1368 | #endif | ||
1369 | }; | ||
1370 | |||
1371 | static const struct amdgpu_ip_block_version cz_ip_blocks_vd[] = | ||
1372 | { | ||
1373 | /* ORDER MATTERS! */ | ||
1374 | { | ||
1375 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1376 | .major = 2, | ||
1377 | .minor = 0, | ||
1378 | .rev = 0, | ||
1379 | .funcs = &vi_common_ip_funcs, | ||
1380 | }, | ||
1381 | { | ||
1382 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1383 | .major = 8, | ||
1384 | .minor = 0, | ||
1385 | .rev = 0, | ||
1386 | .funcs = &gmc_v8_0_ip_funcs, | ||
1387 | }, | ||
1388 | { | ||
1389 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1390 | .major = 3, | ||
1391 | .minor = 0, | ||
1392 | .rev = 0, | ||
1393 | .funcs = &cz_ih_ip_funcs, | ||
1394 | }, | ||
1395 | { | ||
1396 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1397 | .major = 8, | ||
1398 | .minor = 0, | ||
1399 | .rev = 0, | ||
1400 | .funcs = &amdgpu_pp_ip_funcs | ||
1401 | }, | ||
1402 | { | ||
1403 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1404 | .major = 11, | ||
1405 | .minor = 0, | ||
1406 | .rev = 0, | ||
1407 | .funcs = &dce_virtual_ip_funcs, | ||
1408 | }, | ||
1409 | { | ||
1410 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1411 | .major = 8, | ||
1412 | .minor = 0, | ||
1413 | .rev = 0, | ||
1414 | .funcs = &gfx_v8_0_ip_funcs, | ||
1415 | }, | ||
1416 | { | ||
1417 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1418 | .major = 3, | ||
1419 | .minor = 0, | ||
1420 | .rev = 0, | ||
1421 | .funcs = &sdma_v3_0_ip_funcs, | ||
1422 | }, | ||
1423 | { | ||
1424 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1425 | .major = 6, | ||
1426 | .minor = 0, | ||
1427 | .rev = 0, | ||
1428 | .funcs = &uvd_v6_0_ip_funcs, | ||
1429 | }, | ||
1430 | { | ||
1431 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1432 | .major = 3, | ||
1433 | .minor = 0, | ||
1434 | .rev = 0, | ||
1435 | .funcs = &vce_v3_0_ip_funcs, | ||
1436 | }, | ||
1437 | #if defined(CONFIG_DRM_AMD_ACP) | ||
1438 | { | ||
1439 | .type = AMD_IP_BLOCK_TYPE_ACP, | ||
1440 | .major = 2, | ||
1441 | .minor = 2, | ||
1442 | .rev = 0, | ||
1443 | .funcs = &acp_ip_funcs, | ||
1444 | }, | ||
1445 | #endif | ||
1446 | }; | ||
1447 | |||
1448 | int vi_set_ip_blocks(struct amdgpu_device *adev) | ||
1449 | { | ||
1450 | if (adev->enable_virtual_display) { | ||
1451 | switch (adev->asic_type) { | ||
1452 | case CHIP_TOPAZ: | ||
1453 | adev->ip_blocks = topaz_ip_blocks_vd; | ||
1454 | adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks_vd); | ||
1455 | break; | ||
1456 | case CHIP_FIJI: | ||
1457 | adev->ip_blocks = fiji_ip_blocks_vd; | ||
1458 | adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks_vd); | ||
1459 | break; | ||
1460 | case CHIP_TONGA: | ||
1461 | adev->ip_blocks = tonga_ip_blocks_vd; | ||
1462 | adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks_vd); | ||
1463 | break; | ||
1464 | case CHIP_POLARIS11: | ||
1465 | case CHIP_POLARIS10: | ||
1466 | adev->ip_blocks = polaris11_ip_blocks_vd; | ||
1467 | adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks_vd); | ||
1468 | break; | ||
1469 | |||
1470 | case CHIP_CARRIZO: | ||
1471 | case CHIP_STONEY: | ||
1472 | adev->ip_blocks = cz_ip_blocks_vd; | ||
1473 | adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_vd); | ||
1474 | break; | ||
1475 | default: | ||
1476 | /* FIXME: not supported yet */ | ||
1477 | return -EINVAL; | ||
1478 | } | ||
1479 | } else { | ||
1480 | switch (adev->asic_type) { | ||
1481 | case CHIP_TOPAZ: | ||
1482 | adev->ip_blocks = topaz_ip_blocks; | ||
1483 | adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks); | ||
1484 | break; | ||
1485 | case CHIP_FIJI: | ||
1486 | adev->ip_blocks = fiji_ip_blocks; | ||
1487 | adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks); | ||
1488 | break; | ||
1489 | case CHIP_TONGA: | ||
1490 | adev->ip_blocks = tonga_ip_blocks; | ||
1491 | adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); | ||
1492 | break; | ||
1493 | case CHIP_POLARIS11: | ||
1494 | case CHIP_POLARIS10: | ||
1495 | adev->ip_blocks = polaris11_ip_blocks; | ||
1496 | adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks); | ||
1497 | break; | ||
1498 | case CHIP_CARRIZO: | ||
1499 | case CHIP_STONEY: | ||
1500 | adev->ip_blocks = cz_ip_blocks; | ||
1501 | adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks); | ||
1502 | break; | ||
1503 | default: | ||
1504 | /* FIXME: not supported yet */ | ||
1505 | return -EINVAL; | ||
1506 | } | ||
1507 | } | ||
1508 | |||
1509 | return 0; | ||
1510 | } | ||
1511 | |||
1512 | #define ATI_REV_ID_FUSE_MACRO__ADDRESS 0xC0014044 | 849 | #define ATI_REV_ID_FUSE_MACRO__ADDRESS 0xC0014044 |
1513 | #define ATI_REV_ID_FUSE_MACRO__SHIFT 9 | 850 | #define ATI_REV_ID_FUSE_MACRO__SHIFT 9 |
1514 | #define ATI_REV_ID_FUSE_MACRO__MASK 0x00001E00 | 851 | #define ATI_REV_ID_FUSE_MACRO__MASK 0x00001E00 |
@@ -1593,7 +930,7 @@ static int vi_common_early_init(void *handle) | |||
1593 | break; | 930 | break; |
1594 | case CHIP_TONGA: | 931 | case CHIP_TONGA: |
1595 | adev->cg_flags = AMD_CG_SUPPORT_UVD_MGCG; | 932 | adev->cg_flags = AMD_CG_SUPPORT_UVD_MGCG; |
1596 | adev->pg_flags = 0; | 933 | adev->pg_flags = AMD_PG_SUPPORT_UVD; |
1597 | adev->external_rev_id = adev->rev_id + 0x14; | 934 | adev->external_rev_id = adev->rev_id + 0x14; |
1598 | break; | 935 | break; |
1599 | case CHIP_POLARIS11: | 936 | case CHIP_POLARIS11: |
@@ -1908,7 +1245,7 @@ static int vi_common_set_powergating_state(void *handle, | |||
1908 | return 0; | 1245 | return 0; |
1909 | } | 1246 | } |
1910 | 1247 | ||
1911 | const struct amd_ip_funcs vi_common_ip_funcs = { | 1248 | static const struct amd_ip_funcs vi_common_ip_funcs = { |
1912 | .name = "vi_common", | 1249 | .name = "vi_common", |
1913 | .early_init = vi_common_early_init, | 1250 | .early_init = vi_common_early_init, |
1914 | .late_init = NULL, | 1251 | .late_init = NULL, |
@@ -1925,3 +1262,110 @@ const struct amd_ip_funcs vi_common_ip_funcs = { | |||
1925 | .set_powergating_state = vi_common_set_powergating_state, | 1262 | .set_powergating_state = vi_common_set_powergating_state, |
1926 | }; | 1263 | }; |
1927 | 1264 | ||
1265 | static const struct amdgpu_ip_block_version vi_common_ip_block = | ||
1266 | { | ||
1267 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1268 | .major = 1, | ||
1269 | .minor = 0, | ||
1270 | .rev = 0, | ||
1271 | .funcs = &vi_common_ip_funcs, | ||
1272 | }; | ||
1273 | |||
1274 | int vi_set_ip_blocks(struct amdgpu_device *adev) | ||
1275 | { | ||
1276 | switch (adev->asic_type) { | ||
1277 | case CHIP_TOPAZ: | ||
1278 | /* topaz has no DCE, UVD, VCE */ | ||
1279 | amdgpu_ip_block_add(adev, &vi_common_ip_block); | ||
1280 | amdgpu_ip_block_add(adev, &gmc_v7_4_ip_block); | ||
1281 | amdgpu_ip_block_add(adev, &iceland_ih_ip_block); | ||
1282 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1283 | if (adev->enable_virtual_display) | ||
1284 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1285 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | ||
1286 | amdgpu_ip_block_add(adev, &sdma_v2_4_ip_block); | ||
1287 | break; | ||
1288 | case CHIP_FIJI: | ||
1289 | amdgpu_ip_block_add(adev, &vi_common_ip_block); | ||
1290 | amdgpu_ip_block_add(adev, &gmc_v8_5_ip_block); | ||
1291 | amdgpu_ip_block_add(adev, &tonga_ih_ip_block); | ||
1292 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1293 | if (adev->enable_virtual_display) | ||
1294 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1295 | else | ||
1296 | amdgpu_ip_block_add(adev, &dce_v10_1_ip_block); | ||
1297 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | ||
1298 | amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); | ||
1299 | amdgpu_ip_block_add(adev, &uvd_v6_0_ip_block); | ||
1300 | amdgpu_ip_block_add(adev, &vce_v3_0_ip_block); | ||
1301 | break; | ||
1302 | case CHIP_TONGA: | ||
1303 | amdgpu_ip_block_add(adev, &vi_common_ip_block); | ||
1304 | amdgpu_ip_block_add(adev, &gmc_v8_0_ip_block); | ||
1305 | amdgpu_ip_block_add(adev, &tonga_ih_ip_block); | ||
1306 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1307 | if (adev->enable_virtual_display) | ||
1308 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1309 | else | ||
1310 | amdgpu_ip_block_add(adev, &dce_v10_0_ip_block); | ||
1311 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | ||
1312 | amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); | ||
1313 | amdgpu_ip_block_add(adev, &uvd_v5_0_ip_block); | ||
1314 | amdgpu_ip_block_add(adev, &vce_v3_0_ip_block); | ||
1315 | break; | ||
1316 | case CHIP_POLARIS11: | ||
1317 | case CHIP_POLARIS10: | ||
1318 | amdgpu_ip_block_add(adev, &vi_common_ip_block); | ||
1319 | amdgpu_ip_block_add(adev, &gmc_v8_1_ip_block); | ||
1320 | amdgpu_ip_block_add(adev, &tonga_ih_ip_block); | ||
1321 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1322 | if (adev->enable_virtual_display) | ||
1323 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1324 | else | ||
1325 | amdgpu_ip_block_add(adev, &dce_v11_2_ip_block); | ||
1326 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | ||
1327 | amdgpu_ip_block_add(adev, &sdma_v3_1_ip_block); | ||
1328 | amdgpu_ip_block_add(adev, &uvd_v6_3_ip_block); | ||
1329 | amdgpu_ip_block_add(adev, &vce_v3_4_ip_block); | ||
1330 | break; | ||
1331 | case CHIP_CARRIZO: | ||
1332 | amdgpu_ip_block_add(adev, &vi_common_ip_block); | ||
1333 | amdgpu_ip_block_add(adev, &gmc_v8_0_ip_block); | ||
1334 | amdgpu_ip_block_add(adev, &cz_ih_ip_block); | ||
1335 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1336 | if (adev->enable_virtual_display) | ||
1337 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1338 | else | ||
1339 | amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); | ||
1340 | amdgpu_ip_block_add(adev, &gfx_v8_0_ip_block); | ||
1341 | amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); | ||
1342 | amdgpu_ip_block_add(adev, &uvd_v6_0_ip_block); | ||
1343 | amdgpu_ip_block_add(adev, &vce_v3_1_ip_block); | ||
1344 | #if defined(CONFIG_DRM_AMD_ACP) | ||
1345 | amdgpu_ip_block_add(adev, &acp_ip_block); | ||
1346 | #endif | ||
1347 | break; | ||
1348 | case CHIP_STONEY: | ||
1349 | amdgpu_ip_block_add(adev, &vi_common_ip_block); | ||
1350 | amdgpu_ip_block_add(adev, &gmc_v8_0_ip_block); | ||
1351 | amdgpu_ip_block_add(adev, &cz_ih_ip_block); | ||
1352 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1353 | if (adev->enable_virtual_display) | ||
1354 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1355 | else | ||
1356 | amdgpu_ip_block_add(adev, &dce_v11_0_ip_block); | ||
1357 | amdgpu_ip_block_add(adev, &gfx_v8_1_ip_block); | ||
1358 | amdgpu_ip_block_add(adev, &sdma_v3_0_ip_block); | ||
1359 | amdgpu_ip_block_add(adev, &uvd_v6_2_ip_block); | ||
1360 | amdgpu_ip_block_add(adev, &vce_v3_4_ip_block); | ||
1361 | #if defined(CONFIG_DRM_AMD_ACP) | ||
1362 | amdgpu_ip_block_add(adev, &acp_ip_block); | ||
1363 | #endif | ||
1364 | break; | ||
1365 | default: | ||
1366 | /* FIXME: not supported yet */ | ||
1367 | return -EINVAL; | ||
1368 | } | ||
1369 | |||
1370 | return 0; | ||
1371 | } | ||