diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1352-drm-amd-powerplay-init-microcode-for-smu11.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1352-drm-amd-powerplay-init-microcode-for-smu11.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1352-drm-amd-powerplay-init-microcode-for-smu11.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1352-drm-amd-powerplay-init-microcode-for-smu11.patch new file mode 100644 index 00000000..fade2597 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1352-drm-amd-powerplay-init-microcode-for-smu11.patch @@ -0,0 +1,79 @@ +From 179da6a691de85b3669cc1d41dceb691d3295d7d Mon Sep 17 00:00:00 2001 +From: Likun Gao <Likun.Gao@amd.com> +Date: Thu, 6 Dec 2018 13:44:29 +0800 +Subject: [PATCH 1352/2940] drm/amd/powerplay: init microcode for smu11 + +Add function of init mircrocode for smu11. + +Signed-off-by: Likun Gao <Likun.Gao@amd.com> +Reviewed-by: Huang Rui <ray.huang@amd.com> +Acked-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 47 ++++++++++++++++++++++- + 1 file changed, 46 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +index a4fdc54ea5e2..57cd3b9111c0 100644 +--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c ++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +@@ -26,11 +26,56 @@ + #include "amdgpu_smu.h" + #include "smu_v11_0.h" + ++MODULE_FIRMWARE("amdgpu/vega20_smc.bin"); ++ + static int smu_v11_0_init_microcode(struct smu_context *smu) + { + struct amdgpu_device *adev = smu->adev; ++ const char *chip_name; ++ char fw_name[30]; ++ int err = 0; ++ const struct smc_firmware_header_v1_0 *hdr; ++ const struct common_firmware_header *header; ++ struct amdgpu_firmware_info *ucode = NULL; + +- return 0; ++ switch (adev->asic_type) { ++ case CHIP_VEGA20: ++ chip_name = "vega20"; ++ break; ++ default: ++ BUG(); ++ } ++ ++ snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_smc.bin", chip_name); ++ ++ err = request_firmware(&adev->pm.fw, fw_name, adev->dev); ++ if (err) ++ goto out; ++ err = amdgpu_ucode_validate(adev->pm.fw); ++ if (err) ++ goto out; ++ ++ hdr = (const struct smc_firmware_header_v1_0 *) adev->pm.fw->data; ++ amdgpu_ucode_print_smc_hdr(&hdr->header); ++ adev->pm.fw_version = le32_to_cpu(hdr->header.ucode_version); ++ ++ if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) { ++ ucode = &adev->firmware.ucode[AMDGPU_UCODE_ID_SMC]; ++ ucode->ucode_id = AMDGPU_UCODE_ID_SMC; ++ ucode->fw = adev->pm.fw; ++ header = (const struct common_firmware_header *)ucode->fw->data; ++ adev->firmware.fw_size += ++ ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); ++ } ++ ++out: ++ if (err) { ++ DRM_ERROR("smu_v11_0: Failed to load firmware \"%s\"\n", ++ fw_name); ++ release_firmware(adev->pm.fw); ++ adev->pm.fw = NULL; ++ } ++ return err; + } + + static int smu_v11_0_load_microcode(struct smu_context *smu) +-- +2.17.1 + |