drm/amdkfd: Fill the name field in node topology with asic name v2

Submitted by Zhao, Yong on Aug. 13, 2019, 9:21 p.m.

Details

Message ID 20190813212112.11797-1-Yong.Zhao@amd.com
State New
Headers show
Series "drm/amdkfd: Fill the name field in node topology with asic name v2" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Zhao, Yong Aug. 13, 2019, 9:21 p.m.
The name field in node topology has not been used. We re-purpose it to
hold the asic name, which can be queried by user space applications
through sysfs.

Change-Id: I74f4f5487db169004a9d27ea15abe99261c86220
Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_device.c   | 18 ++++++++++++++++++
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h     |  1 +
 drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 16 ++++++----------
 drivers/gpu/drm/amd/amdkfd/kfd_topology.h |  4 ++--
 4 files changed, 27 insertions(+), 12 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 3b9fe629a126..24bfdf583820 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -42,6 +42,7 @@  static atomic_t kfd_locked = ATOMIC_INIT(0);
 #ifdef KFD_SUPPORT_IOMMU_V2
 static const struct kfd_device_info kaveri_device_info = {
 	.asic_family = CHIP_KAVERI,
+	.asic_name = "kaveri",
 	.max_pasid_bits = 16,
 	/* max num of queues for KV.TODO should be a dynamic value */
 	.max_no_of_hqd	= 24,
@@ -60,6 +61,7 @@  static const struct kfd_device_info kaveri_device_info = {
 
 static const struct kfd_device_info carrizo_device_info = {
 	.asic_family = CHIP_CARRIZO,
+	.asic_name = "carrizo",
 	.max_pasid_bits = 16,
 	/* max num of queues for CZ.TODO should be a dynamic value */
 	.max_no_of_hqd	= 24,
@@ -78,6 +80,7 @@  static const struct kfd_device_info carrizo_device_info = {
 
 static const struct kfd_device_info raven_device_info = {
 	.asic_family = CHIP_RAVEN,
+	.asic_name = "raven",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 8,
@@ -96,6 +99,7 @@  static const struct kfd_device_info raven_device_info = {
 
 static const struct kfd_device_info hawaii_device_info = {
 	.asic_family = CHIP_HAWAII,
+	.asic_name = "hawaii",
 	.max_pasid_bits = 16,
 	/* max num of queues for KV.TODO should be a dynamic value */
 	.max_no_of_hqd	= 24,
@@ -114,6 +118,7 @@  static const struct kfd_device_info hawaii_device_info = {
 
 static const struct kfd_device_info tonga_device_info = {
 	.asic_family = CHIP_TONGA,
+	.asic_name = "tonga",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -131,6 +136,7 @@  static const struct kfd_device_info tonga_device_info = {
 
 static const struct kfd_device_info fiji_device_info = {
 	.asic_family = CHIP_FIJI,
+	.asic_name = "fiji",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -148,6 +154,7 @@  static const struct kfd_device_info fiji_device_info = {
 
 static const struct kfd_device_info fiji_vf_device_info = {
 	.asic_family = CHIP_FIJI,
+	.asic_name = "fiji",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -166,6 +173,7 @@  static const struct kfd_device_info fiji_vf_device_info = {
 
 static const struct kfd_device_info polaris10_device_info = {
 	.asic_family = CHIP_POLARIS10,
+	.asic_name = "polaris10",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -183,6 +191,7 @@  static const struct kfd_device_info polaris10_device_info = {
 
 static const struct kfd_device_info polaris10_vf_device_info = {
 	.asic_family = CHIP_POLARIS10,
+	.asic_name = "polaris10",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -200,6 +209,7 @@  static const struct kfd_device_info polaris10_vf_device_info = {
 
 static const struct kfd_device_info polaris11_device_info = {
 	.asic_family = CHIP_POLARIS11,
+	.asic_name = "polaris11",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -217,6 +227,7 @@  static const struct kfd_device_info polaris11_device_info = {
 
 static const struct kfd_device_info polaris12_device_info = {
 	.asic_family = CHIP_POLARIS12,
+	.asic_name = "polaris12",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -234,6 +245,7 @@  static const struct kfd_device_info polaris12_device_info = {
 
 static const struct kfd_device_info vegam_device_info = {
 	.asic_family = CHIP_VEGAM,
+	.asic_name = "vegam",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 4,
@@ -251,6 +263,7 @@  static const struct kfd_device_info vegam_device_info = {
 
 static const struct kfd_device_info vega10_device_info = {
 	.asic_family = CHIP_VEGA10,
+	.asic_name = "vega10",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 8,
@@ -268,6 +281,7 @@  static const struct kfd_device_info vega10_device_info = {
 
 static const struct kfd_device_info vega10_vf_device_info = {
 	.asic_family = CHIP_VEGA10,
+	.asic_name = "vega10",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 8,
@@ -285,6 +299,7 @@  static const struct kfd_device_info vega10_vf_device_info = {
 
 static const struct kfd_device_info vega12_device_info = {
 	.asic_family = CHIP_VEGA12,
+	.asic_name = "vega12",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 8,
@@ -302,6 +317,7 @@  static const struct kfd_device_info vega12_device_info = {
 
 static const struct kfd_device_info vega20_device_info = {
 	.asic_family = CHIP_VEGA20,
+	.asic_name = "vega20",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd	= 24,
 	.doorbell_size	= 8,
@@ -319,6 +335,7 @@  static const struct kfd_device_info vega20_device_info = {
 
 static const struct kfd_device_info arcturus_device_info = {
 	.asic_family = CHIP_ARCTURUS,
+	.asic_name = "arcturus",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd	= 24,
 	.doorbell_size	= 8,
@@ -336,6 +353,7 @@  static const struct kfd_device_info arcturus_device_info = {
 
 static const struct kfd_device_info navi10_device_info = {
 	.asic_family = CHIP_NAVI10,
+	.asic_name = "navi10",
 	.max_pasid_bits = 16,
 	.max_no_of_hqd  = 24,
 	.doorbell_size  = 8,
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 9b9a8da187c8..06bb2d7a9b39 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -195,6 +195,7 @@  struct kfd_event_interrupt_class {
 
 struct kfd_device_info {
 	enum amd_asic_type asic_family;
+	const char *asic_name;
 	const struct kfd_event_interrupt_class *event_interrupt_class;
 	unsigned int max_pasid_bits;
 	unsigned int max_no_of_hqd;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 36fa98fe858b..7551761f2aa9 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -406,8 +406,6 @@  static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
 		char *buffer)
 {
 	struct kfd_topology_device *dev;
-	char public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
-	uint32_t i;
 	uint32_t log_max_watch_addr;
 
 	/* Making sure that the buffer is an empty string */
@@ -422,14 +420,8 @@  static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
 	if (strcmp(attr->name, "name") == 0) {
 		dev = container_of(attr, struct kfd_topology_device,
 				attr_name);
-		for (i = 0; i < KFD_TOPOLOGY_PUBLIC_NAME_SIZE; i++) {
-			public_name[i] =
-					(char)dev->node_props.marketing_name[i];
-			if (dev->node_props.marketing_name[i] == 0)
-				break;
-		}
-		public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE-1] = 0x0;
-		return sysfs_show_str_val(buffer, public_name);
+
+		return sysfs_show_str_val(buffer, dev->node_props.name);
 	}
 
 	dev = container_of(attr, struct kfd_topology_device,
@@ -1274,6 +1266,10 @@  int kfd_topology_add_device(struct kfd_dev *gpu)
 	 */
 
 	amdgpu_amdkfd_get_cu_info(dev->gpu->kgd, &cu_info);
+
+	strncpy(dev->node_props.name, gpu->device_info->asic_name,
+			KFD_TOPOLOGY_PUBLIC_NAME_SIZE);
+
 	dev->node_props.simd_arrays_per_engine =
 		cu_info.num_shader_arrays_per_engine;
 
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h
index 276354aa0fcc..d4718d58d0f2 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h
@@ -27,7 +27,7 @@ 
 #include <linux/list.h>
 #include "kfd_crat.h"
 
-#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 128
+#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 32
 
 #define HSA_CAP_HOT_PLUGGABLE			0x00000001
 #define HSA_CAP_ATS_PRESENT			0x00000002
@@ -81,7 +81,7 @@  struct kfd_node_properties {
 	int32_t  drm_render_minor;
 	uint32_t num_sdma_engines;
 	uint32_t num_sdma_xgmi_engines;
-	uint16_t marketing_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
+	char name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
 };
 
 #define HSA_MEM_HEAP_TYPE_SYSTEM	0

Comments

On 2019-08-13 17:21, Zhao, Yong wrote:
> The name field in node topology has not been used. We re-purpose it to

> hold the asic name, which can be queried by user space applications

> through sysfs.

>

> Change-Id: I74f4f5487db169004a9d27ea15abe99261c86220

> Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>


Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>


As a follow-up, I think you could also remove the marketing name field 
from struct kfd_node_properties. As far as I can tell this is never 
populated and now it's also no longer reported in sysfs.

Regards,
   Felix

> ---

>   drivers/gpu/drm/amd/amdkfd/kfd_device.c   | 18 ++++++++++++++++++

>   drivers/gpu/drm/amd/amdkfd/kfd_priv.h     |  1 +

>   drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 16 ++++++----------

>   drivers/gpu/drm/amd/amdkfd/kfd_topology.h |  4 ++--

>   4 files changed, 27 insertions(+), 12 deletions(-)

>

> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c

> index 3b9fe629a126..24bfdf583820 100644

> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c

> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c

> @@ -42,6 +42,7 @@ static atomic_t kfd_locked = ATOMIC_INIT(0);

>   #ifdef KFD_SUPPORT_IOMMU_V2

>   static const struct kfd_device_info kaveri_device_info = {

>   	.asic_family = CHIP_KAVERI,

> +	.asic_name = "kaveri",

>   	.max_pasid_bits = 16,

>   	/* max num of queues for KV.TODO should be a dynamic value */

>   	.max_no_of_hqd	= 24,

> @@ -60,6 +61,7 @@ static const struct kfd_device_info kaveri_device_info = {

>   

>   static const struct kfd_device_info carrizo_device_info = {

>   	.asic_family = CHIP_CARRIZO,

> +	.asic_name = "carrizo",

>   	.max_pasid_bits = 16,

>   	/* max num of queues for CZ.TODO should be a dynamic value */

>   	.max_no_of_hqd	= 24,

> @@ -78,6 +80,7 @@ static const struct kfd_device_info carrizo_device_info = {

>   

>   static const struct kfd_device_info raven_device_info = {

>   	.asic_family = CHIP_RAVEN,

> +	.asic_name = "raven",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 8,

> @@ -96,6 +99,7 @@ static const struct kfd_device_info raven_device_info = {

>   

>   static const struct kfd_device_info hawaii_device_info = {

>   	.asic_family = CHIP_HAWAII,

> +	.asic_name = "hawaii",

>   	.max_pasid_bits = 16,

>   	/* max num of queues for KV.TODO should be a dynamic value */

>   	.max_no_of_hqd	= 24,

> @@ -114,6 +118,7 @@ static const struct kfd_device_info hawaii_device_info = {

>   

>   static const struct kfd_device_info tonga_device_info = {

>   	.asic_family = CHIP_TONGA,

> +	.asic_name = "tonga",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -131,6 +136,7 @@ static const struct kfd_device_info tonga_device_info = {

>   

>   static const struct kfd_device_info fiji_device_info = {

>   	.asic_family = CHIP_FIJI,

> +	.asic_name = "fiji",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -148,6 +154,7 @@ static const struct kfd_device_info fiji_device_info = {

>   

>   static const struct kfd_device_info fiji_vf_device_info = {

>   	.asic_family = CHIP_FIJI,

> +	.asic_name = "fiji",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -166,6 +173,7 @@ static const struct kfd_device_info fiji_vf_device_info = {

>   

>   static const struct kfd_device_info polaris10_device_info = {

>   	.asic_family = CHIP_POLARIS10,

> +	.asic_name = "polaris10",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -183,6 +191,7 @@ static const struct kfd_device_info polaris10_device_info = {

>   

>   static const struct kfd_device_info polaris10_vf_device_info = {

>   	.asic_family = CHIP_POLARIS10,

> +	.asic_name = "polaris10",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -200,6 +209,7 @@ static const struct kfd_device_info polaris10_vf_device_info = {

>   

>   static const struct kfd_device_info polaris11_device_info = {

>   	.asic_family = CHIP_POLARIS11,

> +	.asic_name = "polaris11",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -217,6 +227,7 @@ static const struct kfd_device_info polaris11_device_info = {

>   

>   static const struct kfd_device_info polaris12_device_info = {

>   	.asic_family = CHIP_POLARIS12,

> +	.asic_name = "polaris12",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -234,6 +245,7 @@ static const struct kfd_device_info polaris12_device_info = {

>   

>   static const struct kfd_device_info vegam_device_info = {

>   	.asic_family = CHIP_VEGAM,

> +	.asic_name = "vegam",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 4,

> @@ -251,6 +263,7 @@ static const struct kfd_device_info vegam_device_info = {

>   

>   static const struct kfd_device_info vega10_device_info = {

>   	.asic_family = CHIP_VEGA10,

> +	.asic_name = "vega10",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 8,

> @@ -268,6 +281,7 @@ static const struct kfd_device_info vega10_device_info = {

>   

>   static const struct kfd_device_info vega10_vf_device_info = {

>   	.asic_family = CHIP_VEGA10,

> +	.asic_name = "vega10",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 8,

> @@ -285,6 +299,7 @@ static const struct kfd_device_info vega10_vf_device_info = {

>   

>   static const struct kfd_device_info vega12_device_info = {

>   	.asic_family = CHIP_VEGA12,

> +	.asic_name = "vega12",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 8,

> @@ -302,6 +317,7 @@ static const struct kfd_device_info vega12_device_info = {

>   

>   static const struct kfd_device_info vega20_device_info = {

>   	.asic_family = CHIP_VEGA20,

> +	.asic_name = "vega20",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd	= 24,

>   	.doorbell_size	= 8,

> @@ -319,6 +335,7 @@ static const struct kfd_device_info vega20_device_info = {

>   

>   static const struct kfd_device_info arcturus_device_info = {

>   	.asic_family = CHIP_ARCTURUS,

> +	.asic_name = "arcturus",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd	= 24,

>   	.doorbell_size	= 8,

> @@ -336,6 +353,7 @@ static const struct kfd_device_info arcturus_device_info = {

>   

>   static const struct kfd_device_info navi10_device_info = {

>   	.asic_family = CHIP_NAVI10,

> +	.asic_name = "navi10",

>   	.max_pasid_bits = 16,

>   	.max_no_of_hqd  = 24,

>   	.doorbell_size  = 8,

> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h

> index 9b9a8da187c8..06bb2d7a9b39 100644

> --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h

> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h

> @@ -195,6 +195,7 @@ struct kfd_event_interrupt_class {

>   

>   struct kfd_device_info {

>   	enum amd_asic_type asic_family;

> +	const char *asic_name;

>   	const struct kfd_event_interrupt_class *event_interrupt_class;

>   	unsigned int max_pasid_bits;

>   	unsigned int max_no_of_hqd;

> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c

> index 36fa98fe858b..7551761f2aa9 100644

> --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c

> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c

> @@ -406,8 +406,6 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,

>   		char *buffer)

>   {

>   	struct kfd_topology_device *dev;

> -	char public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];

> -	uint32_t i;

>   	uint32_t log_max_watch_addr;

>   

>   	/* Making sure that the buffer is an empty string */

> @@ -422,14 +420,8 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,

>   	if (strcmp(attr->name, "name") == 0) {

>   		dev = container_of(attr, struct kfd_topology_device,

>   				attr_name);

> -		for (i = 0; i < KFD_TOPOLOGY_PUBLIC_NAME_SIZE; i++) {

> -			public_name[i] =

> -					(char)dev->node_props.marketing_name[i];

> -			if (dev->node_props.marketing_name[i] == 0)

> -				break;

> -		}

> -		public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE-1] = 0x0;

> -		return sysfs_show_str_val(buffer, public_name);

> +

> +		return sysfs_show_str_val(buffer, dev->node_props.name);

>   	}

>   

>   	dev = container_of(attr, struct kfd_topology_device,

> @@ -1274,6 +1266,10 @@ int kfd_topology_add_device(struct kfd_dev *gpu)

>   	 */

>   

>   	amdgpu_amdkfd_get_cu_info(dev->gpu->kgd, &cu_info);

> +

> +	strncpy(dev->node_props.name, gpu->device_info->asic_name,

> +			KFD_TOPOLOGY_PUBLIC_NAME_SIZE);

> +

>   	dev->node_props.simd_arrays_per_engine =

>   		cu_info.num_shader_arrays_per_engine;

>   

> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h

> index 276354aa0fcc..d4718d58d0f2 100644

> --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h

> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h

> @@ -27,7 +27,7 @@

>   #include <linux/list.h>

>   #include "kfd_crat.h"

>   

> -#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 128

> +#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 32

>   

>   #define HSA_CAP_HOT_PLUGGABLE			0x00000001

>   #define HSA_CAP_ATS_PRESENT			0x00000002

> @@ -81,7 +81,7 @@ struct kfd_node_properties {

>   	int32_t  drm_render_minor;

>   	uint32_t num_sdma_engines;

>   	uint32_t num_sdma_xgmi_engines;

> -	uint16_t marketing_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];

> +	char name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];

>   };

>   

>   #define HSA_MEM_HEAP_TYPE_SYSTEM	0