Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdkfd: add yellow carp KFD support

This patch is to add GFX10 based Yellow Carp KFD support.
We will bypass IOMMU v2.

Signed-off-by: Aaron Liu <aaron.liu@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Aaron Liu and committed by
Alex Deucher
bf9d4e88 5c462ca9

+75
+52
drivers/gpu/drm/amd/amdkfd/kfd_crat.c
··· 746 746 }, 747 747 }; 748 748 749 + static struct kfd_gpu_cache_info yellow_carp_cache_info[] = { 750 + { 751 + /* TCP L1 Cache per CU */ 752 + .cache_size = 16, 753 + .cache_level = 1, 754 + .flags = (CRAT_CACHE_FLAGS_ENABLED | 755 + CRAT_CACHE_FLAGS_DATA_CACHE | 756 + CRAT_CACHE_FLAGS_SIMD_CACHE), 757 + .num_cu_shared = 1, 758 + }, 759 + { 760 + /* Scalar L1 Instruction Cache per SQC */ 761 + .cache_size = 32, 762 + .cache_level = 1, 763 + .flags = (CRAT_CACHE_FLAGS_ENABLED | 764 + CRAT_CACHE_FLAGS_INST_CACHE | 765 + CRAT_CACHE_FLAGS_SIMD_CACHE), 766 + .num_cu_shared = 2, 767 + }, 768 + { 769 + /* Scalar L1 Data Cache per SQC */ 770 + .cache_size = 16, 771 + .cache_level = 1, 772 + .flags = (CRAT_CACHE_FLAGS_ENABLED | 773 + CRAT_CACHE_FLAGS_DATA_CACHE | 774 + CRAT_CACHE_FLAGS_SIMD_CACHE), 775 + .num_cu_shared = 2, 776 + }, 777 + { 778 + /* GL1 Data Cache per SA */ 779 + .cache_size = 128, 780 + .cache_level = 1, 781 + .flags = (CRAT_CACHE_FLAGS_ENABLED | 782 + CRAT_CACHE_FLAGS_DATA_CACHE | 783 + CRAT_CACHE_FLAGS_SIMD_CACHE), 784 + .num_cu_shared = 6, 785 + }, 786 + { 787 + /* L2 Data Cache per GPU (Total Tex Cache) */ 788 + .cache_size = 2048, 789 + .cache_level = 2, 790 + .flags = (CRAT_CACHE_FLAGS_ENABLED | 791 + CRAT_CACHE_FLAGS_DATA_CACHE | 792 + CRAT_CACHE_FLAGS_SIMD_CACHE), 793 + .num_cu_shared = 6, 794 + }, 795 + }; 796 + 749 797 static void kfd_populated_cu_info_cpu(struct kfd_topology_device *dev, 750 798 struct crat_subtype_computeunit *cu) 751 799 { ··· 1430 1382 case CHIP_BEIGE_GOBY: 1431 1383 pcache_info = beige_goby_cache_info; 1432 1384 num_of_cache_types = ARRAY_SIZE(beige_goby_cache_info); 1385 + break; 1386 + case CHIP_YELLOW_CARP: 1387 + pcache_info = yellow_carp_cache_info; 1388 + num_of_cache_types = ARRAY_SIZE(yellow_carp_cache_info); 1433 1389 break; 1434 1390 default: 1435 1391 return -EINVAL;
+19
drivers/gpu/drm/amd/amdkfd/kfd_device.c
··· 83 83 [CHIP_VANGOGH] = &gfx_v10_3_kfd2kgd, 84 84 [CHIP_DIMGREY_CAVEFISH] = &gfx_v10_3_kfd2kgd, 85 85 [CHIP_BEIGE_GOBY] = &gfx_v10_3_kfd2kgd, 86 + [CHIP_YELLOW_CARP] = &gfx_v10_3_kfd2kgd, 86 87 }; 87 88 88 89 #ifdef KFD_SUPPORT_IOMMU_V2 ··· 578 577 .num_sdma_queues_per_engine = 8, 579 578 }; 580 579 580 + static const struct kfd_device_info yellow_carp_device_info = { 581 + .asic_family = CHIP_YELLOW_CARP, 582 + .asic_name = "yellow_carp", 583 + .max_pasid_bits = 16, 584 + .max_no_of_hqd = 24, 585 + .doorbell_size = 8, 586 + .ih_ring_entry_size = 8 * sizeof(uint32_t), 587 + .event_interrupt_class = &event_interrupt_class_v9, 588 + .num_of_watch_points = 4, 589 + .mqd_size_aligned = MQD_SIZE_ALIGNED, 590 + .needs_iommu_device = false, 591 + .supports_cwsr = true, 592 + .needs_pci_atomics = false, 593 + .num_sdma_engines = 1, 594 + .num_xgmi_sdma_engines = 0, 595 + .num_sdma_queues_per_engine = 2, 596 + }; 581 597 582 598 /* For each entry, [0] is regular and [1] is virtualisation device. */ 583 599 static const struct kfd_device_info *kfd_supported_devices[][2] = { ··· 624 606 [CHIP_VANGOGH] = {&vangogh_device_info, NULL}, 625 607 [CHIP_DIMGREY_CAVEFISH] = {&dimgrey_cavefish_device_info, &dimgrey_cavefish_device_info}, 626 608 [CHIP_BEIGE_GOBY] = {&beige_goby_device_info, &beige_goby_device_info}, 609 + [CHIP_YELLOW_CARP] = {&yellow_carp_device_info, NULL}, 627 610 }; 628 611 629 612 static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
+1
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
··· 1937 1937 case CHIP_VANGOGH: 1938 1938 case CHIP_DIMGREY_CAVEFISH: 1939 1939 case CHIP_BEIGE_GOBY: 1940 + case CHIP_YELLOW_CARP: 1940 1941 device_queue_manager_init_v10_navi10(&dqm->asic_ops); 1941 1942 break; 1942 1943 default:
+1
drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
··· 425 425 case CHIP_VANGOGH: 426 426 case CHIP_DIMGREY_CAVEFISH: 427 427 case CHIP_BEIGE_GOBY: 428 + case CHIP_YELLOW_CARP: 428 429 kfd_init_apertures_v9(pdd, id); 429 430 break; 430 431 default:
+1
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
··· 250 250 case CHIP_VANGOGH: 251 251 case CHIP_DIMGREY_CAVEFISH: 252 252 case CHIP_BEIGE_GOBY: 253 + case CHIP_YELLOW_CARP: 253 254 pm->pmf = &kfd_v9_pm_funcs; 254 255 break; 255 256 case CHIP_ALDEBARAN:
+1
drivers/gpu/drm/amd/amdkfd/kfd_topology.c
··· 1399 1399 case CHIP_VANGOGH: 1400 1400 case CHIP_DIMGREY_CAVEFISH: 1401 1401 case CHIP_BEIGE_GOBY: 1402 + case CHIP_YELLOW_CARP: 1402 1403 dev->node_props.capability |= ((HSA_CAP_DOORBELL_TYPE_2_0 << 1403 1404 HSA_CAP_DOORBELL_TYPE_TOTALBITS_SHIFT) & 1404 1405 HSA_CAP_DOORBELL_TYPE_TOTALBITS_MASK);