AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [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