diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0971-drm-amd-powerplay-return-0-when-interface-not-implem.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0971-drm-amd-powerplay-return-0-when-interface-not-implem.patch | 341 |
1 files changed, 341 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0971-drm-amd-powerplay-return-0-when-interface-not-implem.patch b/common/recipes-kernel/linux/files/0971-drm-amd-powerplay-return-0-when-interface-not-implem.patch new file mode 100644 index 00000000..458c3c97 --- /dev/null +++ b/common/recipes-kernel/linux/files/0971-drm-amd-powerplay-return-0-when-interface-not-implem.patch @@ -0,0 +1,341 @@ +From 6d51b09d6afbf635aa6a9aaa2c6760e214ccf67b Mon Sep 17 00:00:00 2001 +From: Rex Zhu <Rex.Zhu@amd.com> +Date: Wed, 30 Mar 2016 11:35:50 +0800 +Subject: [PATCH 0971/1110] drm/amd/powerplay: return 0 when interface not + implement on some asic. + +Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 169 +++++++++++++++++--------- + 1 file changed, 113 insertions(+), 56 deletions(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +index 32a6a6f..ce8d9bf 100644 +--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c ++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +@@ -37,6 +37,12 @@ + return -EINVAL; \ + } while (0) + ++#define PP_CHECK_HW(hwmgr) \ ++ do { \ ++ if ((hwmgr) == NULL || (hwmgr)->hwmgr_func == NULL) \ ++ return -EINVAL; \ ++ } while (0) ++ + static int pp_early_init(void *handle) + { + return 0; +@@ -54,8 +60,9 @@ static int pp_sw_init(void *handle) + pp_handle = (struct pp_instance *)handle; + hwmgr = pp_handle->hwmgr; + +- if (hwmgr == NULL || hwmgr->pptable_func == NULL || +- hwmgr->hwmgr_func == NULL || ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->pptable_func == NULL || + hwmgr->pptable_func->pptable_init == NULL || + hwmgr->hwmgr_func->backend_init == NULL) + return -EINVAL; +@@ -66,9 +73,9 @@ static int pp_sw_init(void *handle) + ret = hwmgr->hwmgr_func->backend_init(hwmgr); + + if (ret) +- printk("amdgpu: powerplay initialization failed\n"); ++ printk(KERN_ERR "amdgpu: powerplay initialization failed\n"); + else +- printk("amdgpu: powerplay initialized\n"); ++ printk(KERN_INFO "amdgpu: powerplay initialized\n"); + + return ret; + } +@@ -85,8 +92,9 @@ static int pp_sw_fini(void *handle) + pp_handle = (struct pp_instance *)handle; + hwmgr = pp_handle->hwmgr; + +- if (hwmgr != NULL || hwmgr->hwmgr_func != NULL || +- hwmgr->hwmgr_func->backend_fini != NULL) ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->backend_fini != NULL) + ret = hwmgr->hwmgr_func->backend_fini(hwmgr); + + return ret; +@@ -188,11 +196,12 @@ static int pp_set_clockgating_state(void *handle, + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); + +- if (hwmgr->hwmgr_func->update_clock_gatings == NULL) ++ if (hwmgr->hwmgr_func->update_clock_gatings == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); + return 0; ++ } + + if (state == AMD_CG_STATE_UNGATE) + pp_state = 0; +@@ -276,9 +285,12 @@ static int pp_set_powergating_state(void *handle, + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->enable_per_cu_power_gating == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->enable_per_cu_power_gating == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + /* Enable/disable GFX per cu powergating through SMU */ + return hwmgr->hwmgr_func->enable_per_cu_power_gating(hwmgr, +@@ -371,9 +383,12 @@ static int pp_dpm_force_performance_level(void *handle, + + hwmgr = pp_handle->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->force_dpm_level == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->force_dpm_level == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + hwmgr->hwmgr_func->force_dpm_level(hwmgr, level); + +@@ -405,9 +420,12 @@ static int pp_dpm_get_sclk(void *handle, bool low) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->get_sclk == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->get_sclk == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->get_sclk(hwmgr, low); + } +@@ -421,9 +439,12 @@ static int pp_dpm_get_mclk(void *handle, bool low) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->get_mclk == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->get_mclk == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->get_mclk(hwmgr, low); + } +@@ -437,9 +458,12 @@ static int pp_dpm_powergate_vce(void *handle, bool gate) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->powergate_vce == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->powergate_vce == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->powergate_vce(hwmgr, gate); + } +@@ -453,9 +477,12 @@ static int pp_dpm_powergate_uvd(void *handle, bool gate) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->powergate_uvd == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->powergate_uvd == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->powergate_uvd(hwmgr, gate); + } +@@ -551,9 +578,13 @@ pp_debugfs_print_current_performance_level(void *handle, + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->print_current_perforce_level == NULL) ++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL) ++ return; ++ ++ if (hwmgr->hwmgr_func->print_current_perforce_level == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); + return; ++ } + + hwmgr->hwmgr_func->print_current_perforce_level(hwmgr, m); + } +@@ -567,9 +598,12 @@ static int pp_dpm_set_fan_control_mode(void *handle, uint32_t mode) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->set_fan_control_mode == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->set_fan_control_mode == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->set_fan_control_mode(hwmgr, mode); + } +@@ -583,9 +617,12 @@ static int pp_dpm_get_fan_control_mode(void *handle) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->get_fan_control_mode == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->get_fan_control_mode == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->get_fan_control_mode(hwmgr); + } +@@ -599,9 +636,12 @@ static int pp_dpm_set_fan_speed_percent(void *handle, uint32_t percent) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->set_fan_speed_percent == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->set_fan_speed_percent == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->set_fan_speed_percent(hwmgr, percent); + } +@@ -615,9 +655,12 @@ static int pp_dpm_get_fan_speed_percent(void *handle, uint32_t *speed) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->get_fan_speed_percent == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->get_fan_speed_percent == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->get_fan_speed_percent(hwmgr, speed); + } +@@ -631,9 +674,12 @@ static int pp_dpm_get_temperature(void *handle) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->get_temperature == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->get_temperature == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->get_temperature(hwmgr); + } +@@ -687,9 +733,12 @@ static int pp_dpm_get_pp_table(void *handle, char **table) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->get_pp_table == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->get_pp_table == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->get_pp_table(hwmgr, table); + } +@@ -703,9 +752,12 @@ static int pp_dpm_set_pp_table(void *handle, const char *buf, size_t size) + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->set_pp_table == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->set_pp_table == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->set_pp_table(hwmgr, buf, size); + } +@@ -720,9 +772,12 @@ static int pp_dpm_force_clock_level(void *handle, + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->force_clock_level == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); ++ ++ if (hwmgr->hwmgr_func->force_clock_level == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + + return hwmgr->hwmgr_func->force_clock_level(hwmgr, type, level); + } +@@ -737,10 +792,12 @@ static int pp_dpm_print_clock_levels(void *handle, + + hwmgr = ((struct pp_instance *)handle)->hwmgr; + +- if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || +- hwmgr->hwmgr_func->print_clock_levels == NULL) +- return -EINVAL; ++ PP_CHECK_HW(hwmgr); + ++ if (hwmgr->hwmgr_func->print_clock_levels == NULL) { ++ printk(KERN_INFO "%s was not implemented.\n", __func__); ++ return 0; ++ } + return hwmgr->hwmgr_func->print_clock_levels(hwmgr, type, buf); + } + +-- +2.7.4 + |