Lines Matching refs:hive
333 struct amdgpu_hive_info *hive = container_of( in amdgpu_xgmi_show_attrs() local
337 return snprintf(buf, PAGE_SIZE, "%llu\n", hive->hive_id); in amdgpu_xgmi_show_attrs()
344 struct amdgpu_hive_info *hive = container_of( in amdgpu_xgmi_hive_release() local
347 amdgpu_reset_put_reset_domain(hive->reset_domain); in amdgpu_xgmi_hive_release()
348 hive->reset_domain = NULL; in amdgpu_xgmi_hive_release()
350 mutex_destroy(&hive->hive_lock); in amdgpu_xgmi_hive_release()
351 kfree(hive); in amdgpu_xgmi_hive_release()
493 struct amdgpu_hive_info *hive) in amdgpu_xgmi_sysfs_add_dev_info() argument
534 if (hive->kobj.parent != (&adev->dev->kobj)) { in amdgpu_xgmi_sysfs_add_dev_info()
535 ret = sysfs_create_link(&adev->dev->kobj, &hive->kobj, in amdgpu_xgmi_sysfs_add_dev_info()
543 sprintf(node, "node%d", atomic_read(&hive->number_devices)); in amdgpu_xgmi_sysfs_add_dev_info()
545 ret = sysfs_create_link(&hive->kobj, &adev->dev->kobj, node); in amdgpu_xgmi_sysfs_add_dev_info()
571 struct amdgpu_hive_info *hive) in amdgpu_xgmi_sysfs_rem_dev_info() argument
584 if (hive->kobj.parent != (&adev->dev->kobj)) in amdgpu_xgmi_sysfs_rem_dev_info()
587 sprintf(node, "node%d", atomic_read(&hive->number_devices)); in amdgpu_xgmi_sysfs_rem_dev_info()
588 sysfs_remove_link(&hive->kobj, node); in amdgpu_xgmi_sysfs_rem_dev_info()
596 struct amdgpu_hive_info *hive = NULL; in amdgpu_get_xgmi_hive() local
602 if (adev->hive) { in amdgpu_get_xgmi_hive()
603 kobject_get(&adev->hive->kobj); in amdgpu_get_xgmi_hive()
604 return adev->hive; in amdgpu_get_xgmi_hive()
609 list_for_each_entry(hive, &xgmi_hive_list, node) { in amdgpu_get_xgmi_hive()
610 if (hive->hive_id == adev->gmc.xgmi.hive_id) in amdgpu_get_xgmi_hive()
614 hive = kzalloc(sizeof(*hive), GFP_KERNEL); in amdgpu_get_xgmi_hive()
615 if (!hive) { in amdgpu_get_xgmi_hive()
618 hive = NULL; in amdgpu_get_xgmi_hive()
623 ret = kobject_init_and_add(&hive->kobj, in amdgpu_get_xgmi_hive()
629 kobject_put(&hive->kobj); in amdgpu_get_xgmi_hive()
630 hive = NULL; in amdgpu_get_xgmi_hive()
647 hive->reset_domain = in amdgpu_get_xgmi_hive()
649 if (!hive->reset_domain) { in amdgpu_get_xgmi_hive()
652 kobject_put(&hive->kobj); in amdgpu_get_xgmi_hive()
653 hive = NULL; in amdgpu_get_xgmi_hive()
658 hive->reset_domain = adev->reset_domain; in amdgpu_get_xgmi_hive()
662 hive->hive_id = adev->gmc.xgmi.hive_id; in amdgpu_get_xgmi_hive()
663 INIT_LIST_HEAD(&hive->device_list); in amdgpu_get_xgmi_hive()
664 INIT_LIST_HEAD(&hive->node); in amdgpu_get_xgmi_hive()
665 mutex_init(&hive->hive_lock); in amdgpu_get_xgmi_hive()
666 atomic_set(&hive->number_devices, 0); in amdgpu_get_xgmi_hive()
667 task_barrier_init(&hive->tb); in amdgpu_get_xgmi_hive()
668 hive->pstate = AMDGPU_XGMI_PSTATE_UNKNOWN; in amdgpu_get_xgmi_hive()
669 hive->hi_req_gpu = NULL; in amdgpu_get_xgmi_hive()
675 hive->hi_req_count = AMDGPU_MAX_XGMI_DEVICE_PER_HIVE; in amdgpu_get_xgmi_hive()
676 list_add_tail(&hive->node, &xgmi_hive_list); in amdgpu_get_xgmi_hive()
679 if (hive) in amdgpu_get_xgmi_hive()
680 kobject_get(&hive->kobj); in amdgpu_get_xgmi_hive()
682 return hive; in amdgpu_get_xgmi_hive()
685 void amdgpu_put_xgmi_hive(struct amdgpu_hive_info *hive) in amdgpu_put_xgmi_hive() argument
687 if (hive) in amdgpu_put_xgmi_hive()
688 kobject_put(&hive->kobj); in amdgpu_put_xgmi_hive()
694 struct amdgpu_hive_info *hive; in amdgpu_xgmi_set_pstate() local
699 hive = amdgpu_get_xgmi_hive(adev); in amdgpu_xgmi_set_pstate()
700 if (!hive) in amdgpu_xgmi_set_pstate()
703 request_adev = hive->hi_req_gpu ? hive->hi_req_gpu : adev; in amdgpu_xgmi_set_pstate()
704 init_low = hive->pstate == AMDGPU_XGMI_PSTATE_UNKNOWN; in amdgpu_xgmi_set_pstate()
705 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_set_pstate()
709 if (!hive || adev->asic_type != CHIP_VEGA20) in amdgpu_xgmi_set_pstate()
712 mutex_lock(&hive->hive_lock); in amdgpu_xgmi_set_pstate()
715 hive->hi_req_count++; in amdgpu_xgmi_set_pstate()
717 hive->hi_req_count--; in amdgpu_xgmi_set_pstate()
723 if (hive->pstate == pstate || in amdgpu_xgmi_set_pstate()
724 (!is_hi_req && hive->hi_req_count && !init_low)) in amdgpu_xgmi_set_pstate()
739 hive->pstate = hive->hi_req_count ? in amdgpu_xgmi_set_pstate()
740 hive->pstate : AMDGPU_XGMI_PSTATE_MIN; in amdgpu_xgmi_set_pstate()
742 hive->pstate = pstate; in amdgpu_xgmi_set_pstate()
743 hive->hi_req_gpu = pstate != AMDGPU_XGMI_PSTATE_MIN ? in amdgpu_xgmi_set_pstate()
747 mutex_unlock(&hive->hive_lock); in amdgpu_xgmi_set_pstate()
751 int amdgpu_xgmi_update_topology(struct amdgpu_hive_info *hive, struct amdgpu_device *adev) in amdgpu_xgmi_update_topology() argument
760 atomic_read(&hive->number_devices), in amdgpu_xgmi_update_topology()
809 static int amdgpu_xgmi_initialize_hive_get_data_partition(struct amdgpu_hive_info *hive, in amdgpu_xgmi_initialize_hive_get_data_partition() argument
815 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_initialize_hive_get_data_partition()
854 struct amdgpu_hive_info *hive; in amdgpu_xgmi_add_device() local
890 hive = amdgpu_get_xgmi_hive(adev); in amdgpu_xgmi_add_device()
891 if (!hive) { in amdgpu_xgmi_add_device()
898 mutex_lock(&hive->hive_lock); in amdgpu_xgmi_add_device()
902 list_add_tail(&adev->gmc.xgmi.head, &hive->device_list); in amdgpu_xgmi_add_device()
903 list_for_each_entry(entry, &hive->device_list, head) in amdgpu_xgmi_add_device()
906 atomic_set(&hive->number_devices, count); in amdgpu_xgmi_add_device()
908 task_barrier_add_task(&hive->tb); in amdgpu_xgmi_add_device()
912 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_add_device()
920 ret = amdgpu_xgmi_update_topology(hive, tmp_adev); in amdgpu_xgmi_add_device()
940 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_add_device()
945 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_add_device()
963 ret = amdgpu_xgmi_initialize_hive_get_data_partition(hive, true); in amdgpu_xgmi_add_device()
968 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_add_device()
981 ret = amdgpu_xgmi_initialize_hive_get_data_partition(hive, false); in amdgpu_xgmi_add_device()
989 ret = amdgpu_xgmi_sysfs_add_dev_info(adev, hive); in amdgpu_xgmi_add_device()
992 mutex_unlock(&hive->hive_lock); in amdgpu_xgmi_add_device()
995 adev->hive = hive; in amdgpu_xgmi_add_device()
999 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_add_device()
1010 struct amdgpu_hive_info *hive = adev->hive; in amdgpu_xgmi_remove_device() local
1015 if (!hive) in amdgpu_xgmi_remove_device()
1018 mutex_lock(&hive->hive_lock); in amdgpu_xgmi_remove_device()
1019 task_barrier_rem_task(&hive->tb); in amdgpu_xgmi_remove_device()
1020 amdgpu_xgmi_sysfs_rem_dev_info(adev, hive); in amdgpu_xgmi_remove_device()
1021 if (hive->hi_req_gpu == adev) in amdgpu_xgmi_remove_device()
1022 hive->hi_req_gpu = NULL; in amdgpu_xgmi_remove_device()
1024 mutex_unlock(&hive->hive_lock); in amdgpu_xgmi_remove_device()
1026 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_remove_device()
1027 adev->hive = NULL; in amdgpu_xgmi_remove_device()
1029 if (atomic_dec_return(&hive->number_devices) == 0) { in amdgpu_xgmi_remove_device()
1032 list_del(&hive->node); in amdgpu_xgmi_remove_device()
1035 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_remove_device()