diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-05-02 12:48:26 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-05-02 12:48:26 -0400 |
commit | 0337966d121ebebf73a1c346123e8112796e684e (patch) | |
tree | c0d4388591e72dc5a26ee976a9cbca70f6bafbbd /drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | |
parent | 7c5bb4ac2b76d2a09256aec8a7d584bf3e2b0466 (diff) | |
parent | 8a038b83e012097a7ac6cfb9f6c5fac1da8fad6e (diff) |
Merge branch 'next' into for-linus
Prepare input updates for 4.12 merge window.
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c index 01a42b6a69a4..19943356cca7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | |||
@@ -42,12 +42,12 @@ int amdgpu_gfx_scratch_get(struct amdgpu_device *adev, uint32_t *reg) | |||
42 | { | 42 | { |
43 | int i; | 43 | int i; |
44 | 44 | ||
45 | for (i = 0; i < adev->gfx.scratch.num_reg; i++) { | 45 | i = ffs(adev->gfx.scratch.free_mask); |
46 | if (adev->gfx.scratch.free[i]) { | 46 | if (i != 0 && i <= adev->gfx.scratch.num_reg) { |
47 | adev->gfx.scratch.free[i] = false; | 47 | i--; |
48 | *reg = adev->gfx.scratch.reg[i]; | 48 | adev->gfx.scratch.free_mask &= ~(1u << i); |
49 | return 0; | 49 | *reg = adev->gfx.scratch.reg_base + i; |
50 | } | 50 | return 0; |
51 | } | 51 | } |
52 | return -EINVAL; | 52 | return -EINVAL; |
53 | } | 53 | } |
@@ -62,14 +62,7 @@ int amdgpu_gfx_scratch_get(struct amdgpu_device *adev, uint32_t *reg) | |||
62 | */ | 62 | */ |
63 | void amdgpu_gfx_scratch_free(struct amdgpu_device *adev, uint32_t reg) | 63 | void amdgpu_gfx_scratch_free(struct amdgpu_device *adev, uint32_t reg) |
64 | { | 64 | { |
65 | int i; | 65 | adev->gfx.scratch.free_mask |= 1u << (reg - adev->gfx.scratch.reg_base); |
66 | |||
67 | for (i = 0; i < adev->gfx.scratch.num_reg; i++) { | ||
68 | if (adev->gfx.scratch.reg[i] == reg) { | ||
69 | adev->gfx.scratch.free[i] = true; | ||
70 | return; | ||
71 | } | ||
72 | } | ||
73 | } | 66 | } |
74 | 67 | ||
75 | /** | 68 | /** |