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
