From: Lijo Lazar <lijo.la...@amd.com>

Aldebaran clock gating support for GFX,SDMA,IH blocks
VCN/JPEG blocks are excluded in this patch, to be enabled later

Signed-off-by: Lijo Lazar <lijo.la...@amd.com>
Acked-by: Feifei Xu <feifei...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c  |  3 ++-
 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c |  1 +
 drivers/gpu/drm/amd/amdgpu/soc15.c     | 31 ++++++++++++++++++--------
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index f886e9f22398..d30e60fdf596 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -4892,7 +4892,7 @@ static void gfx_v9_0_update_3d_clock_gating(struct 
amdgpu_device *adev,
 {
        uint32_t data, def;
 
-       if (adev->asic_type == CHIP_ARCTURUS)
+       if (!adev->gfx.num_gfx_rings)
                return;
 
        amdgpu_gfx_rlc_enter_safe_mode(adev);
@@ -5139,6 +5139,7 @@ static int gfx_v9_0_set_clockgating_state(void *handle,
        case CHIP_RAVEN:
        case CHIP_ARCTURUS:
        case CHIP_RENOIR:
+       case CHIP_ALDEBARAN:
                gfx_v9_0_update_gfx_clock_gating(adev,
                                                 state == AMD_CG_STATE_GATE);
                break;
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c 
b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index 8e3bcdfe191c..9e8d08d60aa6 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -2261,6 +2261,7 @@ static int sdma_v4_0_set_clockgating_state(void *handle,
        case CHIP_RAVEN:
        case CHIP_ARCTURUS:
        case CHIP_RENOIR:
+       case CHIP_ALDEBARAN:
                sdma_v4_0_update_medium_grain_clock_gating(adev,
                                state == AMD_CG_STATE_GATE);
                sdma_v4_0_update_medium_grain_light_sleep(adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c 
b/drivers/gpu/drm/amd/amdgpu/soc15.c
index d10d112976ec..c6fb3e362694 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
@@ -1255,7 +1255,16 @@ static int soc15_common_early_init(void *handle)
                break;
        case CHIP_ALDEBARAN:
                adev->asic_funcs = &vega20_asic_funcs;
-               adev->cg_flags = 0;
+               adev->cg_flags = AMD_CG_SUPPORT_GFX_MGCG |
+                       AMD_CG_SUPPORT_GFX_MGLS |
+                       AMD_CG_SUPPORT_GFX_CGCG |
+                       AMD_CG_SUPPORT_GFX_CGLS |
+                       AMD_CG_SUPPORT_GFX_CP_LS |
+                       AMD_CG_SUPPORT_HDP_LS |
+                       AMD_CG_SUPPORT_SDMA_MGCG |
+                       AMD_CG_SUPPORT_SDMA_LS |
+                       AMD_CG_SUPPORT_IH_CG;
+                       /*AMD_CG_SUPPORT_VCN_MGCG |AMD_CG_SUPPORT_JPEG_MGCG;*/
                adev->pg_flags = AMD_PG_SUPPORT_VCN_DPG;
                adev->external_rev_id = adev->rev_id + 0x3c;
                break;
@@ -1492,6 +1501,7 @@ static int soc15_common_set_clockgating_state(void 
*handle,
                                state == AMD_CG_STATE_GATE);
                break;
        case CHIP_ARCTURUS:
+       case CHIP_ALDEBARAN:
                adev->hdp.funcs->update_clock_gating(adev,
                                state == AMD_CG_STATE_GATE);
                break;
@@ -1513,15 +1523,18 @@ static void soc15_common_get_clockgating_state(void 
*handle, u32 *flags)
 
        adev->hdp.funcs->get_clock_gating_state(adev, flags);
 
-       /* AMD_CG_SUPPORT_DRM_MGCG */
-       data = RREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_MISC_CGTT_CTRL0));
-       if (!(data & 0x01000000))
-               *flags |= AMD_CG_SUPPORT_DRM_MGCG;
+       if (adev->asic_type != CHIP_ALDEBARAN) {
 
-       /* AMD_CG_SUPPORT_DRM_LS */
-       data = RREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_MISC_LIGHT_SLEEP_CTRL));
-       if (data & 0x1)
-               *flags |= AMD_CG_SUPPORT_DRM_LS;
+               /* AMD_CG_SUPPORT_DRM_MGCG */
+               data = RREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_MISC_CGTT_CTRL0));
+               if (!(data & 0x01000000))
+                       *flags |= AMD_CG_SUPPORT_DRM_MGCG;
+
+               /* AMD_CG_SUPPORT_DRM_LS */
+               data = RREG32(SOC15_REG_OFFSET(MP0, 0, 
mmMP0_MISC_LIGHT_SLEEP_CTRL));
+               if (data & 0x1)
+                       *flags |= AMD_CG_SUPPORT_DRM_LS;
+       }
 
        /* AMD_CG_SUPPORT_ROM_MGCG */
        adev->smuio.funcs->get_clock_gating_state(adev, flags);
-- 
2.29.2

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to