* [PATCH 1/4] drm/amdkfd: replace asic_name with amdgpu_asic_name
@ 2021-11-19 16:27 Graham Sider
2021-11-19 16:27 ` [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function Graham Sider
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Graham Sider @ 2021-11-19 16:27 UTC (permalink / raw)
To: amd-gfx; +Cc: Felix.Kuehling, Graham Sider
device_info->asic_name and amdgpu_asic_name[adev->asic_type] both
provide asic name strings, with the only difference being casing.
Propose to remove asic_name from device_info and replace sysfs entry
with amdgpu_asic_name[].
Signed-off-by: Graham Sider <Graham.Sider@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_device.c | 29 -----------------------
drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 -
drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 2 +-
3 files changed, 1 insertion(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index e1294fba0c26..e11fc4e20c32 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -55,7 +55,6 @@ extern const struct kfd2kgd_calls gfx_v10_3_kfd2kgd;
#ifdef KFD_SUPPORT_IOMMU_V2
static const struct kfd_device_info kaveri_device_info = {
- .asic_name = "kaveri",
.gfx_target_version = 70000,
.max_pasid_bits = 16,
/* max num of queues for KV.TODO should be a dynamic value */
@@ -72,7 +71,6 @@ static const struct kfd_device_info kaveri_device_info = {
};
static const struct kfd_device_info carrizo_device_info = {
- .asic_name = "carrizo",
.gfx_target_version = 80001,
.max_pasid_bits = 16,
/* max num of queues for CZ.TODO should be a dynamic value */
@@ -89,7 +87,6 @@ static const struct kfd_device_info carrizo_device_info = {
};
static const struct kfd_device_info raven_device_info = {
- .asic_name = "raven",
.gfx_target_version = 90002,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -107,7 +104,6 @@ static const struct kfd_device_info raven_device_info = {
#ifdef CONFIG_DRM_AMDGPU_CIK
static const struct kfd_device_info hawaii_device_info = {
- .asic_name = "hawaii",
.gfx_target_version = 70001,
.max_pasid_bits = 16,
/* max num of queues for KV.TODO should be a dynamic value */
@@ -125,7 +121,6 @@ static const struct kfd_device_info hawaii_device_info = {
#endif
static const struct kfd_device_info tonga_device_info = {
- .asic_name = "tonga",
.gfx_target_version = 80002,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -141,7 +136,6 @@ static const struct kfd_device_info tonga_device_info = {
};
static const struct kfd_device_info fiji_device_info = {
- .asic_name = "fiji",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -157,7 +151,6 @@ static const struct kfd_device_info fiji_device_info = {
};
static const struct kfd_device_info fiji_vf_device_info = {
- .asic_name = "fiji",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -174,7 +167,6 @@ static const struct kfd_device_info fiji_vf_device_info = {
static const struct kfd_device_info polaris10_device_info = {
- .asic_name = "polaris10",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -190,7 +182,6 @@ static const struct kfd_device_info polaris10_device_info = {
};
static const struct kfd_device_info polaris10_vf_device_info = {
- .asic_name = "polaris10",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -206,7 +197,6 @@ static const struct kfd_device_info polaris10_vf_device_info = {
};
static const struct kfd_device_info polaris11_device_info = {
- .asic_name = "polaris11",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -222,7 +212,6 @@ static const struct kfd_device_info polaris11_device_info = {
};
static const struct kfd_device_info polaris12_device_info = {
- .asic_name = "polaris12",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -238,7 +227,6 @@ static const struct kfd_device_info polaris12_device_info = {
};
static const struct kfd_device_info vegam_device_info = {
- .asic_name = "vegam",
.gfx_target_version = 80003,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -254,7 +242,6 @@ static const struct kfd_device_info vegam_device_info = {
};
static const struct kfd_device_info vega10_device_info = {
- .asic_name = "vega10",
.gfx_target_version = 90000,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -270,7 +257,6 @@ static const struct kfd_device_info vega10_device_info = {
};
static const struct kfd_device_info vega10_vf_device_info = {
- .asic_name = "vega10",
.gfx_target_version = 90000,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -286,7 +272,6 @@ static const struct kfd_device_info vega10_vf_device_info = {
};
static const struct kfd_device_info vega12_device_info = {
- .asic_name = "vega12",
.gfx_target_version = 90004,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -302,7 +287,6 @@ static const struct kfd_device_info vega12_device_info = {
};
static const struct kfd_device_info vega20_device_info = {
- .asic_name = "vega20",
.gfx_target_version = 90006,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -318,7 +302,6 @@ static const struct kfd_device_info vega20_device_info = {
};
static const struct kfd_device_info arcturus_device_info = {
- .asic_name = "arcturus",
.gfx_target_version = 90008,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -334,7 +317,6 @@ static const struct kfd_device_info arcturus_device_info = {
};
static const struct kfd_device_info aldebaran_device_info = {
- .asic_name = "aldebaran",
.gfx_target_version = 90010,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -350,7 +332,6 @@ static const struct kfd_device_info aldebaran_device_info = {
};
static const struct kfd_device_info renoir_device_info = {
- .asic_name = "renoir",
.gfx_target_version = 90012,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -366,7 +347,6 @@ static const struct kfd_device_info renoir_device_info = {
};
static const struct kfd_device_info navi10_device_info = {
- .asic_name = "navi10",
.gfx_target_version = 100100,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -383,7 +363,6 @@ static const struct kfd_device_info navi10_device_info = {
};
static const struct kfd_device_info navi12_device_info = {
- .asic_name = "navi12",
.gfx_target_version = 100101,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -400,7 +379,6 @@ static const struct kfd_device_info navi12_device_info = {
};
static const struct kfd_device_info navi14_device_info = {
- .asic_name = "navi14",
.gfx_target_version = 100102,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -417,7 +395,6 @@ static const struct kfd_device_info navi14_device_info = {
};
static const struct kfd_device_info sienna_cichlid_device_info = {
- .asic_name = "sienna_cichlid",
.gfx_target_version = 100300,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -434,7 +411,6 @@ static const struct kfd_device_info sienna_cichlid_device_info = {
};
static const struct kfd_device_info navy_flounder_device_info = {
- .asic_name = "navy_flounder",
.gfx_target_version = 100301,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -451,7 +427,6 @@ static const struct kfd_device_info navy_flounder_device_info = {
};
static const struct kfd_device_info vangogh_device_info = {
- .asic_name = "vangogh",
.gfx_target_version = 100303,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -468,7 +443,6 @@ static const struct kfd_device_info vangogh_device_info = {
};
static const struct kfd_device_info dimgrey_cavefish_device_info = {
- .asic_name = "dimgrey_cavefish",
.gfx_target_version = 100302,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -485,7 +459,6 @@ static const struct kfd_device_info dimgrey_cavefish_device_info = {
};
static const struct kfd_device_info beige_goby_device_info = {
- .asic_name = "beige_goby",
.gfx_target_version = 100304,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -502,7 +475,6 @@ static const struct kfd_device_info beige_goby_device_info = {
};
static const struct kfd_device_info yellow_carp_device_info = {
- .asic_name = "yellow_carp",
.gfx_target_version = 100305,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
@@ -519,7 +491,6 @@ static const struct kfd_device_info yellow_carp_device_info = {
};
static const struct kfd_device_info cyan_skillfish_device_info = {
- .asic_name = "cyan_skillfish",
.gfx_target_version = 100103,
.max_pasid_bits = 16,
.max_no_of_hqd = 24,
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 1054fedd7b3c..3e11febee7c6 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -195,7 +195,6 @@ struct kfd_event_interrupt_class {
};
struct kfd_device_info {
- const char *asic_name;
uint32_t gfx_target_version;
const struct kfd_event_interrupt_class *event_interrupt_class;
unsigned int max_pasid_bits;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 2d44b26b6657..d2bb35f1c58f 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -1370,7 +1370,7 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
amdgpu_amdkfd_get_cu_info(dev->gpu->adev, &cu_info);
- strncpy(dev->node_props.name, gpu->device_info->asic_name,
+ strncpy(dev->node_props.name, amdgpu_asic_name[gpu->adev->asic_type],
KFD_TOPOLOGY_PUBLIC_NAME_SIZE);
dev->node_props.simd_arrays_per_engine =
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function
2021-11-19 16:27 [PATCH 1/4] drm/amdkfd: replace asic_name with amdgpu_asic_name Graham Sider
@ 2021-11-19 16:27 ` Graham Sider
2021-11-19 18:54 ` Alex Deucher
2021-11-19 16:27 ` [PATCH 3/4] drm/amdkfd: move to dynamic device_info creation Graham Sider
2021-11-19 16:28 ` [PATCH 4/4] drm/amdkfd: remove hardcoded device_info structs Graham Sider
2 siblings, 1 reply; 7+ messages in thread
From: Graham Sider @ 2021-11-19 16:27 UTC (permalink / raw)
To: amd-gfx; +Cc: Felix.Kuehling, Graham Sider
Initializes device_info structs given either asic_type (enum) if GFX
version is less than GFX9, or GC IP version if greater. Also takes in vf
and the target compiler gfx version.
Inclusion/exclusion to certain conditions for certain GC IP versions may
be necessary on npi bringup on a case-by-case basis, but for the most
part should be minimal (e.g. adding one || asic_version == IP_VERSION(X ,X, X) case).
Signed-off-by: Graham Sider <Graham.Sider@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_device.c | 58 +++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index e11fc4e20c32..23e35a466cf0 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -511,6 +511,64 @@ static void kfd_gtt_sa_fini(struct kfd_dev *kfd);
static int kfd_resume(struct kfd_dev *kfd);
+static void kfd_device_info_init(struct kfd_device_info *device_info,
+ uint32_t asic_version, bool is_soc15, bool vf,
+ uint32_t gfx_target_version)
+{
+ device_info->max_pasid_bits = 16;
+ device_info->max_no_of_hqd = 24;
+ device_info->num_of_watch_points = 4;
+ device_info->mqd_size_aligned = MQD_SIZE_ALIGNED;
+ device_info->gfx_target_version = gfx_target_version;
+
+ if (is_soc15) {
+ device_info->doorbell_size = 8;
+ device_info->ih_ring_entry_size = 8 * sizeof(uint32_t);
+ device_info->event_interrupt_class = &event_interrupt_class_v9;
+ device_info->supports_cwsr = true;
+
+ if ((asic_version >= IP_VERSION(9, 0, 1) &&
+ asic_version <= IP_VERSION(9, 3, 0)) ||
+ asic_version == IP_VERSION(10, 3, 1) ||
+ asic_version == IP_VERSION(10, 3, 3))
+ device_info->num_sdma_queues_per_engine = 2;
+ else
+ device_info->num_sdma_queues_per_engine = 8;
+
+ // Navi2x+, Navi1x+
+ if (asic_version >= IP_VERSION(10, 3, 0))
+ device_info->no_atomic_fw_version = 145;
+ else if (asic_version >= IP_VERSION(10, 1, 1))
+ device_info->no_atomic_fw_version = 92;
+
+ // Raven
+ if (asic_version == IP_VERSION(9, 1, 0) ||
+ asic_version == IP_VERSION(9, 2, 2))
+ device_info->needs_iommu_device = true;
+
+ // Navi1x+
+ if (asic_version >= IP_VERSION(10, 1, 1))
+ device_info->needs_pci_atomics = true;
+ } else {
+ device_info->doorbell_size = 4;
+ device_info->ih_ring_entry_size = 4 * sizeof(uint32_t);
+ device_info->event_interrupt_class = &event_interrupt_class_cik;
+ device_info->num_sdma_queues_per_engine = 2;
+
+ if (asic_version != CHIP_KAVERI &&
+ asic_version != CHIP_HAWAII &&
+ asic_version != CHIP_TONGA)
+ device_info->supports_cwsr = true;
+
+ if (asic_version == CHIP_KAVERI ||
+ asic_version == CHIP_CARRIZO)
+ device_info->needs_iommu_device = true;
+
+ if (asic_version != CHIP_HAWAII && !vf)
+ device_info->needs_pci_atomics = true;
+ }
+}
+
struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
{
struct kfd_dev *kfd;
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/4] drm/amdkfd: move to dynamic device_info creation
2021-11-19 16:27 [PATCH 1/4] drm/amdkfd: replace asic_name with amdgpu_asic_name Graham Sider
2021-11-19 16:27 ` [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function Graham Sider
@ 2021-11-19 16:27 ` Graham Sider
2021-11-19 16:28 ` [PATCH 4/4] drm/amdkfd: remove hardcoded device_info structs Graham Sider
2 siblings, 0 replies; 7+ messages in thread
From: Graham Sider @ 2021-11-19 16:27 UTC (permalink / raw)
To: amd-gfx; +Cc: Felix.Kuehling, Graham Sider
Change unsupported asic condition to only probe f2g, move device_info
initialization post-switch and map to heap.
Signed-off-by: Graham Sider <Graham.Sider@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_device.c | 190 ++++++++++--------------
drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 +-
2 files changed, 83 insertions(+), 109 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 23e35a466cf0..65e0eb5e2926 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -571,200 +571,170 @@ static void kfd_device_info_init(struct kfd_device_info *device_info,
struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
{
- struct kfd_dev *kfd;
- const struct kfd_device_info *device_info;
- const struct kfd2kgd_calls *f2g;
+ struct kfd_dev *kfd = NULL;
+ struct kfd_device_info *device_info = NULL;
+ const struct kfd2kgd_calls *f2g = NULL;
struct pci_dev *pdev = adev->pdev;
+ uint32_t gc_version = adev->ip_versions[GC_HWIP][0];
+ uint32_t is_soc15 = gc_version >= IP_VERSION(9, 0, 1);
+ uint32_t gfx_target_version = 0;
+
switch (adev->asic_type) {
#ifdef KFD_SUPPORT_IOMMU_V2
#ifdef CONFIG_DRM_AMDGPU_CIK
case CHIP_KAVERI:
- if (vf)
- device_info = NULL;
- else
- device_info = &kaveri_device_info;
- f2g = &gfx_v7_kfd2kgd;
+ gfx_target_version = 70000;
+ if (!vf)
+ f2g = &gfx_v7_kfd2kgd;
break;
#endif
case CHIP_CARRIZO:
- if (vf)
- device_info = NULL;
- else
- device_info = &carrizo_device_info;
- f2g = &gfx_v8_kfd2kgd;
+ gfx_target_version = 80001;
+ if (!vf)
+ f2g = &gfx_v8_kfd2kgd;
break;
#endif
#ifdef CONFIG_DRM_AMDGPU_CIK
case CHIP_HAWAII:
- if (vf)
- device_info = NULL;
- else
- device_info = &hawaii_device_info;
- f2g = &gfx_v7_kfd2kgd;
+ gfx_target_version = 70001;
+ if (!vf)
+ f2g = &gfx_v7_kfd2kgd;
break;
#endif
case CHIP_TONGA:
- if (vf)
- device_info = NULL;
- else
- device_info = &tonga_device_info;
- f2g = &gfx_v8_kfd2kgd;
+ gfx_target_version = 80002;
+ if (!vf)
+ f2g = &gfx_v8_kfd2kgd;
break;
case CHIP_FIJI:
- if (vf)
- device_info = &fiji_vf_device_info;
- else
- device_info = &fiji_device_info;
+ gfx_target_version = 80003;
f2g = &gfx_v8_kfd2kgd;
break;
case CHIP_POLARIS10:
- if (vf)
- device_info = &polaris10_vf_device_info;
- else
- device_info = &polaris10_device_info;
+ gfx_target_version = 80003;
f2g = &gfx_v8_kfd2kgd;
break;
case CHIP_POLARIS11:
- if (vf)
- device_info = NULL;
- else
- device_info = &polaris11_device_info;
- f2g = &gfx_v8_kfd2kgd;
+ gfx_target_version = 80003;
+ if (!vf)
+ f2g = &gfx_v8_kfd2kgd;
break;
case CHIP_POLARIS12:
- if (vf)
- device_info = NULL;
- else
- device_info = &polaris12_device_info;
- f2g = &gfx_v8_kfd2kgd;
+ gfx_target_version = 80003;
+ if (!vf)
+ f2g = &gfx_v8_kfd2kgd;
break;
case CHIP_VEGAM:
- if (vf)
- device_info = NULL;
- else
- device_info = &vegam_device_info;
- f2g = &gfx_v8_kfd2kgd;
+ gfx_target_version = 80003;
+ if (!vf)
+ f2g = &gfx_v8_kfd2kgd;
break;
default:
- switch (adev->ip_versions[GC_HWIP][0]) {
+ switch (gc_version) {
case IP_VERSION(9, 0, 1):
- if (vf)
- device_info = &vega10_vf_device_info;
- else
- device_info = &vega10_device_info;
+ gfx_target_version = 90000;
f2g = &gfx_v9_kfd2kgd;
break;
#ifdef KFD_SUPPORT_IOMMU_V2
case IP_VERSION(9, 1, 0):
case IP_VERSION(9, 2, 2):
- if (vf)
- device_info = NULL;
- else
- device_info = &raven_device_info;
- f2g = &gfx_v9_kfd2kgd;
+ gfx_target_version = 90002;
+ if (!vf)
+ f2g = &gfx_v9_kfd2kgd;
break;
#endif
case IP_VERSION(9, 2, 1):
- if (vf)
- device_info = NULL;
- else
- device_info = &vega12_device_info;
- f2g = &gfx_v9_kfd2kgd;
+ gfx_target_version = 90004;
+ if (!vf)
+ f2g = &gfx_v9_kfd2kgd;
break;
case IP_VERSION(9, 3, 0):
- if (vf)
- device_info = NULL;
- else
- device_info = &renoir_device_info;
- f2g = &gfx_v9_kfd2kgd;
+ gfx_target_version = 90012;
+ if (!vf)
+ f2g = &gfx_v9_kfd2kgd;
break;
case IP_VERSION(9, 4, 0):
- if (vf)
- device_info = NULL;
- else
- device_info = &vega20_device_info;
- f2g = &gfx_v9_kfd2kgd;
+ gfx_target_version = 90006;
+ if (!vf)
+ f2g = &gfx_v9_kfd2kgd;
break;
case IP_VERSION(9, 4, 1):
- device_info = &arcturus_device_info;
+ gfx_target_version = 90008;
f2g = &arcturus_kfd2kgd;
break;
case IP_VERSION(9, 4, 2):
- device_info = &aldebaran_device_info;
+ gfx_target_version = 90010;
f2g = &aldebaran_kfd2kgd;
break;
case IP_VERSION(10, 1, 10):
- if (vf)
- device_info = NULL;
- else
- device_info = &navi10_device_info;
- f2g = &gfx_v10_kfd2kgd;
+ gfx_target_version = 100100;
+ if (!vf)
+ f2g = &gfx_v10_kfd2kgd;
break;
case IP_VERSION(10, 1, 2):
- device_info = &navi12_device_info;
+ gfx_target_version = 100101;
f2g = &gfx_v10_kfd2kgd;
break;
case IP_VERSION(10, 1, 1):
- if (vf)
- device_info = NULL;
- else
- device_info = &navi14_device_info;
- f2g = &gfx_v10_kfd2kgd;
+ gfx_target_version = 100102;
+ if (!vf)
+ f2g = &gfx_v10_kfd2kgd;
break;
case IP_VERSION(10, 1, 3):
- if (vf)
- device_info = NULL;
- else
- device_info = &cyan_skillfish_device_info;
- f2g = &gfx_v10_kfd2kgd;
+ gfx_target_version = 100103;
+ if (!vf)
+ f2g = &gfx_v10_kfd2kgd;
break;
case IP_VERSION(10, 3, 0):
- device_info = &sienna_cichlid_device_info;
+ gfx_target_version = 100300;
f2g = &gfx_v10_3_kfd2kgd;
break;
case IP_VERSION(10, 3, 2):
- device_info = &navy_flounder_device_info;
+ gfx_target_version = 100301;
f2g = &gfx_v10_3_kfd2kgd;
break;
case IP_VERSION(10, 3, 1):
- if (vf)
- device_info = NULL;
- else
- device_info = &vangogh_device_info;
- f2g = &gfx_v10_3_kfd2kgd;
+ gfx_target_version = 100303;
+ if (!vf)
+ f2g = &gfx_v10_3_kfd2kgd;
break;
case IP_VERSION(10, 3, 4):
- device_info = &dimgrey_cavefish_device_info;
+ gfx_target_version = 100302;
f2g = &gfx_v10_3_kfd2kgd;
break;
case IP_VERSION(10, 3, 5):
- device_info = &beige_goby_device_info;
+ gfx_target_version = 100304;
f2g = &gfx_v10_3_kfd2kgd;
break;
case IP_VERSION(10, 3, 3):
- if (vf)
- device_info = NULL;
- else
- device_info = &yellow_carp_device_info;
- f2g = &gfx_v10_3_kfd2kgd;
+ gfx_target_version = 100305;
+ if (!vf)
+ f2g = &gfx_v10_3_kfd2kgd;
break;
default:
- return NULL;
+ break;
}
break;
}
- if (!device_info || !f2g) {
- if (adev->ip_versions[GC_HWIP][0])
+ if (!f2g) {
+ if (is_soc15)
dev_err(kfd_device, "GC IP %06x %s not supported in kfd\n",
- adev->ip_versions[GC_HWIP][0], vf ? "VF" : "");
+ gc_version, vf ? "VF" : "");
else
dev_err(kfd_device, "%s %s not supported in kfd\n",
amdgpu_asic_name[adev->asic_type], vf ? "VF" : "");
return NULL;
}
+ device_info = kzalloc(sizeof(*device_info), GFP_KERNEL);
+ if (!device_info)
+ return NULL;
+
+ kfd_device_info_init(device_info, is_soc15 ? gc_version : adev->asic_type,
+ is_soc15, vf, gfx_target_version);
+
kfd = kzalloc(sizeof(*kfd), GFP_KERNEL);
if (!kfd)
return NULL;
@@ -1036,7 +1006,11 @@ void kgd2kfd_device_exit(struct kfd_dev *kfd)
amdgpu_amdkfd_free_gws(kfd->adev, kfd->gws);
}
- kfree(kfd);
+ if (kfd->device_info)
+ kfree(kfd->device_info);
+
+ if (kfd)
+ kfree(kfd);
}
int kgd2kfd_pre_reset(struct kfd_dev *kfd)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 3e11febee7c6..1f11e8271f2e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -232,7 +232,7 @@ struct kfd_vmid_info {
struct kfd_dev {
struct amdgpu_device *adev;
- const struct kfd_device_info *device_info;
+ struct kfd_device_info *device_info;
struct pci_dev *pdev;
struct drm_device *ddev;
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/4] drm/amdkfd: remove hardcoded device_info structs
2021-11-19 16:27 [PATCH 1/4] drm/amdkfd: replace asic_name with amdgpu_asic_name Graham Sider
2021-11-19 16:27 ` [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function Graham Sider
2021-11-19 16:27 ` [PATCH 3/4] drm/amdkfd: move to dynamic device_info creation Graham Sider
@ 2021-11-19 16:28 ` Graham Sider
2021-11-19 18:50 ` Alex Deucher
2 siblings, 1 reply; 7+ messages in thread
From: Graham Sider @ 2021-11-19 16:28 UTC (permalink / raw)
To: amd-gfx; +Cc: Felix.Kuehling, Graham Sider
With device_info initialization being handled in kfd_device_info_init,
these structs may be removed. Also add comments to help matching IP
versions to asic names.
Signed-off-by: Graham Sider <Graham.Sider@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_device.c | 469 +-----------------------
1 file changed, 17 insertions(+), 452 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 65e0eb5e2926..536cd227c9d3 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -53,458 +53,6 @@ extern const struct kfd2kgd_calls aldebaran_kfd2kgd;
extern const struct kfd2kgd_calls gfx_v10_kfd2kgd;
extern const struct kfd2kgd_calls gfx_v10_3_kfd2kgd;
-#ifdef KFD_SUPPORT_IOMMU_V2
-static const struct kfd_device_info kaveri_device_info = {
- .gfx_target_version = 70000,
- .max_pasid_bits = 16,
- /* max num of queues for KV.TODO should be a dynamic value */
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = false,
- .needs_iommu_device = true,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info carrizo_device_info = {
- .gfx_target_version = 80001,
- .max_pasid_bits = 16,
- /* max num of queues for CZ.TODO should be a dynamic value */
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = true,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info raven_device_info = {
- .gfx_target_version = 90002,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = true,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-#endif
-
-#ifdef CONFIG_DRM_AMDGPU_CIK
-static const struct kfd_device_info hawaii_device_info = {
- .gfx_target_version = 70001,
- .max_pasid_bits = 16,
- /* max num of queues for KV.TODO should be a dynamic value */
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = false,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-#endif
-
-static const struct kfd_device_info tonga_device_info = {
- .gfx_target_version = 80002,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = false,
- .needs_iommu_device = false,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info fiji_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info fiji_vf_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-
-static const struct kfd_device_info polaris10_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info polaris10_vf_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info polaris11_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info polaris12_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info vegam_device_info = {
- .gfx_target_version = 80003,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 4,
- .ih_ring_entry_size = 4 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_cik,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info vega10_device_info = {
- .gfx_target_version = 90000,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info vega10_vf_device_info = {
- .gfx_target_version = 90000,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info vega12_device_info = {
- .gfx_target_version = 90004,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info vega20_device_info = {
- .gfx_target_version = 90006,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info arcturus_device_info = {
- .gfx_target_version = 90008,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info aldebaran_device_info = {
- .gfx_target_version = 90010,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info renoir_device_info = {
- .gfx_target_version = 90012,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .supports_cwsr = true,
- .needs_iommu_device = false,
- .needs_pci_atomics = false,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info navi10_device_info = {
- .gfx_target_version = 100100,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 145,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info navi12_device_info = {
- .gfx_target_version = 100101,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 145,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info navi14_device_info = {
- .gfx_target_version = 100102,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 145,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info sienna_cichlid_device_info = {
- .gfx_target_version = 100300,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 92,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info navy_flounder_device_info = {
- .gfx_target_version = 100301,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 92,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info vangogh_device_info = {
- .gfx_target_version = 100303,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 92,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info dimgrey_cavefish_device_info = {
- .gfx_target_version = 100302,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 92,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info beige_goby_device_info = {
- .gfx_target_version = 100304,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 92,
- .num_sdma_queues_per_engine = 8,
-};
-
-static const struct kfd_device_info yellow_carp_device_info = {
- .gfx_target_version = 100305,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .no_atomic_fw_version = 92,
- .num_sdma_queues_per_engine = 2,
-};
-
-static const struct kfd_device_info cyan_skillfish_device_info = {
- .gfx_target_version = 100103,
- .max_pasid_bits = 16,
- .max_no_of_hqd = 24,
- .doorbell_size = 8,
- .ih_ring_entry_size = 8 * sizeof(uint32_t),
- .event_interrupt_class = &event_interrupt_class_v9,
- .num_of_watch_points = 4,
- .mqd_size_aligned = MQD_SIZE_ALIGNED,
- .needs_iommu_device = false,
- .supports_cwsr = true,
- .needs_pci_atomics = true,
- .num_sdma_queues_per_engine = 8,
-};
-
static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
unsigned int chunk_size);
static void kfd_gtt_sa_fini(struct kfd_dev *kfd);
@@ -632,11 +180,13 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
break;
default:
switch (gc_version) {
+ // Vega 10
case IP_VERSION(9, 0, 1):
gfx_target_version = 90000;
f2g = &gfx_v9_kfd2kgd;
break;
#ifdef KFD_SUPPORT_IOMMU_V2
+ // Raven
case IP_VERSION(9, 1, 0):
case IP_VERSION(9, 2, 2):
gfx_target_version = 90002;
@@ -644,69 +194,84 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
f2g = &gfx_v9_kfd2kgd;
break;
#endif
+ // Vega12
case IP_VERSION(9, 2, 1):
gfx_target_version = 90004;
if (!vf)
f2g = &gfx_v9_kfd2kgd;
break;
+ // Renoir
case IP_VERSION(9, 3, 0):
gfx_target_version = 90012;
if (!vf)
f2g = &gfx_v9_kfd2kgd;
break;
+ // Vega20
case IP_VERSION(9, 4, 0):
gfx_target_version = 90006;
if (!vf)
f2g = &gfx_v9_kfd2kgd;
break;
+ // Arcturus
case IP_VERSION(9, 4, 1):
gfx_target_version = 90008;
f2g = &arcturus_kfd2kgd;
break;
+ // Aldebaran
case IP_VERSION(9, 4, 2):
gfx_target_version = 90010;
f2g = &aldebaran_kfd2kgd;
break;
+ // Navi10
case IP_VERSION(10, 1, 10):
gfx_target_version = 100100;
if (!vf)
f2g = &gfx_v10_kfd2kgd;
break;
+ // Navi12
case IP_VERSION(10, 1, 2):
gfx_target_version = 100101;
f2g = &gfx_v10_kfd2kgd;
break;
+ // Navi14
case IP_VERSION(10, 1, 1):
gfx_target_version = 100102;
if (!vf)
f2g = &gfx_v10_kfd2kgd;
break;
+ // Cyan Skillfish
case IP_VERSION(10, 1, 3):
gfx_target_version = 100103;
if (!vf)
f2g = &gfx_v10_kfd2kgd;
break;
+ // Sienna Cichlid
case IP_VERSION(10, 3, 0):
gfx_target_version = 100300;
f2g = &gfx_v10_3_kfd2kgd;
break;
+ // Navy Flounder
case IP_VERSION(10, 3, 2):
gfx_target_version = 100301;
f2g = &gfx_v10_3_kfd2kgd;
break;
+ // Van Gogh
case IP_VERSION(10, 3, 1):
gfx_target_version = 100303;
if (!vf)
f2g = &gfx_v10_3_kfd2kgd;
break;
+ // Dimgrey Cavefish
case IP_VERSION(10, 3, 4):
gfx_target_version = 100302;
f2g = &gfx_v10_3_kfd2kgd;
break;
+ // Beige Goby
case IP_VERSION(10, 3, 5):
gfx_target_version = 100304;
f2g = &gfx_v10_3_kfd2kgd;
break;
+ // Yellow Carp
case IP_VERSION(10, 3, 3):
gfx_target_version = 100305;
if (!vf)
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 4/4] drm/amdkfd: remove hardcoded device_info structs
2021-11-19 16:28 ` [PATCH 4/4] drm/amdkfd: remove hardcoded device_info structs Graham Sider
@ 2021-11-19 18:50 ` Alex Deucher
0 siblings, 0 replies; 7+ messages in thread
From: Alex Deucher @ 2021-11-19 18:50 UTC (permalink / raw)
To: Graham Sider; +Cc: Kuehling, Felix, amd-gfx list
Please use C comments (/* */) rather than C++ comments. Same for the
previous patches in the series.
Alex
On Fri, Nov 19, 2021 at 11:28 AM Graham Sider <Graham.Sider@amd.com> wrote:
>
> With device_info initialization being handled in kfd_device_info_init,
> these structs may be removed. Also add comments to help matching IP
> versions to asic names.
>
> Signed-off-by: Graham Sider <Graham.Sider@amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_device.c | 469 +-----------------------
> 1 file changed, 17 insertions(+), 452 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> index 65e0eb5e2926..536cd227c9d3 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -53,458 +53,6 @@ extern const struct kfd2kgd_calls aldebaran_kfd2kgd;
> extern const struct kfd2kgd_calls gfx_v10_kfd2kgd;
> extern const struct kfd2kgd_calls gfx_v10_3_kfd2kgd;
>
> -#ifdef KFD_SUPPORT_IOMMU_V2
> -static const struct kfd_device_info kaveri_device_info = {
> - .gfx_target_version = 70000,
> - .max_pasid_bits = 16,
> - /* max num of queues for KV.TODO should be a dynamic value */
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = false,
> - .needs_iommu_device = true,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info carrizo_device_info = {
> - .gfx_target_version = 80001,
> - .max_pasid_bits = 16,
> - /* max num of queues for CZ.TODO should be a dynamic value */
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = true,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info raven_device_info = {
> - .gfx_target_version = 90002,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = true,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -#endif
> -
> -#ifdef CONFIG_DRM_AMDGPU_CIK
> -static const struct kfd_device_info hawaii_device_info = {
> - .gfx_target_version = 70001,
> - .max_pasid_bits = 16,
> - /* max num of queues for KV.TODO should be a dynamic value */
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = false,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -#endif
> -
> -static const struct kfd_device_info tonga_device_info = {
> - .gfx_target_version = 80002,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = false,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info fiji_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info fiji_vf_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -
> -static const struct kfd_device_info polaris10_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info polaris10_vf_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info polaris11_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info polaris12_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info vegam_device_info = {
> - .gfx_target_version = 80003,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 4,
> - .ih_ring_entry_size = 4 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_cik,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info vega10_device_info = {
> - .gfx_target_version = 90000,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info vega10_vf_device_info = {
> - .gfx_target_version = 90000,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info vega12_device_info = {
> - .gfx_target_version = 90004,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info vega20_device_info = {
> - .gfx_target_version = 90006,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info arcturus_device_info = {
> - .gfx_target_version = 90008,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info aldebaran_device_info = {
> - .gfx_target_version = 90010,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info renoir_device_info = {
> - .gfx_target_version = 90012,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .supports_cwsr = true,
> - .needs_iommu_device = false,
> - .needs_pci_atomics = false,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info navi10_device_info = {
> - .gfx_target_version = 100100,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 145,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info navi12_device_info = {
> - .gfx_target_version = 100101,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 145,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info navi14_device_info = {
> - .gfx_target_version = 100102,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 145,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info sienna_cichlid_device_info = {
> - .gfx_target_version = 100300,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 92,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info navy_flounder_device_info = {
> - .gfx_target_version = 100301,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 92,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info vangogh_device_info = {
> - .gfx_target_version = 100303,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 92,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info dimgrey_cavefish_device_info = {
> - .gfx_target_version = 100302,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 92,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info beige_goby_device_info = {
> - .gfx_target_version = 100304,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 92,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> -static const struct kfd_device_info yellow_carp_device_info = {
> - .gfx_target_version = 100305,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .no_atomic_fw_version = 92,
> - .num_sdma_queues_per_engine = 2,
> -};
> -
> -static const struct kfd_device_info cyan_skillfish_device_info = {
> - .gfx_target_version = 100103,
> - .max_pasid_bits = 16,
> - .max_no_of_hqd = 24,
> - .doorbell_size = 8,
> - .ih_ring_entry_size = 8 * sizeof(uint32_t),
> - .event_interrupt_class = &event_interrupt_class_v9,
> - .num_of_watch_points = 4,
> - .mqd_size_aligned = MQD_SIZE_ALIGNED,
> - .needs_iommu_device = false,
> - .supports_cwsr = true,
> - .needs_pci_atomics = true,
> - .num_sdma_queues_per_engine = 8,
> -};
> -
> static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
> unsigned int chunk_size);
> static void kfd_gtt_sa_fini(struct kfd_dev *kfd);
> @@ -632,11 +180,13 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
> break;
> default:
> switch (gc_version) {
> + // Vega 10
> case IP_VERSION(9, 0, 1):
> gfx_target_version = 90000;
> f2g = &gfx_v9_kfd2kgd;
> break;
> #ifdef KFD_SUPPORT_IOMMU_V2
> + // Raven
> case IP_VERSION(9, 1, 0):
> case IP_VERSION(9, 2, 2):
> gfx_target_version = 90002;
> @@ -644,69 +194,84 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
> f2g = &gfx_v9_kfd2kgd;
> break;
> #endif
> + // Vega12
> case IP_VERSION(9, 2, 1):
> gfx_target_version = 90004;
> if (!vf)
> f2g = &gfx_v9_kfd2kgd;
> break;
> + // Renoir
> case IP_VERSION(9, 3, 0):
> gfx_target_version = 90012;
> if (!vf)
> f2g = &gfx_v9_kfd2kgd;
> break;
> + // Vega20
> case IP_VERSION(9, 4, 0):
> gfx_target_version = 90006;
> if (!vf)
> f2g = &gfx_v9_kfd2kgd;
> break;
> + // Arcturus
> case IP_VERSION(9, 4, 1):
> gfx_target_version = 90008;
> f2g = &arcturus_kfd2kgd;
> break;
> + // Aldebaran
> case IP_VERSION(9, 4, 2):
> gfx_target_version = 90010;
> f2g = &aldebaran_kfd2kgd;
> break;
> + // Navi10
> case IP_VERSION(10, 1, 10):
> gfx_target_version = 100100;
> if (!vf)
> f2g = &gfx_v10_kfd2kgd;
> break;
> + // Navi12
> case IP_VERSION(10, 1, 2):
> gfx_target_version = 100101;
> f2g = &gfx_v10_kfd2kgd;
> break;
> + // Navi14
> case IP_VERSION(10, 1, 1):
> gfx_target_version = 100102;
> if (!vf)
> f2g = &gfx_v10_kfd2kgd;
> break;
> + // Cyan Skillfish
> case IP_VERSION(10, 1, 3):
> gfx_target_version = 100103;
> if (!vf)
> f2g = &gfx_v10_kfd2kgd;
> break;
> + // Sienna Cichlid
> case IP_VERSION(10, 3, 0):
> gfx_target_version = 100300;
> f2g = &gfx_v10_3_kfd2kgd;
> break;
> + // Navy Flounder
> case IP_VERSION(10, 3, 2):
> gfx_target_version = 100301;
> f2g = &gfx_v10_3_kfd2kgd;
> break;
> + // Van Gogh
> case IP_VERSION(10, 3, 1):
> gfx_target_version = 100303;
> if (!vf)
> f2g = &gfx_v10_3_kfd2kgd;
> break;
> + // Dimgrey Cavefish
> case IP_VERSION(10, 3, 4):
> gfx_target_version = 100302;
> f2g = &gfx_v10_3_kfd2kgd;
> break;
> + // Beige Goby
> case IP_VERSION(10, 3, 5):
> gfx_target_version = 100304;
> f2g = &gfx_v10_3_kfd2kgd;
> break;
> + // Yellow Carp
> case IP_VERSION(10, 3, 3):
> gfx_target_version = 100305;
> if (!vf)
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function
2021-11-19 16:27 ` [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function Graham Sider
@ 2021-11-19 18:54 ` Alex Deucher
2021-11-19 19:10 ` Sider, Graham
0 siblings, 1 reply; 7+ messages in thread
From: Alex Deucher @ 2021-11-19 18:54 UTC (permalink / raw)
To: Graham Sider; +Cc: Kuehling, Felix, amd-gfx list
On Fri, Nov 19, 2021 at 11:28 AM Graham Sider <Graham.Sider@amd.com> wrote:
>
> Initializes device_info structs given either asic_type (enum) if GFX
> version is less than GFX9, or GC IP version if greater. Also takes in vf
> and the target compiler gfx version.
>
> Inclusion/exclusion to certain conditions for certain GC IP versions may
> be necessary on npi bringup on a case-by-case basis, but for the most
> part should be minimal (e.g. adding one || asic_version == IP_VERSION(X ,X, X) case).
>
> Signed-off-by: Graham Sider <Graham.Sider@amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_device.c | 58 +++++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> index e11fc4e20c32..23e35a466cf0 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -511,6 +511,64 @@ static void kfd_gtt_sa_fini(struct kfd_dev *kfd);
>
> static int kfd_resume(struct kfd_dev *kfd);
>
> +static void kfd_device_info_init(struct kfd_device_info *device_info,
> + uint32_t asic_version, bool is_soc15, bool vf,
I'm not crazy about reusing asic_version for both the GC version and
the asic type. Seems like it would be easier to just pass adev and
access what you need directly.
Alex
> + uint32_t gfx_target_version)
> +{
> + device_info->max_pasid_bits = 16;
> + device_info->max_no_of_hqd = 24;
> + device_info->num_of_watch_points = 4;
> + device_info->mqd_size_aligned = MQD_SIZE_ALIGNED;
> + device_info->gfx_target_version = gfx_target_version;
> +
> + if (is_soc15) {
> + device_info->doorbell_size = 8;
> + device_info->ih_ring_entry_size = 8 * sizeof(uint32_t);
> + device_info->event_interrupt_class = &event_interrupt_class_v9;
> + device_info->supports_cwsr = true;
> +
> + if ((asic_version >= IP_VERSION(9, 0, 1) &&
> + asic_version <= IP_VERSION(9, 3, 0)) ||
> + asic_version == IP_VERSION(10, 3, 1) ||
> + asic_version == IP_VERSION(10, 3, 3))
> + device_info->num_sdma_queues_per_engine = 2;
> + else
> + device_info->num_sdma_queues_per_engine = 8;
> +
> + // Navi2x+, Navi1x+
> + if (asic_version >= IP_VERSION(10, 3, 0))
> + device_info->no_atomic_fw_version = 145;
> + else if (asic_version >= IP_VERSION(10, 1, 1))
> + device_info->no_atomic_fw_version = 92;
> +
> + // Raven
> + if (asic_version == IP_VERSION(9, 1, 0) ||
> + asic_version == IP_VERSION(9, 2, 2))
> + device_info->needs_iommu_device = true;
> +
> + // Navi1x+
> + if (asic_version >= IP_VERSION(10, 1, 1))
> + device_info->needs_pci_atomics = true;
> + } else {
> + device_info->doorbell_size = 4;
> + device_info->ih_ring_entry_size = 4 * sizeof(uint32_t);
> + device_info->event_interrupt_class = &event_interrupt_class_cik;
> + device_info->num_sdma_queues_per_engine = 2;
> +
> + if (asic_version != CHIP_KAVERI &&
> + asic_version != CHIP_HAWAII &&
> + asic_version != CHIP_TONGA)
> + device_info->supports_cwsr = true;
> +
> + if (asic_version == CHIP_KAVERI ||
> + asic_version == CHIP_CARRIZO)
> + device_info->needs_iommu_device = true;
> +
> + if (asic_version != CHIP_HAWAII && !vf)
> + device_info->needs_pci_atomics = true;
> + }
> +}
> +
> struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
> {
> struct kfd_dev *kfd;
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function
2021-11-19 18:54 ` Alex Deucher
@ 2021-11-19 19:10 ` Sider, Graham
0 siblings, 0 replies; 7+ messages in thread
From: Sider, Graham @ 2021-11-19 19:10 UTC (permalink / raw)
To: Alex Deucher; +Cc: Kuehling, Felix, amd-gfx list
[AMD Official Use Only]
> -----Original Message-----
> From: Alex Deucher <alexdeucher@gmail.com>
> Sent: Friday, November 19, 2021 1:55 PM
> To: Sider, Graham <Graham.Sider@amd.com>
> Cc: amd-gfx list <amd-gfx@lists.freedesktop.org>; Kuehling, Felix
> <Felix.Kuehling@amd.com>
> Subject: Re: [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function
>
> On Fri, Nov 19, 2021 at 11:28 AM Graham Sider <Graham.Sider@amd.com>
> wrote:
> >
> > Initializes device_info structs given either asic_type (enum) if GFX
> > version is less than GFX9, or GC IP version if greater. Also takes in
> > vf and the target compiler gfx version.
> >
> > Inclusion/exclusion to certain conditions for certain GC IP versions
> > may be necessary on npi bringup on a case-by-case basis, but for the
> > most part should be minimal (e.g. adding one || asic_version ==
> IP_VERSION(X ,X, X) case).
> >
> > Signed-off-by: Graham Sider <Graham.Sider@amd.com>
> > ---
> > drivers/gpu/drm/amd/amdkfd/kfd_device.c | 58
> > +++++++++++++++++++++++++
> > 1 file changed, 58 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> > b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> > index e11fc4e20c32..23e35a466cf0 100644
> > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> > @@ -511,6 +511,64 @@ static void kfd_gtt_sa_fini(struct kfd_dev *kfd);
> >
> > static int kfd_resume(struct kfd_dev *kfd);
> >
> > +static void kfd_device_info_init(struct kfd_device_info *device_info,
> > + uint32_t asic_version, bool is_soc15,
> > +bool vf,
>
> I'm not crazy about reusing asic_version for both the GC version and the asic
> type. Seems like it would be easier to just pass adev and access what you
> need directly.
>
> Alex
>
That's fair, I was on the fence about it as well. I think setting some vars via adev in device_info_init itself is a good middle ground in terms of verbosity (what I was attempting to limit to a degree here). Thanks for the recommendation.
Graham
>
> > + uint32_t gfx_target_version) {
> > + device_info->max_pasid_bits = 16;
> > + device_info->max_no_of_hqd = 24;
> > + device_info->num_of_watch_points = 4;
> > + device_info->mqd_size_aligned = MQD_SIZE_ALIGNED;
> > + device_info->gfx_target_version = gfx_target_version;
> > +
> > + if (is_soc15) {
> > + device_info->doorbell_size = 8;
> > + device_info->ih_ring_entry_size = 8 * sizeof(uint32_t);
> > + device_info->event_interrupt_class = &event_interrupt_class_v9;
> > + device_info->supports_cwsr = true;
> > +
> > + if ((asic_version >= IP_VERSION(9, 0, 1) &&
> > + asic_version <= IP_VERSION(9, 3, 0)) ||
> > + asic_version == IP_VERSION(10, 3, 1) ||
> > + asic_version == IP_VERSION(10, 3, 3))
> > + device_info->num_sdma_queues_per_engine = 2;
> > + else
> > + device_info->num_sdma_queues_per_engine = 8;
> > +
> > + // Navi2x+, Navi1x+
> > + if (asic_version >= IP_VERSION(10, 3, 0))
> > + device_info->no_atomic_fw_version = 145;
> > + else if (asic_version >= IP_VERSION(10, 1, 1))
> > + device_info->no_atomic_fw_version = 92;
> > +
> > + // Raven
> > + if (asic_version == IP_VERSION(9, 1, 0) ||
> > + asic_version == IP_VERSION(9, 2, 2))
> > + device_info->needs_iommu_device = true;
> > +
> > + // Navi1x+
> > + if (asic_version >= IP_VERSION(10, 1, 1))
> > + device_info->needs_pci_atomics = true;
> > + } else {
> > + device_info->doorbell_size = 4;
> > + device_info->ih_ring_entry_size = 4 * sizeof(uint32_t);
> > + device_info->event_interrupt_class =
> &event_interrupt_class_cik;
> > + device_info->num_sdma_queues_per_engine = 2;
> > +
> > + if (asic_version != CHIP_KAVERI &&
> > + asic_version != CHIP_HAWAII &&
> > + asic_version != CHIP_TONGA)
> > + device_info->supports_cwsr = true;
> > +
> > + if (asic_version == CHIP_KAVERI ||
> > + asic_version == CHIP_CARRIZO)
> > + device_info->needs_iommu_device = true;
> > +
> > + if (asic_version != CHIP_HAWAII && !vf)
> > + device_info->needs_pci_atomics = true;
> > + }
> > +}
> > +
> > struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf) {
> > struct kfd_dev *kfd;
> > --
> > 2.25.1
> >
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-11-19 19:10 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-19 16:27 [PATCH 1/4] drm/amdkfd: replace asic_name with amdgpu_asic_name Graham Sider
2021-11-19 16:27 ` [PATCH 2/4] drm/amdkfd: add kfd_device_info_init function Graham Sider
2021-11-19 18:54 ` Alex Deucher
2021-11-19 19:10 ` Sider, Graham
2021-11-19 16:27 ` [PATCH 3/4] drm/amdkfd: move to dynamic device_info creation Graham Sider
2021-11-19 16:28 ` [PATCH 4/4] drm/amdkfd: remove hardcoded device_info structs Graham Sider
2021-11-19 18:50 ` Alex Deucher
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox