aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
diff options
context:
space:
mode:
authorChengming Gui <Jack.Gui@amd.com>2019-01-22 04:56:16 -0500
committerAlex Deucher <alexander.deucher@amd.com>2019-03-19 16:04:01 -0400
commit014c4440161b96ad237b1795f9dfdff24c419342 (patch)
treeb489cc7006fecb83941a5415ab65b68e840642a7 /drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
parent3ac4ffdd13fe74d1164ca61cdc6c7e8d8bfd6a70 (diff)
drm/amd/powerplay: implement power1_cap and power1_cap_max interface for SMU11 (v2)
add get_power_limit and set_power_limit functions to support hwmon for SMU11. v2: fix the code style issue. Signed-off-by: Chengming Gui <Jack.Gui@amd.com> Reviewed-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Kevin Wang <kevin1.wang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index d140b3dce676..c3508a7c8bfd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -1761,7 +1761,10 @@ static ssize_t amdgpu_hwmon_show_power_cap_max(struct device *dev,
1761 struct amdgpu_device *adev = dev_get_drvdata(dev); 1761 struct amdgpu_device *adev = dev_get_drvdata(dev);
1762 uint32_t limit = 0; 1762 uint32_t limit = 0;
1763 1763
1764 if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->get_power_limit) { 1764 if (is_support_sw_smu(adev)) {
1765 smu_get_power_limit(&adev->smu, &limit, true);
1766 return snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000);
1767 } else if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->get_power_limit) {
1765 adev->powerplay.pp_funcs->get_power_limit(adev->powerplay.pp_handle, &limit, true); 1768 adev->powerplay.pp_funcs->get_power_limit(adev->powerplay.pp_handle, &limit, true);
1766 return snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000); 1769 return snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000);
1767 } else { 1770 } else {
@@ -1776,7 +1779,10 @@ static ssize_t amdgpu_hwmon_show_power_cap(struct device *dev,
1776 struct amdgpu_device *adev = dev_get_drvdata(dev); 1779 struct amdgpu_device *adev = dev_get_drvdata(dev);
1777 uint32_t limit = 0; 1780 uint32_t limit = 0;
1778 1781
1779 if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->get_power_limit) { 1782 if (is_support_sw_smu(adev)) {
1783 smu_get_power_limit(&adev->smu, &limit, false);
1784 return snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000);
1785 } else if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->get_power_limit) {
1780 adev->powerplay.pp_funcs->get_power_limit(adev->powerplay.pp_handle, &limit, false); 1786 adev->powerplay.pp_funcs->get_power_limit(adev->powerplay.pp_handle, &limit, false);
1781 return snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000); 1787 return snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000);
1782 } else { 1788 } else {
@@ -1799,7 +1805,9 @@ static ssize_t amdgpu_hwmon_set_power_cap(struct device *dev,
1799 return err; 1805 return err;
1800 1806
1801 value = value / 1000000; /* convert to Watt */ 1807 value = value / 1000000; /* convert to Watt */
1802 if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->set_power_limit) { 1808 if (is_support_sw_smu(adev)) {
1809 adev->smu.funcs->set_power_limit(&adev->smu, value);
1810 } else if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->set_power_limit) {
1803 err = adev->powerplay.pp_funcs->set_power_limit(adev->powerplay.pp_handle, value); 1811 err = adev->powerplay.pp_funcs->set_power_limit(adev->powerplay.pp_handle, value);
1804 if (err) 1812 if (err)
1805 return err; 1813 return err;