[PATCH] drm/amdgpu: get_fw_version isn't ASIC specific
Lin, Amber
Amber.Lin at amd.com
Tue Apr 16 16:32:54 UTC 2019
Could someone review this patch? Thanks!!
Regards,
Amber
On 2019-04-12 4:10 p.m., Lin, Amber wrote:
> 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.
>
> Signed-off-by: Amber Lin <Amber.Lin at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 37 ++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 61 -----------------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 61 -----------------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 54 --------------------
> drivers/gpu/drm/amd/amdkfd/kfd_device.c | 4 +-
> 6 files changed, 41 insertions(+), 178 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index acf8ae0..aeead07 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -335,6 +335,43 @@ void amdgpu_amdkfd_free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
> amdgpu_bo_unref(&(bo));
> }
>
> +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 e6a5037..5c8397f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -141,6 +141,8 @@ int amdgpu_amdkfd_alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
> void **mem_obj, uint64_t *gpu_addr,
> void **cpu_ptr, bool mqd_gfx9);
> void amdgpu_amdkfd_free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
> +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 ff7fac7..fa09e11 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> @@ -22,14 +22,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"
> @@ -139,7 +137,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,
> @@ -191,7 +188,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,
> @@ -792,63 +788,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 56ea929..fec3a6a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> @@ -23,12 +23,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 "gfx_v8_0.h"
> #include "gca/gfx_8_0_sh_mask.h"
> #include "gca/gfx_8_0_d.h"
> @@ -95,7 +93,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,
> @@ -148,7 +145,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,
> @@ -751,63 +747,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 5c51d491..ef3d93b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> @@ -25,12 +25,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 "soc15_hw_ip.h"
> #include "gc/gc_9_0_offset.h"
> #include "gc/gc_9_0_sh_mask.h"
> @@ -111,7 +109,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);
> @@ -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 = amdgpu_amdkfd_get_tile_config,
> .set_vm_context_page_table_base = set_vm_context_page_table_base,
> @@ -874,56 +870,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 2fee306..c1e4d44 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -494,9 +494,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
> {
> unsigned int size;
>
> - 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;
>
More information about the amd-gfx
mailing list