diff options
| author | Jinzhou.Su <Jinzhou.Su@amd.com> | 2020-07-07 18:52:18 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2020-07-21 15:37:37 -0400 | 
| commit | 443c7f3c3641c790a7c306f9d9d54a2a5e3021b9 (patch) | |
| tree | 153e2fe575b46a527bab79c635fe57a73699b9c0 /drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | |
| parent | 6ece96a1374e7a25f639cdaab11bdbd0b337ef5f (diff) | |
drm/amdgpu: add read amdgpu_gfxoff status in debugfs
 Add interface for SMU12 device, used by UMR.
v2: fix code style
Signed-off-by: Jinzhou.Su <Jinzhou.Su@amd.com>
Reviewed-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c index a3fa1560de96..193ffdb957b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c @@ -1073,6 +1073,57 @@ static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *bu  } +/** + * amdgpu_debugfs_regs_gfxoff_status - read gfxoff status + * + * @f: open file handle + * @buf: User buffer to store read data in + * @size: Number of bytes to read + * @pos:  Offset to seek to + */ +static ssize_t amdgpu_debugfs_gfxoff_read(struct file *f, 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); +	if (r < 0) +		return r; + +	while (size) { +		uint32_t value; + +		r = amdgpu_get_gfx_off_status(adev, &value); +		if (r) { +			pm_runtime_mark_last_busy(adev->ddev->dev); +			pm_runtime_put_autosuspend(adev->ddev->dev); +			return r; +		} + +		r = put_user(value, (uint32_t *)buf); +		if (r) { +			pm_runtime_mark_last_busy(adev->ddev->dev); +			pm_runtime_put_autosuspend(adev->ddev->dev); +			return r; +		} + +		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, @@ -1123,7 +1174,9 @@ static const struct file_operations amdgpu_debugfs_gpr_fops = {  static const struct file_operations amdgpu_debugfs_gfxoff_fops = {  	.owner = THIS_MODULE, +	.read = amdgpu_debugfs_gfxoff_read,  	.write = amdgpu_debugfs_gfxoff_write, +	.llseek = default_llseek  };  static const struct file_operations *debugfs_regs[] = { | 
