diff options
author | Chengming Gui <Jack.Gui@amd.com> | 2019-01-22 04:56:16 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2019-03-19 16:04:01 -0400 |
commit | 014c4440161b96ad237b1795f9dfdff24c419342 (patch) | |
tree | b489cc7006fecb83941a5415ab65b68e840642a7 /drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |
parent | 3ac4ffdd13fe74d1164ca61cdc6c7e8d8bfd6a70 (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.c | 14 |
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; |