drm/amdkfd: Initialize HSA_CAP_ATS_PRESENT capability in topology codes
authorOak Zeng <Oak.Zeng@amd.com>
Mon, 10 Jun 2019 20:22:35 +0000 (15:22 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 11 Jun 2019 17:57:25 +0000 (12:57 -0500)
Move HSA_CAP_ATS_PRESENT initialization logic from kfd iommu codes to
kfd topology codes. This removes kfd_iommu_device_init's dependency
on kfd_topology_add_device. Also remove duplicate code setting the
same.

Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_iommu.c
drivers/gpu/drm/amd/amdkfd/kfd_topology.c

index 0149475..5f35df2 100644 (file)
@@ -66,16 +66,8 @@ int kfd_iommu_device_init(struct kfd_dev *kfd)
 
        top_dev = kfd_topology_device_by_id(kfd->id);
 
-       /*
-        * Overwrite ATS capability according to needs_iommu_device to fix
-        * potential missing corresponding bit in CRAT of BIOS.
-        */
-       if (!kfd->device_info->needs_iommu_device) {
-               top_dev->node_props.capability &= ~HSA_CAP_ATS_PRESENT;
+       if (!kfd->device_info->needs_iommu_device)
                return 0;
-       }
-
-       top_dev->node_props.capability |= HSA_CAP_ATS_PRESENT;
 
        iommu_info.flags = 0;
        err = amd_iommu_device_info(kfd->pdev, &iommu_info);
index d241a86..2c40ab4 100644 (file)
@@ -1330,17 +1330,24 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
                     dev->gpu->device_info->asic_family);
        }
 
+       /*
+       * Overwrite ATS capability according to needs_iommu_device to fix
+       * potential missing corresponding bit in CRAT of BIOS.
+       */
+       if (dev->gpu->device_info->needs_iommu_device)
+               dev->node_props.capability |= HSA_CAP_ATS_PRESENT;
+       else
+               dev->node_props.capability &= ~HSA_CAP_ATS_PRESENT;
+
        /* Fix errors in CZ CRAT.
         * simd_count: Carrizo CRAT reports wrong simd_count, probably
         *              because it doesn't consider masked out CUs
         * max_waves_per_simd: Carrizo reports wrong max_waves_per_simd
-        * capability flag: Carrizo CRAT doesn't report IOMMU flags
         */
        if (dev->gpu->device_info->asic_family == CHIP_CARRIZO) {
                dev->node_props.simd_count =
                        cu_info.simd_per_cu * cu_info.cu_active_number;
                dev->node_props.max_waves_per_simd = 10;
-               dev->node_props.capability |= HSA_CAP_ATS_PRESENT;
        }
 
        ctx = amdgpu_ras_get_context((struct amdgpu_device *)(dev->gpu->kgd));