[PATCH 2/6] drm/amdkfd: Make SDMA engine number an ASIC-dependent variable
From: Yong Zhao On Raven there is only one SDMA engine instead of previously assumed two, so we need to adapt our code to this new scenario. Signed-off-by: Yong Zhao Reviewed-by: Felix Kuehling Signed-off-by: Felix Kuehling Acked-by: Alex Deucher --- drivers/gpu/drm/amd/amdkfd/kfd_device.c| 12 + .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 29 +++--- .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 6 ++--- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 + .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 3 +-- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c index 8faa8db..572235c 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c @@ -52,6 +52,7 @@ static const struct kfd_device_info kaveri_device_info = { .supports_cwsr = false, .needs_iommu_device = true, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info carrizo_device_info = { @@ -67,6 +68,7 @@ static const struct kfd_device_info carrizo_device_info = { .supports_cwsr = true, .needs_iommu_device = true, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; #endif @@ -83,6 +85,7 @@ static const struct kfd_device_info hawaii_device_info = { .supports_cwsr = false, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info tonga_device_info = { @@ -97,6 +100,7 @@ static const struct kfd_device_info tonga_device_info = { .supports_cwsr = false, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info tonga_vf_device_info = { @@ -111,6 +115,7 @@ static const struct kfd_device_info tonga_vf_device_info = { .supports_cwsr = false, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info fiji_device_info = { @@ -125,6 +130,7 @@ static const struct kfd_device_info fiji_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info fiji_vf_device_info = { @@ -139,6 +145,7 @@ static const struct kfd_device_info fiji_vf_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; @@ -154,6 +161,7 @@ static const struct kfd_device_info polaris10_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info polaris10_vf_device_info = { @@ -168,6 +176,7 @@ static const struct kfd_device_info polaris10_vf_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info polaris11_device_info = { @@ -182,6 +191,7 @@ static const struct kfd_device_info polaris11_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info vega10_device_info = { @@ -196,6 +206,7 @@ static const struct kfd_device_info vega10_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info vega10_vf_device_info = { @@ -210,6 +221,7 @@ static const struct kfd_device_info vega10_vf_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c index 97c9f10..ace94d6 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c @@ -101,6 +101,17 @@ unsigned int get_pipes_per_mec(struct device_queue_manager *dqm) return dqm->dev->shared_resources.num_pipe_per_mec; } +static unsigned int get_num_sdma_engines(struct device_queue_manager *dqm) +{ + return dqm->dev->device_info->num_sdma_engines; +} + +unsigned int get_num_sdma_queues(struct device_queue_manager *dqm) +{ + return dqm->dev->device_info->num_sdma_engines + * KFD_SDMA_QUEUES_PER_ENGINE; +} + void program_sh_mem_settings(struct device_queue_manager *dqm, struct qcm_process_device *qpd) { @@ -855,7 +866,7 @@ static int
Re: [PATCH 2/6] drm/amdkfd: Make SDMA engine number an ASIC-dependent variable
On Thu, Jul 12, 2018 at 5:24 PM, Felix Kuehling wrote: > From: Yong Zhao > > On Raven there is only one SDMA engine instead of previously assumed two, > so we need to adapt our code to this new scenario. > > Signed-off-by: Yong Zhao > Reviewed-by: Felix Kuehling > Signed-off-by: Felix Kuehling Acked-by: Alex Deucher > --- > drivers/gpu/drm/amd/amdkfd/kfd_device.c| 12 + > .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 29 > +++--- > .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 6 ++--- > drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 + > .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 3 +-- > 5 files changed, 36 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c > b/drivers/gpu/drm/amd/amdkfd/kfd_device.c > index 8faa8db..572235c 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c > @@ -52,6 +52,7 @@ static const struct kfd_device_info kaveri_device_info = { > .supports_cwsr = false, > .needs_iommu_device = true, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info carrizo_device_info = { > @@ -67,6 +68,7 @@ static const struct kfd_device_info carrizo_device_info = { > .supports_cwsr = true, > .needs_iommu_device = true, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > #endif > > @@ -83,6 +85,7 @@ static const struct kfd_device_info hawaii_device_info = { > .supports_cwsr = false, > .needs_iommu_device = false, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info tonga_device_info = { > @@ -97,6 +100,7 @@ static const struct kfd_device_info tonga_device_info = { > .supports_cwsr = false, > .needs_iommu_device = false, > .needs_pci_atomics = true, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info tonga_vf_device_info = { > @@ -111,6 +115,7 @@ static const struct kfd_device_info tonga_vf_device_info > = { > .supports_cwsr = false, > .needs_iommu_device = false, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info fiji_device_info = { > @@ -125,6 +130,7 @@ static const struct kfd_device_info fiji_device_info = { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = true, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info fiji_vf_device_info = { > @@ -139,6 +145,7 @@ static const struct kfd_device_info fiji_vf_device_info = > { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > > @@ -154,6 +161,7 @@ static const struct kfd_device_info polaris10_device_info > = { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = true, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info polaris10_vf_device_info = { > @@ -168,6 +176,7 @@ static const struct kfd_device_info > polaris10_vf_device_info = { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info polaris11_device_info = { > @@ -182,6 +191,7 @@ static const struct kfd_device_info polaris11_device_info > = { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = true, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info vega10_device_info = { > @@ -196,6 +206,7 @@ static const struct kfd_device_info vega10_device_info = { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > static const struct kfd_device_info vega10_vf_device_info = { > @@ -210,6 +221,7 @@ static const struct kfd_device_info vega10_vf_device_info > = { > .supports_cwsr = true, > .needs_iommu_device = false, > .needs_pci_atomics = false, > + .num_sdma_engines = 2, > }; > > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > index 97c9f10..ace94d6 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > @@ -101,6 +101,17 @@ unsigned int get_pipes_per_mec(struct > device_queue_manager *dqm) > return dqm->dev->shared_resources.num_pipe_per_mec; > } > > +static unsigned int get_num_sdma_engines(struct device_queue_manager *dqm) > +{ > + return dqm->dev->device_info->num_sdma_engines; > +} > + > +unsigned int get_num_sdma_queues(struct
[PATCH 2/6] drm/amdkfd: Make SDMA engine number an ASIC-dependent variable
From: Yong Zhao On Raven there is only one SDMA engine instead of previously assumed two, so we need to adapt our code to this new scenario. Signed-off-by: Yong Zhao Reviewed-by: Felix Kuehling Signed-off-by: Felix Kuehling --- drivers/gpu/drm/amd/amdkfd/kfd_device.c| 12 + .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 29 +++--- .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 6 ++--- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 + .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 3 +-- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c index 8faa8db..572235c 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c @@ -52,6 +52,7 @@ static const struct kfd_device_info kaveri_device_info = { .supports_cwsr = false, .needs_iommu_device = true, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info carrizo_device_info = { @@ -67,6 +68,7 @@ static const struct kfd_device_info carrizo_device_info = { .supports_cwsr = true, .needs_iommu_device = true, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; #endif @@ -83,6 +85,7 @@ static const struct kfd_device_info hawaii_device_info = { .supports_cwsr = false, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info tonga_device_info = { @@ -97,6 +100,7 @@ static const struct kfd_device_info tonga_device_info = { .supports_cwsr = false, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info tonga_vf_device_info = { @@ -111,6 +115,7 @@ static const struct kfd_device_info tonga_vf_device_info = { .supports_cwsr = false, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info fiji_device_info = { @@ -125,6 +130,7 @@ static const struct kfd_device_info fiji_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info fiji_vf_device_info = { @@ -139,6 +145,7 @@ static const struct kfd_device_info fiji_vf_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; @@ -154,6 +161,7 @@ static const struct kfd_device_info polaris10_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info polaris10_vf_device_info = { @@ -168,6 +176,7 @@ static const struct kfd_device_info polaris10_vf_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info polaris11_device_info = { @@ -182,6 +191,7 @@ static const struct kfd_device_info polaris11_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = true, + .num_sdma_engines = 2, }; static const struct kfd_device_info vega10_device_info = { @@ -196,6 +206,7 @@ static const struct kfd_device_info vega10_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; static const struct kfd_device_info vega10_vf_device_info = { @@ -210,6 +221,7 @@ static const struct kfd_device_info vega10_vf_device_info = { .supports_cwsr = true, .needs_iommu_device = false, .needs_pci_atomics = false, + .num_sdma_engines = 2, }; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c index 97c9f10..ace94d6 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c @@ -101,6 +101,17 @@ unsigned int get_pipes_per_mec(struct device_queue_manager *dqm) return dqm->dev->shared_resources.num_pipe_per_mec; } +static unsigned int get_num_sdma_engines(struct device_queue_manager *dqm) +{ + return dqm->dev->device_info->num_sdma_engines; +} + +unsigned int get_num_sdma_queues(struct device_queue_manager *dqm) +{ + return dqm->dev->device_info->num_sdma_engines + * KFD_SDMA_QUEUES_PER_ENGINE; +} + void program_sh_mem_settings(struct device_queue_manager *dqm, struct qcm_process_device *qpd) { @@ -855,7 +866,7 @@ static int initialize_nocpsch(struct