mirror of https://gitee.com/openkylin/linux.git
drm/amdkfd: Fill the name field in node topology with asic name v2
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. Signed-off-by: Yong Zhao <Yong.Zhao@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
51bfac71ca
commit
c181159a5b
|
@ -42,6 +42,7 @@ static atomic_t kfd_locked = ATOMIC_INIT(0);
|
||||||
#ifdef KFD_SUPPORT_IOMMU_V2
|
#ifdef KFD_SUPPORT_IOMMU_V2
|
||||||
static const struct kfd_device_info kaveri_device_info = {
|
static const struct kfd_device_info kaveri_device_info = {
|
||||||
.asic_family = CHIP_KAVERI,
|
.asic_family = CHIP_KAVERI,
|
||||||
|
.asic_name = "kaveri",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
/* max num of queues for KV.TODO should be a dynamic value */
|
/* max num of queues for KV.TODO should be a dynamic value */
|
||||||
.max_no_of_hqd = 24,
|
.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 = {
|
static const struct kfd_device_info carrizo_device_info = {
|
||||||
.asic_family = CHIP_CARRIZO,
|
.asic_family = CHIP_CARRIZO,
|
||||||
|
.asic_name = "carrizo",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
/* max num of queues for CZ.TODO should be a dynamic value */
|
/* max num of queues for CZ.TODO should be a dynamic value */
|
||||||
.max_no_of_hqd = 24,
|
.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 = {
|
static const struct kfd_device_info raven_device_info = {
|
||||||
.asic_family = CHIP_RAVEN,
|
.asic_family = CHIP_RAVEN,
|
||||||
|
.asic_name = "raven",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.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 = {
|
static const struct kfd_device_info hawaii_device_info = {
|
||||||
.asic_family = CHIP_HAWAII,
|
.asic_family = CHIP_HAWAII,
|
||||||
|
.asic_name = "hawaii",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
/* max num of queues for KV.TODO should be a dynamic value */
|
/* max num of queues for KV.TODO should be a dynamic value */
|
||||||
.max_no_of_hqd = 24,
|
.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 = {
|
static const struct kfd_device_info tonga_device_info = {
|
||||||
.asic_family = CHIP_TONGA,
|
.asic_family = CHIP_TONGA,
|
||||||
|
.asic_name = "tonga",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info fiji_device_info = {
|
||||||
.asic_family = CHIP_FIJI,
|
.asic_family = CHIP_FIJI,
|
||||||
|
.asic_name = "fiji",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info fiji_vf_device_info = {
|
||||||
.asic_family = CHIP_FIJI,
|
.asic_family = CHIP_FIJI,
|
||||||
|
.asic_name = "fiji",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info polaris10_device_info = {
|
||||||
.asic_family = CHIP_POLARIS10,
|
.asic_family = CHIP_POLARIS10,
|
||||||
|
.asic_name = "polaris10",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info polaris10_vf_device_info = {
|
||||||
.asic_family = CHIP_POLARIS10,
|
.asic_family = CHIP_POLARIS10,
|
||||||
|
.asic_name = "polaris10",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info polaris11_device_info = {
|
||||||
.asic_family = CHIP_POLARIS11,
|
.asic_family = CHIP_POLARIS11,
|
||||||
|
.asic_name = "polaris11",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info polaris12_device_info = {
|
||||||
.asic_family = CHIP_POLARIS12,
|
.asic_family = CHIP_POLARIS12,
|
||||||
|
.asic_name = "polaris12",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info vegam_device_info = {
|
||||||
.asic_family = CHIP_VEGAM,
|
.asic_family = CHIP_VEGAM,
|
||||||
|
.asic_name = "vegam",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 4,
|
.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 = {
|
static const struct kfd_device_info vega10_device_info = {
|
||||||
.asic_family = CHIP_VEGA10,
|
.asic_family = CHIP_VEGA10,
|
||||||
|
.asic_name = "vega10",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.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 = {
|
static const struct kfd_device_info vega10_vf_device_info = {
|
||||||
.asic_family = CHIP_VEGA10,
|
.asic_family = CHIP_VEGA10,
|
||||||
|
.asic_name = "vega10",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.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 = {
|
static const struct kfd_device_info vega12_device_info = {
|
||||||
.asic_family = CHIP_VEGA12,
|
.asic_family = CHIP_VEGA12,
|
||||||
|
.asic_name = "vega12",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.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 = {
|
static const struct kfd_device_info vega20_device_info = {
|
||||||
.asic_family = CHIP_VEGA20,
|
.asic_family = CHIP_VEGA20,
|
||||||
|
.asic_name = "vega20",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.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 = {
|
static const struct kfd_device_info arcturus_device_info = {
|
||||||
.asic_family = CHIP_ARCTURUS,
|
.asic_family = CHIP_ARCTURUS,
|
||||||
|
.asic_name = "arcturus",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.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 = {
|
static const struct kfd_device_info navi10_device_info = {
|
||||||
.asic_family = CHIP_NAVI10,
|
.asic_family = CHIP_NAVI10,
|
||||||
|
.asic_name = "navi10",
|
||||||
.max_pasid_bits = 16,
|
.max_pasid_bits = 16,
|
||||||
.max_no_of_hqd = 24,
|
.max_no_of_hqd = 24,
|
||||||
.doorbell_size = 8,
|
.doorbell_size = 8,
|
||||||
|
|
|
@ -195,6 +195,7 @@ struct kfd_event_interrupt_class {
|
||||||
|
|
||||||
struct kfd_device_info {
|
struct kfd_device_info {
|
||||||
enum amd_asic_type asic_family;
|
enum amd_asic_type asic_family;
|
||||||
|
const char *asic_name;
|
||||||
const struct kfd_event_interrupt_class *event_interrupt_class;
|
const struct kfd_event_interrupt_class *event_interrupt_class;
|
||||||
unsigned int max_pasid_bits;
|
unsigned int max_pasid_bits;
|
||||||
unsigned int max_no_of_hqd;
|
unsigned int max_no_of_hqd;
|
||||||
|
|
|
@ -406,8 +406,6 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
|
||||||
char *buffer)
|
char *buffer)
|
||||||
{
|
{
|
||||||
struct kfd_topology_device *dev;
|
struct kfd_topology_device *dev;
|
||||||
char public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
|
|
||||||
uint32_t i;
|
|
||||||
uint32_t log_max_watch_addr;
|
uint32_t log_max_watch_addr;
|
||||||
|
|
||||||
/* Making sure that the buffer is an empty string */
|
/* 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) {
|
if (strcmp(attr->name, "name") == 0) {
|
||||||
dev = container_of(attr, struct kfd_topology_device,
|
dev = container_of(attr, struct kfd_topology_device,
|
||||||
attr_name);
|
attr_name);
|
||||||
for (i = 0; i < KFD_TOPOLOGY_PUBLIC_NAME_SIZE; i++) {
|
|
||||||
public_name[i] =
|
return sysfs_show_str_val(buffer, dev->node_props.name);
|
||||||
(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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = container_of(attr, struct kfd_topology_device,
|
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);
|
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 =
|
dev->node_props.simd_arrays_per_engine =
|
||||||
cu_info.num_shader_arrays_per_engine;
|
cu_info.num_shader_arrays_per_engine;
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include "kfd_crat.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_HOT_PLUGGABLE 0x00000001
|
||||||
#define HSA_CAP_ATS_PRESENT 0x00000002
|
#define HSA_CAP_ATS_PRESENT 0x00000002
|
||||||
|
@ -81,7 +81,7 @@ struct kfd_node_properties {
|
||||||
int32_t drm_render_minor;
|
int32_t drm_render_minor;
|
||||||
uint32_t num_sdma_engines;
|
uint32_t num_sdma_engines;
|
||||||
uint32_t num_sdma_xgmi_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
|
#define HSA_MEM_HEAP_TYPE_SYSTEM 0
|
||||||
|
|
Loading…
Reference in New Issue