|
@@ -694,24 +694,16 @@ static void cik_sdma_vm_copy_pte(struct amdgpu_ib *ib,
|
|
|
uint64_t pe, uint64_t src,
|
|
|
unsigned count)
|
|
|
{
|
|
|
- while (count) {
|
|
|
- unsigned bytes = count * 8;
|
|
|
- if (bytes > 0x1FFFF8)
|
|
|
- bytes = 0x1FFFF8;
|
|
|
-
|
|
|
- ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_COPY,
|
|
|
- SDMA_WRITE_SUB_OPCODE_LINEAR, 0);
|
|
|
- ib->ptr[ib->length_dw++] = bytes;
|
|
|
- ib->ptr[ib->length_dw++] = 0; /* src/dst endian swap */
|
|
|
- ib->ptr[ib->length_dw++] = lower_32_bits(src);
|
|
|
- ib->ptr[ib->length_dw++] = upper_32_bits(src);
|
|
|
- ib->ptr[ib->length_dw++] = lower_32_bits(pe);
|
|
|
- ib->ptr[ib->length_dw++] = upper_32_bits(pe);
|
|
|
-
|
|
|
- pe += bytes;
|
|
|
- src += bytes;
|
|
|
- count -= bytes / 8;
|
|
|
- }
|
|
|
+ unsigned bytes = count * 8;
|
|
|
+
|
|
|
+ ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_COPY,
|
|
|
+ SDMA_WRITE_SUB_OPCODE_LINEAR, 0);
|
|
|
+ ib->ptr[ib->length_dw++] = bytes;
|
|
|
+ ib->ptr[ib->length_dw++] = 0; /* src/dst endian swap */
|
|
|
+ ib->ptr[ib->length_dw++] = lower_32_bits(src);
|
|
|
+ ib->ptr[ib->length_dw++] = upper_32_bits(src);
|
|
|
+ ib->ptr[ib->length_dw++] = lower_32_bits(pe);
|
|
|
+ ib->ptr[ib->length_dw++] = upper_32_bits(pe);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -755,40 +747,21 @@ static void cik_sdma_vm_write_pte(struct amdgpu_ib *ib, uint64_t pe,
|
|
|
*
|
|
|
* Update the page tables using sDMA (CIK).
|
|
|
*/
|
|
|
-static void cik_sdma_vm_set_pte_pde(struct amdgpu_ib *ib,
|
|
|
- uint64_t pe,
|
|
|
+static void cik_sdma_vm_set_pte_pde(struct amdgpu_ib *ib, uint64_t pe,
|
|
|
uint64_t addr, unsigned count,
|
|
|
uint32_t incr, uint32_t flags)
|
|
|
{
|
|
|
- uint64_t value;
|
|
|
- unsigned ndw;
|
|
|
-
|
|
|
- while (count) {
|
|
|
- ndw = count;
|
|
|
- if (ndw > 0x7FFFF)
|
|
|
- ndw = 0x7FFFF;
|
|
|
-
|
|
|
- if (flags & AMDGPU_PTE_VALID)
|
|
|
- value = addr;
|
|
|
- else
|
|
|
- value = 0;
|
|
|
-
|
|
|
- /* for physically contiguous pages (vram) */
|
|
|
- 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++] = flags; /* mask */
|
|
|
- ib->ptr[ib->length_dw++] = 0;
|
|
|
- ib->ptr[ib->length_dw++] = value; /* value */
|
|
|
- ib->ptr[ib->length_dw++] = upper_32_bits(value);
|
|
|
- ib->ptr[ib->length_dw++] = incr; /* increment size */
|
|
|
- ib->ptr[ib->length_dw++] = 0;
|
|
|
- ib->ptr[ib->length_dw++] = ndw; /* number of entries */
|
|
|
-
|
|
|
- pe += ndw * 8;
|
|
|
- addr += ndw * incr;
|
|
|
- count -= ndw;
|
|
|
- }
|
|
|
+ /* for physically contiguous pages (vram) */
|
|
|
+ ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_GENERATE_PTE_PDE, 0, 0);
|
|
|
+ ib->ptr[ib->length_dw++] = lower_32_bits(pe); /* dst addr */
|
|
|
+ ib->ptr[ib->length_dw++] = upper_32_bits(pe);
|
|
|
+ ib->ptr[ib->length_dw++] = flags; /* mask */
|
|
|
+ ib->ptr[ib->length_dw++] = 0;
|
|
|
+ ib->ptr[ib->length_dw++] = lower_32_bits(addr); /* value */
|
|
|
+ ib->ptr[ib->length_dw++] = upper_32_bits(addr);
|
|
|
+ ib->ptr[ib->length_dw++] = incr; /* increment size */
|
|
|
+ ib->ptr[ib->length_dw++] = 0;
|
|
|
+ ib->ptr[ib->length_dw++] = count; /* number of entries */
|
|
|
}
|
|
|
|
|
|
/**
|