aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
diff options
context:
space:
mode:
authorEmily Deng <Emily.Deng@amd.com>2018-05-29 22:04:25 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-05-30 13:34:06 -0400
commit01d98506eca24f1a6b67374ffb65c2e62a56e8e7 (patch)
tree9931f969c24ea1a216454b6b11e04393dc1a9f60 /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
parent20d4ac659c76034586a3ab79489b0940631a65de (diff)
drm/amdgpu: To get gds, gws and oa from adev->gds (v2)
As now enabled per vm bo feature, the user mode driver won't supply the bo_list generally, for this case, the gdb_base, gds_size, gws_base, gws_size and oa_base, oa_size won't be set. v2: fix warning (Chunming) Signed-off-by: Emily Deng <Emily.Deng@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 9c1d491d742e..82312a7bc6ad 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -522,6 +522,9 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
522 struct amdgpu_bo_list_entry *e; 522 struct amdgpu_bo_list_entry *e;
523 struct list_head duplicates; 523 struct list_head duplicates;
524 unsigned i, tries = 10; 524 unsigned i, tries = 10;
525 struct amdgpu_bo *gds;
526 struct amdgpu_bo *gws;
527 struct amdgpu_bo *oa;
525 int r; 528 int r;
526 529
527 INIT_LIST_HEAD(&p->validated); 530 INIT_LIST_HEAD(&p->validated);
@@ -652,31 +655,36 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
652 655
653 amdgpu_cs_report_moved_bytes(p->adev, p->bytes_moved, 656 amdgpu_cs_report_moved_bytes(p->adev, p->bytes_moved,
654 p->bytes_moved_vis); 657 p->bytes_moved_vis);
658
655 if (p->bo_list) { 659 if (p->bo_list) {
656 struct amdgpu_bo *gds = p->bo_list->gds_obj;
657 struct amdgpu_bo *gws = p->bo_list->gws_obj;
658 struct amdgpu_bo *oa = p->bo_list->oa_obj;
659 struct amdgpu_vm *vm = &fpriv->vm; 660 struct amdgpu_vm *vm = &fpriv->vm;
660 unsigned i; 661 unsigned i;
661 662
663 gds = p->bo_list->gds_obj;
664 gws = p->bo_list->gws_obj;
665 oa = p->bo_list->oa_obj;
662 for (i = 0; i < p->bo_list->num_entries; i++) { 666 for (i = 0; i < p->bo_list->num_entries; i++) {
663 struct amdgpu_bo *bo = p->bo_list->array[i].robj; 667 struct amdgpu_bo *bo = p->bo_list->array[i].robj;
664 668
665 p->bo_list->array[i].bo_va = amdgpu_vm_bo_find(vm, bo); 669 p->bo_list->array[i].bo_va = amdgpu_vm_bo_find(vm, bo);
666 } 670 }
671 } else {
672 gds = p->adev->gds.gds_gfx_bo;
673 gws = p->adev->gds.gws_gfx_bo;
674 oa = p->adev->gds.oa_gfx_bo;
675 }
667 676
668 if (gds) { 677 if (gds) {
669 p->job->gds_base = amdgpu_bo_gpu_offset(gds); 678 p->job->gds_base = amdgpu_bo_gpu_offset(gds);
670 p->job->gds_size = amdgpu_bo_size(gds); 679 p->job->gds_size = amdgpu_bo_size(gds);
671 } 680 }
672 if (gws) { 681 if (gws) {
673 p->job->gws_base = amdgpu_bo_gpu_offset(gws); 682 p->job->gws_base = amdgpu_bo_gpu_offset(gws);
674 p->job->gws_size = amdgpu_bo_size(gws); 683 p->job->gws_size = amdgpu_bo_size(gws);
675 } 684 }
676 if (oa) { 685 if (oa) {
677 p->job->oa_base = amdgpu_bo_gpu_offset(oa); 686 p->job->oa_base = amdgpu_bo_gpu_offset(oa);
678 p->job->oa_size = amdgpu_bo_size(oa); 687 p->job->oa_size = amdgpu_bo_size(oa);
679 }
680 } 688 }
681 689
682 if (!r && p->uf_entry.robj) { 690 if (!r && p->uf_entry.robj) {