[PATCH 2/3] drm/amd/pp: Export interface to help check hw power state

Rex Zhu rex.zhu at amd.com
Sun Jul 29 11:42:26 UTC 2018


As more hw ip pg feature have been enabled(especial gfx off),
so need to check the hw power state before read/write registers
through mmio.

Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
---
 drivers/gpu/drm/amd/include/kgd_pp_interface.h |  1 +
 drivers/gpu/drm/amd/powerplay/amd_powerplay.c  | 21 +++++++++++++++++++++
 drivers/gpu/drm/amd/powerplay/inc/hwmgr.h      |  1 +
 3 files changed, 23 insertions(+)

diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
index 6a41b81..3b5b2de 100644
--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
@@ -269,6 +269,7 @@ struct amd_pm_funcs {
 	int (*get_display_mode_validation_clocks)(void *handle,
 		struct amd_pp_simple_clock_info *clocks);
 	int (*notify_smu_enable_pwe)(void *handle);
+	bool (*is_hw_ip_on)(void *handle, enum amd_ip_block_type client);
 };
 
 #endif
diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
index da4ebff..c50164e 100644
--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
@@ -1243,6 +1243,26 @@ static int pp_notify_smu_enable_pwe(void *handle)
 	return 0;
 }
 
+static bool pp_is_hw_ip_on(void *handle, enum amd_ip_block_type client)
+{
+	struct pp_hwmgr *hwmgr = handle;
+	bool ret;
+
+	if (!hwmgr || !hwmgr->pm_en)
+		return true;
+
+	if (hwmgr->hwmgr_func->is_hw_ip_on == NULL) {
+		pr_info("%s was not implemented.\n", __func__);
+		return true;
+	}
+
+	mutex_lock(&hwmgr->smu_lock);
+	ret = hwmgr->hwmgr_func->is_hw_ip_on(hwmgr, client);
+	mutex_unlock(&hwmgr->smu_lock);
+
+	return ret;
+}
+
 static const struct amd_pm_funcs pp_dpm_funcs = {
 	.load_firmware = pp_dpm_load_fw,
 	.wait_for_fw_loading_complete = pp_dpm_fw_loading_complete,
@@ -1274,6 +1294,7 @@ static int pp_notify_smu_enable_pwe(void *handle)
 	.odn_edit_dpm_table = pp_odn_edit_dpm_table,
 	.set_power_limit = pp_set_power_limit,
 	.get_power_limit = pp_get_power_limit,
+	.is_hw_ip_on = pp_is_hw_ip_on,
 /* export to DC */
 	.get_sclk = pp_dpm_get_sclk,
 	.get_mclk = pp_dpm_get_mclk,
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
index 88f4517..3aca3a3 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
@@ -328,6 +328,7 @@ struct pp_hwmgr_func {
 	int (*set_power_limit)(struct pp_hwmgr *hwmgr, uint32_t n);
 	int (*powergate_mmhub)(struct pp_hwmgr *hwmgr);
 	int (*smus_notify_pwe)(struct pp_hwmgr *hwmgr);
+	bool (*is_hw_ip_on)(struct pp_hwmgr *hwmgr, enum amd_ip_block_type client);
 };
 
 struct pp_table_func {
-- 
1.9.1



More information about the amd-gfx mailing list