Commit 6bb6b297 authored by Huang Rui's avatar Huang Rui Committed by Alex Deucher

drm/amdgpu: add powercontainment module parameter

This patch makes powercontainment feature configurable. Currently, the
powercontainment is not very stable, so add a module parameter to
enable/disable it via user mode.
Signed-off-by: default avatarHuang Rui <ray.huang@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c5f74f78
...@@ -85,6 +85,7 @@ extern int amdgpu_vm_debug; ...@@ -85,6 +85,7 @@ extern int amdgpu_vm_debug;
extern int amdgpu_sched_jobs; extern int amdgpu_sched_jobs;
extern int amdgpu_sched_hw_submission; extern int amdgpu_sched_hw_submission;
extern int amdgpu_powerplay; extern int amdgpu_powerplay;
extern int amdgpu_powercontainment;
extern unsigned amdgpu_pcie_gen_cap; extern unsigned amdgpu_pcie_gen_cap;
extern unsigned amdgpu_pcie_lane_cap; extern unsigned amdgpu_pcie_lane_cap;
......
...@@ -82,6 +82,7 @@ int amdgpu_exp_hw_support = 0; ...@@ -82,6 +82,7 @@ int amdgpu_exp_hw_support = 0;
int amdgpu_sched_jobs = 32; int amdgpu_sched_jobs = 32;
int amdgpu_sched_hw_submission = 2; int amdgpu_sched_hw_submission = 2;
int amdgpu_powerplay = -1; int amdgpu_powerplay = -1;
int amdgpu_powercontainment = 1;
unsigned amdgpu_pcie_gen_cap = 0; unsigned amdgpu_pcie_gen_cap = 0;
unsigned amdgpu_pcie_lane_cap = 0; unsigned amdgpu_pcie_lane_cap = 0;
...@@ -160,6 +161,9 @@ module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444); ...@@ -160,6 +161,9 @@ module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444);
#ifdef CONFIG_DRM_AMD_POWERPLAY #ifdef CONFIG_DRM_AMD_POWERPLAY
MODULE_PARM_DESC(powerplay, "Powerplay component (1 = enable, 0 = disable, -1 = auto (default))"); MODULE_PARM_DESC(powerplay, "Powerplay component (1 = enable, 0 = disable, -1 = auto (default))");
module_param_named(powerplay, amdgpu_powerplay, int, 0444); module_param_named(powerplay, amdgpu_powerplay, int, 0444);
MODULE_PARM_DESC(powercontainment, "Power Containment (1 = enable (default), 0 = disable)");
module_param_named(powercontainment, amdgpu_powercontainment, int, 0444);
#endif #endif
MODULE_PARM_DESC(pcie_gen_cap, "PCIE Gen Caps (0: autodetect (default))"); MODULE_PARM_DESC(pcie_gen_cap, "PCIE Gen Caps (0: autodetect (default))");
......
...@@ -52,6 +52,7 @@ static int amdgpu_powerplay_init(struct amdgpu_device *adev) ...@@ -52,6 +52,7 @@ static int amdgpu_powerplay_init(struct amdgpu_device *adev)
pp_init->chip_family = adev->family; pp_init->chip_family = adev->family;
pp_init->chip_id = adev->asic_type; pp_init->chip_id = adev->asic_type;
pp_init->device = amdgpu_cgs_create_device(adev); pp_init->device = amdgpu_cgs_create_device(adev);
pp_init->powercontainment_enabled = amdgpu_powercontainment;
ret = amd_powerplay_init(pp_init, amd_pp); ret = amd_powerplay_init(pp_init, amd_pp);
kfree(pp_init); kfree(pp_init);
......
...@@ -72,19 +72,20 @@ void fiji_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr) ...@@ -72,19 +72,20 @@ void fiji_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr)
fiji_hwmgr->dte_tj_offset = tmp; fiji_hwmgr->dte_tj_offset = tmp;
if (!tmp) { if (!tmp) {
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_PowerContainment);
phm_cap_set(hwmgr->platform_descriptor.platformCaps, phm_cap_set(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_CAC); PHM_PlatformCaps_CAC);
fiji_hwmgr->fast_watermark_threshold = 100; fiji_hwmgr->fast_watermark_threshold = 100;
if (hwmgr->powercontainment_enabled) {
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_PowerContainment);
tmp = 1; tmp = 1;
fiji_hwmgr->enable_dte_feature = tmp ? false : true; fiji_hwmgr->enable_dte_feature = tmp ? false : true;
fiji_hwmgr->enable_tdc_limit_feature = tmp ? true : false; fiji_hwmgr->enable_tdc_limit_feature = tmp ? true : false;
fiji_hwmgr->enable_pkg_pwr_tracking_feature = tmp ? true : false; fiji_hwmgr->enable_pkg_pwr_tracking_feature = tmp ? true : false;
} }
}
} }
/* PPGen has the gain setting generated in x * 100 unit /* PPGen has the gain setting generated in x * 100 unit
......
...@@ -58,6 +58,7 @@ int hwmgr_init(struct amd_pp_init *pp_init, struct pp_instance *handle) ...@@ -58,6 +58,7 @@ int hwmgr_init(struct amd_pp_init *pp_init, struct pp_instance *handle)
hwmgr->hw_revision = pp_init->rev_id; hwmgr->hw_revision = pp_init->rev_id;
hwmgr->usec_timeout = AMD_MAX_USEC_TIMEOUT; hwmgr->usec_timeout = AMD_MAX_USEC_TIMEOUT;
hwmgr->power_source = PP_PowerSource_AC; hwmgr->power_source = PP_PowerSource_AC;
hwmgr->powercontainment_enabled = pp_init->powercontainment_enabled;
switch (hwmgr->chip_family) { switch (hwmgr->chip_family) {
case AMD_FAMILY_CZ: case AMD_FAMILY_CZ:
......
...@@ -2606,8 +2606,13 @@ int polaris10_set_features_platform_caps(struct pp_hwmgr *hwmgr) ...@@ -2606,8 +2606,13 @@ int polaris10_set_features_platform_caps(struct pp_hwmgr *hwmgr)
phm_cap_unset(hwmgr->platform_descriptor.platformCaps, phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_TCPRamping); PHM_PlatformCaps_TCPRamping);
if (hwmgr->powercontainment_enabled)
phm_cap_set(hwmgr->platform_descriptor.platformCaps, phm_cap_set(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_PowerContainment); PHM_PlatformCaps_PowerContainment);
else
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_PowerContainment);
phm_cap_set(hwmgr->platform_descriptor.platformCaps, phm_cap_set(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_CAC); PHM_PlatformCaps_CAC);
......
...@@ -132,6 +132,7 @@ struct amd_pp_init { ...@@ -132,6 +132,7 @@ struct amd_pp_init {
uint32_t chip_family; uint32_t chip_family;
uint32_t chip_id; uint32_t chip_id;
uint32_t rev_id; uint32_t rev_id;
bool powercontainment_enabled;
}; };
enum amd_pp_display_config_type{ enum amd_pp_display_config_type{
AMD_PP_DisplayConfigType_None = 0, AMD_PP_DisplayConfigType_None = 0,
......
...@@ -609,6 +609,7 @@ struct pp_hwmgr { ...@@ -609,6 +609,7 @@ struct pp_hwmgr {
uint32_t num_ps; uint32_t num_ps;
struct pp_thermal_controller_info thermal_controller; struct pp_thermal_controller_info thermal_controller;
bool fan_ctrl_is_in_default_mode; bool fan_ctrl_is_in_default_mode;
bool powercontainment_enabled;
uint32_t fan_ctrl_default_mode; uint32_t fan_ctrl_default_mode;
uint32_t tmin; uint32_t tmin;
struct phm_microcode_version_info microcode_version_info; struct phm_microcode_version_info microcode_version_info;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment