diff options
| author | Dave Airlie <airlied@gmail.com> | 2014-05-30 19:19:05 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@gmail.com> | 2014-05-30 19:19:05 -0400 |
| commit | 1446e04c9b9b7d27437a5fefee37d9984afcd560 (patch) | |
| tree | e2e38cde53fa04ccde07ebdb59d71236c060a96b /drivers | |
| parent | efb27e73e12633a24dfdc67b8a6a58c4b427f3e4 (diff) | |
| parent | 7d95f6cc4ef73572a43d4a0a1907a13ace17a62a (diff) | |
Merge branch 'drm-fixes-3.15' of git://people.freedesktop.org/~deathsimple/linux into drm-fixes
this is the next pull request for stashed up radeon fixes for 3.15. This is finally calming down with only four patches in this pull request.
* 'drm-fixes-3.15' of git://people.freedesktop.org/~deathsimple/linux:
drm/radeon: only allocate necessary size for vm bo list
drm/radeon: don't allow RADEON_GEM_DOMAIN_CPU for command submission
drm/radeon: avoid crash if VM command submission isn't available
drm/radeon: lower the ref * post PLL maximum once more
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_cs.c | 21 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_vm.c | 6 |
3 files changed, 21 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index 2b6e0ebcc13a..41ecf8a60611 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c | |||
| @@ -152,6 +152,12 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) | |||
| 152 | uint32_t domain = r->write_domain ? | 152 | uint32_t domain = r->write_domain ? |
| 153 | r->write_domain : r->read_domains; | 153 | r->write_domain : r->read_domains; |
| 154 | 154 | ||
| 155 | if (domain & RADEON_GEM_DOMAIN_CPU) { | ||
| 156 | DRM_ERROR("RADEON_GEM_DOMAIN_CPU is not valid " | ||
| 157 | "for command submission\n"); | ||
| 158 | return -EINVAL; | ||
| 159 | } | ||
| 160 | |||
| 155 | p->relocs[i].domain = domain; | 161 | p->relocs[i].domain = domain; |
| 156 | if (domain == RADEON_GEM_DOMAIN_VRAM) | 162 | if (domain == RADEON_GEM_DOMAIN_VRAM) |
| 157 | domain |= RADEON_GEM_DOMAIN_GTT; | 163 | domain |= RADEON_GEM_DOMAIN_GTT; |
| @@ -342,10 +348,17 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) | |||
| 342 | return -EINVAL; | 348 | return -EINVAL; |
| 343 | 349 | ||
| 344 | /* we only support VM on some SI+ rings */ | 350 | /* we only support VM on some SI+ rings */ |
| 345 | if ((p->rdev->asic->ring[p->ring]->cs_parse == NULL) && | 351 | if ((p->cs_flags & RADEON_CS_USE_VM) == 0) { |
| 346 | ((p->cs_flags & RADEON_CS_USE_VM) == 0)) { | 352 | if (p->rdev->asic->ring[p->ring]->cs_parse == NULL) { |
| 347 | DRM_ERROR("Ring %d requires VM!\n", p->ring); | 353 | DRM_ERROR("Ring %d requires VM!\n", p->ring); |
| 348 | return -EINVAL; | 354 | return -EINVAL; |
| 355 | } | ||
| 356 | } else { | ||
| 357 | if (p->rdev->asic->ring[p->ring]->ib_parse == NULL) { | ||
| 358 | DRM_ERROR("VM not supported on ring %d!\n", | ||
| 359 | p->ring); | ||
| 360 | return -EINVAL; | ||
| 361 | } | ||
| 349 | } | 362 | } |
| 350 | } | 363 | } |
| 351 | 364 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index f00dbbf4d806..356b733caafe 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
| @@ -862,7 +862,7 @@ static void avivo_get_fb_ref_div(unsigned nom, unsigned den, unsigned post_div, | |||
| 862 | unsigned *fb_div, unsigned *ref_div) | 862 | unsigned *fb_div, unsigned *ref_div) |
| 863 | { | 863 | { |
| 864 | /* limit reference * post divider to a maximum */ | 864 | /* limit reference * post divider to a maximum */ |
| 865 | ref_div_max = min(128 / post_div, ref_div_max); | 865 | ref_div_max = max(min(100 / post_div, ref_div_max), 1u); |
| 866 | 866 | ||
| 867 | /* get matching reference and feedback divider */ | 867 | /* get matching reference and feedback divider */ |
| 868 | *ref_div = min(max(DIV_ROUND_CLOSEST(den, post_div), 1u), ref_div_max); | 868 | *ref_div = min(max(DIV_ROUND_CLOSEST(den, post_div), 1u), ref_div_max); |
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index d9ab99f47612..1f426696de36 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c | |||
| @@ -130,10 +130,10 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev, | |||
| 130 | struct list_head *head) | 130 | struct list_head *head) |
| 131 | { | 131 | { |
| 132 | struct radeon_cs_reloc *list; | 132 | struct radeon_cs_reloc *list; |
| 133 | unsigned i, idx, size; | 133 | unsigned i, idx; |
| 134 | 134 | ||
| 135 | size = (radeon_vm_num_pdes(rdev) + 1) * sizeof(struct radeon_cs_reloc); | 135 | list = kmalloc_array(vm->max_pde_used + 1, |
| 136 | list = kmalloc(size, GFP_KERNEL); | 136 | sizeof(struct radeon_cs_reloc), GFP_KERNEL); |
| 137 | if (!list) | 137 | if (!list) |
| 138 | return NULL; | 138 | return NULL; |
| 139 | 139 | ||
