diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-amd/0017-drm-radeon-drop-CP-page-table-updates-cleanup-v2.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-amd/0017-drm-radeon-drop-CP-page-table-updates-cleanup-v2.patch | 676 |
1 files changed, 676 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-amd/0017-drm-radeon-drop-CP-page-table-updates-cleanup-v2.patch b/common/recipes-kernel/linux/linux-amd/0017-drm-radeon-drop-CP-page-table-updates-cleanup-v2.patch new file mode 100644 index 00000000..c0d7af20 --- /dev/null +++ b/common/recipes-kernel/linux/linux-amd/0017-drm-radeon-drop-CP-page-table-updates-cleanup-v2.patch @@ -0,0 +1,676 @@ +From 00110850672bf5b6bb10f7687b39574dbb2acee6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Wed, 30 Oct 2013 11:51:09 -0400 +Subject: [PATCH 17/60] drm/radeon: drop CP page table updates & cleanup v2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The DMA ring seems to be stable now. + +v2: remove pt_ring_index as well + +Signed-off-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/radeon/cik.c | 56 -------------------------- + drivers/gpu/drm/radeon/cik_sdma.c | 21 ++++------ + drivers/gpu/drm/radeon/ni.c | 76 ------------------------------------ + drivers/gpu/drm/radeon/ni_dma.c | 18 ++++----- + drivers/gpu/drm/radeon/radeon.h | 8 +++- + drivers/gpu/drm/radeon/radeon_asic.c | 15 +++---- + drivers/gpu/drm/radeon/radeon_asic.h | 31 ++++++++------- + drivers/gpu/drm/radeon/radeon_gart.c | 29 +++++++++++--- + drivers/gpu/drm/radeon/si.c | 60 ---------------------------- + drivers/gpu/drm/radeon/si_dma.c | 21 ++++------ + 10 files changed, 73 insertions(+), 262 deletions(-) + +diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c +index 54a62cf..e3bec288 100644 +--- a/drivers/gpu/drm/radeon/cik.c ++++ b/drivers/gpu/drm/radeon/cik.c +@@ -4830,62 +4830,6 @@ void cik_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm) + } + } + +-/** +- * cik_vm_set_page - update the page tables using sDMA +- * +- * @rdev: radeon_device pointer +- * @ib: indirect buffer to fill with commands +- * @pe: addr of the page entry +- * @addr: dst addr to write into pe +- * @count: number of page entries to update +- * @incr: increase next addr by incr bytes +- * @flags: access flags +- * +- * Update the page tables using CP or sDMA (CIK). +- */ +-void cik_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags) +-{ +- uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); +- uint64_t value; +- unsigned ndw; +- +- if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) { +- /* CP */ +- while (count) { +- ndw = 2 + count * 2; +- if (ndw > 0x3FFE) +- ndw = 0x3FFE; +- +- ib->ptr[ib->length_dw++] = PACKET3(PACKET3_WRITE_DATA, ndw); +- ib->ptr[ib->length_dw++] = (WRITE_DATA_ENGINE_SEL(0) | +- WRITE_DATA_DST_SEL(1)); +- ib->ptr[ib->length_dw++] = pe; +- ib->ptr[ib->length_dw++] = upper_32_bits(pe); +- for (; ndw > 2; ndw -= 2, --count, pe += 8) { +- if (flags & RADEON_VM_PAGE_SYSTEM) { +- value = radeon_vm_map_gart(rdev, addr); +- value &= 0xFFFFFFFFFFFFF000ULL; +- } else if (flags & RADEON_VM_PAGE_VALID) { +- value = addr; +- } else { +- value = 0; +- } +- addr += incr; +- value |= r600_flags; +- ib->ptr[ib->length_dw++] = value; +- ib->ptr[ib->length_dw++] = upper_32_bits(value); +- } +- } +- } else { +- /* DMA */ +- cik_sdma_vm_set_page(rdev, ib, pe, addr, count, incr, flags); +- } +-} +- + /* + * RLC + * The RLC is a multi-purpose microengine that handles a +diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c +index e73c49e..bbe0bc8 100644 +--- a/drivers/gpu/drm/radeon/cik_sdma.c ++++ b/drivers/gpu/drm/radeon/cik_sdma.c +@@ -639,13 +639,12 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, + uint64_t addr, unsigned count, + uint32_t incr, uint32_t flags) + { +- uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); + uint64_t value; + unsigned ndw; + +- trace_radeon_vm_set_page(pe, addr, count, incr, r600_flags); ++ trace_radeon_vm_set_page(pe, addr, count, incr, flags); + +- if (flags & RADEON_VM_PAGE_SYSTEM) { ++ if (flags & R600_PTE_SYSTEM) { + while (count) { + ndw = count * 2; + if (ndw > 0xFFFFE) +@@ -657,16 +656,10 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, + ib->ptr[ib->length_dw++] = upper_32_bits(pe); + ib->ptr[ib->length_dw++] = ndw; + for (; ndw > 0; ndw -= 2, --count, pe += 8) { +- if (flags & RADEON_VM_PAGE_SYSTEM) { +- value = radeon_vm_map_gart(rdev, addr); +- value &= 0xFFFFFFFFFFFFF000ULL; +- } else if (flags & RADEON_VM_PAGE_VALID) { +- value = addr; +- } else { +- value = 0; +- } ++ value = radeon_vm_map_gart(rdev, addr); ++ value &= 0xFFFFFFFFFFFFF000ULL; + addr += incr; +- value |= r600_flags; ++ value |= flags; + ib->ptr[ib->length_dw++] = value; + ib->ptr[ib->length_dw++] = upper_32_bits(value); + } +@@ -677,7 +670,7 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, + if (ndw > 0x7FFFF) + ndw = 0x7FFFF; + +- if (flags & RADEON_VM_PAGE_VALID) ++ if (flags & R600_PTE_VALID) + value = addr; + else + value = 0; +@@ -685,7 +678,7 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, + ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_GENERATE_PTE_PDE, 0, 0); + ib->ptr[ib->length_dw++] = pe; /* dst addr */ + ib->ptr[ib->length_dw++] = upper_32_bits(pe); +- ib->ptr[ib->length_dw++] = r600_flags; /* mask */ ++ ib->ptr[ib->length_dw++] = flags; /* mask */ + ib->ptr[ib->length_dw++] = 0; + ib->ptr[ib->length_dw++] = value; /* value */ + ib->ptr[ib->length_dw++] = upper_32_bits(value); +diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c +index 474343a..2443d11 100644 +--- a/drivers/gpu/drm/radeon/ni.c ++++ b/drivers/gpu/drm/radeon/ni.c +@@ -174,11 +174,6 @@ extern void evergreen_pcie_gen2_enable(struct radeon_device *rdev); + extern void evergreen_program_aspm(struct radeon_device *rdev); + extern void sumo_rlc_fini(struct radeon_device *rdev); + extern int sumo_rlc_init(struct radeon_device *rdev); +-extern void cayman_dma_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags); + + /* Firmware Names */ + MODULE_FIRMWARE("radeon/BARTS_pfp.bin"); +@@ -2412,77 +2407,6 @@ void cayman_vm_decode_fault(struct radeon_device *rdev, + block, mc_id); + } + +-#define R600_ENTRY_VALID (1 << 0) +-#define R600_PTE_SYSTEM (1 << 1) +-#define R600_PTE_SNOOPED (1 << 2) +-#define R600_PTE_READABLE (1 << 5) +-#define R600_PTE_WRITEABLE (1 << 6) +- +-uint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags) +-{ +- uint32_t r600_flags = 0; +- r600_flags |= (flags & RADEON_VM_PAGE_VALID) ? R600_ENTRY_VALID : 0; +- r600_flags |= (flags & RADEON_VM_PAGE_READABLE) ? R600_PTE_READABLE : 0; +- r600_flags |= (flags & RADEON_VM_PAGE_WRITEABLE) ? R600_PTE_WRITEABLE : 0; +- if (flags & RADEON_VM_PAGE_SYSTEM) { +- r600_flags |= R600_PTE_SYSTEM; +- r600_flags |= (flags & RADEON_VM_PAGE_SNOOPED) ? R600_PTE_SNOOPED : 0; +- } +- return r600_flags; +-} +- +-/** +- * cayman_vm_set_page - update the page tables using the CP +- * +- * @rdev: radeon_device pointer +- * @ib: indirect buffer to fill with commands +- * @pe: addr of the page entry +- * @addr: dst addr to write into pe +- * @count: number of page entries to update +- * @incr: increase next addr by incr bytes +- * @flags: access flags +- * +- * Update the page tables using the CP (cayman/TN). +- */ +-void cayman_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags) +-{ +- uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); +- uint64_t value; +- unsigned ndw; +- +- if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) { +- while (count) { +- ndw = 1 + count * 2; +- if (ndw > 0x3FFF) +- ndw = 0x3FFF; +- +- ib->ptr[ib->length_dw++] = PACKET3(PACKET3_ME_WRITE, ndw); +- ib->ptr[ib->length_dw++] = pe; +- ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; +- for (; ndw > 1; ndw -= 2, --count, pe += 8) { +- if (flags & RADEON_VM_PAGE_SYSTEM) { +- value = radeon_vm_map_gart(rdev, addr); +- value &= 0xFFFFFFFFFFFFF000ULL; +- } else if (flags & RADEON_VM_PAGE_VALID) { +- value = addr; +- } else { +- value = 0; +- } +- addr += incr; +- value |= r600_flags; +- ib->ptr[ib->length_dw++] = value; +- ib->ptr[ib->length_dw++] = upper_32_bits(value); +- } +- } +- } else { +- cayman_dma_vm_set_page(rdev, ib, pe, addr, count, incr, flags); +- } +-} +- + /** + * cayman_vm_flush - vm flush using the CP + * +diff --git a/drivers/gpu/drm/radeon/ni_dma.c b/drivers/gpu/drm/radeon/ni_dma.c +index 599e87b..ddc946b 100644 +--- a/drivers/gpu/drm/radeon/ni_dma.c ++++ b/drivers/gpu/drm/radeon/ni_dma.c +@@ -240,8 +240,7 @@ bool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring) + * @addr: dst addr to write into pe + * @count: number of page entries to update + * @incr: increase next addr by incr bytes +- * @flags: access flags +- * @r600_flags: hw access flags ++ * @flags: hw access flags + * + * Update the page tables using the DMA (cayman/TN). + */ +@@ -251,13 +250,12 @@ void cayman_dma_vm_set_page(struct radeon_device *rdev, + uint64_t addr, unsigned count, + uint32_t incr, uint32_t flags) + { +- uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); + uint64_t value; + unsigned ndw; + +- trace_radeon_vm_set_page(pe, addr, count, incr, r600_flags); ++ trace_radeon_vm_set_page(pe, addr, count, incr, flags); + +- if ((flags & RADEON_VM_PAGE_SYSTEM) || (count == 1)) { ++ if ((flags & R600_PTE_SYSTEM) || (count == 1)) { + while (count) { + ndw = count * 2; + if (ndw > 0xFFFFE) +@@ -268,16 +266,16 @@ void cayman_dma_vm_set_page(struct radeon_device *rdev, + ib->ptr[ib->length_dw++] = pe; + ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; + for (; ndw > 0; ndw -= 2, --count, pe += 8) { +- if (flags & RADEON_VM_PAGE_SYSTEM) { ++ if (flags & R600_PTE_SYSTEM) { + value = radeon_vm_map_gart(rdev, addr); + value &= 0xFFFFFFFFFFFFF000ULL; +- } else if (flags & RADEON_VM_PAGE_VALID) { ++ } else if (flags & R600_PTE_VALID) { + value = addr; + } else { + value = 0; + } + addr += incr; +- value |= r600_flags; ++ value |= flags; + ib->ptr[ib->length_dw++] = value; + ib->ptr[ib->length_dw++] = upper_32_bits(value); + } +@@ -288,7 +286,7 @@ void cayman_dma_vm_set_page(struct radeon_device *rdev, + if (ndw > 0xFFFFE) + ndw = 0xFFFFE; + +- if (flags & RADEON_VM_PAGE_VALID) ++ if (flags & R600_PTE_VALID) + value = addr; + else + value = 0; +@@ -296,7 +294,7 @@ void cayman_dma_vm_set_page(struct radeon_device *rdev, + ib->ptr[ib->length_dw++] = DMA_PTE_PDE_PACKET(ndw); + ib->ptr[ib->length_dw++] = pe; /* dst addr */ + ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; +- ib->ptr[ib->length_dw++] = r600_flags; /* mask */ ++ ib->ptr[ib->length_dw++] = flags; /* mask */ + ib->ptr[ib->length_dw++] = 0; + ib->ptr[ib->length_dw++] = value; /* value */ + ib->ptr[ib->length_dw++] = upper_32_bits(value); +diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h +index 6bc42c6..d478c28 100644 +--- a/drivers/gpu/drm/radeon/radeon.h ++++ b/drivers/gpu/drm/radeon/radeon.h +@@ -846,6 +846,12 @@ struct radeon_mec { + #define RADEON_VM_PTB_ALIGN_MASK (RADEON_VM_PTB_ALIGN_SIZE - 1) + #define RADEON_VM_PTB_ALIGN(a) (((a) + RADEON_VM_PTB_ALIGN_MASK) & ~RADEON_VM_PTB_ALIGN_MASK) + ++#define R600_PTE_VALID (1 << 0) ++#define R600_PTE_SYSTEM (1 << 1) ++#define R600_PTE_SNOOPED (1 << 2) ++#define R600_PTE_READABLE (1 << 5) ++#define R600_PTE_WRITEABLE (1 << 6) ++ + struct radeon_vm { + struct list_head list; + struct list_head va; +@@ -1691,8 +1697,6 @@ struct radeon_asic { + struct { + int (*init)(struct radeon_device *rdev); + void (*fini)(struct radeon_device *rdev); +- +- u32 pt_ring_index; + void (*set_page)(struct radeon_device *rdev, + struct radeon_ib *ib, + uint64_t pe, +diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c +index 5720e66..123adfe 100644 +--- a/drivers/gpu/drm/radeon/radeon_asic.c ++++ b/drivers/gpu/drm/radeon/radeon_asic.c +@@ -1622,8 +1622,7 @@ static struct radeon_asic cayman_asic = { + .vm = { + .init = &cayman_vm_init, + .fini = &cayman_vm_fini, +- .pt_ring_index = R600_RING_TYPE_DMA_INDEX, +- .set_page = &cayman_vm_set_page, ++ .set_page = &cayman_dma_vm_set_page, + }, + .ring = { + [RADEON_RING_TYPE_GFX_INDEX] = &cayman_gfx_ring, +@@ -1723,8 +1722,7 @@ static struct radeon_asic trinity_asic = { + .vm = { + .init = &cayman_vm_init, + .fini = &cayman_vm_fini, +- .pt_ring_index = R600_RING_TYPE_DMA_INDEX, +- .set_page = &cayman_vm_set_page, ++ .set_page = &cayman_dma_vm_set_page, + }, + .ring = { + [RADEON_RING_TYPE_GFX_INDEX] = &cayman_gfx_ring, +@@ -1854,8 +1852,7 @@ static struct radeon_asic si_asic = { + .vm = { + .init = &si_vm_init, + .fini = &si_vm_fini, +- .pt_ring_index = R600_RING_TYPE_DMA_INDEX, +- .set_page = &si_vm_set_page, ++ .set_page = &si_dma_vm_set_page, + }, + .ring = { + [RADEON_RING_TYPE_GFX_INDEX] = &si_gfx_ring, +@@ -2000,8 +1997,7 @@ static struct radeon_asic ci_asic = { + .vm = { + .init = &cik_vm_init, + .fini = &cik_vm_fini, +- .pt_ring_index = R600_RING_TYPE_DMA_INDEX, +- .set_page = &cik_vm_set_page, ++ .set_page = &cik_sdma_vm_set_page, + }, + .ring = { + [RADEON_RING_TYPE_GFX_INDEX] = &ci_gfx_ring, +@@ -2102,8 +2098,7 @@ static struct radeon_asic kv_asic = { + .vm = { + .init = &cik_vm_init, + .fini = &cik_vm_fini, +- .pt_ring_index = R600_RING_TYPE_DMA_INDEX, +- .set_page = &cik_vm_set_page, ++ .set_page = &cik_sdma_vm_set_page, + }, + .ring = { + [RADEON_RING_TYPE_GFX_INDEX] = &ci_gfx_ring, +diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h +index 8588670..8939cb3 100644 +--- a/drivers/gpu/drm/radeon/radeon_asic.h ++++ b/drivers/gpu/drm/radeon/radeon_asic.h +@@ -577,17 +577,18 @@ int cayman_vm_init(struct radeon_device *rdev); + void cayman_vm_fini(struct radeon_device *rdev); + void cayman_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); + uint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags); +-void cayman_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags); + int evergreen_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib); + int evergreen_dma_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib); + void cayman_dma_ring_ib_execute(struct radeon_device *rdev, + struct radeon_ib *ib); + bool cayman_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring); + bool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring); ++void cayman_dma_vm_set_page(struct radeon_device *rdev, ++ struct radeon_ib *ib, ++ uint64_t pe, ++ uint64_t addr, unsigned count, ++ uint32_t incr, uint32_t flags); ++ + void cayman_dma_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); + + int ni_dpm_init(struct radeon_device *rdev); +@@ -649,17 +650,17 @@ int si_irq_set(struct radeon_device *rdev); + int si_irq_process(struct radeon_device *rdev); + int si_vm_init(struct radeon_device *rdev); + void si_vm_fini(struct radeon_device *rdev); +-void si_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags); + void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); + int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib); + int si_copy_dma(struct radeon_device *rdev, + uint64_t src_offset, uint64_t dst_offset, + unsigned num_gpu_pages, + struct radeon_fence **fence); ++void si_dma_vm_set_page(struct radeon_device *rdev, ++ struct radeon_ib *ib, ++ uint64_t pe, ++ uint64_t addr, unsigned count, ++ uint32_t incr, uint32_t flags); + void si_dma_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); + u32 si_get_xclk(struct radeon_device *rdev); + uint64_t si_get_gpu_clock_counter(struct radeon_device *rdev); +@@ -727,11 +728,11 @@ int cik_irq_process(struct radeon_device *rdev); + int cik_vm_init(struct radeon_device *rdev); + void cik_vm_fini(struct radeon_device *rdev); + void cik_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); +-void cik_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags); ++void cik_sdma_vm_set_page(struct radeon_device *rdev, ++ struct radeon_ib *ib, ++ uint64_t pe, ++ uint64_t addr, unsigned count, ++ uint32_t incr, uint32_t flags); + void cik_dma_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); + int cik_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib); + u32 cik_compute_ring_get_rptr(struct radeon_device *rdev, +diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c +index 33bd02e..9ceabdf 100644 +--- a/drivers/gpu/drm/radeon/radeon_gart.c ++++ b/drivers/gpu/drm/radeon/radeon_gart.c +@@ -920,6 +920,26 @@ uint64_t radeon_vm_map_gart(struct radeon_device *rdev, uint64_t addr) + } + + /** ++ * radeon_vm_page_flags - translate page flags to what the hw uses ++ * ++ * @flags: flags comming from userspace ++ * ++ * Translate the flags the userspace ABI uses to hw flags. ++ */ ++static uint32_t radeon_vm_page_flags(uint32_t flags) ++{ ++ uint32_t hw_flags = 0; ++ hw_flags |= (flags & RADEON_VM_PAGE_VALID) ? R600_PTE_VALID : 0; ++ hw_flags |= (flags & RADEON_VM_PAGE_READABLE) ? R600_PTE_READABLE : 0; ++ hw_flags |= (flags & RADEON_VM_PAGE_WRITEABLE) ? R600_PTE_WRITEABLE : 0; ++ if (flags & RADEON_VM_PAGE_SYSTEM) { ++ hw_flags |= R600_PTE_SYSTEM; ++ hw_flags |= (flags & RADEON_VM_PAGE_SNOOPED) ? R600_PTE_SNOOPED : 0; ++ } ++ return hw_flags; ++} ++ ++/** + * radeon_vm_update_pdes - make sure that page directory is valid + * + * @rdev: radeon_device pointer +@@ -980,7 +1000,7 @@ retry: + if (count) { + radeon_asic_vm_set_page(rdev, ib, last_pde, + last_pt, count, incr, +- RADEON_VM_PAGE_VALID); ++ R600_PTE_VALID); + } + + count = 1; +@@ -993,7 +1013,7 @@ retry: + + if (count) { + radeon_asic_vm_set_page(rdev, ib, last_pde, last_pt, count, +- incr, RADEON_VM_PAGE_VALID); ++ incr, R600_PTE_VALID); + + } + +@@ -1088,7 +1108,6 @@ int radeon_vm_bo_update(struct radeon_device *rdev, + struct radeon_bo *bo, + struct ttm_mem_reg *mem) + { +- unsigned ridx = rdev->asic->vm.pt_ring_index; + struct radeon_ib ib; + struct radeon_bo_va *bo_va; + unsigned nptes, npdes, ndw; +@@ -1163,7 +1182,7 @@ int radeon_vm_bo_update(struct radeon_device *rdev, + if (ndw > 0xfffff) + return -ENOMEM; + +- r = radeon_ib_get(rdev, ridx, &ib, NULL, ndw * 4); ++ r = radeon_ib_get(rdev, R600_RING_TYPE_DMA_INDEX, &ib, NULL, ndw * 4); + if (r) + return r; + ib.length_dw = 0; +@@ -1175,7 +1194,7 @@ int radeon_vm_bo_update(struct radeon_device *rdev, + } + + radeon_vm_update_ptes(rdev, vm, &ib, bo_va->soffset, bo_va->eoffset, +- addr, bo_va->flags); ++ addr, radeon_vm_page_flags(bo_va->flags)); + + radeon_semaphore_sync_to(ib.semaphore, vm->fence); + r = radeon_ib_schedule(rdev, &ib, NULL); +diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c +index 50482e7..8a0bc79 100644 +--- a/drivers/gpu/drm/radeon/si.c ++++ b/drivers/gpu/drm/radeon/si.c +@@ -83,11 +83,6 @@ extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_ + extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev); + extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev); + extern bool evergreen_is_display_hung(struct radeon_device *rdev); +-extern void si_dma_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags); + static void si_enable_gui_idle_interrupt(struct radeon_device *rdev, + bool enable); + static void si_fini_pg(struct radeon_device *rdev); +@@ -4696,61 +4691,6 @@ static void si_vm_decode_fault(struct radeon_device *rdev, + block, mc_id); + } + +-/** +- * si_vm_set_page - update the page tables using the CP +- * +- * @rdev: radeon_device pointer +- * @ib: indirect buffer to fill with commands +- * @pe: addr of the page entry +- * @addr: dst addr to write into pe +- * @count: number of page entries to update +- * @incr: increase next addr by incr bytes +- * @flags: access flags +- * +- * Update the page tables using the CP (SI). +- */ +-void si_vm_set_page(struct radeon_device *rdev, +- struct radeon_ib *ib, +- uint64_t pe, +- uint64_t addr, unsigned count, +- uint32_t incr, uint32_t flags) +-{ +- uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); +- uint64_t value; +- unsigned ndw; +- +- if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) { +- while (count) { +- ndw = 2 + count * 2; +- if (ndw > 0x3FFE) +- ndw = 0x3FFE; +- +- ib->ptr[ib->length_dw++] = PACKET3(PACKET3_WRITE_DATA, ndw); +- ib->ptr[ib->length_dw++] = (WRITE_DATA_ENGINE_SEL(0) | +- WRITE_DATA_DST_SEL(1)); +- ib->ptr[ib->length_dw++] = pe; +- ib->ptr[ib->length_dw++] = upper_32_bits(pe); +- for (; ndw > 2; ndw -= 2, --count, pe += 8) { +- if (flags & RADEON_VM_PAGE_SYSTEM) { +- value = radeon_vm_map_gart(rdev, addr); +- value &= 0xFFFFFFFFFFFFF000ULL; +- } else if (flags & RADEON_VM_PAGE_VALID) { +- value = addr; +- } else { +- value = 0; +- } +- addr += incr; +- value |= r600_flags; +- ib->ptr[ib->length_dw++] = value; +- ib->ptr[ib->length_dw++] = upper_32_bits(value); +- } +- } +- } else { +- /* DMA */ +- si_dma_vm_set_page(rdev, ib, pe, addr, count, incr, flags); +- } +-} +- + void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm) + { + struct radeon_ring *ring = &rdev->ring[ridx]; +diff --git a/drivers/gpu/drm/radeon/si_dma.c b/drivers/gpu/drm/radeon/si_dma.c +index 97af34c..59be2cf 100644 +--- a/drivers/gpu/drm/radeon/si_dma.c ++++ b/drivers/gpu/drm/radeon/si_dma.c +@@ -76,13 +76,12 @@ void si_dma_vm_set_page(struct radeon_device *rdev, + uint64_t addr, unsigned count, + uint32_t incr, uint32_t flags) + { +- uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); + uint64_t value; + unsigned ndw; + +- trace_radeon_vm_set_page(pe, addr, count, incr, r600_flags); ++ trace_radeon_vm_set_page(pe, addr, count, incr, flags); + +- if (flags & RADEON_VM_PAGE_SYSTEM) { ++ if (flags & R600_PTE_SYSTEM) { + while (count) { + ndw = count * 2; + if (ndw > 0xFFFFE) +@@ -93,16 +92,10 @@ void si_dma_vm_set_page(struct radeon_device *rdev, + ib->ptr[ib->length_dw++] = pe; + ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; + for (; ndw > 0; ndw -= 2, --count, pe += 8) { +- if (flags & RADEON_VM_PAGE_SYSTEM) { +- value = radeon_vm_map_gart(rdev, addr); +- value &= 0xFFFFFFFFFFFFF000ULL; +- } else if (flags & RADEON_VM_PAGE_VALID) { +- value = addr; +- } else { +- value = 0; +- } ++ value = radeon_vm_map_gart(rdev, addr); ++ value &= 0xFFFFFFFFFFFFF000ULL; + addr += incr; +- value |= r600_flags; ++ value |= flags; + ib->ptr[ib->length_dw++] = value; + ib->ptr[ib->length_dw++] = upper_32_bits(value); + } +@@ -113,7 +106,7 @@ void si_dma_vm_set_page(struct radeon_device *rdev, + if (ndw > 0xFFFFE) + ndw = 0xFFFFE; + +- if (flags & RADEON_VM_PAGE_VALID) ++ if (flags & R600_PTE_VALID) + value = addr; + else + value = 0; +@@ -121,7 +114,7 @@ void si_dma_vm_set_page(struct radeon_device *rdev, + ib->ptr[ib->length_dw++] = DMA_PTE_PDE_PACKET(ndw); + ib->ptr[ib->length_dw++] = pe; /* dst addr */ + ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; +- ib->ptr[ib->length_dw++] = r600_flags; /* mask */ ++ ib->ptr[ib->length_dw++] = flags; /* mask */ + ib->ptr[ib->length_dw++] = 0; + ib->ptr[ib->length_dw++] = value; /* value */ + ib->ptr[ib->length_dw++] = upper_32_bits(value); +-- +1.9.1 + |