diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/cik_sdma.c')
-rw-r--r-- | drivers/gpu/drm/radeon/cik_sdma.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c index ec91427094e5..8d84ebe2b6fa 100644 --- a/drivers/gpu/drm/radeon/cik_sdma.c +++ b/drivers/gpu/drm/radeon/cik_sdma.c | |||
@@ -654,13 +654,12 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, | |||
654 | uint64_t addr, unsigned count, | 654 | uint64_t addr, unsigned count, |
655 | uint32_t incr, uint32_t flags) | 655 | uint32_t incr, uint32_t flags) |
656 | { | 656 | { |
657 | uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); | ||
658 | uint64_t value; | 657 | uint64_t value; |
659 | unsigned ndw; | 658 | unsigned ndw; |
660 | 659 | ||
661 | trace_radeon_vm_set_page(pe, addr, count, incr, r600_flags); | 660 | trace_radeon_vm_set_page(pe, addr, count, incr, flags); |
662 | 661 | ||
663 | if (flags & RADEON_VM_PAGE_SYSTEM) { | 662 | if (flags & R600_PTE_SYSTEM) { |
664 | while (count) { | 663 | while (count) { |
665 | ndw = count * 2; | 664 | ndw = count * 2; |
666 | if (ndw > 0xFFFFE) | 665 | if (ndw > 0xFFFFE) |
@@ -672,16 +671,10 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, | |||
672 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); | 671 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); |
673 | ib->ptr[ib->length_dw++] = ndw; | 672 | ib->ptr[ib->length_dw++] = ndw; |
674 | for (; ndw > 0; ndw -= 2, --count, pe += 8) { | 673 | for (; ndw > 0; ndw -= 2, --count, pe += 8) { |
675 | if (flags & RADEON_VM_PAGE_SYSTEM) { | 674 | value = radeon_vm_map_gart(rdev, addr); |
676 | value = radeon_vm_map_gart(rdev, addr); | 675 | value &= 0xFFFFFFFFFFFFF000ULL; |
677 | value &= 0xFFFFFFFFFFFFF000ULL; | ||
678 | } else if (flags & RADEON_VM_PAGE_VALID) { | ||
679 | value = addr; | ||
680 | } else { | ||
681 | value = 0; | ||
682 | } | ||
683 | addr += incr; | 676 | addr += incr; |
684 | value |= r600_flags; | 677 | value |= flags; |
685 | ib->ptr[ib->length_dw++] = value; | 678 | ib->ptr[ib->length_dw++] = value; |
686 | ib->ptr[ib->length_dw++] = upper_32_bits(value); | 679 | ib->ptr[ib->length_dw++] = upper_32_bits(value); |
687 | } | 680 | } |
@@ -692,7 +685,7 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, | |||
692 | if (ndw > 0x7FFFF) | 685 | if (ndw > 0x7FFFF) |
693 | ndw = 0x7FFFF; | 686 | ndw = 0x7FFFF; |
694 | 687 | ||
695 | if (flags & RADEON_VM_PAGE_VALID) | 688 | if (flags & R600_PTE_VALID) |
696 | value = addr; | 689 | value = addr; |
697 | else | 690 | else |
698 | value = 0; | 691 | value = 0; |
@@ -700,7 +693,7 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, | |||
700 | ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_GENERATE_PTE_PDE, 0, 0); | 693 | ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_GENERATE_PTE_PDE, 0, 0); |
701 | ib->ptr[ib->length_dw++] = pe; /* dst addr */ | 694 | ib->ptr[ib->length_dw++] = pe; /* dst addr */ |
702 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); | 695 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); |
703 | ib->ptr[ib->length_dw++] = r600_flags; /* mask */ | 696 | ib->ptr[ib->length_dw++] = flags; /* mask */ |
704 | ib->ptr[ib->length_dw++] = 0; | 697 | ib->ptr[ib->length_dw++] = 0; |
705 | ib->ptr[ib->length_dw++] = value; /* value */ | 698 | ib->ptr[ib->length_dw++] = value; /* value */ |
706 | ib->ptr[ib->length_dw++] = upper_32_bits(value); | 699 | ib->ptr[ib->length_dw++] = upper_32_bits(value); |