summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2025-10-10 22:54:49 +0300
committerAlex Deucher <alexander.deucher@amd.com>2025-12-11 01:38:26 +0300
commitc28a1142766f9d80880c556fde4b94c3ad00ac96 (patch)
tree7f0451365fad3b8d8ee8d559e5fa4048d2b3cd72
parentf9f3240018e8f5b68bb791102d4736b5883d8aab (diff)
downloadlinux-c28a1142766f9d80880c556fde4b94c3ad00ac96.tar.xz
drm/amdgpu/sdma: add query for CSA size and alignment
Needed to query the CSA size and alignment for SDMA user queues. Reviewed-by: Prike Liang <Prike.Liang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c12
3 files changed, 31 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
index cb0f8e8a0000..2bf365609775 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
@@ -50,6 +50,11 @@ enum amdgpu_sdma_irq {
#define NUM_SDMA(x) hweight32(x)
+struct amdgpu_sdma_csa_info {
+ u32 size;
+ u32 alignment;
+};
+
struct amdgpu_sdma_funcs {
int (*stop_kernel_queue)(struct amdgpu_ring *ring);
int (*start_kernel_queue)(struct amdgpu_ring *ring);
@@ -139,6 +144,8 @@ struct amdgpu_sdma {
struct list_head reset_callback_list;
bool no_user_submission;
bool disable_uq;
+ void (*get_csa_info)(struct amdgpu_device *adev,
+ struct amdgpu_sdma_csa_info *csa_info);
};
/*
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
index 4996d60751ef..f38c2bdd01e3 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
@@ -1268,6 +1268,17 @@ static void sdma_v6_0_set_ras_funcs(struct amdgpu_device *adev)
}
}
+/* all sizes are in bytes */
+#define SDMA6_CSA_SIZE 32
+#define SDMA6_CSA_ALIGNMENT 4
+
+static void sdma_v6_0_get_csa_info(struct amdgpu_device *adev,
+ struct amdgpu_sdma_csa_info *csa_info)
+{
+ csa_info->size = SDMA6_CSA_SIZE;
+ csa_info->alignment = SDMA6_CSA_ALIGNMENT;
+}
+
static int sdma_v6_0_early_init(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
@@ -1300,6 +1311,7 @@ static int sdma_v6_0_early_init(struct amdgpu_ip_block *ip_block)
sdma_v6_0_set_irq_funcs(adev);
sdma_v6_0_set_mqd_funcs(adev);
sdma_v6_0_set_ras_funcs(adev);
+ adev->sdma.get_csa_info = &sdma_v6_0_get_csa_info;
return 0;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
index 7fee98d37720..d2a09e7a1bc2 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
@@ -1253,6 +1253,17 @@ static void sdma_v7_0_ring_emit_reg_write_reg_wait(struct amdgpu_ring *ring,
amdgpu_ring_emit_reg_wait(ring, reg1, mask, mask);
}
+/* all sizes are in bytes */
+#define SDMA7_CSA_SIZE 32
+#define SDMA7_CSA_ALIGNMENT 4
+
+static void sdma_v7_0_get_csa_info(struct amdgpu_device *adev,
+ struct amdgpu_sdma_csa_info *csa_info)
+{
+ csa_info->size = SDMA7_CSA_SIZE;
+ csa_info->alignment = SDMA7_CSA_ALIGNMENT;
+}
+
static int sdma_v7_0_early_init(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
@@ -1286,6 +1297,7 @@ static int sdma_v7_0_early_init(struct amdgpu_ip_block *ip_block)
sdma_v7_0_set_vm_pte_funcs(adev);
sdma_v7_0_set_irq_funcs(adev);
sdma_v7_0_set_mqd_funcs(adev);
+ adev->sdma.get_csa_info = &sdma_v7_0_get_csa_info;
return 0;
}