drm/amdkfd: drop struct kfd_cu_info
[linux-2.6-block.git] / drivers / gpu / drm / amd / amdkfd / kfd_crat.c
index 49f40d9f16e8652e79582d13d5bcc95e26f4a5ad..0e792a8496d656f9bd8f4a717adbb1c6a13d1653 100644 (file)
@@ -26,7 +26,6 @@
 #include "kfd_crat.h"
 #include "kfd_priv.h"
 #include "kfd_topology.h"
-#include "kfd_iommu.h"
 #include "amdgpu.h"
 #include "amdgpu_amdkfd.h"
 
@@ -1523,6 +1522,7 @@ int kfd_get_gpu_cache_info(struct kfd_node *kdev, struct kfd_gpu_cache_info **pc
                case IP_VERSION(11, 0, 2):
                case IP_VERSION(11, 0, 3):
                case IP_VERSION(11, 0, 4):
+               case IP_VERSION(11, 5, 0):
                        num_of_cache_types =
                                kfd_fill_gpu_cache_info_from_gfx_config(kdev->kfd, *pcache_info);
                        break;
@@ -1536,76 +1536,6 @@ int kfd_get_gpu_cache_info(struct kfd_node *kdev, struct kfd_gpu_cache_info **pc
        return num_of_cache_types;
 }
 
-static bool kfd_ignore_crat(void)
-{
-       bool ret;
-
-       if (ignore_crat)
-               return true;
-
-#ifndef KFD_SUPPORT_IOMMU_V2
-       ret = true;
-#else
-       ret = false;
-#endif
-
-       return ret;
-}
-
-/*
- * kfd_create_crat_image_acpi - Allocates memory for CRAT image and
- * copies CRAT from ACPI (if available).
- * NOTE: Call kfd_destroy_crat_image to free CRAT image memory
- *
- *     @crat_image: CRAT read from ACPI. If no CRAT in ACPI then
- *                  crat_image will be NULL
- *     @size: [OUT] size of crat_image
- *
- *     Return 0 if successful else return error code
- */
-int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
-{
-       struct acpi_table_header *crat_table;
-       acpi_status status;
-       void *pcrat_image;
-       int rc = 0;
-
-       if (!crat_image)
-               return -EINVAL;
-
-       *crat_image = NULL;
-
-       if (kfd_ignore_crat()) {
-               pr_info("CRAT table disabled by module option\n");
-               return -ENODATA;
-       }
-
-       /* Fetch the CRAT table from ACPI */
-       status = acpi_get_table(CRAT_SIGNATURE, 0, &crat_table);
-       if (status == AE_NOT_FOUND) {
-               pr_info("CRAT table not found\n");
-               return -ENODATA;
-       } else if (ACPI_FAILURE(status)) {
-               const char *err = acpi_format_exception(status);
-
-               pr_err("CRAT table error: %s\n", err);
-               return -EINVAL;
-       }
-
-       pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
-       if (!pcrat_image) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       memcpy(pcrat_image, crat_table, crat_table->length);
-       *crat_image = pcrat_image;
-       *size = crat_table->length;
-out:
-       acpi_put_table(crat_table);
-       return rc;
-}
-
 /* Memory required to create Virtual CRAT.
  * Since there is no easy way to predict the amount of memory required, the
  * following amount is allocated for GPU Virtual CRAT. This is
@@ -2108,11 +2038,12 @@ static int kfd_create_vcrat_image_gpu(void *pcrat_image,
                                      uint32_t proximity_domain)
 {
        struct crat_header *crat_table = (struct crat_header *)pcrat_image;
+       struct amdgpu_gfx_config *gfx_info = &kdev->adev->gfx.config;
+       struct amdgpu_cu_info *cu_info = &kdev->adev->gfx.cu_info;
        struct crat_subtype_generic *sub_type_hdr;
        struct kfd_local_mem_info local_mem_info;
        struct kfd_topology_device *peer_dev;
        struct crat_subtype_computeunit *cu;
-       struct kfd_cu_info cu_info;
        int avail_size = *size;
        uint32_t total_num_of_cu;
        uint32_t nid = 0;
@@ -2156,29 +2087,23 @@ static int kfd_create_vcrat_image_gpu(void *pcrat_image,
        cu->flags |= CRAT_CU_FLAGS_GPU_PRESENT;
        cu->proximity_domain = proximity_domain;
 
-       amdgpu_amdkfd_get_cu_info(kdev->adev, &cu_info);
-       cu->num_simd_per_cu = cu_info.simd_per_cu;
-       cu->num_simd_cores = cu_info.simd_per_cu * cu_info.cu_active_number;
-       cu->max_waves_simd = cu_info.max_waves_per_simd;
+       cu->num_simd_per_cu = cu_info->simd_per_cu;
+       cu->num_simd_cores = cu_info->simd_per_cu *
+                       (cu_info->number / kdev->kfd->num_nodes);
+       cu->max_waves_simd = cu_info->max_waves_per_simd;
 
-       cu->wave_front_size = cu_info.wave_front_size;
-       cu->array_count = cu_info.num_shader_arrays_per_engine *
-               cu_info.num_shader_engines;
-       total_num_of_cu = (cu->array_count * cu_info.num_cu_per_sh);
+       cu->wave_front_size = cu_info->wave_front_size;
+       cu->array_count = gfx_info->max_sh_per_se *
+               gfx_info->max_shader_engines;
+       total_num_of_cu = (cu->array_count * gfx_info->max_cu_per_sh);
        cu->processor_id_low = get_and_inc_gpu_processor_id(total_num_of_cu);
-       cu->num_cu_per_array = cu_info.num_cu_per_sh;
-       cu->max_slots_scatch_cu = cu_info.max_scratch_slots_per_cu;
-       cu->num_banks = cu_info.num_shader_engines;
-       cu->lds_size_in_kb = cu_info.lds_size;
+       cu->num_cu_per_array = gfx_info->max_cu_per_sh;
+       cu->max_slots_scatch_cu = cu_info->max_scratch_slots_per_cu;
+       cu->num_banks = gfx_info->max_shader_engines;
+       cu->lds_size_in_kb = cu_info->lds_size;
 
        cu->hsa_capability = 0;
 
-       /* Check if this node supports IOMMU. During parsing this flag will
-        * translate to HSA_CAP_ATS_PRESENT
-        */
-       if (!kfd_iommu_check_device(kdev->kfd))
-               cu->hsa_capability |= CRAT_CU_FLAGS_IOMMU_PRESENT;
-
        crat_table->length += sub_type_hdr->length;
        crat_table->total_entries++;
 
@@ -2191,7 +2116,7 @@ static int kfd_create_vcrat_image_gpu(void *pcrat_image,
        sub_type_hdr = (typeof(sub_type_hdr))((char *)sub_type_hdr +
                        sub_type_hdr->length);
 
-       if (debug_largebar)
+       if (kdev->adev->debug_largebar)
                local_mem_info.local_mem_size_private = 0;
 
        if (local_mem_info.local_mem_size_private == 0)