diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_benchmark.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_gem.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_test.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_vm.c | 6 |
6 files changed, 31 insertions, 21 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c index 9e7f23dd14bd..87d5fb21cb61 100644 --- a/drivers/gpu/drm/radeon/radeon_benchmark.c +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c | |||
| @@ -34,7 +34,8 @@ | |||
| 34 | 34 | ||
| 35 | static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size, | 35 | static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size, |
| 36 | uint64_t saddr, uint64_t daddr, | 36 | uint64_t saddr, uint64_t daddr, |
| 37 | int flag, int n) | 37 | int flag, int n, |
| 38 | struct reservation_object *resv) | ||
| 38 | { | 39 | { |
| 39 | unsigned long start_jiffies; | 40 | unsigned long start_jiffies; |
| 40 | unsigned long end_jiffies; | 41 | unsigned long end_jiffies; |
| @@ -47,12 +48,12 @@ static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size, | |||
| 47 | case RADEON_BENCHMARK_COPY_DMA: | 48 | case RADEON_BENCHMARK_COPY_DMA: |
| 48 | fence = radeon_copy_dma(rdev, saddr, daddr, | 49 | fence = radeon_copy_dma(rdev, saddr, daddr, |
| 49 | size / RADEON_GPU_PAGE_SIZE, | 50 | size / RADEON_GPU_PAGE_SIZE, |
| 50 | NULL); | 51 | resv); |
| 51 | break; | 52 | break; |
| 52 | case RADEON_BENCHMARK_COPY_BLIT: | 53 | case RADEON_BENCHMARK_COPY_BLIT: |
| 53 | fence = radeon_copy_blit(rdev, saddr, daddr, | 54 | fence = radeon_copy_blit(rdev, saddr, daddr, |
| 54 | size / RADEON_GPU_PAGE_SIZE, | 55 | size / RADEON_GPU_PAGE_SIZE, |
| 55 | NULL); | 56 | resv); |
| 56 | break; | 57 | break; |
| 57 | default: | 58 | default: |
| 58 | DRM_ERROR("Unknown copy method\n"); | 59 | DRM_ERROR("Unknown copy method\n"); |
| @@ -120,7 +121,8 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size, | |||
| 120 | 121 | ||
| 121 | if (rdev->asic->copy.dma) { | 122 | if (rdev->asic->copy.dma) { |
| 122 | time = radeon_benchmark_do_move(rdev, size, saddr, daddr, | 123 | time = radeon_benchmark_do_move(rdev, size, saddr, daddr, |
| 123 | RADEON_BENCHMARK_COPY_DMA, n); | 124 | RADEON_BENCHMARK_COPY_DMA, n, |
| 125 | dobj->tbo.resv); | ||
| 124 | if (time < 0) | 126 | if (time < 0) |
| 125 | goto out_cleanup; | 127 | goto out_cleanup; |
| 126 | if (time > 0) | 128 | if (time > 0) |
| @@ -130,7 +132,8 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size, | |||
| 130 | 132 | ||
| 131 | if (rdev->asic->copy.blit) { | 133 | if (rdev->asic->copy.blit) { |
| 132 | time = radeon_benchmark_do_move(rdev, size, saddr, daddr, | 134 | time = radeon_benchmark_do_move(rdev, size, saddr, daddr, |
| 133 | RADEON_BENCHMARK_COPY_BLIT, n); | 135 | RADEON_BENCHMARK_COPY_BLIT, n, |
| 136 | dobj->tbo.resv); | ||
| 134 | if (time < 0) | 137 | if (time < 0) |
| 135 | goto out_cleanup; | 138 | goto out_cleanup; |
| 136 | if (time > 0) | 139 | if (time > 0) |
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 102116902a07..913fafa597ad 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
| @@ -960,6 +960,9 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll, | |||
| 960 | if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV && | 960 | if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV && |
| 961 | pll->flags & RADEON_PLL_USE_REF_DIV) | 961 | pll->flags & RADEON_PLL_USE_REF_DIV) |
| 962 | ref_div_max = pll->reference_div; | 962 | ref_div_max = pll->reference_div; |
| 963 | else if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP) | ||
| 964 | /* fix for problems on RS880 */ | ||
| 965 | ref_div_max = min(pll->max_ref_div, 7u); | ||
| 963 | else | 966 | else |
| 964 | ref_div_max = pll->max_ref_div; | 967 | ref_div_max = pll->max_ref_div; |
| 965 | 968 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index d0b4f7d1140d..ac3c1310b953 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c | |||
| @@ -146,7 +146,8 @@ int radeon_gem_object_open(struct drm_gem_object *obj, struct drm_file *file_pri | |||
| 146 | struct radeon_bo_va *bo_va; | 146 | struct radeon_bo_va *bo_va; |
| 147 | int r; | 147 | int r; |
| 148 | 148 | ||
| 149 | if (rdev->family < CHIP_CAYMAN) { | 149 | if ((rdev->family < CHIP_CAYMAN) || |
| 150 | (!rdev->accel_working)) { | ||
| 150 | return 0; | 151 | return 0; |
| 151 | } | 152 | } |
| 152 | 153 | ||
| @@ -176,7 +177,8 @@ void radeon_gem_object_close(struct drm_gem_object *obj, | |||
| 176 | struct radeon_bo_va *bo_va; | 177 | struct radeon_bo_va *bo_va; |
| 177 | int r; | 178 | int r; |
| 178 | 179 | ||
| 179 | if (rdev->family < CHIP_CAYMAN) { | 180 | if ((rdev->family < CHIP_CAYMAN) || |
| 181 | (!rdev->accel_working)) { | ||
| 180 | return; | 182 | return; |
| 181 | } | 183 | } |
| 182 | 184 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 3cf9c1fa6475..686411e4e4f6 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
| @@ -605,14 +605,14 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) | |||
| 605 | return -ENOMEM; | 605 | return -ENOMEM; |
| 606 | } | 606 | } |
| 607 | 607 | ||
| 608 | vm = &fpriv->vm; | ||
| 609 | r = radeon_vm_init(rdev, vm); | ||
| 610 | if (r) { | ||
| 611 | kfree(fpriv); | ||
| 612 | return r; | ||
| 613 | } | ||
| 614 | |||
| 615 | if (rdev->accel_working) { | 608 | if (rdev->accel_working) { |
| 609 | vm = &fpriv->vm; | ||
| 610 | r = radeon_vm_init(rdev, vm); | ||
| 611 | if (r) { | ||
| 612 | kfree(fpriv); | ||
| 613 | return r; | ||
| 614 | } | ||
| 615 | |||
| 616 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); | 616 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); |
| 617 | if (r) { | 617 | if (r) { |
| 618 | radeon_vm_fini(rdev, vm); | 618 | radeon_vm_fini(rdev, vm); |
| @@ -668,9 +668,9 @@ void radeon_driver_postclose_kms(struct drm_device *dev, | |||
| 668 | radeon_vm_bo_rmv(rdev, vm->ib_bo_va); | 668 | radeon_vm_bo_rmv(rdev, vm->ib_bo_va); |
| 669 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); | 669 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); |
| 670 | } | 670 | } |
| 671 | radeon_vm_fini(rdev, vm); | ||
| 671 | } | 672 | } |
| 672 | 673 | ||
| 673 | radeon_vm_fini(rdev, vm); | ||
| 674 | kfree(fpriv); | 674 | kfree(fpriv); |
| 675 | file_priv->driver_priv = NULL; | 675 | file_priv->driver_priv = NULL; |
| 676 | } | 676 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c index 07b506b41008..791818165c76 100644 --- a/drivers/gpu/drm/radeon/radeon_test.c +++ b/drivers/gpu/drm/radeon/radeon_test.c | |||
| @@ -119,11 +119,11 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) | |||
| 119 | if (ring == R600_RING_TYPE_DMA_INDEX) | 119 | if (ring == R600_RING_TYPE_DMA_INDEX) |
| 120 | fence = radeon_copy_dma(rdev, gtt_addr, vram_addr, | 120 | fence = radeon_copy_dma(rdev, gtt_addr, vram_addr, |
| 121 | size / RADEON_GPU_PAGE_SIZE, | 121 | size / RADEON_GPU_PAGE_SIZE, |
| 122 | NULL); | 122 | vram_obj->tbo.resv); |
| 123 | else | 123 | else |
| 124 | fence = radeon_copy_blit(rdev, gtt_addr, vram_addr, | 124 | fence = radeon_copy_blit(rdev, gtt_addr, vram_addr, |
| 125 | size / RADEON_GPU_PAGE_SIZE, | 125 | size / RADEON_GPU_PAGE_SIZE, |
| 126 | NULL); | 126 | vram_obj->tbo.resv); |
| 127 | if (IS_ERR(fence)) { | 127 | if (IS_ERR(fence)) { |
| 128 | DRM_ERROR("Failed GTT->VRAM copy %d\n", i); | 128 | DRM_ERROR("Failed GTT->VRAM copy %d\n", i); |
| 129 | r = PTR_ERR(fence); | 129 | r = PTR_ERR(fence); |
| @@ -170,11 +170,11 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) | |||
| 170 | if (ring == R600_RING_TYPE_DMA_INDEX) | 170 | if (ring == R600_RING_TYPE_DMA_INDEX) |
| 171 | fence = radeon_copy_dma(rdev, vram_addr, gtt_addr, | 171 | fence = radeon_copy_dma(rdev, vram_addr, gtt_addr, |
| 172 | size / RADEON_GPU_PAGE_SIZE, | 172 | size / RADEON_GPU_PAGE_SIZE, |
| 173 | NULL); | 173 | vram_obj->tbo.resv); |
| 174 | else | 174 | else |
| 175 | fence = radeon_copy_blit(rdev, vram_addr, gtt_addr, | 175 | fence = radeon_copy_blit(rdev, vram_addr, gtt_addr, |
| 176 | size / RADEON_GPU_PAGE_SIZE, | 176 | size / RADEON_GPU_PAGE_SIZE, |
| 177 | NULL); | 177 | vram_obj->tbo.resv); |
| 178 | if (IS_ERR(fence)) { | 178 | if (IS_ERR(fence)) { |
| 179 | DRM_ERROR("Failed VRAM->GTT copy %d\n", i); | 179 | DRM_ERROR("Failed VRAM->GTT copy %d\n", i); |
| 180 | r = PTR_ERR(fence); | 180 | r = PTR_ERR(fence); |
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index 06d2246d07f1..2a5a4a9e772d 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c | |||
| @@ -743,9 +743,11 @@ static void radeon_vm_frag_ptes(struct radeon_device *rdev, | |||
| 743 | */ | 743 | */ |
| 744 | 744 | ||
| 745 | /* NI is optimized for 256KB fragments, SI and newer for 64KB */ | 745 | /* NI is optimized for 256KB fragments, SI and newer for 64KB */ |
| 746 | uint64_t frag_flags = rdev->family == CHIP_CAYMAN ? | 746 | uint64_t frag_flags = ((rdev->family == CHIP_CAYMAN) || |
| 747 | (rdev->family == CHIP_ARUBA)) ? | ||
| 747 | R600_PTE_FRAG_256KB : R600_PTE_FRAG_64KB; | 748 | R600_PTE_FRAG_256KB : R600_PTE_FRAG_64KB; |
| 748 | uint64_t frag_align = rdev->family == CHIP_CAYMAN ? 0x200 : 0x80; | 749 | uint64_t frag_align = ((rdev->family == CHIP_CAYMAN) || |
| 750 | (rdev->family == CHIP_ARUBA)) ? 0x200 : 0x80; | ||
| 749 | 751 | ||
| 750 | uint64_t frag_start = ALIGN(pe_start, frag_align); | 752 | uint64_t frag_start = ALIGN(pe_start, frag_align); |
| 751 | uint64_t frag_end = pe_end & ~(frag_align - 1); | 753 | uint64_t frag_end = pe_end & ~(frag_align - 1); |
