aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
diff options
context:
space:
mode:
authorXiangliang Yu <Xiangliang.Yu@amd.com>2018-12-04 22:23:43 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-12-07 17:53:46 -0500
commit5ec996dfb6a19f3ea6d7ab9e74e9f32954af8466 (patch)
tree890868e8e8d46987773ad45a8fe2a8ba86ba75fb /drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
parentd63cda5bfcd341b86c07beb5919107aae0d9ba99 (diff)
drm/amdgpu/psp: Add support VMR ring for VF
PSP only support VMR ring for SRIOV vf since v45 and all commands will be send to VMR ring for executing. VMR ring use C2PMSG 101 ~ 103 instead of C2PMSG 64 ~ 71. Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index e05dc66b1090..3142f844fd32 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -155,10 +155,22 @@ psp_cmd_submit_buf(struct psp_context *psp,
155 return ret; 155 return ret;
156} 156}
157 157
158static void psp_prep_tmr_cmd_buf(struct psp_gfx_cmd_resp *cmd, 158bool psp_support_vmr_ring(struct psp_context *psp)
159{
160 if (amdgpu_sriov_vf(psp->adev) && psp->sos_fw_version > 0x80045)
161 return true;
162 else
163 return false;
164}
165
166static void psp_prep_tmr_cmd_buf(struct psp_context *psp,
167 struct psp_gfx_cmd_resp *cmd,
159 uint64_t tmr_mc, uint32_t size) 168 uint64_t tmr_mc, uint32_t size)
160{ 169{
161 cmd->cmd_id = GFX_CMD_ID_SETUP_TMR; 170 if (psp_support_vmr_ring(psp))
171 cmd->cmd_id = GFX_CMD_ID_SETUP_VMR;
172 else
173 cmd->cmd_id = GFX_CMD_ID_SETUP_TMR;
162 cmd->cmd.cmd_setup_tmr.buf_phy_addr_lo = lower_32_bits(tmr_mc); 174 cmd->cmd.cmd_setup_tmr.buf_phy_addr_lo = lower_32_bits(tmr_mc);
163 cmd->cmd.cmd_setup_tmr.buf_phy_addr_hi = upper_32_bits(tmr_mc); 175 cmd->cmd.cmd_setup_tmr.buf_phy_addr_hi = upper_32_bits(tmr_mc);
164 cmd->cmd.cmd_setup_tmr.buf_size = size; 176 cmd->cmd.cmd_setup_tmr.buf_size = size;
@@ -192,7 +204,7 @@ static int psp_tmr_load(struct psp_context *psp)
192 if (!cmd) 204 if (!cmd)
193 return -ENOMEM; 205 return -ENOMEM;
194 206
195 psp_prep_tmr_cmd_buf(cmd, psp->tmr_mc_addr, PSP_TMR_SIZE); 207 psp_prep_tmr_cmd_buf(psp, cmd, psp->tmr_mc_addr, PSP_TMR_SIZE);
196 DRM_INFO("reserve 0x%x from 0x%llx for PSP TMR SIZE\n", 208 DRM_INFO("reserve 0x%x from 0x%llx for PSP TMR SIZE\n",
197 PSP_TMR_SIZE, psp->tmr_mc_addr); 209 PSP_TMR_SIZE, psp->tmr_mc_addr);
198 210