diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2823-drm-amdgpu-get_fw_version-isn-t-ASIC-specific.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2823-drm-amdgpu-get_fw_version-isn-t-ASIC-specific.patch | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2823-drm-amdgpu-get_fw_version-isn-t-ASIC-specific.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2823-drm-amdgpu-get_fw_version-isn-t-ASIC-specific.patch new file mode 100644 index 00000000..185ceeb9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2823-drm-amdgpu-get_fw_version-isn-t-ASIC-specific.patch @@ -0,0 +1,449 @@ +From 6c2129d6c91b54fcfef95405d0817f1caf64f5d5 Mon Sep 17 00:00:00 2001 +From: Amber Lin <Amber.Lin@amd.com> +Date: Fri, 12 Apr 2019 11:07:16 -0400 +Subject: [PATCH 2823/2940] drm/amdgpu: get_fw_version isn't ASIC specific + +Method of getting firmware version is the same across ASICs, so remove +them from ASIC-specific files and create one in amdgpu_amdkfd.c. This new +created get_fw_version simply reads fw_version from adev->gfx than parsing +the ucode header. + +Change-Id: I52042e76ff14c5eb00f2651c4c214c8738b3499e +Signed-off-by: Amber Lin <Amber.Lin@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 37 +++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 14 +++++ + .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 61 ------------------- + .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 61 ------------------- + .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 54 ---------------- + drivers/gpu/drm/amd/amdkfd/kfd_device.c | 4 +- + .../gpu/drm/amd/include/kgd_kfd_interface.h | 16 ----- + 7 files changed, 53 insertions(+), 194 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +index b2657294b811..1a699e47777d 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +@@ -385,6 +385,43 @@ void amdgpu_amdkfd_free_gws(struct kgd_dev *kgd, void *mem_obj) + } + + ++uint32_t amdgpu_amdkfd_get_fw_version(struct kgd_dev *kgd, ++ enum kgd_engine_type type) ++{ ++ struct amdgpu_device *adev = (struct amdgpu_device *)kgd; ++ ++ switch (type) { ++ case KGD_ENGINE_PFP: ++ return adev->gfx.pfp_fw_version; ++ ++ case KGD_ENGINE_ME: ++ return adev->gfx.me_fw_version; ++ ++ case KGD_ENGINE_CE: ++ return adev->gfx.ce_fw_version; ++ ++ case KGD_ENGINE_MEC1: ++ return adev->gfx.mec_fw_version; ++ ++ case KGD_ENGINE_MEC2: ++ return adev->gfx.mec2_fw_version; ++ ++ case KGD_ENGINE_RLC: ++ return adev->gfx.rlc_fw_version; ++ ++ case KGD_ENGINE_SDMA1: ++ return adev->sdma.instance[0].fw_version; ++ ++ case KGD_ENGINE_SDMA2: ++ return adev->sdma.instance[1].fw_version; ++ ++ default: ++ return 0; ++ } ++ ++ return 0; ++} ++ + void amdgpu_amdkfd_get_local_mem_info(struct kgd_dev *kgd, + struct kfd_local_mem_info *mem_info) + { +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +index 3a521cf36c90..5331d9c8c9f6 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +@@ -81,6 +81,18 @@ struct amdgpu_kfd_dev { + uint64_t vram_used; + }; + ++enum kgd_engine_type { ++ KGD_ENGINE_PFP = 1, ++ KGD_ENGINE_ME, ++ KGD_ENGINE_CE, ++ KGD_ENGINE_MEC1, ++ KGD_ENGINE_MEC2, ++ KGD_ENGINE_RLC, ++ KGD_ENGINE_SDMA1, ++ KGD_ENGINE_SDMA2, ++ KGD_ENGINE_MAX ++}; ++ + struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context, + struct mm_struct *mm); + bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm); +@@ -151,6 +163,8 @@ int amdgpu_amdkfd_alloc_gws(struct kgd_dev *kgd, size_t size, void **mem_obj); + void amdgpu_amdkfd_free_gws(struct kgd_dev *kgd, void *mem_obj); + int amdgpu_amdkfd_add_gws_to_process(void *info, void *gws, struct kgd_mem **mem); + int amdgpu_amdkfd_remove_gws_from_process(void *info, void *mem); ++uint32_t amdgpu_amdkfd_get_fw_version(struct kgd_dev *kgd, ++ enum kgd_engine_type type); + void amdgpu_amdkfd_get_local_mem_info(struct kgd_dev *kgd, + struct kfd_local_mem_info *mem_info); + uint64_t amdgpu_amdkfd_get_gpu_clock_counter(struct kgd_dev *kgd); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c +index 268d81d7bfa0..c73aac88d0ab 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c +@@ -25,14 +25,12 @@ + + #include <linux/fdtable.h> + #include <linux/uaccess.h> +-#include <linux/firmware.h> + #include <linux/mmu_context.h> + #include <drm/drmP.h> + #include "amdgpu.h" + #include "amdgpu_amdkfd.h" + #include "cikd.h" + #include "cik_sdma.h" +-#include "amdgpu_ucode.h" + #include "gfx_v7_0.h" + #include "gca/gfx_7_2_d.h" + #include "gca/gfx_7_2_enum.h" +@@ -142,7 +140,6 @@ static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd, uint8_t vmid); + static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd, + uint8_t vmid); + +-static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type); + static void set_scratch_backing_va(struct kgd_dev *kgd, + uint64_t va, uint32_t vmid); + static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid, +@@ -194,7 +191,6 @@ static const struct kfd2kgd_calls kfd2kgd = { + .address_watch_get_offset = kgd_address_watch_get_offset, + .get_atc_vmid_pasid_mapping_pasid = get_atc_vmid_pasid_mapping_pasid, + .get_atc_vmid_pasid_mapping_valid = get_atc_vmid_pasid_mapping_valid, +- .get_fw_version = get_fw_version, + .set_scratch_backing_va = set_scratch_backing_va, + .get_tile_config = get_tile_config, + .set_vm_context_page_table_base = set_vm_context_page_table_base, +@@ -794,63 +790,6 @@ static void set_scratch_backing_va(struct kgd_dev *kgd, + unlock_srbm(kgd); + } + +-static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) +-{ +- struct amdgpu_device *adev = (struct amdgpu_device *) kgd; +- const union amdgpu_firmware_header *hdr; +- +- switch (type) { +- case KGD_ENGINE_PFP: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.pfp_fw->data; +- break; +- +- case KGD_ENGINE_ME: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.me_fw->data; +- break; +- +- case KGD_ENGINE_CE: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.ce_fw->data; +- break; +- +- case KGD_ENGINE_MEC1: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.mec_fw->data; +- break; +- +- case KGD_ENGINE_MEC2: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.mec2_fw->data; +- break; +- +- case KGD_ENGINE_RLC: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.rlc_fw->data; +- break; +- +- case KGD_ENGINE_SDMA1: +- hdr = (const union amdgpu_firmware_header *) +- adev->sdma.instance[0].fw->data; +- break; +- +- case KGD_ENGINE_SDMA2: +- hdr = (const union amdgpu_firmware_header *) +- adev->sdma.instance[1].fw->data; +- break; +- +- default: +- return 0; +- } +- +- if (hdr == NULL) +- return 0; +- +- /* Only 12 bit in use*/ +- return hdr->common.ucode_version; +-} +- + static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid, + uint64_t page_table_base) + { +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c +index f62110fe331b..930b45b863cd 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c +@@ -26,12 +26,10 @@ + #include <linux/module.h> + #include <linux/fdtable.h> + #include <linux/uaccess.h> +-#include <linux/firmware.h> + #include <linux/mmu_context.h> + #include <drm/drmP.h> + #include "amdgpu.h" + #include "amdgpu_amdkfd.h" +-#include "amdgpu_ucode.h" + #include "amdgpu_amdkfd_gfx_v8.h" + #include "gca/gfx_8_0_sh_mask.h" + #include "gca/gfx_8_0_d.h" +@@ -105,7 +103,6 @@ static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd, + uint8_t vmid); + static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd, + uint8_t vmid); +-static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type); + static void set_scratch_backing_va(struct kgd_dev *kgd, + uint64_t va, uint32_t vmid); + static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid, +@@ -158,7 +155,6 @@ static const struct kfd2kgd_calls kfd2kgd = { + get_atc_vmid_pasid_mapping_pasid, + .get_atc_vmid_pasid_mapping_valid = + get_atc_vmid_pasid_mapping_valid, +- .get_fw_version = get_fw_version, + .set_scratch_backing_va = set_scratch_backing_va, + .get_tile_config = get_tile_config, + .set_vm_context_page_table_base = set_vm_context_page_table_base, +@@ -803,63 +799,6 @@ static void set_scratch_backing_va(struct kgd_dev *kgd, + unlock_srbm(kgd); + } + +-static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) +-{ +- struct amdgpu_device *adev = (struct amdgpu_device *) kgd; +- const union amdgpu_firmware_header *hdr; +- +- switch (type) { +- case KGD_ENGINE_PFP: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.pfp_fw->data; +- break; +- +- case KGD_ENGINE_ME: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.me_fw->data; +- break; +- +- case KGD_ENGINE_CE: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.ce_fw->data; +- break; +- +- case KGD_ENGINE_MEC1: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.mec_fw->data; +- break; +- +- case KGD_ENGINE_MEC2: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.mec2_fw->data; +- break; +- +- case KGD_ENGINE_RLC: +- hdr = (const union amdgpu_firmware_header *) +- adev->gfx.rlc_fw->data; +- break; +- +- case KGD_ENGINE_SDMA1: +- hdr = (const union amdgpu_firmware_header *) +- adev->sdma.instance[0].fw->data; +- break; +- +- case KGD_ENGINE_SDMA2: +- hdr = (const union amdgpu_firmware_header *) +- adev->sdma.instance[1].fw->data; +- break; +- +- default: +- return 0; +- } +- +- if (hdr == NULL) +- return 0; +- +- /* Only 12 bit in use*/ +- return hdr->common.ucode_version; +-} +- + static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid, + uint64_t page_table_base) + { +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c +index dbe29d43e34a..e5c5eb799e23 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c +@@ -26,12 +26,10 @@ + #include <linux/module.h> + #include <linux/fdtable.h> + #include <linux/uaccess.h> +-#include <linux/firmware.h> + #include <linux/mmu_context.h> + #include <drm/drmP.h> + #include "amdgpu.h" + #include "amdgpu_amdkfd.h" +-#include "amdgpu_ucode.h" + #include "amdgpu_amdkfd_gfx_v8.h" + #include "soc15_hw_ip.h" + #include "gc/gc_9_0_offset.h" +@@ -134,7 +132,6 @@ static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd, + uint8_t vmid); + static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid, + uint64_t page_table_base); +-static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type); + static void set_scratch_backing_va(struct kgd_dev *kgd, + uint64_t va, uint32_t vmid); + static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid); +@@ -181,7 +178,6 @@ static const struct kfd2kgd_calls kfd2kgd = { + get_atc_vmid_pasid_mapping_pasid, + .get_atc_vmid_pasid_mapping_valid = + get_atc_vmid_pasid_mapping_valid, +- .get_fw_version = get_fw_version, + .set_scratch_backing_va = set_scratch_backing_va, + .get_tile_config = amdgpu_amdkfd_get_tile_config, + .set_vm_context_page_table_base = set_vm_context_page_table_base, +@@ -1093,56 +1089,6 @@ static void set_scratch_backing_va(struct kgd_dev *kgd, + */ + } + +-/* FIXME: Does this need to be ASIC-specific code? */ +-static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type) +-{ +- struct amdgpu_device *adev = (struct amdgpu_device *) kgd; +- const union amdgpu_firmware_header *hdr; +- +- switch (type) { +- case KGD_ENGINE_PFP: +- hdr = (const union amdgpu_firmware_header *)adev->gfx.pfp_fw->data; +- break; +- +- case KGD_ENGINE_ME: +- hdr = (const union amdgpu_firmware_header *)adev->gfx.me_fw->data; +- break; +- +- case KGD_ENGINE_CE: +- hdr = (const union amdgpu_firmware_header *)adev->gfx.ce_fw->data; +- break; +- +- case KGD_ENGINE_MEC1: +- hdr = (const union amdgpu_firmware_header *)adev->gfx.mec_fw->data; +- break; +- +- case KGD_ENGINE_MEC2: +- hdr = (const union amdgpu_firmware_header *)adev->gfx.mec2_fw->data; +- break; +- +- case KGD_ENGINE_RLC: +- hdr = (const union amdgpu_firmware_header *)adev->gfx.rlc_fw->data; +- break; +- +- case KGD_ENGINE_SDMA1: +- hdr = (const union amdgpu_firmware_header *)adev->sdma.instance[0].fw->data; +- break; +- +- case KGD_ENGINE_SDMA2: +- hdr = (const union amdgpu_firmware_header *)adev->sdma.instance[1].fw->data; +- break; +- +- default: +- return 0; +- } +- +- if (hdr == NULL) +- return 0; +- +- /* Only 12 bit in use*/ +- return hdr->common.ucode_version; +-} +- + static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid, + uint64_t page_table_base) + { +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c +index 79fd90511acd..bbab3c740dbe 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c +@@ -557,9 +557,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, + unsigned int size; + + kfd->ddev = ddev; +- kfd->mec_fw_version = kfd->kfd2kgd->get_fw_version(kfd->kgd, ++ kfd->mec_fw_version = amdgpu_amdkfd_get_fw_version(kfd->kgd, + KGD_ENGINE_MEC1); +- kfd->sdma_fw_version = kfd->kfd2kgd->get_fw_version(kfd->kgd, ++ kfd->sdma_fw_version = amdgpu_amdkfd_get_fw_version(kfd->kgd, + KGD_ENGINE_SDMA1); + kfd->shared_resources = *gpu_resources; + +diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h +index ffc93d12f6a5..66608a381400 100644 +--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h ++++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h +@@ -88,18 +88,6 @@ enum kgd_memory_pool { + KGD_POOL_FRAMEBUFFER = 3, + }; + +-enum kgd_engine_type { +- KGD_ENGINE_PFP = 1, +- KGD_ENGINE_ME, +- KGD_ENGINE_CE, +- KGD_ENGINE_MEC1, +- KGD_ENGINE_MEC2, +- KGD_ENGINE_RLC, +- KGD_ENGINE_SDMA1, +- KGD_ENGINE_SDMA2, +- KGD_ENGINE_MAX +-}; +- + /** + * enum kfd_sched_policy + * +@@ -234,8 +222,6 @@ struct tile_config { + * @hqd_sdma_destroy: Destructs and preempts the SDMA queue assigned to that + * SDMA hqd slot. + * +- * @get_fw_version: Returns FW versions from the header +- * + * @set_scratch_backing_va: Sets VA for scratch backing memory of a VMID. + * Only used for no cp scheduling mode + * +@@ -315,8 +301,6 @@ struct kfd2kgd_calls { + struct kgd_dev *kgd, + uint8_t vmid); + +- uint16_t (*get_fw_version)(struct kgd_dev *kgd, +- enum kgd_engine_type type); + void (*set_scratch_backing_va)(struct kgd_dev *kgd, + uint64_t va, uint32_t vmid); + int (*get_tile_config)(struct kgd_dev *kgd, struct tile_config *config); +-- +2.17.1 + |