[PATCH] drm/amdgpu: change pp_dpm clk/mclk/pcie input format
Alex Deucher
alexdeucher at gmail.com
Mon Apr 23 20:06:16 UTC 2018
On Thu, Apr 19, 2018 at 4:51 PM, welu <wei.lu2 at amd.com> wrote:
> 1. support more than 8 values when setting get_pp_dpm_mclk/
> sclk/pcie, the former design just parse command format like
> "echo xxxx > pp_dpm_sclk" and current can parse "echo xx xxx
> xxxx > pp_dpm_sclk" whose operation is more user-friendly
> and convinent and can offer more values;
> 2. be compatible with former design like "xx".
> Bug:KFD-385
Please update the documentation labeled "DOC: pp_dpm_sclk pp_dpm_mclk
pp_dpm_pcie", With that fixed, patch is:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>
> Change-Id: Id7d95ce45f4ee0564b18ebcfc16976f1a5c6bf72
> Signed-off-by: welu <wei.lu2 at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 95 ++++++++++++++++++++--------------
> 1 file changed, 55 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> index 744f105..58f46f9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> @@ -466,23 +466,27 @@ static ssize_t amdgpu_set_pp_dpm_sclk(struct device *dev,
> struct amdgpu_device *adev = ddev->dev_private;
> int ret;
> long level;
> - uint32_t i, mask = 0;
> - char sub_str[2];
> + uint32_t mask = 0;
> + char *sub_str = NULL;
> + char *tmp;
> + char buf_cpy[count];
> + const char delimiter[3] = {' ', '\n', '\0'};
>
> - for (i = 0; i < strlen(buf); i++) {
> - if (*(buf + i) == '\n')
> - continue;
> - sub_str[0] = *(buf + i);
> - sub_str[1] = '\0';
> - ret = kstrtol(sub_str, 0, &level);
> + memcpy(buf_cpy, buf, count+1);
> + tmp = buf_cpy;
> + while (tmp[0]) {
> + sub_str = strsep(&tmp, delimiter);
> + if (strlen(sub_str)) {
> + ret = kstrtol(sub_str, 0, &level);
>
> - if (ret) {
> - count = -EINVAL;
> - goto fail;
> - }
> - mask |= 1 << level;
> + if (ret) {
> + count = -EINVAL;
> + goto fail;
> + }
> + mask |= 1 << level;
> + } else
> + break;
> }
> -
> if (adev->powerplay.pp_funcs->force_clock_level)
> amdgpu_dpm_force_clock_level(adev, PP_SCLK, mask);
>
> @@ -512,21 +516,26 @@ static ssize_t amdgpu_set_pp_dpm_mclk(struct device *dev,
> struct amdgpu_device *adev = ddev->dev_private;
> int ret;
> long level;
> - uint32_t i, mask = 0;
> - char sub_str[2];
> + uint32_t mask = 0;
> + char *sub_str = NULL;
> + char *tmp;
> + char buf_cpy[count];
> + const char delimiter[3] = {' ', '\n', '\0'};
>
> - for (i = 0; i < strlen(buf); i++) {
> - if (*(buf + i) == '\n')
> - continue;
> - sub_str[0] = *(buf + i);
> - sub_str[1] = '\0';
> - ret = kstrtol(sub_str, 0, &level);
> + memcpy(buf_cpy, buf, count+1);
> + tmp = buf_cpy;
> + while (tmp[0]) {
> + sub_str = strsep(&tmp, delimiter);
> + if (strlen(sub_str)) {
> + ret = kstrtol(sub_str, 0, &level);
>
> - if (ret) {
> - count = -EINVAL;
> - goto fail;
> - }
> - mask |= 1 << level;
> + if (ret) {
> + count = -EINVAL;
> + goto fail;
> + }
> + mask |= 1 << level;
> + } else
> + break;
> }
> if (adev->powerplay.pp_funcs->force_clock_level)
> amdgpu_dpm_force_clock_level(adev, PP_MCLK, mask);
> @@ -557,21 +566,27 @@ static ssize_t amdgpu_set_pp_dpm_pcie(struct device *dev,
> struct amdgpu_device *adev = ddev->dev_private;
> int ret;
> long level;
> - uint32_t i, mask = 0;
> - char sub_str[2];
> + uint32_t mask = 0;
> + char *sub_str = NULL;
> + char *tmp;
> + char buf_cpy[count];
> + const char delimiter[3] = {' ', '\n', '\0'};
>
> - for (i = 0; i < strlen(buf); i++) {
> - if (*(buf + i) == '\n')
> - continue;
> - sub_str[0] = *(buf + i);
> - sub_str[1] = '\0';
> - ret = kstrtol(sub_str, 0, &level);
> + memcpy(buf_cpy, buf, count+1);
> + tmp = buf_cpy;
>
> - if (ret) {
> - count = -EINVAL;
> - goto fail;
> - }
> - mask |= 1 << level;
> + while (tmp[0]) {
> + sub_str = strsep(&tmp, delimiter);
> + if (strlen(sub_str)) {
> + ret = kstrtol(sub_str, 0, &level);
> +
> + if (ret) {
> + count = -EINVAL;
> + goto fail;
> + }
> + mask |= 1 << level;
> + } else
> + break;
> }
> if (adev->powerplay.pp_funcs->force_clock_level)
> amdgpu_dpm_force_clock_level(adev, PP_PCIE, mask);
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list