Pretty much was already there, just not ported to amdgpu.

Tested-by: Alexandre Demers <alexandre.f.dem...@gmail.com>
Signed-off-by: Alexandre Demers <alexandre.f.dem...@gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 44 +++++++++++++++++----------
 1 file changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 2942fe8f80ec..6bfaf37464c2 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -626,17 +626,16 @@ static void gmc_v6_0_vm_decode_fault(struct amdgpu_device 
*adev,
               "write" : "read", block, mc_client, mc_id);
 }
 
-/*
 static const u32 mc_cg_registers[] = {
-       MC_HUB_MISC_HUB_CG,
-       MC_HUB_MISC_SIP_CG,
-       MC_HUB_MISC_VM_CG,
-       MC_XPB_CLK_GAT,
-       ATC_MISC_CG,
-       MC_CITF_MISC_WR_CG,
-       MC_CITF_MISC_RD_CG,
-       MC_CITF_MISC_VM_CG,
-       VM_L2_CG,
+       mmMC_HUB_MISC_HUB_CG,
+       mmMC_HUB_MISC_SIP_CG,
+       mmMC_HUB_MISC_VM_CG,
+       mmMC_XPB_CLK_GAT,
+       mmATC_MISC_CG,
+       mmMC_CITF_MISC_WR_CG,
+       mmMC_CITF_MISC_RD_CG,
+       mmMC_CITF_MISC_VM_CG,
+       mmVM_L2_CG,
 };
 
 static const u32 mc_cg_ls_en[] = {
@@ -671,7 +670,7 @@ static void gmc_v6_0_enable_mc_ls(struct amdgpu_device 
*adev,
 
        for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) {
                orig = data = RREG32(mc_cg_registers[i]);
-               if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_MC_LS))
+               if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_LS))
                        data |= mc_cg_ls_en[i];
                else
                        data &= ~mc_cg_ls_en[i];
@@ -688,7 +687,7 @@ static void gmc_v6_0_enable_mc_mgcg(struct amdgpu_device 
*adev,
 
        for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) {
                orig = data = RREG32(mc_cg_registers[i]);
-               if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_MC_MGCG))
+               if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_MGCG))
                        data |= mc_cg_en[i];
                else
                        data &= ~mc_cg_en[i];
@@ -704,7 +703,7 @@ static void gmc_v6_0_enable_bif_mgls(struct amdgpu_device 
*adev,
 
        orig = data = RREG32_PCIE(ixPCIE_CNTL2);
 
-       if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_BIF_LS)) {
+       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_BIF_LS)) {
                data = REG_SET_FIELD(data, PCIE_CNTL2, SLV_MEM_LS_EN, 1);
                data = REG_SET_FIELD(data, PCIE_CNTL2, MST_MEM_LS_EN, 1);
                data = REG_SET_FIELD(data, PCIE_CNTL2, REPLAY_MEM_LS_EN, 1);
@@ -727,7 +726,7 @@ static void gmc_v6_0_enable_hdp_mgcg(struct amdgpu_device 
*adev,
 
        orig = data = RREG32(mmHDP_HOST_PATH_CNTL);
 
-       if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_HDP_MGCG))
+       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_MGCG))
                data = REG_SET_FIELD(data, HDP_HOST_PATH_CNTL, 
CLOCK_GATING_DIS, 0);
        else
                data = REG_SET_FIELD(data, HDP_HOST_PATH_CNTL, 
CLOCK_GATING_DIS, 1);
@@ -743,7 +742,7 @@ static void gmc_v6_0_enable_hdp_ls(struct amdgpu_device 
*adev,
 
        orig = data = RREG32(mmHDP_MEM_POWER_LS);
 
-       if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_HDP_LS))
+       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_LS))
                data = REG_SET_FIELD(data, HDP_MEM_POWER_LS, LS_ENABLE, 1);
        else
                data = REG_SET_FIELD(data, HDP_MEM_POWER_LS, LS_ENABLE, 0);
@@ -751,7 +750,6 @@ static void gmc_v6_0_enable_hdp_ls(struct amdgpu_device 
*adev,
        if (orig != data)
                WREG32(mmHDP_MEM_POWER_LS, data);
 }
-*/
 
 static int gmc_v6_0_convert_vram_type(int mc_seq_vram_type)
 {
@@ -1097,6 +1095,20 @@ static int gmc_v6_0_process_interrupt(struct 
amdgpu_device *adev,
 static int gmc_v6_0_set_clockgating_state(void *handle,
                                          enum amd_clockgating_state state)
 {
+       bool gate = false;
+       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+       if (state == AMD_CG_STATE_GATE)
+               gate = true;
+
+       if (!(adev->flags & AMD_IS_APU)) {
+               gmc_v6_0_enable_mc_mgcg(adev, gate);
+               gmc_v6_0_enable_mc_ls(adev, gate);
+       }
+       gmc_v6_0_enable_bif_mgls(adev, gate);
+       gmc_v6_0_enable_hdp_mgcg(adev, gate);
+       gmc_v6_0_enable_hdp_ls(adev, gate);
+
        return 0;
 }
 
-- 
2.49.0

Reply via email to