[PATCH 3/3] drm/amdgpu: enable paging queue based on FW version
Deucher, Alexander
Alexander.Deucher at amd.com
Mon Nov 19 20:57:03 UTC 2018
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of
> Yang, Philip
> Sent: Monday, November 19, 2018 3:20 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Yang, Philip <Philip.Yang at amd.com>
> Subject: [PATCH 3/3] drm/amdgpu: enable paging queue based on FW
> version
>
> 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.
>
> Change-Id: Ife5d4659d28bc2a7012b48947b27e929749d87c1
> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 46 +++++++++++++++++----
> -----
> 1 file changed, 30 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 4d873fd3242c..0a3b68dd49a0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> @@ -1447,23 +1447,44 @@ 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;
> + case CHIP_VEGA20:
> + return fw_version >= 115;
> + 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;
I think this should be ok. As long as you've verified that sdam_v4_0_init_microcode() doesn't depend on any other init from another module like psp. I took a quick look at the code and it seems like we should be ok.
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> }
>
> + /* 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);
> @@ -1472,7 +1493,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;
> @@ -1491,12 +1511,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
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list