diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0939-drm-amdgpu-psp-Correct-and-refine-the-vmr-support.-v.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0939-drm-amdgpu-psp-Correct-and-refine-the-vmr-support.-v.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0939-drm-amdgpu-psp-Correct-and-refine-the-vmr-support.-v.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0939-drm-amdgpu-psp-Correct-and-refine-the-vmr-support.-v.patch new file mode 100644 index 00000000..a4b45014 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0939-drm-amdgpu-psp-Correct-and-refine-the-vmr-support.-v.patch @@ -0,0 +1,142 @@ +From b1e1f70ac33cde9d8458d3528d1d48f17a37a612 Mon Sep 17 00:00:00 2001 +From: Emily Deng <Emily.Deng@amd.com> +Date: Wed, 12 Dec 2018 18:06:16 +0800 +Subject: [PATCH 0939/2940] drm/amdgpu/psp: Correct and refine the vmr support. + (v2) + +Currently driver only psp v11 support vmr. + +v2: squash in unused variable removal (Alex) + +Signed-off-by: Emily Deng <Emily.Deng@amd.com> +Reviewed-by: Xiangliang Yu <Xiangliang.Yu@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 8 -------- + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 5 +++-- + drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 18 +++++++++++++----- + 3 files changed, 16 insertions(+), 15 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +index b4fb084645b5..f83c8e28dd2f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +@@ -161,14 +161,6 @@ psp_cmd_submit_buf(struct psp_context *psp, + return ret; + } + +-bool psp_support_vmr_ring(struct psp_context *psp) +-{ +- if (amdgpu_sriov_vf(psp->adev) && psp->sos_fw_version > 0x80045) +- return true; +- else +- return false; +-} +- + static void psp_prep_tmr_cmd_buf(struct psp_context *psp, + struct psp_gfx_cmd_resp *cmd, + uint64_t tmr_mc, uint32_t size) +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +index 10decf70c9aa..fa7dfbd97453 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +@@ -89,6 +89,7 @@ struct psp_funcs + struct psp_xgmi_topology_info *topology); + int (*xgmi_set_topology_info)(struct psp_context *psp, int number_devices, + struct psp_xgmi_topology_info *topology); ++ bool (*support_vmr_ring)(struct psp_context *psp); + }; + + struct psp_xgmi_context { +@@ -192,6 +193,8 @@ struct psp_xgmi_topology_info { + ((psp)->funcs->bootloader_load_sos ? (psp)->funcs->bootloader_load_sos((psp)) : 0) + #define psp_smu_reload_quirk(psp) \ + ((psp)->funcs->smu_reload_quirk ? (psp)->funcs->smu_reload_quirk((psp)) : false) ++#define psp_support_vmr_ring(psp) \ ++ ((psp)->funcs->support_vmr_ring ? (psp)->funcs->support_vmr_ring((psp)) : false) + #define psp_mode1_reset(psp) \ + ((psp)->funcs->mode1_reset ? (psp)->funcs->mode1_reset((psp)) : false) + #define psp_xgmi_get_node_id(psp) \ +@@ -217,8 +220,6 @@ extern const struct amdgpu_ip_block_version psp_v10_0_ip_block; + + int psp_gpu_reset(struct amdgpu_device *adev); + int psp_xgmi_invoke(struct psp_context *psp, uint32_t ta_cmd_id); +-bool psp_support_vmr_ring(struct psp_context *psp); +- + extern const struct amdgpu_ip_block_version psp_v11_0_ip_block; + + #endif +diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c +index bd7a5dc6ab61..69507ec3a3c4 100644 +--- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c +@@ -301,6 +301,13 @@ static int psp_v11_0_ring_init(struct psp_context *psp, + return 0; + } + ++static bool psp_v11_0_support_vmr_ring(struct psp_context *psp) ++{ ++ if (amdgpu_sriov_vf(psp->adev) && psp->sos_fw_version > 0x80045) ++ return true; ++ return false; ++} ++ + static int psp_v11_0_ring_create(struct psp_context *psp, + enum psp_ring_type ring_type) + { +@@ -309,7 +316,7 @@ static int psp_v11_0_ring_create(struct psp_context *psp, + struct psp_ring *ring = &psp->km_ring; + struct amdgpu_device *adev = psp->adev; + +- if (psp_support_vmr_ring(psp)) { ++ if (psp_v11_0_support_vmr_ring(psp)) { + /* Write low address of the ring to C2PMSG_102 */ + psp_ring_reg = lower_32_bits(ring->ring_mem_mc_addr); + WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_102, psp_ring_reg); +@@ -361,7 +368,7 @@ static int psp_v11_0_ring_stop(struct psp_context *psp, + struct amdgpu_device *adev = psp->adev; + + /* Write the ring destroy command*/ +- if (psp_support_vmr_ring(psp)) ++ if (psp_v11_0_support_vmr_ring(psp)) + WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_101, + GFX_CTRL_CMD_ID_DESTROY_GPCOM_RING); + else +@@ -372,7 +379,7 @@ static int psp_v11_0_ring_stop(struct psp_context *psp, + mdelay(20); + + /* Wait for response flag (bit 31) */ +- if (psp_support_vmr_ring(psp)) ++ if (psp_v11_0_support_vmr_ring(psp)) + ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), + 0x80000000, 0x80000000, false); + else +@@ -416,7 +423,7 @@ static int psp_v11_0_cmd_submit(struct psp_context *psp, + uint32_t rb_frame_size_dw = sizeof(struct psp_gfx_rb_frame) / 4; + + /* KM (GPCOM) prepare write pointer */ +- if (psp_support_vmr_ring(psp)) ++ if (psp_v11_0_support_vmr_ring(psp)) + psp_write_ptr_reg = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_102); + else + psp_write_ptr_reg = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_67); +@@ -448,7 +455,7 @@ static int psp_v11_0_cmd_submit(struct psp_context *psp, + + /* Update the write Pointer in DWORDs */ + psp_write_ptr_reg = (psp_write_ptr_reg + rb_frame_size_dw) % ring_size_dw; +- if (psp_support_vmr_ring(psp)) { ++ if (psp_v11_0_support_vmr_ring(psp)) { + WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_102, psp_write_ptr_reg); + WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_101, GFX_CTRL_CMD_ID_CONSUME_CMD); + } else +@@ -735,6 +742,7 @@ static const struct psp_funcs psp_v11_0_funcs = { + .xgmi_set_topology_info = psp_v11_0_xgmi_set_topology_info, + .xgmi_get_hive_id = psp_v11_0_xgmi_get_hive_id, + .xgmi_get_node_id = psp_v11_0_xgmi_get_node_id, ++ .support_vmr_ring = psp_v11_0_support_vmr_ring, + }; + + void psp_v11_0_set_psp_funcs(struct psp_context *psp) +-- +2.17.1 + |