Re: [PATCH 1/5] drm/amdgpu: expand sdma copy_buffer interface with tmz parameter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 20.11.19 um 04:06 schrieb Liu, Aaron:

BR,
Aaron Liu

-----Original Message-----
From: Tuikov, Luben <Luben.Tuikov@xxxxxxx>
Sent: Wednesday, November 20, 2019 7:12 AM
To: Liu, Aaron <Aaron.Liu@xxxxxxx>; amd-gfx@xxxxxxxxxxxxxxxxxxxxx
Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx>; Huang, Ray
<Ray.Huang@xxxxxxx>; Koenig, Christian <Christian.Koenig@xxxxxxx>
Subject: Re: [PATCH 1/5] drm/amdgpu: expand sdma copy_buffer interface
with tmz parameter

I wonder if we really do need yet another function argument, thus increasing
the argument list, or if the "tmz" boolean can/is already a property of the
job/command/ib/etc., and if it can indeed be had from the latter entity...?

Hi Luben,
In fact, I also thought about it. Compared to add this argument to other entities, perhaps it
is more clearly and simply. Another reason is that TMZ is a relatively independent property.

That idea came to my mind as well while reviewing this, but there is one killer argument why we need this:

For correct eviction of encrypted buffers we will want to do a secure copy to a staging area and then an unsecure copy to the final destination.

So you need a secure and an unsecure copy in the same IB (or go the extra hassle to emit two IBs).

Regards,
Christian.


Regards,
Luben

On 2019-11-18 12:18 a.m., Aaron Liu wrote:
This patch expands sdma copy_buffer interface with tmz parameter.

Signed-off-by: Aaron Liu <aaron.liu@xxxxxxx>
Reviewed-by: Christian König <christian.koenig@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h | 5 +++--
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c  | 4 ++--
  drivers/gpu/drm/amd/amdgpu/cik_sdma.c    | 3 ++-
  drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c   | 3 ++-
  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c   | 3 ++-
  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c   | 3 ++-
  drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c   | 3 ++-
  drivers/gpu/drm/amd/amdgpu/si_dma.c      | 3 ++-
  8 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
index 761ff8b..b313465 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
@@ -79,7 +79,8 @@ struct amdgpu_buffer_funcs {
  				 /* dst addr in bytes */
  				 uint64_t dst_offset,
  				 /* number of byte to transfer */
-				 uint32_t byte_count);
+				 uint32_t byte_count,
+				 bool tmz);

  	/* maximum bytes in a single operation */
  	uint32_t	fill_max_bytes;
@@ -97,7 +98,7 @@ struct amdgpu_buffer_funcs {
  				 uint32_t byte_count);
  };

-#define amdgpu_emit_copy_buffer(adev, ib, s, d, b)
(adev)->mman.buffer_funcs->emit_copy_buffer((ib),  (s), (d), (b))
+#define amdgpu_emit_copy_buffer(adev, ib, s, d, b, t)
+(adev)->mman.buffer_funcs->emit_copy_buffer((ib),  (s), (d), (b),
+(t))
  #define amdgpu_emit_fill_buffer(adev, ib, s, d, b)
(adev)->mman.buffer_funcs->emit_fill_buffer((ib), (s), (d), (b))

  struct amdgpu_sdma_instance *
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 339088d..c08c15e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -2022,7 +2022,7 @@ static int amdgpu_map_buffer(struct
ttm_buffer_object *bo,
  	dst_addr = amdgpu_bo_gpu_offset(adev->gart.bo);
  	dst_addr += window * AMDGPU_GTT_MAX_TRANSFER_SIZE * 8;
  	amdgpu_emit_copy_buffer(adev, &job->ibs[0], src_addr,
-				dst_addr, num_bytes);
+				dst_addr, num_bytes, false);

  	amdgpu_ring_pad_ib(ring, &job->ibs[0]);
  	WARN_ON(job->ibs[0].length_dw > num_dw); @@ -2093,7 +2093,7
