[PATCH] drm/amd/display: Add debugfs entry for amdgpu_dm_visual_confirm
Kazlauskas, Nicholas
Nicholas.Kazlauskas at amd.com
Fri Mar 15 12:50:38 UTC 2019
On 3/15/19 8:47 AM, Christian König wrote:
> Am 15.03.19 um 13:42 schrieb Nicholas Kazlauskas:
>> [Why]
>> DC provides a few visual confirmation debug options that can be
>> dynamically changed at runtime to help debug surface programming issues
>> but we don't have any way to access it from userspace.
>>
>> [How]
>> Add the amdgpu_dm_visual_confirm debugfs entry.
>> It accepts a string containing the DC visual confirm enum value.
>
> Have you considered to use debugfs_create_u32 or debugfs_create_u16
> instead of open coding this?
>
> Christian.
I've never actually seen those helpers used before, but from a glance it
looks like they'd do what I want.
Thanks for the suggestion!
Nicholas Kazlauskas
>
>>
>> Cc: Leo Li <sunpeng.li at amd.com>
>> Cc: Harry Wentland <harry.wentland at amd.com>
>> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
>> ---
>> .../amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 77 ++++++++++++++++++-
>> 1 file changed, 75 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>> index 4a55cde027cf..1d6bfb84d7cf 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>> @@ -803,6 +803,65 @@ static ssize_t dtn_log_write(
>> return size;
>> }
>> +/*
>> + * Reads the DC visual confirm debug option value into the given buffer.
>> + * Example usage: cat /sys/kernel/debug/dri/0/amdgpu_dm_visual_confirm
>> + */
>> +static ssize_t visual_confirm_read(struct file *f, char __user *buf,
>> + size_t size, loff_t *pos)
>> +{
>> + struct amdgpu_device *adev = file_inode(f)->i_private;
>> + struct dc *dc = adev->dm.dc;
>> + size_t to_copy = 0;
>> + int len;
>> + char tmp[16];
>> +
>> + if (!buf || !size)
>> + return -EINVAL;
>> +
>> + len = snprintf(tmp, sizeof(tmp), "%d\n", dc->debug.visual_confirm);
>> + if (len < 0 || len >= sizeof(tmp))
>> + return -EINVAL;
>> +
>> + if (*pos >= len)
>> + return 0;
>> +
>> + to_copy = len - *pos;
>> + if (to_copy > size)
>> + return 0;
>> +
>> + if (copy_to_user(buf, tmp + *pos, to_copy))
>> + return -EFAULT;
>> +
>> + *pos += to_copy;
>> +
>> + return to_copy;
>> +}
>> +
>> +/*
>> + * Sets the DC visual confirm debug option from the given string.
>> + * Example usage: echo 1 > /sys/kernel/debug/dri/0/amdgpu_visual_confirm
>> + */
>> +static ssize_t visual_confirm_write(struct file *f, const char __user
>> *buf,
>> + size_t size, loff_t *pos)
>> +{
>> + struct amdgpu_device *adev = file_inode(f)->i_private;
>> + struct dc *dc = adev->dm.dc;
>> + int ret;
>> + u16 val;
>> +
>> + if (size == 0)
>> + return 0;
>> +
>> + ret = kstrtou16_from_user(buf, size, 0, &val);
>> + if (ret)
>> + return ret;
>> +
>> + dc->debug.visual_confirm = val;
>> +
>> + return size;
>> +}
>> +
>> /*
>> * Backlight at this moment. Read only.
>> * As written to display, taking ABM and backlight lut into account.
>> @@ -850,7 +909,12 @@ int dtn_debugfs_init(struct amdgpu_device *adev)
>> .write = dtn_log_write,
>> .llseek = default_llseek
>> };
>> -
>> + static const struct file_operations visual_confirm_fops = {
>> + .owner = THIS_MODULE,
>> + .read = visual_confirm_read,
>> + .write = visual_confirm_write,
>> + .llseek = default_llseek
>> + };
>> struct drm_minor *minor = adev->ddev->primary;
>> struct dentry *ent, *root = minor->debugfs_root;
>> int ret;
>> @@ -867,5 +931,14 @@ int dtn_debugfs_init(struct amdgpu_device *adev)
>> adev,
>> &dtn_log_fops);
>> - return PTR_ERR_OR_ZERO(ent);
>> + if (IS_ERR(ent))
>> + return PTR_ERR(ent);
>> +
>> + ent = debugfs_create_file("amdgpu_dm_visual_confirm", 0644, root,
>> adev,
>> + &visual_confirm_fops);
>> +
>> + if (IS_ERR(ent))
>> + return PTR_ERR(ent);
>> +
>> + return 0;
>> }
>
More information about the amd-gfx
mailing list