When pdb0 enabled, the cached gpu addr is not compatible with SMU and PSP. It always need to be updated. Remove the cached gpu addr and use local variable instead.
Signed-off-by: Samuel Zhang <guoqing.zh...@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 18 +++++++----------- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 1 - 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index bdab40b42983..153c0c868546 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -276,8 +276,7 @@ static int psp_early_init(struct amdgpu_ip_block *ip_block) void psp_ta_free_shared_buf(struct ta_mem_context *mem_ctx) { - amdgpu_bo_free_kernel(&mem_ctx->shared_bo, &mem_ctx->shared_mc_addr, - &mem_ctx->shared_buf); + amdgpu_bo_free_kernel(&mem_ctx->shared_bo, NULL, &mem_ctx->shared_buf); mem_ctx->shared_bo = NULL; } @@ -1123,7 +1122,6 @@ static int psp_asd_initialize(struct psp_context *psp) amdgpu_ip_version(psp->adev, MP0_HWIP, 0) >= IP_VERSION(13, 0, 10)) return 0; - psp->asd_context.mem_context.shared_mc_addr = 0; psp->asd_context.mem_context.shared_mem_size = PSP_ASD_SHARED_MEM_SIZE; psp->asd_context.ta_load_type = GFX_CMD_ID_LOAD_ASD; @@ -1207,18 +1205,16 @@ static void psp_prep_ta_load_cmd_buf(struct psp_gfx_cmd_resp *cmd, uint64_t ta_bin_mc, struct ta_context *context) { + uint64_t shared_mc_addr; + cmd->cmd_id = context->ta_load_type; cmd->cmd.cmd_load_ta.app_phy_addr_lo = lower_32_bits(ta_bin_mc); cmd->cmd.cmd_load_ta.app_phy_addr_hi = upper_32_bits(ta_bin_mc); cmd->cmd.cmd_load_ta.app_len = context->bin_desc.size_bytes; - if (context->mem_context.shared_bo) - context->mem_context.shared_mc_addr = amdgpu_bo_fb_aper_addr(context->mem_context.shared_bo); - - cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_lo = - lower_32_bits(context->mem_context.shared_mc_addr); - cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_hi = - upper_32_bits(context->mem_context.shared_mc_addr); + shared_mc_addr = amdgpu_bo_fb_aper_addr(context->mem_context.shared_bo); + cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_lo = lower_32_bits(shared_mc_addr); + cmd->cmd.cmd_load_ta.cmd_buf_phy_addr_hi = upper_32_bits(shared_mc_addr); cmd->cmd.cmd_load_ta.cmd_buf_len = context->mem_context.shared_mem_size; } @@ -1233,7 +1229,7 @@ int psp_ta_init_shared_buf(struct psp_context *psp, PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT, &mem_ctx->shared_bo, - &mem_ctx->shared_mc_addr, + NULL, &mem_ctx->shared_buf); } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h index 6ea5c21edc4e..106d07aaf8e1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h @@ -174,7 +174,6 @@ struct psp_bin_desc { struct ta_mem_context { struct amdgpu_bo *shared_bo; - uint64_t shared_mc_addr; void *shared_buf; enum psp_shared_mem_size shared_mem_size; }; -- 2.43.5