aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4723-drm-amdgpu-Fix-uvd-firmware-version-information-for-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4723-drm-amdgpu-Fix-uvd-firmware-version-information-for-.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4723-drm-amdgpu-Fix-uvd-firmware-version-information-for-.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4723-drm-amdgpu-Fix-uvd-firmware-version-information-for-.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4723-drm-amdgpu-Fix-uvd-firmware-version-information-for-.patch
new file mode 100644
index 00000000..ba9bc0fa
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4723-drm-amdgpu-Fix-uvd-firmware-version-information-for-.patch
@@ -0,0 +1,96 @@
+From 274d47138d7a15c426abfb7b92158c6ee647b279 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 14 Jun 2018 10:24:06 -0500
+Subject: [PATCH 4723/5725] drm/amdgpu: Fix uvd firmware version information
+ for vega20 (v2)
+
+The uvd version information was not set correctly for vega20.
+Rearrange the logic to set it correctly and fix the warnings
+as a result.
+
+v2: fix version formatting for userspace based on feedback from Leo
+
+Fixes: 96ca7f298f (drm/amdgpu/vg20:support new UVD FW version naming convention)
+Reviewed-by: Leo Liu <leo.liu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 42 +++++++++++++++++++--------------
+ 1 file changed, 24 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+index cb4efa8..212fec7 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+@@ -127,7 +127,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
+ unsigned long bo_size;
+ const char *fw_name;
+ const struct common_firmware_header *hdr;
+- unsigned version_major, version_minor, family_id;
++ unsigned family_id;
+ int i, j, r;
+
+ INIT_DELAYED_WORK(&adev->uvd.idle_work, amdgpu_uvd_idle_work_handler);
+@@ -210,10 +210,31 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
+ family_id = le32_to_cpu(hdr->ucode_version) & 0xff;
+
+ if (adev->asic_type < CHIP_VEGA20) {
++ unsigned version_major, version_minor;
++
+ version_major = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xff;
+ version_minor = (le32_to_cpu(hdr->ucode_version) >> 8) & 0xff;
+ DRM_INFO("Found UVD firmware Version: %hu.%hu Family ID: %hu\n",
+ version_major, version_minor, family_id);
++
++ /*
++ * Limit the number of UVD handles depending on microcode major
++ * and minor versions. The firmware version which has 40 UVD
++ * instances support is 1.80. So all subsequent versions should
++ * also have the same support.
++ */
++ if ((version_major > 0x01) ||
++ ((version_major == 0x01) && (version_minor >= 0x50)))
++ adev->uvd.max_handles = AMDGPU_MAX_UVD_HANDLES;
++
++ adev->uvd.fw_version = ((version_major << 24) | (version_minor << 16) |
++ (family_id << 8));
++
++ if ((adev->asic_type == CHIP_POLARIS10 ||
++ adev->asic_type == CHIP_POLARIS11) &&
++ (adev->uvd.fw_version < FW_1_66_16))
++ DRM_ERROR("POLARIS10/11 UVD firmware version %hu.%hu is too old.\n",
++ version_major, version_minor);
+ } else {
+ unsigned int enc_major, enc_minor, dec_minor;
+
+@@ -222,26 +243,11 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
+ enc_major = (le32_to_cpu(hdr->ucode_version) >> 30) & 0x3;
+ DRM_INFO("Found UVD firmware ENC: %hu.%hu DEC: .%hu Family ID: %hu\n",
+ enc_major, enc_minor, dec_minor, family_id);
+- }
+
+- /*
+- * Limit the number of UVD handles depending on microcode major
+- * and minor versions. The firmware version which has 40 UVD
+- * instances support is 1.80. So all subsequent versions should
+- * also have the same support.
+- */
+- if (adev->asic_type >= CHIP_VEGA20 || (version_major > 0x01) ||
+- ((version_major == 0x01) && (version_minor >= 0x50)))
+ adev->uvd.max_handles = AMDGPU_MAX_UVD_HANDLES;
+
+- adev->uvd.fw_version = ((version_major << 24) | (version_minor << 16) |
+- (family_id << 8));
+-
+- if ((adev->asic_type == CHIP_POLARIS10 ||
+- adev->asic_type == CHIP_POLARIS11) &&
+- (adev->uvd.fw_version < FW_1_66_16))
+- DRM_ERROR("POLARIS10/11 UVD firmware version %hu.%hu is too old.\n",
+- version_major, version_minor);
++ adev->uvd.fw_version = le32_to_cpu(hdr->ucode_version);
++ }
+
+ bo_size = AMDGPU_UVD_STACK_SIZE + AMDGPU_UVD_HEAP_SIZE
+ + AMDGPU_UVD_SESSION_SIZE * adev->uvd.max_handles;
+--
+2.7.4
+