drm/amd/powerplay: add Powergate JPEG for Renoir
authorLeo Liu <leo.liu@amd.com>
Fri, 8 Nov 2019 19:22:06 +0000 (14:22 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 19 Nov 2019 15:12:50 +0000 (10:12 -0500)
Similar to SDMA, VCN etc.

v2: add argument to both PowerUpJpeg and PowerDownJpeg messages

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
drivers/gpu/drm/amd/powerplay/inc/smu_v12_0.h
drivers/gpu/drm/amd/powerplay/renoir_ppt.c
drivers/gpu/drm/amd/powerplay/smu_internal.h
drivers/gpu/drm/amd/powerplay/smu_v12_0.c

index 69243a858dd541b1a38cfc7fd4310f60186118cb..211934521d370f857cdbb724bc84c97112f4e64e 100644 (file)
@@ -1229,6 +1229,7 @@ static int smu_hw_init(void *handle)
        if (adev->flags & AMD_IS_APU) {
                smu_powergate_sdma(&adev->smu, false);
                smu_powergate_vcn(&adev->smu, false);
+               smu_powergate_jpeg(&adev->smu, false);
                smu_set_gfx_cgpg(&adev->smu, true);
        }
 
@@ -1287,6 +1288,7 @@ static int smu_hw_fini(void *handle)
        if (adev->flags & AMD_IS_APU) {
                smu_powergate_sdma(&adev->smu, true);
                smu_powergate_vcn(&adev->smu, true);
+               smu_powergate_jpeg(&adev->smu, true);
        }
 
        ret = smu_stop_thermal_control(smu);
index 9b9f5df0911c5e87326db561860151521bea3af6..1745e0146fba6d07810a88d9626ed3b69193ebd6 100644 (file)
@@ -58,6 +58,8 @@ int smu_v12_0_powergate_sdma(struct smu_context *smu, bool gate);
 
 int smu_v12_0_powergate_vcn(struct smu_context *smu, bool gate);
 
+int smu_v12_0_powergate_jpeg(struct smu_context *smu, bool gate);
+
 int smu_v12_0_set_gfx_cgpg(struct smu_context *smu, bool enable);
 
 uint32_t smu_v12_0_get_gfxoff_status(struct smu_context *smu);
index 04daf7e9fe0550a2e38f5eb248b7d8d42d8a00f5..492a201554e87301c306ed593a69654e97027d0e 100644 (file)
@@ -697,6 +697,7 @@ static const struct pptable_funcs renoir_ppt_funcs = {
        .check_fw_version = smu_v12_0_check_fw_version,
        .powergate_sdma = smu_v12_0_powergate_sdma,
        .powergate_vcn = smu_v12_0_powergate_vcn,
+       .powergate_jpeg = smu_v12_0_powergate_jpeg,
        .send_smc_msg = smu_v12_0_send_msg,
        .send_smc_msg_with_param = smu_v12_0_send_msg_with_param,
        .read_smc_arg = smu_v12_0_read_arg,
index 8bcda78713099341df00bc67f11620e4ae3381e7..70c4d66721cda2fc95ae15ada5744de130290e52 100644 (file)
@@ -42,6 +42,8 @@
        ((smu)->ppt_funcs->powergate_sdma ? (smu)->ppt_funcs->powergate_sdma((smu), (gate)) : 0)
 #define smu_powergate_vcn(smu, gate) \
        ((smu)->ppt_funcs->powergate_vcn ? (smu)->ppt_funcs->powergate_vcn((smu), (gate)) : 0)
+#define smu_powergate_jpeg(smu, gate) \
+       ((smu)->ppt_funcs->powergate_jpeg ? (smu)->ppt_funcs->powergate_jpeg((smu), (gate)) : 0)
 
 #define smu_get_vbios_bootup_values(smu) \
        ((smu)->ppt_funcs->get_vbios_bootup_values ? (smu)->ppt_funcs->get_vbios_bootup_values((smu)) : 0)
index 139dd737eaa5c5d5cf13747a1db1a2764a513525..18b24f954380d10e216e8f8372e8e14bef68b3ca 100644 (file)
@@ -203,6 +203,17 @@ int smu_v12_0_powergate_vcn(struct smu_context *smu, bool gate)
                return smu_send_smc_msg(smu, SMU_MSG_PowerUpVcn);
 }
 
+int smu_v12_0_powergate_jpeg(struct smu_context *smu, bool gate)
+{
+       if (!(smu->adev->flags & AMD_IS_APU))
+               return 0;
+
+       if (gate)
+               return smu_send_smc_msg_with_param(smu, SMU_MSG_PowerDownJpeg, 0);
+       else
+               return smu_send_smc_msg_with_param(smu, SMU_MSG_PowerUpJpeg, 0);
+}
+
 int smu_v12_0_set_gfx_cgpg(struct smu_context *smu, bool enable)
 {
        if (!(smu->adev->pg_flags & AMD_PG_SUPPORT_GFX_PG))