diff options
author | Hawking Zhang <Hawking.Zhang@amd.com> | 2018-03-28 05:08:04 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-04-11 14:07:55 -0400 |
commit | 070706c03b3e67207cc41bd97b67ff0930d79cb3 (patch) | |
tree | 4d239da1b592d2939ea36d5993a7dbdba60a6db0 | |
parent | d99605ead70efa0dc259c28f9b258184e2b3e77c (diff) |
drm/amdgpu: switch to use df callback functions
Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 35 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/soc15.c | 62 |
2 files changed, 5 insertions, 92 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c index e687363900bb..070946e1e4a7 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | |||
@@ -714,7 +714,6 @@ static void gmc_v9_0_vram_gtt_location(struct amdgpu_device *adev, | |||
714 | */ | 714 | */ |
715 | static int gmc_v9_0_mc_init(struct amdgpu_device *adev) | 715 | static int gmc_v9_0_mc_init(struct amdgpu_device *adev) |
716 | { | 716 | { |
717 | u32 tmp; | ||
718 | int chansize, numchan; | 717 | int chansize, numchan; |
719 | int r; | 718 | int r; |
720 | 719 | ||
@@ -727,39 +726,7 @@ static int gmc_v9_0_mc_init(struct amdgpu_device *adev) | |||
727 | else | 726 | else |
728 | chansize = 128; | 727 | chansize = 128; |
729 | 728 | ||
730 | tmp = RREG32_SOC15(DF, 0, mmDF_CS_AON0_DramBaseAddress0); | 729 | numchan = adev->df_funcs->get_hbm_channel_number(adev); |
731 | tmp &= DF_CS_AON0_DramBaseAddress0__IntLvNumChan_MASK; | ||
732 | tmp >>= DF_CS_AON0_DramBaseAddress0__IntLvNumChan__SHIFT; | ||
733 | switch (tmp) { | ||
734 | case 0: | ||
735 | default: | ||
736 | numchan = 1; | ||
737 | break; | ||
738 | case 1: | ||
739 | numchan = 2; | ||
740 | break; | ||
741 | case 2: | ||
742 | numchan = 0; | ||
743 | break; | ||
744 | case 3: | ||
745 | numchan = 4; | ||
746 | break; | ||
747 | case 4: | ||
748 | numchan = 0; | ||
749 | break; | ||
750 | case 5: | ||
751 | numchan = 8; | ||
752 | break; | ||
753 | case 6: | ||
754 | numchan = 0; | ||
755 | break; | ||
756 | case 7: | ||
757 | numchan = 16; | ||
758 | break; | ||
759 | case 8: | ||
760 | numchan = 2; | ||
761 | break; | ||
762 | } | ||
763 | adev->gmc.vram_width = numchan * chansize; | 730 | adev->gmc.vram_width = numchan * chansize; |
764 | } | 731 | } |
765 | 732 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index 51cf8a30f6c2..654b015d5e05 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c | |||
@@ -52,6 +52,7 @@ | |||
52 | #include "gmc_v9_0.h" | 52 | #include "gmc_v9_0.h" |
53 | #include "gfxhub_v1_0.h" | 53 | #include "gfxhub_v1_0.h" |
54 | #include "mmhub_v1_0.h" | 54 | #include "mmhub_v1_0.h" |
55 | #include "df_v1_7.h" | ||
55 | #include "vega10_ih.h" | 56 | #include "vega10_ih.h" |
56 | #include "sdma_v4_0.h" | 57 | #include "sdma_v4_0.h" |
57 | #include "uvd_v7_0.h" | 58 | #include "uvd_v7_0.h" |
@@ -60,33 +61,6 @@ | |||
60 | #include "dce_virtual.h" | 61 | #include "dce_virtual.h" |
61 | #include "mxgpu_ai.h" | 62 | #include "mxgpu_ai.h" |
62 | 63 | ||
63 | #define mmFabricConfigAccessControl 0x0410 | ||
64 | #define mmFabricConfigAccessControl_BASE_IDX 0 | ||
65 | #define mmFabricConfigAccessControl_DEFAULT 0x00000000 | ||
66 | //FabricConfigAccessControl | ||
67 | #define FabricConfigAccessControl__CfgRegInstAccEn__SHIFT 0x0 | ||
68 | #define FabricConfigAccessControl__CfgRegInstAccRegLock__SHIFT 0x1 | ||
69 | #define FabricConfigAccessControl__CfgRegInstID__SHIFT 0x10 | ||
70 | #define FabricConfigAccessControl__CfgRegInstAccEn_MASK 0x00000001L | ||
71 | #define FabricConfigAccessControl__CfgRegInstAccRegLock_MASK 0x00000002L | ||
72 | #define FabricConfigAccessControl__CfgRegInstID_MASK 0x00FF0000L | ||
73 | |||
74 | |||
75 | #define mmDF_PIE_AON0_DfGlobalClkGater 0x00fc | ||
76 | #define mmDF_PIE_AON0_DfGlobalClkGater_BASE_IDX 0 | ||
77 | //DF_PIE_AON0_DfGlobalClkGater | ||
78 | #define DF_PIE_AON0_DfGlobalClkGater__MGCGMode__SHIFT 0x0 | ||
79 | #define DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK 0x0000000FL | ||
80 | |||
81 | enum { | ||
82 | DF_MGCG_DISABLE = 0, | ||
83 | DF_MGCG_ENABLE_00_CYCLE_DELAY =1, | ||
84 | DF_MGCG_ENABLE_01_CYCLE_DELAY =2, | ||
85 | DF_MGCG_ENABLE_15_CYCLE_DELAY =13, | ||
86 | DF_MGCG_ENABLE_31_CYCLE_DELAY =14, | ||
87 | DF_MGCG_ENABLE_63_CYCLE_DELAY =15 | ||
88 | }; | ||
89 | |||
90 | #define mmMP0_MISC_CGTT_CTRL0 0x01b9 | 64 | #define mmMP0_MISC_CGTT_CTRL0 0x01b9 |
91 | #define mmMP0_MISC_CGTT_CTRL0_BASE_IDX 0 | 65 | #define mmMP0_MISC_CGTT_CTRL0_BASE_IDX 0 |
92 | #define mmMP0_MISC_LIGHT_SLEEP_CTRL 0x01ba | 66 | #define mmMP0_MISC_LIGHT_SLEEP_CTRL 0x01ba |
@@ -521,6 +495,7 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev) | |||
521 | else | 495 | else |
522 | adev->nbio_funcs = &nbio_v6_1_funcs; | 496 | adev->nbio_funcs = &nbio_v6_1_funcs; |
523 | 497 | ||
498 | adev->df_funcs = &df_v1_7_funcs; | ||
524 | adev->nbio_funcs->detect_hw_virt(adev); | 499 | adev->nbio_funcs->detect_hw_virt(adev); |
525 | 500 | ||
526 | if (amdgpu_sriov_vf(adev)) | 501 | if (amdgpu_sriov_vf(adev)) |
@@ -871,32 +846,6 @@ static void soc15_update_rom_medium_grain_clock_gating(struct amdgpu_device *ade | |||
871 | WREG32(SOC15_REG_OFFSET(SMUIO, 0, mmCGTT_ROM_CLK_CTRL0), data); | 846 | WREG32(SOC15_REG_OFFSET(SMUIO, 0, mmCGTT_ROM_CLK_CTRL0), data); |
872 | } | 847 | } |
873 | 848 | ||
874 | static void soc15_update_df_medium_grain_clock_gating(struct amdgpu_device *adev, | ||
875 | bool enable) | ||
876 | { | ||
877 | uint32_t data; | ||
878 | |||
879 | /* Put DF on broadcast mode */ | ||
880 | data = RREG32(SOC15_REG_OFFSET(DF, 0, mmFabricConfigAccessControl)); | ||
881 | data &= ~FabricConfigAccessControl__CfgRegInstAccEn_MASK; | ||
882 | WREG32(SOC15_REG_OFFSET(DF, 0, mmFabricConfigAccessControl), data); | ||
883 | |||
884 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_DF_MGCG)) { | ||
885 | data = RREG32(SOC15_REG_OFFSET(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater)); | ||
886 | data &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK; | ||
887 | data |= DF_MGCG_ENABLE_15_CYCLE_DELAY; | ||
888 | WREG32(SOC15_REG_OFFSET(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater), data); | ||
889 | } else { | ||
890 | data = RREG32(SOC15_REG_OFFSET(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater)); | ||
891 | data &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK; | ||
892 | data |= DF_MGCG_DISABLE; | ||
893 | WREG32(SOC15_REG_OFFSET(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater), data); | ||
894 | } | ||
895 | |||
896 | WREG32(SOC15_REG_OFFSET(DF, 0, mmFabricConfigAccessControl), | ||
897 | mmFabricConfigAccessControl_DEFAULT); | ||
898 | } | ||
899 | |||
900 | static int soc15_common_set_clockgating_state(void *handle, | 849 | static int soc15_common_set_clockgating_state(void *handle, |
901 | enum amd_clockgating_state state) | 850 | enum amd_clockgating_state state) |
902 | { | 851 | { |
@@ -920,7 +869,7 @@ static int soc15_common_set_clockgating_state(void *handle, | |||
920 | state == AMD_CG_STATE_GATE ? true : false); | 869 | state == AMD_CG_STATE_GATE ? true : false); |
921 | soc15_update_rom_medium_grain_clock_gating(adev, | 870 | soc15_update_rom_medium_grain_clock_gating(adev, |
922 | state == AMD_CG_STATE_GATE ? true : false); | 871 | state == AMD_CG_STATE_GATE ? true : false); |
923 | soc15_update_df_medium_grain_clock_gating(adev, | 872 | adev->df_funcs->update_medium_grain_clock_gating(adev, |
924 | state == AMD_CG_STATE_GATE ? true : false); | 873 | state == AMD_CG_STATE_GATE ? true : false); |
925 | break; | 874 | break; |
926 | case CHIP_RAVEN: | 875 | case CHIP_RAVEN: |
@@ -973,10 +922,7 @@ static void soc15_common_get_clockgating_state(void *handle, u32 *flags) | |||
973 | if (!(data & CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE0_MASK)) | 922 | if (!(data & CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE0_MASK)) |
974 | *flags |= AMD_CG_SUPPORT_ROM_MGCG; | 923 | *flags |= AMD_CG_SUPPORT_ROM_MGCG; |
975 | 924 | ||
976 | /* AMD_CG_SUPPORT_DF_MGCG */ | 925 | adev->df_funcs->get_clockgating_state(adev, flags); |
977 | data = RREG32(SOC15_REG_OFFSET(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater)); | ||
978 | if (data & DF_MGCG_ENABLE_15_CYCLE_DELAY) | ||
979 | *flags |= AMD_CG_SUPPORT_DF_MGCG; | ||
980 | } | 926 | } |
981 | 927 | ||
982 | static int soc15_common_set_powergating_state(void *handle, | 928 | static int soc15_common_set_powergating_state(void *handle, |