SDMA CSA address is static while the driver is loaded so lets store it in
the SDMA instance allowing us to simplify and inline the
amdgpu_sdma_get_csa_mc_addr() helper.

Signed-off-by: Tvrtko Ursulin <[email protected]>
Cc: Timur Kristóf <[email protected]>
---
v2:
 * Consolildate local init before ring init.
v3:
 * Restore sane init order.
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c      | 36 +++++++++----------
 drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h      | 10 +++++-
 .../gpu/drm/amd/amdgpu/amdgpu_sdma_types.h    |  2 ++
 3 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
index d2fee2480154..d1996c695f77 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
@@ -42,7 +42,9 @@ int __printf(4, 5)
 amdgpu_sdma_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
                      unsigned int instance, const char *fmt, ...)
 {
+       struct amdgpu_sdma_instance *sdma;
        va_list args;
+       int r;
 
        ring->ring_obj = NULL;
 
@@ -50,25 +52,21 @@ amdgpu_sdma_ring_init(struct amdgpu_device *adev, struct 
amdgpu_ring *ring,
        vsnprintf(ring->name, sizeof(ring->name), fmt, args);
        va_end(args);
 
-       return amdgpu_ring_init(adev, ring, 1024, &adev->sdma.trap_irq,
-                               AMDGPU_SDMA_IRQ_INSTANCE0 + instance,
-                               AMDGPU_RING_PRIO_DEFAULT, NULL);
-}
-
-uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
-                                    unsigned int vmid)
-{
-       struct amdgpu_device *adev = ring->adev;
-
-       /* don't enable OS preemption on SDMA under SRIOV */
-       if (amdgpu_sriov_vf(adev) || vmid == 0 || !adev->gfx.mcbp)
-               return 0;
-
-       if (ring->me > 31)
-               return 0;
-
-       return amdgpu_csa_vaddr(adev) + AMDGPU_CSA_SDMA_OFFSET +
-              ring->me * AMDGPU_CSA_SDMA_SIZE;
+       r = amdgpu_ring_init(adev, ring, 1024, &adev->sdma.trap_irq,
+                            AMDGPU_SDMA_IRQ_INSTANCE0 + instance,
+                            AMDGPU_RING_PRIO_DEFAULT, NULL);
+       if (r)
+               return r;
+
+       sdma = amdgpu_sdma_get_instance_from_ring(ring);
+       if (amdgpu_sriov_vf(adev) || !adev->gfx.mcbp)
+               sdma->csa_addr = 0;
+       else
+               sdma->csa_addr = amdgpu_csa_vaddr(adev) +
+                                AMDGPU_CSA_SDMA_OFFSET +
+                                ring->me * AMDGPU_CSA_SDMA_SIZE;
+
+       return r;
 }
 
 int amdgpu_sdma_ras_late_init(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
index 60f7faace0d0..93595520bc13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
@@ -55,7 +55,15 @@ amdgpu_sdma_get_instance_from_ring(struct amdgpu_ring *ring)
        return &ring->adev->sdma.instance[ring->me];
 }
 
-uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring, unsigned vmid);
+static inline uint64_t
+amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring, unsigned vmid)
+{
+       if (vmid == 0)
+               return 0;
+       else
+               return amdgpu_sdma_get_instance_from_ring(ring)->csa_addr;
+}
+
 int amdgpu_sdma_ras_late_init(struct amdgpu_device *adev,
                              struct ras_common_if *ras_block);
 int amdgpu_sdma_process_ras_data_cb(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma_types.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma_types.h
index d6e7a703c2e0..61be3d593d18 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma_types.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma_types.h
@@ -73,6 +73,8 @@ struct amdgpu_sdma_instance {
            uint32_t            xcc_id;
        };
 
+       uint64_t                csa_addr;
+
        struct amdgpu_bo        *sdma_fw_obj;
        uint64_t                sdma_fw_gpu_addr;
        uint32_t                *sdma_fw_ptr;
-- 
2.55.0

Reply via email to