diff options
Diffstat (limited to 'drivers/gpu/drm/amd')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index ce384ed9b9ef..6ea96e1fb273 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
| @@ -1671,10 +1671,50 @@ static ssize_t amdgpu_ttm_vram_read(struct file *f, char __user *buf, | |||
| 1671 | return result; | 1671 | return result; |
| 1672 | } | 1672 | } |
| 1673 | 1673 | ||
| 1674 | static ssize_t amdgpu_ttm_vram_write(struct file *f, const char __user *buf, | ||
| 1675 | size_t size, loff_t *pos) | ||
| 1676 | { | ||
| 1677 | struct amdgpu_device *adev = file_inode(f)->i_private; | ||
| 1678 | ssize_t result = 0; | ||
| 1679 | int r; | ||
| 1680 | |||
| 1681 | if (size & 0x3 || *pos & 0x3) | ||
| 1682 | return -EINVAL; | ||
| 1683 | |||
| 1684 | if (*pos >= adev->mc.mc_vram_size) | ||
| 1685 | return -ENXIO; | ||
| 1686 | |||
| 1687 | while (size) { | ||
| 1688 | unsigned long flags; | ||
| 1689 | uint32_t value; | ||
| 1690 | |||
| 1691 | if (*pos >= adev->mc.mc_vram_size) | ||
| 1692 | return result; | ||
| 1693 | |||
| 1694 | r = get_user(value, (uint32_t *)buf); | ||
| 1695 | if (r) | ||
| 1696 | return r; | ||
| 1697 | |||
| 1698 | spin_lock_irqsave(&adev->mmio_idx_lock, flags); | ||
| 1699 | WREG32(mmMM_INDEX, ((uint32_t)*pos) | 0x80000000); | ||
| 1700 | WREG32(mmMM_INDEX_HI, *pos >> 31); | ||
| 1701 | WREG32(mmMM_DATA, value); | ||
| 1702 | spin_unlock_irqrestore(&adev->mmio_idx_lock, flags); | ||
| 1703 | |||
| 1704 | result += 4; | ||
| 1705 | buf += 4; | ||
| 1706 | *pos += 4; | ||
| 1707 | size -= 4; | ||
| 1708 | } | ||
| 1709 | |||
| 1710 | return result; | ||
| 1711 | } | ||
| 1712 | |||
| 1674 | static const struct file_operations amdgpu_ttm_vram_fops = { | 1713 | static const struct file_operations amdgpu_ttm_vram_fops = { |
| 1675 | .owner = THIS_MODULE, | 1714 | .owner = THIS_MODULE, |
| 1676 | .read = amdgpu_ttm_vram_read, | 1715 | .read = amdgpu_ttm_vram_read, |
| 1677 | .llseek = default_llseek | 1716 | .write = amdgpu_ttm_vram_write, |
| 1717 | .llseek = default_llseek, | ||
| 1678 | }; | 1718 | }; |
| 1679 | 1719 | ||
| 1680 | #ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS | 1720 | #ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS |
