diff options
-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 |