diff options
author | Emily Deng <Emily.Deng@amd.com> | 2018-05-29 22:04:25 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-05-30 13:34:06 -0400 |
commit | 01d98506eca24f1a6b67374ffb65c2e62a56e8e7 (patch) | |
tree | 9931f969c24ea1a216454b6b11e04393dc1a9f60 /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |
parent | 20d4ac659c76034586a3ab79489b0940631a65de (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.c | 38 |
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) { |