@@ int
amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,
  		uint32_t cur_size_in_bytes = min(byte_count, max_bytes);

  		amdgpu_emit_copy_buffer(adev, &job->ibs[0], src_offset,
-					dst_offset, cur_size_in_bytes);
+					dst_offset, cur_size_in_bytes, false);

  		src_offset += cur_size_in_bytes;
  		dst_offset += cur_size_in_bytes;
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index c45304f..82cdb8f 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -1313,7 +1313,8 @@ static void cik_sdma_set_irq_funcs(struct
amdgpu_device *adev)  static void cik_sdma_emit_copy_buffer(struct
amdgpu_ib *ib,
  				      uint64_t src_offset,
  				      uint64_t dst_offset,
-				      uint32_t byte_count)
+				      uint32_t byte_count,
+				      bool tmz)
  {
  	ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_COPY,
SDMA_COPY_SUB_OPCODE_LINEAR, 0);
  	ib->ptr[ib->length_dw++] = byte_count; diff --git
a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index a101758..89e8c74 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -1200,7 +1200,8 @@ static void sdma_v2_4_set_irq_funcs(struct
amdgpu_device *adev)  static void sdma_v2_4_emit_copy_buffer(struct
amdgpu_ib *ib,
  				       uint64_t src_offset,
  				       uint64_t dst_offset,
-				       uint32_t byte_count)
+				       uint32_t byte_count,
+				       bool tmz)
  {
  	ib->ptr[ib->length_dw++] = SDMA_PKT_HEADER_OP(SDMA_OP_COPY)
|
  		SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_COPY_LINEAR);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index 5f4e2c6..011fd12 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -1638,7 +1638,8 @@ static void sdma_v3_0_set_irq_funcs(struct
amdgpu_device *adev)  static void sdma_v3_0_emit_copy_buffer(struct
amdgpu_ib *ib,
  				       uint64_t src_offset,
  				       uint64_t dst_offset,
-				       uint32_t byte_count)
+				       uint32_t byte_count,
+				       bool tmz)
  {
  	ib->ptr[ib->length_dw++] = SDMA_PKT_HEADER_OP(SDMA_OP_COPY)
|
  		SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_COPY_LINEAR);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index 45bd538..110449a 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -2338,7 +2338,8 @@ static void sdma_v4_0_set_irq_funcs(struct
amdgpu_device *adev)  static void sdma_v4_0_emit_copy_buffer(struct
amdgpu_ib *ib,
  				       uint64_t src_offset,
  				       uint64_t dst_offset,
-				       uint32_t byte_count)
+				       uint32_t byte_count,
+				       bool tmz)
  {
  	ib->ptr[ib->length_dw++] = SDMA_PKT_HEADER_OP(SDMA_OP_COPY)
|
  		SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_COPY_LINEAR);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
index f4ad299..b6a71a7 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
@@ -1660,7 +1660,8 @@ static void sdma_v5_0_set_irq_funcs(struct
amdgpu_device *adev)  static void sdma_v5_0_emit_copy_buffer(struct
amdgpu_ib *ib,
  				       uint64_t src_offset,
  				       uint64_t dst_offset,
-				       uint32_t byte_count)
+				       uint32_t byte_count,
+				       bool tmz)
  {
  	ib->ptr[ib->length_dw++] = SDMA_PKT_HEADER_OP(SDMA_OP_COPY)
|
  		SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_COPY_LINEAR);
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c
b/drivers/gpu/drm/amd/amdgpu/si_dma.c
index bdda8b4..122df07 100644
--- a/drivers/gpu/drm/amd/amdgpu/si_dma.c
+++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c
@@ -775,7 +775,8 @@ static void si_dma_set_irq_funcs(struct
amdgpu_device *adev)  static void si_dma_emit_copy_buffer(struct
amdgpu_ib *ib,
  				       uint64_t src_offset,
  				       uint64_t dst_offset,
-				       uint32_t byte_count)
+				       uint32_t byte_count,
+				       bool tmz)
  {
  	ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_COPY,
  					      1, 0, 0, byte_count);


_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux