[PATCH] drm/amd/amdgpu: Add gfxoff debugfs entry

Alex Deucher alexdeucher at gmail.com
Fri Feb 21 18:59:20 UTC 2020


On Fri, Feb 21, 2020 at 1:45 PM Tom St Denis <tom.stdenis at amd.com> wrote:
>
> Write a 32-bit value of zero to disable GFXOFF and write a 32-bit
> value of non-zero to enable GFXOFF.
>
> Signed-off-by: Tom St Denis <tom.stdenis at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 56 +++++++++++++++++++++
>  1 file changed, 56 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> index 7379910790c9..3bb74056b9d2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> @@ -842,6 +842,55 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
>         return result;
>  }
>
> +/**
> + * amdgpu_debugfs_regs_gfxoff_write - Enable/disable GFXOFF
> + *
> + * @f: open file handle
> + * @buf: User buffer to write data from
> + * @size: Number of bytes to write
> + * @pos:  Offset to seek to
> + *
> + * Write a 32-bit zero to disable or a 32-bit non-zero to enable
> + */
> +static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *buf,
> +                                        size_t size, loff_t *pos)
> +{
> +       struct amdgpu_device *adev = file_inode(f)->i_private;
> +       ssize_t result = 0;
> +       int r;
> +
> +       if (size & 0x3 || *pos & 0x3)
> +               return -EINVAL;
> +
> +       r = pm_runtime_get_sync(adev->ddev->dev);

Not really directly related to this patch, but If you are using umr
for debugging, we should probably disable runtime pm, otherwise the
entire GPU may be powered down between accesses.  There is already an
interface to do that via the core kernel power subsystem in sysfs.
E.g.,
/sys/class/drm/card0/device/power/control
/sys/class/drm/card0/device/power/runtime_status
Something else to look at for umr.

We don't store the state for when we dynamically turn it off like this
so if we get a GPU reset or a power management event (runtime pm or
S3), GFXOFF will be re-enabled at that point.  This is just for
debugging though so:
Acked-by: Alex Deucher <alexander.deucher at amd.com>

Alex


> +       if (r < 0)
> +               return r;
> +
> +       while (size) {
> +               uint32_t value;
> +
> +               r = get_user(value, (uint32_t *)buf);
> +               if (r) {
> +                       pm_runtime_mark_last_busy(adev->ddev->dev);
> +                       pm_runtime_put_autosuspend(adev->ddev->dev);
> +                       return r;
> +               }
> +
> +               amdgpu_gfx_off_ctrl(adev, value ? true : false);
> +
> +               result += 4;
> +               buf += 4;
> +               *pos += 4;
> +               size -= 4;
> +       }
> +
> +       pm_runtime_mark_last_busy(adev->ddev->dev);
> +       pm_runtime_put_autosuspend(adev->ddev->dev);
> +
> +       return result;
> +}
> +
> +
>  static const struct file_operations amdgpu_debugfs_regs_fops = {
>         .owner = THIS_MODULE,
>         .read = amdgpu_debugfs_regs_read,
> @@ -890,6 +939,11 @@ static const struct file_operations amdgpu_debugfs_gpr_fops = {
>         .llseek = default_llseek
>  };
>
> +static const struct file_operations amdgpu_debugfs_gfxoff_fops = {
> +       .owner = THIS_MODULE,
> +       .write = amdgpu_debugfs_gfxoff_write,
> +};
> +
>  static const struct file_operations *debugfs_regs[] = {
>         &amdgpu_debugfs_regs_fops,
>         &amdgpu_debugfs_regs_didt_fops,
> @@ -899,6 +953,7 @@ static const struct file_operations *debugfs_regs[] = {
>         &amdgpu_debugfs_sensors_fops,
>         &amdgpu_debugfs_wave_fops,
>         &amdgpu_debugfs_gpr_fops,
> +       &amdgpu_debugfs_gfxoff_fops,
>  };
>
>  static const char *debugfs_regs_names[] = {
> @@ -910,6 +965,7 @@ static const char *debugfs_regs_names[] = {
>         "amdgpu_sensors",
>         "amdgpu_wave",
>         "amdgpu_gpr",
> +       "amdgpu_gfxoff",
>  };
>
>  /**
> --
> 2.24.1
>
> _______________________________________________
> 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