diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0830-drm-amdgpu-enable-paging-queue-based-on-FW-version-v.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0830-drm-amdgpu-enable-paging-queue-based-on-FW-version-v.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0830-drm-amdgpu-enable-paging-queue-based-on-FW-version-v.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0830-drm-amdgpu-enable-paging-queue-based-on-FW-version-v.patch new file mode 100644 index 00000000..a559cdf5 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0830-drm-amdgpu-enable-paging-queue-based-on-FW-version-v.patch @@ -0,0 +1,107 @@ +From 77e163147ecb8e6b7290cac6d409d547cb9626be Mon Sep 17 00:00:00 2001 +From: Philip Yang <Philip.Yang@amd.com> +Date: Mon, 19 Nov 2018 09:53:43 -0500 +Subject: [PATCH 0830/2940] drm/amdgpu: enable paging queue based on FW version + (v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Based SDMA fw version to enable has_page_queue support. Have to move +sdma_v4_0_init_microcode from sw_init to early_init, to load firmware +and init fw_version before set_ring/buffer/vm_pte_funcs use it. + +v2: don't enable on vega12, 20 until confirmed + +Signed-off-by: Philip Yang <Philip.Yang@amd.com> +Acked-by: Alex Deucher <alexander.deucher@amd.com> +Acked-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 48 +++++++++++++++++--------- + 1 file changed, 32 insertions(+), 16 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +index e9ece3d19110..59e454768ebe 100644 +--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +@@ -1449,23 +1449,46 @@ static void sdma_v4_0_ring_emit_reg_wait(struct amdgpu_ring *ring, uint32_t reg, + sdma_v4_0_wait_reg_mem(ring, 0, 0, reg, 0, val, mask, 10); + } + ++static bool sdma_v4_0_fw_support_paging_queue(struct amdgpu_device *adev) ++{ ++ uint fw_version = adev->sdma.instance[0].fw_version; ++ ++ switch (adev->asic_type) { ++ case CHIP_VEGA10: ++ return fw_version >= 430; ++ case CHIP_VEGA12: ++ /*return fw_version >= 31;*/ ++ return false; ++ case CHIP_VEGA20: ++ /*return fw_version >= 115;*/ ++ return false; ++ default: ++ return false; ++ } ++} ++ + static int sdma_v4_0_early_init(void *handle) + { + struct amdgpu_device *adev = (struct amdgpu_device *)handle; ++ int r; + +- if (adev->asic_type == CHIP_RAVEN) { ++ if (adev->asic_type == CHIP_RAVEN) + adev->sdma.num_instances = 1; +- adev->sdma.has_page_queue = false; +- } else { ++ else + adev->sdma.num_instances = 2; +- /* TODO: Page queue breaks driver reload under SRIOV */ +- if ((adev->asic_type == CHIP_VEGA10) && amdgpu_sriov_vf((adev))) +- adev->sdma.has_page_queue = false; +- else if (adev->asic_type != CHIP_VEGA20 && +- adev->asic_type != CHIP_VEGA12) +- adev->sdma.has_page_queue = true; ++ ++ r = sdma_v4_0_init_microcode(adev); ++ if (r) { ++ DRM_ERROR("Failed to load sdma firmware!\n"); ++ return r; + } + ++ /* TODO: Page queue breaks driver reload under SRIOV */ ++ if ((adev->asic_type == CHIP_VEGA10) && amdgpu_sriov_vf((adev))) ++ adev->sdma.has_page_queue = false; ++ else if (sdma_v4_0_fw_support_paging_queue(adev)) ++ adev->sdma.has_page_queue = true; ++ + sdma_v4_0_set_ring_funcs(adev); + sdma_v4_0_set_buffer_funcs(adev); + sdma_v4_0_set_vm_pte_funcs(adev); +@@ -1474,7 +1497,6 @@ static int sdma_v4_0_early_init(void *handle) + return 0; + } + +- + static int sdma_v4_0_sw_init(void *handle) + { + struct amdgpu_ring *ring; +@@ -1493,12 +1515,6 @@ static int sdma_v4_0_sw_init(void *handle) + if (r) + return r; + +- r = sdma_v4_0_init_microcode(adev); +- if (r) { +- DRM_ERROR("Failed to load sdma firmware!\n"); +- return r; +- } +- + for (i = 0; i < adev->sdma.num_instances; i++) { + ring = &adev->sdma.instance[i].ring; + ring->ring_obj = NULL; +-- +2.17.1 + |