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]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c      | 23 ++++++++-----------
 drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h      | 10 +++++++-
 .../gpu/drm/amd/amdgpu/amdgpu_sdma_types.h    |  2 ++
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
index 68a92ce49ac2..687e9863f11f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
@@ -40,6 +40,7 @@
 int amdgpu_sdma_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
                          const char *prefix, unsigned int index)
 {
+       struct amdgpu_sdma_instance *sdma;
        int r;
 
        ring->ring_obj = NULL;
@@ -53,23 +54,17 @@ int amdgpu_sdma_ring_init(struct amdgpu_device *adev, 
struct amdgpu_ring *ring,
        if (r)
                return r;
 
-       return 0;
-}
-
-uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
-                                    unsigned int vmid)
-{
-       struct amdgpu_device *adev = ring->adev;
+       sdma = amdgpu_sdma_get_instance_from_ring(ring);
 
        /* don't enable OS preemption on SDMA under SRIOV */
-       if (amdgpu_sriov_vf(adev) || vmid == 0 || !adev->gfx.mcbp)
-               return 0;
+       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;
 
-       if (ring->me > 31)
-               return 0;
-
-       return amdgpu_csa_vaddr(adev) + AMDGPU_CSA_SDMA_OFFSET +
-              ring->me * AMDGPU_CSA_SDMA_SIZE;
+       return 0;
 }
 
 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 14c67e46515f..0142edba7817 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
@@ -54,7 +54,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