]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/amdgpu: simplify padding calculations (v2)
authorLuben Tuikov <luben.tuikov@amd.com>
Thu, 24 Oct 2019 23:30:13 +0000 (19:30 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 23 Dec 2019 19:55:44 +0000 (14:55 -0500)
Simplify padding calculations.

v2: Comment update and spacing.

Signed-off-by: Luben Tuikov <luben.tuikov@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/cik_sdma.c
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c

index b79e8ec4bde29b8e0854a4581e76672727fc07bd..580d3f93d67093ec1925e671d8fea7d2a6f5e2ac 100644 (file)
@@ -228,7 +228,7 @@ static void cik_sdma_ring_emit_ib(struct amdgpu_ring *ring,
        u32 extra_bits = vmid & 0xf;
 
        /* IB packet must end on a 8 DW boundary */
-       cik_sdma_ring_insert_nop(ring, (12 - (lower_32_bits(ring->wptr) & 7)) % 8);
+       cik_sdma_ring_insert_nop(ring, (4 - lower_32_bits(ring->wptr)) & 7);
 
        amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_INDIRECT_BUFFER, 0, extra_bits));
        amdgpu_ring_write(ring, ib->gpu_addr & 0xffffffe0); /* base must be 32 byte aligned */
@@ -811,7 +811,7 @@ static void cik_sdma_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib)
        u32 pad_count;
        int i;
 
-       pad_count = (8 - (ib->length_dw & 0x7)) % 8;
+       pad_count = (-ib->length_dw) & 7;
        for (i = 0; i < pad_count; i++)
                if (sdma && sdma->burst_nop && (i == 0))
                        ib->ptr[ib->length_dw++] =
index 45e1428d42f808e33cc23e6d6d6d89ff62399898..7d509a40076fa021f3724a4258fa779afe005a64 100644 (file)
@@ -255,7 +255,7 @@ static void sdma_v2_4_ring_emit_ib(struct amdgpu_ring *ring,
        unsigned vmid = AMDGPU_JOB_GET_VMID(job);
 
        /* IB packet must end on a 8 DW boundary */
-       sdma_v2_4_ring_insert_nop(ring, (10 - (lower_32_bits(ring->wptr) & 7)) % 8);
+       sdma_v2_4_ring_insert_nop(ring, (2 - lower_32_bits(ring->wptr)) & 7);
 
        amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_INDIRECT) |
                          SDMA_PKT_INDIRECT_HEADER_VMID(vmid & 0xf));
@@ -750,7 +750,7 @@ static void sdma_v2_4_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib
        u32 pad_count;
        int i;
 
-       pad_count = (8 - (ib->length_dw & 0x7)) % 8;
+       pad_count = (-ib->length_dw) & 7;
        for (i = 0; i < pad_count; i++)
                if (sdma && sdma->burst_nop && (i == 0))
                        ib->ptr[ib->length_dw++] =
index 5f0d2469924d38be26fc6877a383fbcacb9bf0a2..b6109a99fc43c4e35d27de930b93756d5c612d8e 100644 (file)
@@ -429,7 +429,7 @@ static void sdma_v3_0_ring_emit_ib(struct amdgpu_ring *ring,
        unsigned vmid = AMDGPU_JOB_GET_VMID(job);
 
        /* IB packet must end on a 8 DW boundary */
-       sdma_v3_0_ring_insert_nop(ring, (10 - (lower_32_bits(ring->wptr) & 7)) % 8);
+       sdma_v3_0_ring_insert_nop(ring, (2 - lower_32_bits(ring->wptr)) & 7);
 
        amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_INDIRECT) |
                          SDMA_PKT_INDIRECT_HEADER_VMID(vmid & 0xf));
@@ -1021,7 +1021,7 @@ static void sdma_v3_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib
        u32 pad_count;
        int i;
 
-       pad_count = (8 - (ib->length_dw & 0x7)) % 8;
+       pad_count = (-ib->length_dw) & 7;
        for (i = 0; i < pad_count; i++)
                if (sdma && sdma->burst_nop && (i == 0))
                        ib->ptr[ib->length_dw++] =
index 492bca89b3e9d5f73a22abcd20709729edb84937..ce0753a9d24140c9d321451ac00f65760020a438 100644 (file)
@@ -698,7 +698,7 @@ static void sdma_v4_0_ring_emit_ib(struct amdgpu_ring *ring,
        unsigned vmid = AMDGPU_JOB_GET_VMID(job);
 
        /* IB packet must end on a 8 DW boundary */
-       sdma_v4_0_ring_insert_nop(ring, (10 - (lower_32_bits(ring->wptr) & 7)) % 8);
+       sdma_v4_0_ring_insert_nop(ring, (2 - lower_32_bits(ring->wptr)) & 7);
 
        amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_INDIRECT) |
                          SDMA_PKT_INDIRECT_HEADER_VMID(vmid & 0xf));
@@ -1579,7 +1579,7 @@ static void sdma_v4_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib
        u32 pad_count;
        int i;
 
-       pad_count = (8 - (ib->length_dw & 0x7)) % 8;
+       pad_count = (-ib->length_dw) & 7;
        for (i = 0; i < pad_count; i++)
                if (sdma && sdma->burst_nop && (i == 0))
                        ib->ptr[ib->length_dw++] =
index 1243cfefa2a5ddf70890b13e9926a2ee0eb46ac4..4c6bf1f8a528e6bfe310c74af34aaff82555ede5 100644 (file)
@@ -382,8 +382,15 @@ static void sdma_v5_0_ring_emit_ib(struct amdgpu_ring *ring,
        unsigned vmid = AMDGPU_JOB_GET_VMID(job);
        uint64_t csa_mc_addr = amdgpu_sdma_get_csa_mc_addr(ring, vmid);
 
-       /* IB packet must end on a 8 DW boundary */
-       sdma_v5_0_ring_insert_nop(ring, (10 - (lower_32_bits(ring->wptr) & 7)) % 8);
+       /* An IB packet must end on a 8 DW boundary--the next dword
+        * must be on a 8-dword boundary. Our IB packet below is 6
+        * dwords long, thus add x number of NOPs, such that, in
+        * modular arithmetic,
+        * wptr + 6 + x = 8k, k >= 0, which in C is,
+        * (wptr + 6 + x) % 8 = 0.
+        * The expression below, is a solution of x.
+        */
+       sdma_v5_0_ring_insert_nop(ring, (2 - lower_32_bits(ring->wptr)) & 7);
 
        amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_INDIRECT) |
                          SDMA_PKT_INDIRECT_HEADER_VMID(vmid & 0xf));
@@ -1076,10 +1083,10 @@ static void sdma_v5_0_vm_set_pte_pde(struct amdgpu_ib *ib,
 }
 
 /**
- * sdma_v5_0_ring_pad_ib - pad the IB to the required number of dw
- *
+ * sdma_v5_0_ring_pad_ib - pad the IB
  * @ib: indirect buffer to fill with padding
  *
+ * Pad the IB with NOPs to a boundary multiple of 8.
  */
 static void sdma_v5_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib)
 {
@@ -1087,7 +1094,7 @@ static void sdma_v5_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib
        u32 pad_count;
        int i;
 
-       pad_count = (8 - (ib->length_dw & 0x7)) % 8;
+       pad_count = (-ib->length_dw) & 0x7;
        for (i = 0; i < pad_count; i++)
                if (sdma && sdma->burst_nop && (i == 0))
                        ib->ptr[ib->length_dw++] =