Commit d5094189 authored by Shaoyun Liu's avatar Shaoyun Liu Committed by Alex Deucher

drm/amdkfd: Make the number of SDMA queues variable

Vega20 supports 8 SDMA queues per engine
Signed-off-by: default avatarShaoyun Liu <Shaoyun.Liu@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a2a8fb51
...@@ -53,6 +53,7 @@ static const struct kfd_device_info kaveri_device_info = { ...@@ -53,6 +53,7 @@ static const struct kfd_device_info kaveri_device_info = {
.needs_iommu_device = true, .needs_iommu_device = true,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info carrizo_device_info = { static const struct kfd_device_info carrizo_device_info = {
...@@ -69,6 +70,7 @@ static const struct kfd_device_info carrizo_device_info = { ...@@ -69,6 +70,7 @@ static const struct kfd_device_info carrizo_device_info = {
.needs_iommu_device = true, .needs_iommu_device = true,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info raven_device_info = { static const struct kfd_device_info raven_device_info = {
...@@ -84,6 +86,7 @@ static const struct kfd_device_info raven_device_info = { ...@@ -84,6 +86,7 @@ static const struct kfd_device_info raven_device_info = {
.needs_iommu_device = true, .needs_iommu_device = true,
.needs_pci_atomics = true, .needs_pci_atomics = true,
.num_sdma_engines = 1, .num_sdma_engines = 1,
.num_sdma_queues_per_engine = 2,
}; };
#endif #endif
...@@ -101,6 +104,7 @@ static const struct kfd_device_info hawaii_device_info = { ...@@ -101,6 +104,7 @@ static const struct kfd_device_info hawaii_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info tonga_device_info = { static const struct kfd_device_info tonga_device_info = {
...@@ -116,6 +120,7 @@ static const struct kfd_device_info tonga_device_info = { ...@@ -116,6 +120,7 @@ static const struct kfd_device_info tonga_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = true, .needs_pci_atomics = true,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info fiji_device_info = { static const struct kfd_device_info fiji_device_info = {
...@@ -131,6 +136,7 @@ static const struct kfd_device_info fiji_device_info = { ...@@ -131,6 +136,7 @@ static const struct kfd_device_info fiji_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = true, .needs_pci_atomics = true,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info fiji_vf_device_info = { static const struct kfd_device_info fiji_vf_device_info = {
...@@ -146,6 +152,7 @@ static const struct kfd_device_info fiji_vf_device_info = { ...@@ -146,6 +152,7 @@ static const struct kfd_device_info fiji_vf_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
...@@ -162,6 +169,7 @@ static const struct kfd_device_info polaris10_device_info = { ...@@ -162,6 +169,7 @@ static const struct kfd_device_info polaris10_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = true, .needs_pci_atomics = true,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info polaris10_vf_device_info = { static const struct kfd_device_info polaris10_vf_device_info = {
...@@ -177,6 +185,7 @@ static const struct kfd_device_info polaris10_vf_device_info = { ...@@ -177,6 +185,7 @@ static const struct kfd_device_info polaris10_vf_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info polaris11_device_info = { static const struct kfd_device_info polaris11_device_info = {
...@@ -192,6 +201,7 @@ static const struct kfd_device_info polaris11_device_info = { ...@@ -192,6 +201,7 @@ static const struct kfd_device_info polaris11_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = true, .needs_pci_atomics = true,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info vega10_device_info = { static const struct kfd_device_info vega10_device_info = {
...@@ -207,6 +217,7 @@ static const struct kfd_device_info vega10_device_info = { ...@@ -207,6 +217,7 @@ static const struct kfd_device_info vega10_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
static const struct kfd_device_info vega10_vf_device_info = { static const struct kfd_device_info vega10_vf_device_info = {
...@@ -222,9 +233,9 @@ static const struct kfd_device_info vega10_vf_device_info = { ...@@ -222,9 +233,9 @@ static const struct kfd_device_info vega10_vf_device_info = {
.needs_iommu_device = false, .needs_iommu_device = false,
.needs_pci_atomics = false, .needs_pci_atomics = false,
.num_sdma_engines = 2, .num_sdma_engines = 2,
.num_sdma_queues_per_engine = 2,
}; };
struct kfd_deviceid { struct kfd_deviceid {
unsigned short did; unsigned short did;
const struct kfd_device_info *device_info; const struct kfd_device_info *device_info;
......
...@@ -109,7 +109,7 @@ static unsigned int get_num_sdma_engines(struct device_queue_manager *dqm) ...@@ -109,7 +109,7 @@ static unsigned int get_num_sdma_engines(struct device_queue_manager *dqm)
unsigned int get_num_sdma_queues(struct device_queue_manager *dqm) unsigned int get_num_sdma_queues(struct device_queue_manager *dqm)
{ {
return dqm->dev->device_info->num_sdma_engines return dqm->dev->device_info->num_sdma_engines
* KFD_SDMA_QUEUES_PER_ENGINE; * dqm->dev->device_info->num_sdma_queues_per_engine;
} }
void program_sh_mem_settings(struct device_queue_manager *dqm, void program_sh_mem_settings(struct device_queue_manager *dqm,
...@@ -1843,7 +1843,9 @@ int dqm_debugfs_hqds(struct seq_file *m, void *data) ...@@ -1843,7 +1843,9 @@ int dqm_debugfs_hqds(struct seq_file *m, void *data)
} }
for (pipe = 0; pipe < get_num_sdma_engines(dqm); pipe++) { for (pipe = 0; pipe < get_num_sdma_engines(dqm); pipe++) {
for (queue = 0; queue < KFD_SDMA_QUEUES_PER_ENGINE; queue++) { for (queue = 0;
queue < dqm->dev->device_info->num_sdma_queues_per_engine;
queue++) {
r = dqm->dev->kfd2kgd->hqd_sdma_dump( r = dqm->dev->kfd2kgd->hqd_sdma_dump(
dqm->dev->kgd, pipe, queue, &dump, &n_regs); dqm->dev->kgd, pipe, queue, &dump, &n_regs);
if (r) if (r)
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#define KFD_UNMAP_LATENCY_MS (4000) #define KFD_UNMAP_LATENCY_MS (4000)
#define QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS (2 * KFD_UNMAP_LATENCY_MS + 1000) #define QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS (2 * KFD_UNMAP_LATENCY_MS + 1000)
#define KFD_SDMA_QUEUES_PER_ENGINE (2)
struct device_process_node { struct device_process_node {
struct qcm_process_device *qpd; struct qcm_process_device *qpd;
......
...@@ -176,6 +176,7 @@ struct kfd_device_info { ...@@ -176,6 +176,7 @@ struct kfd_device_info {
bool needs_iommu_device; bool needs_iommu_device;
bool needs_pci_atomics; bool needs_pci_atomics;
unsigned int num_sdma_engines; unsigned int num_sdma_engines;
unsigned int num_sdma_queues_per_engine;
}; };
struct kfd_mem_obj { struct kfd_mem_obj {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment