Lines Matching refs:dev

139 static void kfd_release_topology_device(struct kfd_topology_device *dev)  in kfd_release_topology_device()  argument
146 list_del(&dev->list); in kfd_release_topology_device()
148 while (dev->mem_props.next != &dev->mem_props) { in kfd_release_topology_device()
149 mem = container_of(dev->mem_props.next, in kfd_release_topology_device()
155 while (dev->cache_props.next != &dev->cache_props) { in kfd_release_topology_device()
156 cache = container_of(dev->cache_props.next, in kfd_release_topology_device()
162 while (dev->io_link_props.next != &dev->io_link_props) { in kfd_release_topology_device()
163 iolink = container_of(dev->io_link_props.next, in kfd_release_topology_device()
169 while (dev->perf_props.next != &dev->perf_props) { in kfd_release_topology_device()
170 perf = container_of(dev->perf_props.next, in kfd_release_topology_device()
176 kfree(dev); in kfd_release_topology_device()
181 struct kfd_topology_device *dev; in kfd_release_topology_device_list() local
184 dev = list_first_entry(device_list, in kfd_release_topology_device_list()
186 kfd_release_topology_device(dev); in kfd_release_topology_device_list()
199 struct kfd_topology_device *dev; in kfd_create_topology_device() local
201 dev = kfd_alloc_struct(dev); in kfd_create_topology_device()
202 if (!dev) { in kfd_create_topology_device()
207 INIT_LIST_HEAD(&dev->mem_props); in kfd_create_topology_device()
208 INIT_LIST_HEAD(&dev->cache_props); in kfd_create_topology_device()
209 INIT_LIST_HEAD(&dev->io_link_props); in kfd_create_topology_device()
210 INIT_LIST_HEAD(&dev->perf_props); in kfd_create_topology_device()
212 list_add_tail(&dev->list, device_list); in kfd_create_topology_device()
214 return dev; in kfd_create_topology_device()
419 struct kfd_topology_device *dev; in node_show() local
426 dev = container_of(attr, struct kfd_topology_device, in node_show()
428 if (dev->gpu && kfd_devcgroup_check_permission(dev->gpu)) in node_show()
430 return sysfs_show_32bit_val(buffer, dev->gpu_id); in node_show()
434 dev = container_of(attr, struct kfd_topology_device, in node_show()
437 if (dev->gpu && kfd_devcgroup_check_permission(dev->gpu)) in node_show()
439 return sysfs_show_str_val(buffer, dev->node_props.name); in node_show()
442 dev = container_of(attr, struct kfd_topology_device, in node_show()
444 if (dev->gpu && kfd_devcgroup_check_permission(dev->gpu)) in node_show()
447 dev->node_props.cpu_cores_count); in node_show()
449 dev->node_props.simd_count); in node_show()
451 dev->node_props.mem_banks_count); in node_show()
453 dev->node_props.caches_count); in node_show()
455 dev->node_props.io_links_count); in node_show()
457 dev->node_props.cpu_core_id_base); in node_show()
459 dev->node_props.simd_id_base); in node_show()
461 dev->node_props.max_waves_per_simd); in node_show()
463 dev->node_props.lds_size_in_kb); in node_show()
465 dev->node_props.gds_size_in_kb); in node_show()
467 dev->node_props.num_gws); in node_show()
469 dev->node_props.wave_front_size); in node_show()
471 dev->node_props.array_count); in node_show()
473 dev->node_props.simd_arrays_per_engine); in node_show()
475 dev->node_props.cu_per_simd_array); in node_show()
477 dev->node_props.simd_per_cu); in node_show()
479 dev->node_props.max_slots_scratch_cu); in node_show()
481 dev->node_props.vendor_id); in node_show()
483 dev->node_props.device_id); in node_show()
485 dev->node_props.location_id); in node_show()
487 dev->node_props.drm_render_minor); in node_show()
489 dev->node_props.hive_id); in node_show()
491 dev->node_props.num_sdma_engines); in node_show()
493 dev->node_props.num_sdma_xgmi_engines); in node_show()
495 dev->node_props.num_sdma_queues_per_engine); in node_show()
497 dev->node_props.num_cp_queues); in node_show()
499 if (dev->gpu) { in node_show()
501 __ilog2_u32(dev->gpu->device_info->num_of_watch_points); in node_show()
504 dev->node_props.capability |= in node_show()
507 dev->node_props.capability |= in node_show()
513 if (dev->gpu->device_info->asic_family == CHIP_TONGA) in node_show()
514 dev->node_props.capability |= in node_show()
518 dev->node_props.max_engine_clk_fcompute); in node_show()
524 dev->gpu->mec_fw_version); in node_show()
526 dev->node_props.capability); in node_show()
528 dev->gpu->sdma_fw_version); in node_show()
551 static void kfd_remove_sysfs_node_entry(struct kfd_topology_device *dev) in kfd_remove_sysfs_node_entry() argument
558 if (dev->kobj_iolink) { in kfd_remove_sysfs_node_entry()
559 list_for_each_entry(iolink, &dev->io_link_props, list) in kfd_remove_sysfs_node_entry()
565 kobject_del(dev->kobj_iolink); in kfd_remove_sysfs_node_entry()
566 kobject_put(dev->kobj_iolink); in kfd_remove_sysfs_node_entry()
567 dev->kobj_iolink = NULL; in kfd_remove_sysfs_node_entry()
570 if (dev->kobj_cache) { in kfd_remove_sysfs_node_entry()
571 list_for_each_entry(cache, &dev->cache_props, list) in kfd_remove_sysfs_node_entry()
577 kobject_del(dev->kobj_cache); in kfd_remove_sysfs_node_entry()
578 kobject_put(dev->kobj_cache); in kfd_remove_sysfs_node_entry()
579 dev->kobj_cache = NULL; in kfd_remove_sysfs_node_entry()
582 if (dev->kobj_mem) { in kfd_remove_sysfs_node_entry()
583 list_for_each_entry(mem, &dev->mem_props, list) in kfd_remove_sysfs_node_entry()
588 kobject_del(dev->kobj_mem); in kfd_remove_sysfs_node_entry()
589 kobject_put(dev->kobj_mem); in kfd_remove_sysfs_node_entry()
590 dev->kobj_mem = NULL; in kfd_remove_sysfs_node_entry()
593 if (dev->kobj_perf) { in kfd_remove_sysfs_node_entry()
594 list_for_each_entry(perf, &dev->perf_props, list) { in kfd_remove_sysfs_node_entry()
598 kobject_del(dev->kobj_perf); in kfd_remove_sysfs_node_entry()
599 kobject_put(dev->kobj_perf); in kfd_remove_sysfs_node_entry()
600 dev->kobj_perf = NULL; in kfd_remove_sysfs_node_entry()
603 if (dev->kobj_node) { in kfd_remove_sysfs_node_entry()
604 sysfs_remove_file(dev->kobj_node, &dev->attr_gpuid); in kfd_remove_sysfs_node_entry()
605 sysfs_remove_file(dev->kobj_node, &dev->attr_name); in kfd_remove_sysfs_node_entry()
606 sysfs_remove_file(dev->kobj_node, &dev->attr_props); in kfd_remove_sysfs_node_entry()
607 kobject_del(dev->kobj_node); in kfd_remove_sysfs_node_entry()
608 kobject_put(dev->kobj_node); in kfd_remove_sysfs_node_entry()
609 dev->kobj_node = NULL; in kfd_remove_sysfs_node_entry()
613 static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev, in kfd_build_sysfs_node_entry() argument
624 if (WARN_ON(dev->kobj_node)) in kfd_build_sysfs_node_entry()
630 dev->kobj_node = kfd_alloc_struct(dev->kobj_node); in kfd_build_sysfs_node_entry()
631 if (!dev->kobj_node) in kfd_build_sysfs_node_entry()
634 ret = kobject_init_and_add(dev->kobj_node, &node_type, in kfd_build_sysfs_node_entry()
639 dev->kobj_mem = kobject_create_and_add("mem_banks", dev->kobj_node); in kfd_build_sysfs_node_entry()
640 if (!dev->kobj_mem) in kfd_build_sysfs_node_entry()
643 dev->kobj_cache = kobject_create_and_add("caches", dev->kobj_node); in kfd_build_sysfs_node_entry()
644 if (!dev->kobj_cache) in kfd_build_sysfs_node_entry()
647 dev->kobj_iolink = kobject_create_and_add("io_links", dev->kobj_node); in kfd_build_sysfs_node_entry()
648 if (!dev->kobj_iolink) in kfd_build_sysfs_node_entry()
651 dev->kobj_perf = kobject_create_and_add("perf", dev->kobj_node); in kfd_build_sysfs_node_entry()
652 if (!dev->kobj_perf) in kfd_build_sysfs_node_entry()
658 dev->attr_gpuid.name = "gpu_id"; in kfd_build_sysfs_node_entry()
659 dev->attr_gpuid.mode = KFD_SYSFS_FILE_MODE; in kfd_build_sysfs_node_entry()
660 sysfs_attr_init(&dev->attr_gpuid); in kfd_build_sysfs_node_entry()
661 dev->attr_name.name = "name"; in kfd_build_sysfs_node_entry()
662 dev->attr_name.mode = KFD_SYSFS_FILE_MODE; in kfd_build_sysfs_node_entry()
663 sysfs_attr_init(&dev->attr_name); in kfd_build_sysfs_node_entry()
664 dev->attr_props.name = "properties"; in kfd_build_sysfs_node_entry()
665 dev->attr_props.mode = KFD_SYSFS_FILE_MODE; in kfd_build_sysfs_node_entry()
666 sysfs_attr_init(&dev->attr_props); in kfd_build_sysfs_node_entry()
667 ret = sysfs_create_file(dev->kobj_node, &dev->attr_gpuid); in kfd_build_sysfs_node_entry()
670 ret = sysfs_create_file(dev->kobj_node, &dev->attr_name); in kfd_build_sysfs_node_entry()
673 ret = sysfs_create_file(dev->kobj_node, &dev->attr_props); in kfd_build_sysfs_node_entry()
678 list_for_each_entry(mem, &dev->mem_props, list) { in kfd_build_sysfs_node_entry()
683 dev->kobj_mem, "%d", i); in kfd_build_sysfs_node_entry()
697 list_for_each_entry(cache, &dev->cache_props, list) { in kfd_build_sysfs_node_entry()
702 dev->kobj_cache, "%d", i); in kfd_build_sysfs_node_entry()
716 list_for_each_entry(iolink, &dev->io_link_props, list) { in kfd_build_sysfs_node_entry()
721 dev->kobj_iolink, "%d", i); in kfd_build_sysfs_node_entry()
736 list_for_each_entry(perf, &dev->perf_props, list) { in kfd_build_sysfs_node_entry()
755 ret = sysfs_create_group(dev->kobj_perf, perf->attr_group); in kfd_build_sysfs_node_entry()
766 struct kfd_topology_device *dev; in kfd_build_sysfs_node_tree() local
770 list_for_each_entry(dev, &topology_device_list, list) { in kfd_build_sysfs_node_tree()
771 ret = kfd_build_sysfs_node_entry(dev, i); in kfd_build_sysfs_node_tree()
783 struct kfd_topology_device *dev; in kfd_remove_sysfs_node_tree() local
785 list_for_each_entry(dev, &topology_device_list, list) in kfd_remove_sysfs_node_tree()
786 kfd_remove_sysfs_node_entry(dev); in kfd_remove_sysfs_node_tree()
864 struct kfd_topology_device *dev; in kfd_debug_print_topology() local
868 dev = list_last_entry(&topology_device_list, in kfd_debug_print_topology()
870 if (dev) { in kfd_debug_print_topology()
871 if (dev->node_props.cpu_cores_count && in kfd_debug_print_topology()
872 dev->node_props.simd_count) { in kfd_debug_print_topology()
874 dev->node_props.device_id, in kfd_debug_print_topology()
875 dev->node_props.vendor_id); in kfd_debug_print_topology()
876 } else if (dev->node_props.cpu_cores_count) in kfd_debug_print_topology()
878 else if (dev->node_props.simd_count) in kfd_debug_print_topology()
880 dev->node_props.device_id, in kfd_debug_print_topology()
881 dev->node_props.vendor_id); in kfd_debug_print_topology()
891 struct kfd_topology_device *dev; in kfd_update_system_properties() local
894 dev = list_last_entry(&topology_device_list, in kfd_update_system_properties()
896 if (dev) { in kfd_update_system_properties()
898 (*((uint64_t *)dev->oem_id)) & CRAT_OEMID_64BIT_MASK; in kfd_update_system_properties()
899 sys_props.platform_oem = *((uint64_t *)dev->oem_table_id); in kfd_update_system_properties()
900 sys_props.platform_rev = dev->oem_revision; in kfd_update_system_properties()
959 struct kfd_topology_device *dev; in kfd_is_acpi_crat_invalid() local
961 list_for_each_entry(dev, device_list, list) { in kfd_is_acpi_crat_invalid()
962 if (dev->node_props.cpu_cores_count && in kfd_is_acpi_crat_invalid()
963 dev->node_props.simd_count) in kfd_is_acpi_crat_invalid()
1120 struct kfd_topology_device *dev; in kfd_assign_gpu() local
1127 list_for_each_entry(dev, &topology_device_list, list) { in kfd_assign_gpu()
1132 dev->node_props.cpu_cores_count) in kfd_assign_gpu()
1135 if (!dev->gpu && (dev->node_props.simd_count > 0)) { in kfd_assign_gpu()
1136 dev->gpu = gpu; in kfd_assign_gpu()
1137 out_dev = dev; in kfd_assign_gpu()
1139 list_for_each_entry(mem, &dev->mem_props, list) in kfd_assign_gpu()
1140 mem->gpu = dev->gpu; in kfd_assign_gpu()
1141 list_for_each_entry(cache, &dev->cache_props, list) in kfd_assign_gpu()
1142 cache->gpu = dev->gpu; in kfd_assign_gpu()
1143 list_for_each_entry(iolink, &dev->io_link_props, list) in kfd_assign_gpu()
1144 iolink->gpu = dev->gpu; in kfd_assign_gpu()
1163 static void kfd_fill_mem_clk_max_info(struct kfd_topology_device *dev) in kfd_fill_mem_clk_max_info() argument
1168 if (!dev) in kfd_fill_mem_clk_max_info()
1177 amdgpu_amdkfd_get_local_mem_info(dev->gpu->kgd, &local_mem_info); in kfd_fill_mem_clk_max_info()
1179 list_for_each_entry(mem, &dev->mem_props, list) in kfd_fill_mem_clk_max_info()
1183 static void kfd_fill_iolink_non_crat_info(struct kfd_topology_device *dev) in kfd_fill_iolink_non_crat_info() argument
1191 if (!dev || !dev->gpu) in kfd_fill_iolink_non_crat_info()
1194 pcie_capability_read_dword(dev->gpu->pdev, in kfd_fill_iolink_non_crat_info()
1202 if (!dev->gpu->pci_atomic_requested || in kfd_fill_iolink_non_crat_info()
1203 dev->gpu->device_info->asic_family == CHIP_HAWAII) in kfd_fill_iolink_non_crat_info()
1208 list_for_each_entry(link, &dev->io_link_props, list) { in kfd_fill_iolink_non_crat_info()
1224 struct kfd_topology_device *dev; in kfd_topology_add_device() local
1247 dev = kfd_assign_gpu(gpu); in kfd_topology_add_device()
1248 if (!dev) { in kfd_topology_add_device()
1281 dev = kfd_assign_gpu(gpu); in kfd_topology_add_device()
1282 if (WARN_ON(!dev)) { in kfd_topology_add_device()
1288 dev->gpu_id = gpu_id; in kfd_topology_add_device()
1299 amdgpu_amdkfd_get_cu_info(dev->gpu->kgd, &cu_info); in kfd_topology_add_device()
1301 strncpy(dev->node_props.name, gpu->device_info->asic_name, in kfd_topology_add_device()
1304 dev->node_props.simd_arrays_per_engine = in kfd_topology_add_device()
1307 dev->node_props.vendor_id = gpu->pdev->vendor; in kfd_topology_add_device()
1308 dev->node_props.device_id = gpu->pdev->device; in kfd_topology_add_device()
1309 dev->node_props.location_id = pci_dev_id(gpu->pdev); in kfd_topology_add_device()
1310 dev->node_props.max_engine_clk_fcompute = in kfd_topology_add_device()
1311 amdgpu_amdkfd_get_max_engine_clock_in_mhz(dev->gpu->kgd); in kfd_topology_add_device()
1312 dev->node_props.max_engine_clk_ccompute = in kfd_topology_add_device()
1314 dev->node_props.drm_render_minor = in kfd_topology_add_device()
1317 dev->node_props.hive_id = gpu->hive_id; in kfd_topology_add_device()
1318 dev->node_props.num_sdma_engines = gpu->device_info->num_sdma_engines; in kfd_topology_add_device()
1319 dev->node_props.num_sdma_xgmi_engines = in kfd_topology_add_device()
1321 dev->node_props.num_sdma_queues_per_engine = in kfd_topology_add_device()
1323 dev->node_props.num_gws = (hws_gws_support && in kfd_topology_add_device()
1324 dev->gpu->dqm->sched_policy != KFD_SCHED_POLICY_NO_HWS) ? in kfd_topology_add_device()
1325 amdgpu_amdkfd_get_num_gws(dev->gpu->kgd) : 0; in kfd_topology_add_device()
1326 dev->node_props.num_cp_queues = get_queues_num(dev->gpu->dqm); in kfd_topology_add_device()
1328 kfd_fill_mem_clk_max_info(dev); in kfd_topology_add_device()
1329 kfd_fill_iolink_non_crat_info(dev); in kfd_topology_add_device()
1331 switch (dev->gpu->device_info->asic_family) { in kfd_topology_add_device()
1335 dev->node_props.capability |= ((HSA_CAP_DOORBELL_TYPE_PRE_1_0 << in kfd_topology_add_device()
1346 dev->node_props.capability |= ((HSA_CAP_DOORBELL_TYPE_1_0 << in kfd_topology_add_device()
1359 dev->node_props.capability |= ((HSA_CAP_DOORBELL_TYPE_2_0 << in kfd_topology_add_device()
1365 dev->gpu->device_info->asic_family); in kfd_topology_add_device()
1372 if (dev->gpu->device_info->needs_iommu_device) in kfd_topology_add_device()
1373 dev->node_props.capability |= HSA_CAP_ATS_PRESENT; in kfd_topology_add_device()
1375 dev->node_props.capability &= ~HSA_CAP_ATS_PRESENT; in kfd_topology_add_device()
1382 if (dev->gpu->device_info->asic_family == CHIP_CARRIZO) { in kfd_topology_add_device()
1383 dev->node_props.simd_count = in kfd_topology_add_device()
1385 dev->node_props.max_waves_per_simd = 10; in kfd_topology_add_device()
1388 ctx = amdgpu_ras_get_context((struct amdgpu_device *)(dev->gpu->kgd)); in kfd_topology_add_device()
1391 dev->node_props.capability |= in kfd_topology_add_device()
1395 dev->node_props.capability |= ((ctx->features & BIT(AMDGPU_RAS_BLOCK__UMC)) != 0) ? in kfd_topology_add_device()
1398 dev->node_props.capability |= (ctx->features != 0) ? in kfd_topology_add_device()
1413 struct kfd_topology_device *dev, *tmp; in kfd_topology_remove_device() local
1419 list_for_each_entry_safe(dev, tmp, &topology_device_list, list) in kfd_topology_remove_device()
1420 if (dev->gpu == gpu) { in kfd_topology_remove_device()
1421 gpu_id = dev->gpu_id; in kfd_topology_remove_device()
1422 kfd_remove_sysfs_node_entry(dev); in kfd_topology_remove_device()
1423 kfd_release_topology_device(dev); in kfd_topology_remove_device()
1503 struct kfd_topology_device *dev; in kfd_debugfs_hqds_by_device() local
1509 list_for_each_entry(dev, &topology_device_list, list) { in kfd_debugfs_hqds_by_device()
1510 if (!dev->gpu) { in kfd_debugfs_hqds_by_device()
1515 seq_printf(m, "Node %u, gpu_id %x:\n", i++, dev->gpu->id); in kfd_debugfs_hqds_by_device()
1516 r = dqm_debugfs_hqds(m, dev->gpu->dqm); in kfd_debugfs_hqds_by_device()
1528 struct kfd_topology_device *dev; in kfd_debugfs_rls_by_device() local
1534 list_for_each_entry(dev, &topology_device_list, list) { in kfd_debugfs_rls_by_device()
1535 if (!dev->gpu) { in kfd_debugfs_rls_by_device()
1540 seq_printf(m, "Node %u, gpu_id %x:\n", i++, dev->gpu->id); in kfd_debugfs_rls_by_device()
1541 r = pm_debugfs_runlist(m, &dev->gpu->dqm->packets); in kfd_debugfs_rls_by_device()