Re: [PATCH v3 6/9] drm/amdgpu: add new parameters in v11_struct

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

 




On 30/03/2023 23:25, Alex Deucher wrote:
On Wed, Mar 29, 2023 at 12:05 PM Shashank Sharma
<shashank.sharma@xxxxxxx> wrote:
From: Arvind Yadav <arvind.yadav@xxxxxxx>

This patch:
- adds some new parameters defined for the gfx usermode queues
   use cases in the v11_mqd_struct.
- sets those parametes with the respective allocated gpu context
   space addresses.

Cc: Alex Deucher <alexander.deucher@xxxxxxx>
Cc: Christian Koenig <christian.koenig@xxxxxxx>
Cc: Shashank Sharma <shashank.sharma@xxxxxxx>
Signed-off-by: Arvind Yadav <arvind.yadav@xxxxxxx>
---
  .../drm/amd/amdgpu/amdgpu_userqueue_gfx_v11.c | 21 ++++++++++++++++++-
  drivers/gpu/drm/amd/include/v11_structs.h     | 16 +++++++-------
  2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue_gfx_v11.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue_gfx_v11.c
index 52de96727f98..39e90ea32fcb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue_gfx_v11.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue_gfx_v11.c
@@ -22,6 +22,7 @@
   */
  #include "amdgpu.h"
  #include "amdgpu_userqueue.h"
+#include "v11_structs.h"

  #define AMDGPU_USERQ_PROC_CTX_SZ PAGE_SIZE
  #define AMDGPU_USERQ_GANG_CTX_SZ PAGE_SIZE
@@ -68,6 +69,22 @@ static void amdgpu_userq_gfx_v11_destroy_ctx_space(struct amdgpu_userq_mgr *uq_m
                            &ctx->cpu_ptr);
  }

+static void
+amdgpu_userq_set_ctx_space(struct amdgpu_userq_mgr *uq_mgr,
+                           struct amdgpu_usermode_queue *queue)
+{
+    struct v11_gfx_mqd *mqd = queue->mqd.cpu_ptr;
+
+    mqd->shadow_base_lo = queue->shadow_ctx_gpu_addr & 0xfffffffc;
+    mqd->shadow_base_hi = upper_32_bits(queue->shadow_ctx_gpu_addr);
+
+    mqd->gds_bkup_base_lo = queue->gds_ctx_gpu_addr & 0xfffffffc;
+    mqd->gds_bkup_base_hi = upper_32_bits(queue->gds_ctx_gpu_addr);
+
+    mqd->fw_work_area_base_lo = queue->fw_ctx_gpu_addr & 0xfffffffc;
+    mqd->fw_work_area_base_lo = upper_32_bits(queue->fw_ctx_gpu_addr);
+}
+
  static int
  amdgpu_userq_gfx_v11_mqd_create(struct amdgpu_userq_mgr *uq_mgr, struct amdgpu_usermode_queue *queue)
  {
@@ -104,12 +121,14 @@ amdgpu_userq_gfx_v11_mqd_create(struct amdgpu_userq_mgr *uq_mgr, struct amdgpu_u
      queue->userq_prop.use_doorbell = true;
      queue->userq_prop.mqd_gpu_addr = mqd->gpu_addr;
      r = gfx_v11_mqd->init_mqd(adev, (void *)mqd->cpu_ptr, &queue->userq_prop);
-    amdgpu_bo_unreserve(mqd->obj);
      if (r) {
+        amdgpu_bo_unreserve(mqd->obj);
          DRM_ERROR("Failed to init MQD for queue\n");
          goto free_ctx;
      }

+    amdgpu_userq_set_ctx_space(uq_mgr, queue);
+    amdgpu_bo_unreserve(mqd->obj);
      DRM_DEBUG_DRIVER("MQD for queue %d created\n", queue->queue_id);
      return 0;

diff --git a/drivers/gpu/drm/amd/include/v11_structs.h b/drivers/gpu/drm/amd/include/v11_structs.h
index b8ff7456ae0b..f8008270f813 100644
--- a/drivers/gpu/drm/amd/include/v11_structs.h
+++ b/drivers/gpu/drm/amd/include/v11_structs.h
@@ -25,14 +25,14 @@
  #define V11_STRUCTS_H_

  struct v11_gfx_mqd {
-       uint32_t reserved_0; // offset: 0  (0x0)
-       uint32_t reserved_1; // offset: 1  (0x1)
-       uint32_t reserved_2; // offset: 2  (0x2)
-       uint32_t reserved_3; // offset: 3  (0x3)
-       uint32_t reserved_4; // offset: 4  (0x4)
-       uint32_t reserved_5; // offset: 5  (0x5)
-       uint32_t reserved_6; // offset: 6  (0x6)
-       uint32_t reserved_7; // offset: 7  (0x7)
+       uint32_t shadow_base_lo; // offset: 0  (0x0)
+       uint32_t shadow_base_hi; // offset: 1  (0x1)
+       uint32_t gds_bkup_base_lo; // offset: 2  (0x2)
+       uint32_t gds_bkup_base_hi; // offset: 3  (0x3)
+       uint32_t fw_work_area_base_lo; // offset: 4  (0x4)
+       uint32_t fw_work_area_base_hi; // offset: 5  (0x5)
+       uint32_t shadow_initialized; // offset: 6  (0x6)
+       uint32_t ib_vmid; // offset: 7  (0x7)
         uint32_t reserved_8; // offset: 8  (0x8)
         uint32_t reserved_9; // offset: 9  (0x9)
         uint32_t reserved_10; // offset: 10  (0xA)
We should split this hunk out as a separate patch and upstream it now.

Got it,

- Shashank


Alex

--
2.40.0




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

  Powered by Linux