Lines Matching refs:psp
49 struct psp_context *psp = &adev->psp; in psp_sw_init() local
56 psp_v3_1_set_psp_funcs(psp); in psp_sw_init()
59 psp_v10_0_set_psp_funcs(psp); in psp_sw_init()
65 psp->adev = adev; in psp_sw_init()
70 ret = psp_init_microcode(psp); in psp_sw_init()
86 release_firmware(adev->psp.sos_fw); in psp_sw_fini()
87 adev->psp.sos_fw = NULL; in psp_sw_fini()
88 release_firmware(adev->psp.asd_fw); in psp_sw_fini()
89 adev->psp.asd_fw = NULL; in psp_sw_fini()
93 int psp_wait_for(struct psp_context *psp, uint32_t reg_index, in psp_wait_for() argument
98 struct amdgpu_device *adev = psp->adev; in psp_wait_for()
116 psp_cmd_submit_buf(struct psp_context *psp, in psp_cmd_submit_buf() argument
123 memset(psp->cmd_buf_mem, 0, PSP_CMD_BUFFER_SIZE); in psp_cmd_submit_buf()
125 memcpy(psp->cmd_buf_mem, cmd, sizeof(struct psp_gfx_cmd_resp)); in psp_cmd_submit_buf()
127 ret = psp_cmd_submit(psp, ucode, psp->cmd_buf_mc_addr, in psp_cmd_submit_buf()
130 while (*((unsigned int *)psp->fence_buf) != index) { in psp_cmd_submit_buf()
135 ucode->tmr_mc_addr_lo = psp->cmd_buf_mem->resp.fw_addr_lo; in psp_cmd_submit_buf()
136 ucode->tmr_mc_addr_hi = psp->cmd_buf_mem->resp.fw_addr_hi; in psp_cmd_submit_buf()
152 static int psp_tmr_init(struct psp_context *psp) in psp_tmr_init() argument
163 ret = amdgpu_bo_create_kernel(psp->adev, 0x300000, 0x100000, in psp_tmr_init()
165 &psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); in psp_tmr_init()
170 static int psp_tmr_load(struct psp_context *psp) in psp_tmr_load() argument
179 psp_prep_tmr_cmd_buf(cmd, psp->tmr_mc_addr, 0x300000); in psp_tmr_load()
181 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_tmr_load()
182 psp->fence_buf_mc_addr, 1); in psp_tmr_load()
209 static int psp_asd_init(struct psp_context *psp) in psp_asd_init() argument
217 ret = amdgpu_bo_create_kernel(psp->adev, PSP_ASD_SHARED_MEM_SIZE, in psp_asd_init()
219 &psp->asd_shared_bo, in psp_asd_init()
220 &psp->asd_shared_mc_addr, in psp_asd_init()
221 &psp->asd_shared_buf); in psp_asd_init()
226 static int psp_asd_load(struct psp_context *psp) in psp_asd_load() argument
235 if (amdgpu_sriov_vf(psp->adev)) in psp_asd_load()
242 memset(psp->fw_pri_buf, 0, PSP_1_MEG); in psp_asd_load()
243 memcpy(psp->fw_pri_buf, psp->asd_start_addr, psp->asd_ucode_size); in psp_asd_load()
245 psp_prep_asd_cmd_buf(cmd, psp->fw_pri_mc_addr, psp->asd_shared_mc_addr, in psp_asd_load()
246 psp->asd_ucode_size, PSP_ASD_SHARED_MEM_SIZE); in psp_asd_load()
248 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_asd_load()
249 psp->fence_buf_mc_addr, 2); in psp_asd_load()
256 static int psp_hw_start(struct psp_context *psp) in psp_hw_start() argument
258 struct amdgpu_device *adev = psp->adev; in psp_hw_start()
262 ret = psp_bootloader_load_sysdrv(psp); in psp_hw_start()
266 ret = psp_bootloader_load_sos(psp); in psp_hw_start()
271 ret = psp_ring_create(psp, PSP_RING_TYPE__KM); in psp_hw_start()
275 ret = psp_tmr_load(psp); in psp_hw_start()
279 ret = psp_asd_load(psp); in psp_hw_start()
286 static int psp_np_fw_load(struct psp_context *psp) in psp_np_fw_load() argument
290 struct amdgpu_device* adev = psp->adev; in psp_np_fw_load()
298 psp_smu_reload_quirk(psp)) in psp_np_fw_load()
307 ret = psp_prep_cmd_buf(ucode, psp->cmd); in psp_np_fw_load()
311 ret = psp_cmd_submit_buf(psp, ucode, psp->cmd, in psp_np_fw_load()
312 psp->fence_buf_mc_addr, i + 3); in psp_np_fw_load()
329 struct psp_context *psp = &adev->psp; in psp_load_fw() local
334 psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); in psp_load_fw()
335 if (!psp->cmd) in psp_load_fw()
340 &psp->fw_pri_bo, in psp_load_fw()
341 &psp->fw_pri_mc_addr, in psp_load_fw()
342 &psp->fw_pri_buf); in psp_load_fw()
348 &psp->fence_buf_bo, in psp_load_fw()
349 &psp->fence_buf_mc_addr, in psp_load_fw()
350 &psp->fence_buf); in psp_load_fw()
356 &psp->cmd_buf_bo, &psp->cmd_buf_mc_addr, in psp_load_fw()
357 (void **)&psp->cmd_buf_mem); in psp_load_fw()
361 memset(psp->fence_buf, 0, PSP_FENCE_BUFFER_SIZE); in psp_load_fw()
363 ret = psp_ring_init(psp, PSP_RING_TYPE__KM); in psp_load_fw()
367 ret = psp_tmr_init(psp); in psp_load_fw()
371 ret = psp_asd_init(psp); in psp_load_fw()
376 ret = psp_hw_start(psp); in psp_load_fw()
380 ret = psp_np_fw_load(psp); in psp_load_fw()
387 amdgpu_bo_free_kernel(&psp->cmd_buf_bo, in psp_load_fw()
388 &psp->cmd_buf_mc_addr, in psp_load_fw()
389 (void **)&psp->cmd_buf_mem); in psp_load_fw()
391 amdgpu_bo_free_kernel(&psp->fence_buf_bo, in psp_load_fw()
392 &psp->fence_buf_mc_addr, &psp->fence_buf); in psp_load_fw()
394 amdgpu_bo_free_kernel(&psp->fw_pri_bo, in psp_load_fw()
395 &psp->fw_pri_mc_addr, &psp->fw_pri_buf); in psp_load_fw()
397 kfree(psp->cmd); in psp_load_fw()
398 psp->cmd = NULL; in psp_load_fw()
438 struct psp_context *psp = &adev->psp; in psp_hw_fini() local
445 psp_ring_destroy(psp, PSP_RING_TYPE__KM); in psp_hw_fini()
447 amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); in psp_hw_fini()
448 amdgpu_bo_free_kernel(&psp->fw_pri_bo, in psp_hw_fini()
449 &psp->fw_pri_mc_addr, &psp->fw_pri_buf); in psp_hw_fini()
450 amdgpu_bo_free_kernel(&psp->fence_buf_bo, in psp_hw_fini()
451 &psp->fence_buf_mc_addr, &psp->fence_buf); in psp_hw_fini()
452 amdgpu_bo_free_kernel(&psp->asd_shared_bo, &psp->asd_shared_mc_addr, in psp_hw_fini()
453 &psp->asd_shared_buf); in psp_hw_fini()
454 amdgpu_bo_free_kernel(&psp->cmd_buf_bo, &psp->cmd_buf_mc_addr, in psp_hw_fini()
455 (void **)&psp->cmd_buf_mem); in psp_hw_fini()
457 kfree(psp->cmd); in psp_hw_fini()
458 psp->cmd = NULL; in psp_hw_fini()
467 struct psp_context *psp = &adev->psp; in psp_suspend() local
472 ret = psp_ring_stop(psp, PSP_RING_TYPE__KM); in psp_suspend()
485 struct psp_context *psp = &adev->psp; in psp_resume() local
494 ret = psp_hw_start(psp); in psp_resume()
498 ret = psp_np_fw_load(psp); in psp_resume()
517 return psp_mode1_reset(&adev->psp); in psp_gpu_reset()
537 return psp_compare_sram_data(&adev->psp, ucode, ucode_type); in psp_check_fw_loading_status()