Lines Matching refs:psp

48 static int psp_load_smu_fw(struct psp_context *psp);
66 static void psp_check_pmfw_centralized_cstate_management(struct psp_context *psp) in psp_check_pmfw_centralized_cstate_management() argument
68 struct amdgpu_device *adev = psp->adev; in psp_check_pmfw_centralized_cstate_management()
70 psp->pmfw_centralized_cstate_management = false; in psp_check_pmfw_centralized_cstate_management()
80 psp->pmfw_centralized_cstate_management = true; in psp_check_pmfw_centralized_cstate_management()
86 struct psp_context *psp = &adev->psp; in psp_early_init() local
91 psp_v3_1_set_psp_funcs(psp); in psp_early_init()
92 psp->autoload_supported = false; in psp_early_init()
95 psp_v10_0_set_psp_funcs(psp); in psp_early_init()
96 psp->autoload_supported = false; in psp_early_init()
100 psp_v11_0_set_psp_funcs(psp); in psp_early_init()
101 psp->autoload_supported = false; in psp_early_init()
111 psp_v11_0_set_psp_funcs(psp); in psp_early_init()
112 psp->autoload_supported = true; in psp_early_init()
115 psp_v12_0_set_psp_funcs(psp); in psp_early_init()
118 psp_v13_0_set_psp_funcs(psp); in psp_early_init()
121 psp_v13_0_set_psp_funcs(psp); in psp_early_init()
122 psp->autoload_supported = true; in psp_early_init()
126 psp_v11_0_8_set_psp_funcs(psp); in psp_early_init()
127 psp->autoload_supported = false; in psp_early_init()
134 psp->adev = adev; in psp_early_init()
136 psp_check_pmfw_centralized_cstate_management(psp); in psp_early_init()
141 static void psp_memory_training_fini(struct psp_context *psp) in psp_memory_training_fini() argument
143 struct psp_memory_training_context *ctx = &psp->mem_train_ctx; in psp_memory_training_fini()
150 static int psp_memory_training_init(struct psp_context *psp) in psp_memory_training_init() argument
153 struct psp_memory_training_context *ctx = &psp->mem_train_ctx; in psp_memory_training_init()
175 psp_memory_training_fini(psp); in psp_memory_training_init()
250 struct psp_context *psp = &adev->psp; in psp_sw_init() local
253 struct psp_memory_training_context *mem_training_ctx = &psp->mem_train_ctx; in psp_sw_init()
255 psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); in psp_sw_init()
256 if (!psp->cmd) { in psp_sw_init()
262 ret = psp_init_microcode(psp); in psp_sw_init()
268 ret = psp_init_ta_microcode(psp, "aldebaran"); in psp_sw_init()
279 psp->boot_cfg_bitmask = boot_cfg_entry.boot_cfg_bitmask; in psp_sw_init()
280 if ((psp->boot_cfg_bitmask) & in psp_sw_init()
297 ret = psp_memory_training_init(psp); in psp_sw_init()
303 ret = psp_mem_training(psp, PSP_MEM_TRAIN_COLD_BOOT); in psp_sw_init()
323 struct psp_context *psp = &adev->psp; in psp_sw_fini() local
324 struct psp_gfx_cmd_resp *cmd = psp->cmd; in psp_sw_fini()
326 psp_memory_training_fini(psp); in psp_sw_fini()
327 if (psp->sos_fw) { in psp_sw_fini()
328 release_firmware(psp->sos_fw); in psp_sw_fini()
329 psp->sos_fw = NULL; in psp_sw_fini()
331 if (psp->asd_fw) { in psp_sw_fini()
332 release_firmware(psp->asd_fw); in psp_sw_fini()
333 psp->asd_fw = NULL; in psp_sw_fini()
335 if (psp->ta_fw) { in psp_sw_fini()
336 release_firmware(psp->ta_fw); in psp_sw_fini()
337 psp->ta_fw = NULL; in psp_sw_fini()
350 int psp_wait_for(struct psp_context *psp, uint32_t reg_index, in psp_wait_for() argument
355 struct amdgpu_device *adev = psp->adev; in psp_wait_for()
357 if (psp->adev->no_hw_access) in psp_wait_for()
414 psp_cmd_submit_buf(struct psp_context *psp, in psp_cmd_submit_buf() argument
424 if (psp->adev->no_hw_access) in psp_cmd_submit_buf()
427 if (!drm_dev_enter(&psp->adev->ddev, &idx)) in psp_cmd_submit_buf()
430 memset(psp->cmd_buf_mem, 0, PSP_CMD_BUFFER_SIZE); in psp_cmd_submit_buf()
432 memcpy(psp->cmd_buf_mem, cmd, sizeof(struct psp_gfx_cmd_resp)); in psp_cmd_submit_buf()
434 index = atomic_inc_return(&psp->fence_value); in psp_cmd_submit_buf()
435 ret = psp_ring_cmd_submit(psp, psp->cmd_buf_mc_addr, fence_mc_addr, index); in psp_cmd_submit_buf()
437 atomic_dec(&psp->fence_value); in psp_cmd_submit_buf()
441 amdgpu_device_invalidate_hdp(psp->adev, NULL); in psp_cmd_submit_buf()
442 while (*((unsigned int *)psp->fence_buf) != index) { in psp_cmd_submit_buf()
454 amdgpu_device_invalidate_hdp(psp->adev, NULL); in psp_cmd_submit_buf()
458 skip_unsupport = (psp->cmd_buf_mem->resp.status == TEE_ERROR_NOT_SUPPORTED || in psp_cmd_submit_buf()
459 psp->cmd_buf_mem->resp.status == PSP_ERR_UNKNOWN_COMMAND) && amdgpu_sriov_vf(psp->adev); in psp_cmd_submit_buf()
461 memcpy((void*)&cmd->resp, (void*)&psp->cmd_buf_mem->resp, sizeof(struct psp_gfx_resp)); in psp_cmd_submit_buf()
470 if (!skip_unsupport && (psp->cmd_buf_mem->resp.status || !timeout) && !ras_intr) { in psp_cmd_submit_buf()
475 psp_gfx_cmd_name(psp->cmd_buf_mem->cmd_id), psp->cmd_buf_mem->cmd_id, in psp_cmd_submit_buf()
476 psp->cmd_buf_mem->resp.status); in psp_cmd_submit_buf()
484 ucode->tmr_mc_addr_lo = psp->cmd_buf_mem->resp.fw_addr_lo; in psp_cmd_submit_buf()
485 ucode->tmr_mc_addr_hi = psp->cmd_buf_mem->resp.fw_addr_hi; in psp_cmd_submit_buf()
493 static struct psp_gfx_cmd_resp *acquire_psp_cmd_buf(struct psp_context *psp) in acquire_psp_cmd_buf() argument
495 struct psp_gfx_cmd_resp *cmd = psp->cmd; in acquire_psp_cmd_buf()
497 mutex_lock(&psp->mutex); in acquire_psp_cmd_buf()
504 void release_psp_cmd_buf(struct psp_context *psp) in release_psp_cmd_buf() argument
506 mutex_unlock(&psp->mutex); in release_psp_cmd_buf()
509 static void psp_prep_tmr_cmd_buf(struct psp_context *psp, in psp_prep_tmr_cmd_buf() argument
513 struct amdgpu_device *adev = psp->adev; in psp_prep_tmr_cmd_buf()
517 if (amdgpu_sriov_vf(psp->adev)) in psp_prep_tmr_cmd_buf()
539 static int psp_load_toc(struct psp_context *psp, in psp_load_toc() argument
543 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_load_toc()
546 psp_copy_fw(psp, psp->toc.start_addr, psp->toc.size_bytes); in psp_load_toc()
548 psp_prep_load_toc_cmd_buf(cmd, psp->fw_pri_mc_addr, psp->toc.size_bytes); in psp_load_toc()
550 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_load_toc()
551 psp->fence_buf_mc_addr); in psp_load_toc()
553 *tmr_size = psp->cmd_buf_mem->resp.tmr_size; in psp_load_toc()
555 release_psp_cmd_buf(psp); in psp_load_toc()
561 static int psp_tmr_init(struct psp_context *psp) in psp_tmr_init() argument
575 tmr_size = PSP_TMR_SIZE(psp->adev); in psp_tmr_init()
579 if (!amdgpu_sriov_vf(psp->adev) && in psp_tmr_init()
580 psp->toc.start_addr && in psp_tmr_init()
581 psp->toc.size_bytes && in psp_tmr_init()
582 psp->fw_pri_buf) { in psp_tmr_init()
583 ret = psp_load_toc(psp, &tmr_size); in psp_tmr_init()
590 pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL; in psp_tmr_init()
591 ret = amdgpu_bo_create_kernel(psp->adev, tmr_size, PSP_TMR_SIZE(psp->adev), in psp_tmr_init()
593 &psp->tmr_bo, &psp->tmr_mc_addr, pptr); in psp_tmr_init()
598 static bool psp_skip_tmr(struct psp_context *psp) in psp_skip_tmr() argument
600 switch (psp->adev->asic_type) { in psp_skip_tmr()
610 static int psp_tmr_load(struct psp_context *psp) in psp_tmr_load() argument
618 if (amdgpu_sriov_vf(psp->adev) && psp_skip_tmr(psp)) in psp_tmr_load()
621 cmd = acquire_psp_cmd_buf(psp); in psp_tmr_load()
623 psp_prep_tmr_cmd_buf(psp, cmd, psp->tmr_mc_addr, psp->tmr_bo); in psp_tmr_load()
625 amdgpu_bo_size(psp->tmr_bo), psp->tmr_mc_addr); in psp_tmr_load()
627 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_tmr_load()
628 psp->fence_buf_mc_addr); in psp_tmr_load()
630 release_psp_cmd_buf(psp); in psp_tmr_load()
635 static void psp_prep_tmr_unload_cmd_buf(struct psp_context *psp, in psp_prep_tmr_unload_cmd_buf() argument
638 if (amdgpu_sriov_vf(psp->adev)) in psp_prep_tmr_unload_cmd_buf()
644 static int psp_tmr_unload(struct psp_context *psp) in psp_tmr_unload() argument
647 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_tmr_unload()
649 psp_prep_tmr_unload_cmd_buf(psp, cmd); in psp_tmr_unload()
652 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_tmr_unload()
653 psp->fence_buf_mc_addr); in psp_tmr_unload()
655 release_psp_cmd_buf(psp); in psp_tmr_unload()
660 static int psp_tmr_terminate(struct psp_context *psp) in psp_tmr_terminate() argument
666 ret = psp_tmr_unload(psp); in psp_tmr_terminate()
671 pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL; in psp_tmr_terminate()
672 amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, pptr); in psp_tmr_terminate()
677 int psp_get_fw_attestation_records_addr(struct psp_context *psp, in psp_get_fw_attestation_records_addr() argument
686 if (amdgpu_sriov_vf(psp->adev)) in psp_get_fw_attestation_records_addr()
689 cmd = acquire_psp_cmd_buf(psp); in psp_get_fw_attestation_records_addr()
693 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_get_fw_attestation_records_addr()
694 psp->fence_buf_mc_addr); in psp_get_fw_attestation_records_addr()
701 release_psp_cmd_buf(psp); in psp_get_fw_attestation_records_addr()
708 struct psp_context *psp = &adev->psp; in psp_boot_config_get() local
715 cmd = acquire_psp_cmd_buf(psp); in psp_boot_config_get()
720 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_boot_config_get()
726 release_psp_cmd_buf(psp); in psp_boot_config_get()
734 struct psp_context *psp = &adev->psp; in psp_boot_config_set() local
740 cmd = acquire_psp_cmd_buf(psp); in psp_boot_config_set()
747 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_boot_config_set()
749 release_psp_cmd_buf(psp); in psp_boot_config_set()
757 struct psp_context *psp = &adev->psp; in psp_rl_load() local
760 if (!is_psp_fw_valid(psp->rl)) in psp_rl_load()
763 cmd = acquire_psp_cmd_buf(psp); in psp_rl_load()
765 memset(psp->fw_pri_buf, 0, PSP_1_MEG); in psp_rl_load()
766 memcpy(psp->fw_pri_buf, psp->rl.start_addr, psp->rl.size_bytes); in psp_rl_load()
769 cmd->cmd.cmd_load_ip_fw.fw_phy_addr_lo = lower_32_bits(psp->fw_pri_mc_addr); in psp_rl_load()
770 cmd->cmd.cmd_load_ip_fw.fw_phy_addr_hi = upper_32_bits(psp->fw_pri_mc_addr); in psp_rl_load()
771 cmd->cmd.cmd_load_ip_fw.fw_size = psp->rl.size_bytes; in psp_rl_load()
774 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_rl_load()
776 release_psp_cmd_buf(psp); in psp_rl_load()
794 static int psp_asd_load(struct psp_context *psp) in psp_asd_load() argument
803 if (amdgpu_sriov_vf(psp->adev) || !psp->asd.size_bytes) in psp_asd_load()
806 cmd = acquire_psp_cmd_buf(psp); in psp_asd_load()
808 psp_copy_fw(psp, psp->asd.start_addr, psp->asd.size_bytes); in psp_asd_load()
810 psp_prep_asd_load_cmd_buf(cmd, psp->fw_pri_mc_addr, in psp_asd_load()
811 psp->asd.size_bytes); in psp_asd_load()
813 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_asd_load()
814 psp->fence_buf_mc_addr); in psp_asd_load()
816 psp->asd_context.asd_initialized = true; in psp_asd_load()
817 psp->asd_context.session_id = cmd->resp.session_id; in psp_asd_load()
820 release_psp_cmd_buf(psp); in psp_asd_load()
832 static int psp_asd_unload(struct psp_context *psp) in psp_asd_unload() argument
837 if (amdgpu_sriov_vf(psp->adev)) in psp_asd_unload()
840 if (!psp->asd_context.asd_initialized) in psp_asd_unload()
843 cmd = acquire_psp_cmd_buf(psp); in psp_asd_unload()
845 psp_prep_ta_unload_cmd_buf(cmd, psp->asd_context.session_id); in psp_asd_unload()
847 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_asd_unload()
848 psp->fence_buf_mc_addr); in psp_asd_unload()
850 psp->asd_context.asd_initialized = false; in psp_asd_unload()
852 release_psp_cmd_buf(psp); in psp_asd_unload()
865 int psp_reg_program(struct psp_context *psp, enum psp_reg_prog_id reg, in psp_reg_program() argument
874 cmd = acquire_psp_cmd_buf(psp); in psp_reg_program()
877 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_reg_program()
881 release_psp_cmd_buf(psp); in psp_reg_program()
902 static int psp_ta_init_shared_buf(struct psp_context *psp, in psp_ta_init_shared_buf() argument
912 ret = amdgpu_bo_create_kernel(psp->adev, shared_mem_size, PAGE_SIZE, in psp_ta_init_shared_buf()
927 static int psp_xgmi_init_shared_buf(struct psp_context *psp) in psp_xgmi_init_shared_buf() argument
929 return psp_ta_init_shared_buf(psp, &psp->xgmi_context.context.mem_context, in psp_xgmi_init_shared_buf()
942 static int psp_ta_invoke(struct psp_context *psp, in psp_ta_invoke() argument
947 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_ta_invoke()
951 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_ta_invoke()
952 psp->fence_buf_mc_addr); in psp_ta_invoke()
954 release_psp_cmd_buf(psp); in psp_ta_invoke()
959 static int psp_xgmi_load(struct psp_context *psp) in psp_xgmi_load() argument
968 cmd = acquire_psp_cmd_buf(psp); in psp_xgmi_load()
970 psp_copy_fw(psp, psp->xgmi.start_addr, psp->xgmi.size_bytes); in psp_xgmi_load()
973 psp->fw_pri_mc_addr, in psp_xgmi_load()
974 psp->xgmi.size_bytes, in psp_xgmi_load()
975 psp->xgmi_context.context.mem_context.shared_mc_addr, in psp_xgmi_load()
978 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_xgmi_load()
979 psp->fence_buf_mc_addr); in psp_xgmi_load()
982 psp->xgmi_context.context.initialized = true; in psp_xgmi_load()
983 psp->xgmi_context.context.session_id = cmd->resp.session_id; in psp_xgmi_load()
986 release_psp_cmd_buf(psp); in psp_xgmi_load()
991 static int psp_xgmi_unload(struct psp_context *psp) in psp_xgmi_unload() argument
995 struct amdgpu_device *adev = psp->adev; in psp_xgmi_unload()
1006 cmd = acquire_psp_cmd_buf(psp); in psp_xgmi_unload()
1008 psp_prep_ta_unload_cmd_buf(cmd, psp->xgmi_context.context.session_id); in psp_xgmi_unload()
1010 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_xgmi_unload()
1011 psp->fence_buf_mc_addr); in psp_xgmi_unload()
1013 release_psp_cmd_buf(psp); in psp_xgmi_unload()
1018 int psp_xgmi_invoke(struct psp_context *psp, uint32_t ta_cmd_id) in psp_xgmi_invoke() argument
1020 return psp_ta_invoke(psp, ta_cmd_id, psp->xgmi_context.context.session_id); in psp_xgmi_invoke()
1023 int psp_xgmi_terminate(struct psp_context *psp) in psp_xgmi_terminate() argument
1027 if (!psp->xgmi_context.context.initialized) in psp_xgmi_terminate()
1030 ret = psp_xgmi_unload(psp); in psp_xgmi_terminate()
1034 psp->xgmi_context.context.initialized = false; in psp_xgmi_terminate()
1037 psp_ta_free_shared_buf(&psp->xgmi_context.context.mem_context); in psp_xgmi_terminate()
1042 int psp_xgmi_initialize(struct psp_context *psp, bool set_extended_data, bool load_ta) in psp_xgmi_initialize() argument
1047 if (!psp->ta_fw || in psp_xgmi_initialize()
1048 !psp->xgmi.size_bytes || in psp_xgmi_initialize()
1049 !psp->xgmi.start_addr) in psp_xgmi_initialize()
1055 if (!psp->xgmi_context.context.initialized) { in psp_xgmi_initialize()
1056 ret = psp_xgmi_init_shared_buf(psp); in psp_xgmi_initialize()
1062 ret = psp_xgmi_load(psp); in psp_xgmi_initialize()
1068 xgmi_cmd = (struct ta_xgmi_shared_memory *)(psp->xgmi_context.context.mem_context.shared_buf); in psp_xgmi_initialize()
1073 ret = psp_xgmi_invoke(psp, xgmi_cmd->cmd_id); in psp_xgmi_initialize()
1078 int psp_xgmi_get_hive_id(struct psp_context *psp, uint64_t *hive_id) in psp_xgmi_get_hive_id() argument
1083 xgmi_cmd = (struct ta_xgmi_shared_memory *)psp->xgmi_context.context.mem_context.shared_buf; in psp_xgmi_get_hive_id()
1089 ret = psp_xgmi_invoke(psp, xgmi_cmd->cmd_id); in psp_xgmi_get_hive_id()
1098 int psp_xgmi_get_node_id(struct psp_context *psp, uint64_t *node_id) in psp_xgmi_get_node_id() argument
1103 xgmi_cmd = (struct ta_xgmi_shared_memory *)psp->xgmi_context.context.mem_context.shared_buf; in psp_xgmi_get_node_id()
1109 ret = psp_xgmi_invoke(psp, xgmi_cmd->cmd_id); in psp_xgmi_get_node_id()
1118 static bool psp_xgmi_peer_link_info_supported(struct psp_context *psp) in psp_xgmi_peer_link_info_supported() argument
1120 return psp->adev->asic_type == CHIP_ALDEBARAN && in psp_xgmi_peer_link_info_supported()
1121 psp->xgmi.feature_version >= 0x2000000b; in psp_xgmi_peer_link_info_supported()
1131 static void psp_xgmi_reflect_topology_info(struct psp_context *psp, in psp_xgmi_reflect_topology_info() argument
1136 uint64_t src_node_id = psp->adev->gmc.xgmi.node_id; in psp_xgmi_reflect_topology_info()
1141 hive = amdgpu_get_xgmi_hive(psp->adev); in psp_xgmi_reflect_topology_info()
1149 mirror_top_info = &mirror_adev->psp.xgmi_context.top_info; in psp_xgmi_reflect_topology_info()
1170 int psp_xgmi_get_topology_info(struct psp_context *psp, in psp_xgmi_get_topology_info() argument
1184 xgmi_cmd = (struct ta_xgmi_shared_memory *)psp->xgmi_context.context.mem_context.shared_buf; in psp_xgmi_get_topology_info()
1201 ret = psp_xgmi_invoke(psp, TA_COMMAND_XGMI__GET_GET_TOPOLOGY_INFO); in psp_xgmi_get_topology_info()
1225 if (psp_xgmi_peer_link_info_supported(psp)) { in psp_xgmi_get_topology_info()
1230 ret = psp_xgmi_invoke(psp, TA_COMMAND_XGMI__GET_PEER_LINKS); in psp_xgmi_get_topology_info()
1244 if (psp->xgmi_context.supports_extended_data && in psp_xgmi_get_topology_info()
1246 psp_xgmi_reflect_topology_info(psp, topology->nodes[i]); in psp_xgmi_get_topology_info()
1253 int psp_xgmi_set_topology_info(struct psp_context *psp, in psp_xgmi_set_topology_info() argument
1264 xgmi_cmd = (struct ta_xgmi_shared_memory *)psp->xgmi_context.context.mem_context.shared_buf; in psp_xgmi_set_topology_info()
1279 return psp_xgmi_invoke(psp, TA_COMMAND_XGMI__SET_TOPOLOGY_INFO); in psp_xgmi_set_topology_info()
1283 static int psp_ras_init_shared_buf(struct psp_context *psp) in psp_ras_init_shared_buf() argument
1285 return psp_ta_init_shared_buf(psp, &psp->ras_context.context.mem_context, in psp_ras_init_shared_buf()
1289 static int psp_ras_load(struct psp_context *psp) in psp_ras_load() argument
1298 if (amdgpu_sriov_vf(psp->adev)) in psp_ras_load()
1301 psp_copy_fw(psp, psp->ras.start_addr, psp->ras.size_bytes); in psp_ras_load()
1303 ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.context.mem_context.shared_buf; in psp_ras_load()
1305 if (psp->adev->gmc.xgmi.connected_to_cpu) in psp_ras_load()
1310 cmd = acquire_psp_cmd_buf(psp); in psp_ras_load()
1313 psp->fw_pri_mc_addr, in psp_ras_load()
1314 psp->ras.size_bytes, in psp_ras_load()
1315 psp->ras_context.context.mem_context.shared_mc_addr, in psp_ras_load()
1318 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_ras_load()
1319 psp->fence_buf_mc_addr); in psp_ras_load()
1322 psp->ras_context.context.session_id = cmd->resp.session_id; in psp_ras_load()
1325 psp->ras_context.context.initialized = true; in psp_ras_load()
1327 dev_warn(psp->adev->dev, "RAS Init Status: 0x%X\n", ras_cmd->ras_status); in psp_ras_load()
1330 release_psp_cmd_buf(psp); in psp_ras_load()
1333 amdgpu_ras_fini(psp->adev); in psp_ras_load()
1338 static int psp_ras_unload(struct psp_context *psp) in psp_ras_unload() argument
1346 if (amdgpu_sriov_vf(psp->adev)) in psp_ras_unload()
1349 cmd = acquire_psp_cmd_buf(psp); in psp_ras_unload()
1351 psp_prep_ta_unload_cmd_buf(cmd, psp->ras_context.context.session_id); in psp_ras_unload()
1353 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_ras_unload()
1354 psp->fence_buf_mc_addr); in psp_ras_unload()
1356 release_psp_cmd_buf(psp); in psp_ras_unload()
1361 int psp_ras_invoke(struct psp_context *psp, uint32_t ta_cmd_id) in psp_ras_invoke() argument
1366 ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.context.mem_context.shared_buf; in psp_ras_invoke()
1371 if (amdgpu_sriov_vf(psp->adev)) in psp_ras_invoke()
1374 ret = psp_ta_invoke(psp, ta_cmd_id, psp->ras_context.context.session_id); in psp_ras_invoke()
1387 dev_warn(psp->adev->dev, "ECC switch disabled\n"); in psp_ras_invoke()
1392 dev_warn(psp->adev->dev, in psp_ras_invoke()
1424 int psp_ras_enable_features(struct psp_context *psp, in psp_ras_enable_features() argument
1430 if (!psp->ras_context.context.initialized) in psp_ras_enable_features()
1433 ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.context.mem_context.shared_buf; in psp_ras_enable_features()
1443 ret = psp_ras_invoke(psp, ras_cmd->cmd_id); in psp_ras_enable_features()
1447 return psp_ras_status_to_errno(psp->adev, ras_cmd->ras_status); in psp_ras_enable_features()
1450 static int psp_ras_terminate(struct psp_context *psp) in psp_ras_terminate() argument
1457 if (amdgpu_sriov_vf(psp->adev)) in psp_ras_terminate()
1460 if (!psp->ras_context.context.initialized) in psp_ras_terminate()
1463 ret = psp_ras_unload(psp); in psp_ras_terminate()
1467 psp->ras_context.context.initialized = false; in psp_ras_terminate()
1470 psp_ta_free_shared_buf(&psp->ras_context.context.mem_context); in psp_ras_terminate()
1475 static int psp_ras_initialize(struct psp_context *psp) in psp_ras_initialize() argument
1479 struct amdgpu_device *adev = psp->adev; in psp_ras_initialize()
1487 if (!adev->psp.ras.size_bytes || in psp_ras_initialize()
1488 !adev->psp.ras.start_addr) { in psp_ras_initialize()
1501 if (!amdgpu_ras_is_supported(psp->adev, AMDGPU_RAS_BLOCK__UMC)) { in psp_ras_initialize()
1534 if (!psp->ras_context.context.initialized) { in psp_ras_initialize()
1535 ret = psp_ras_init_shared_buf(psp); in psp_ras_initialize()
1540 ret = psp_ras_load(psp); in psp_ras_initialize()
1547 int psp_ras_trigger_error(struct psp_context *psp, in psp_ras_trigger_error() argument
1553 if (!psp->ras_context.context.initialized) in psp_ras_trigger_error()
1556 ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.context.mem_context.shared_buf; in psp_ras_trigger_error()
1562 ret = psp_ras_invoke(psp, ras_cmd->cmd_id); in psp_ras_trigger_error()
1571 return psp_ras_status_to_errno(psp->adev, ras_cmd->ras_status); in psp_ras_trigger_error()
1576 static int psp_hdcp_init_shared_buf(struct psp_context *psp) in psp_hdcp_init_shared_buf() argument
1578 return psp_ta_init_shared_buf(psp, &psp->hdcp_context.context.mem_context, in psp_hdcp_init_shared_buf()
1582 static int psp_hdcp_load(struct psp_context *psp) in psp_hdcp_load() argument
1590 if (amdgpu_sriov_vf(psp->adev)) in psp_hdcp_load()
1593 psp_copy_fw(psp, psp->hdcp.start_addr, in psp_hdcp_load()
1594 psp->hdcp.size_bytes); in psp_hdcp_load()
1596 cmd = acquire_psp_cmd_buf(psp); in psp_hdcp_load()
1599 psp->fw_pri_mc_addr, in psp_hdcp_load()
1600 psp->hdcp.size_bytes, in psp_hdcp_load()
1601 psp->hdcp_context.context.mem_context.shared_mc_addr, in psp_hdcp_load()
1604 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_hdcp_load()
1607 psp->hdcp_context.context.initialized = true; in psp_hdcp_load()
1608 psp->hdcp_context.context.session_id = cmd->resp.session_id; in psp_hdcp_load()
1609 mutex_init(&psp->hdcp_context.mutex); in psp_hdcp_load()
1612 release_psp_cmd_buf(psp); in psp_hdcp_load()
1616 static int psp_hdcp_initialize(struct psp_context *psp) in psp_hdcp_initialize() argument
1623 if (amdgpu_sriov_vf(psp->adev)) in psp_hdcp_initialize()
1626 if (!psp->hdcp.size_bytes || in psp_hdcp_initialize()
1627 !psp->hdcp.start_addr) { in psp_hdcp_initialize()
1628 dev_info(psp->adev->dev, "HDCP: optional hdcp ta ucode is not available\n"); in psp_hdcp_initialize()
1632 if (!psp->hdcp_context.context.initialized) { in psp_hdcp_initialize()
1633 ret = psp_hdcp_init_shared_buf(psp); in psp_hdcp_initialize()
1638 ret = psp_hdcp_load(psp); in psp_hdcp_initialize()
1645 static int psp_hdcp_unload(struct psp_context *psp) in psp_hdcp_unload() argument
1653 if (amdgpu_sriov_vf(psp->adev)) in psp_hdcp_unload()
1656 cmd = acquire_psp_cmd_buf(psp); in psp_hdcp_unload()
1658 psp_prep_ta_unload_cmd_buf(cmd, psp->hdcp_context.context.session_id); in psp_hdcp_unload()
1660 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_hdcp_unload()
1662 release_psp_cmd_buf(psp); in psp_hdcp_unload()
1667 int psp_hdcp_invoke(struct psp_context *psp, uint32_t ta_cmd_id) in psp_hdcp_invoke() argument
1672 if (amdgpu_sriov_vf(psp->adev)) in psp_hdcp_invoke()
1675 return psp_ta_invoke(psp, ta_cmd_id, psp->hdcp_context.context.session_id); in psp_hdcp_invoke()
1678 static int psp_hdcp_terminate(struct psp_context *psp) in psp_hdcp_terminate() argument
1685 if (amdgpu_sriov_vf(psp->adev)) in psp_hdcp_terminate()
1688 if (!psp->hdcp_context.context.initialized) { in psp_hdcp_terminate()
1689 if (psp->hdcp_context.context.mem_context.shared_buf) in psp_hdcp_terminate()
1695 ret = psp_hdcp_unload(psp); in psp_hdcp_terminate()
1699 psp->hdcp_context.context.initialized = false; in psp_hdcp_terminate()
1703 psp_ta_free_shared_buf(&psp->hdcp_context.context.mem_context); in psp_hdcp_terminate()
1710 static int psp_dtm_init_shared_buf(struct psp_context *psp) in psp_dtm_init_shared_buf() argument
1712 return psp_ta_init_shared_buf(psp, &psp->dtm_context.context.mem_context, in psp_dtm_init_shared_buf()
1716 static int psp_dtm_load(struct psp_context *psp) in psp_dtm_load() argument
1724 if (amdgpu_sriov_vf(psp->adev)) in psp_dtm_load()
1727 psp_copy_fw(psp, psp->dtm.start_addr, psp->dtm.size_bytes); in psp_dtm_load()
1729 cmd = acquire_psp_cmd_buf(psp); in psp_dtm_load()
1732 psp->fw_pri_mc_addr, in psp_dtm_load()
1733 psp->dtm.size_bytes, in psp_dtm_load()
1734 psp->dtm_context.context.mem_context.shared_mc_addr, in psp_dtm_load()
1737 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_dtm_load()
1740 psp->dtm_context.context.initialized = true; in psp_dtm_load()
1741 psp->dtm_context.context.session_id = cmd->resp.session_id; in psp_dtm_load()
1742 mutex_init(&psp->dtm_context.mutex); in psp_dtm_load()
1745 release_psp_cmd_buf(psp); in psp_dtm_load()
1750 static int psp_dtm_initialize(struct psp_context *psp) in psp_dtm_initialize() argument
1757 if (amdgpu_sriov_vf(psp->adev)) in psp_dtm_initialize()
1760 if (!psp->dtm.size_bytes || in psp_dtm_initialize()
1761 !psp->dtm.start_addr) { in psp_dtm_initialize()
1762 dev_info(psp->adev->dev, "DTM: optional dtm ta ucode is not available\n"); in psp_dtm_initialize()
1766 if (!psp->dtm_context.context.initialized) { in psp_dtm_initialize()
1767 ret = psp_dtm_init_shared_buf(psp); in psp_dtm_initialize()
1772 ret = psp_dtm_load(psp); in psp_dtm_initialize()
1779 static int psp_dtm_unload(struct psp_context *psp) in psp_dtm_unload() argument
1787 if (amdgpu_sriov_vf(psp->adev)) in psp_dtm_unload()
1790 cmd = acquire_psp_cmd_buf(psp); in psp_dtm_unload()
1792 psp_prep_ta_unload_cmd_buf(cmd, psp->dtm_context.context.session_id); in psp_dtm_unload()
1794 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_dtm_unload()
1796 release_psp_cmd_buf(psp); in psp_dtm_unload()
1801 int psp_dtm_invoke(struct psp_context *psp, uint32_t ta_cmd_id) in psp_dtm_invoke() argument
1806 if (amdgpu_sriov_vf(psp->adev)) in psp_dtm_invoke()
1809 return psp_ta_invoke(psp, ta_cmd_id, psp->dtm_context.context.session_id); in psp_dtm_invoke()
1812 static int psp_dtm_terminate(struct psp_context *psp) in psp_dtm_terminate() argument
1819 if (amdgpu_sriov_vf(psp->adev)) in psp_dtm_terminate()
1822 if (!psp->dtm_context.context.initialized) { in psp_dtm_terminate()
1823 if (psp->dtm_context.context.mem_context.shared_buf) in psp_dtm_terminate()
1829 ret = psp_dtm_unload(psp); in psp_dtm_terminate()
1833 psp->dtm_context.context.initialized = false; in psp_dtm_terminate()
1837 psp_ta_free_shared_buf(&psp->dtm_context.context.mem_context); in psp_dtm_terminate()
1844 static int psp_rap_init_shared_buf(struct psp_context *psp) in psp_rap_init_shared_buf() argument
1846 return psp_ta_init_shared_buf(psp, &psp->rap_context.context.mem_context, in psp_rap_init_shared_buf()
1850 static int psp_rap_load(struct psp_context *psp) in psp_rap_load() argument
1855 psp_copy_fw(psp, psp->rap.start_addr, psp->rap.size_bytes); in psp_rap_load()
1857 cmd = acquire_psp_cmd_buf(psp); in psp_rap_load()
1860 psp->fw_pri_mc_addr, in psp_rap_load()
1861 psp->rap.size_bytes, in psp_rap_load()
1862 psp->rap_context.context.mem_context.shared_mc_addr, in psp_rap_load()
1865 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_rap_load()
1868 psp->rap_context.context.initialized = true; in psp_rap_load()
1869 psp->rap_context.context.session_id = cmd->resp.session_id; in psp_rap_load()
1870 mutex_init(&psp->rap_context.mutex); in psp_rap_load()
1873 release_psp_cmd_buf(psp); in psp_rap_load()
1878 static int psp_rap_unload(struct psp_context *psp) in psp_rap_unload() argument
1881 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_rap_unload()
1883 psp_prep_ta_unload_cmd_buf(cmd, psp->rap_context.context.session_id); in psp_rap_unload()
1885 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_rap_unload()
1887 release_psp_cmd_buf(psp); in psp_rap_unload()
1892 static int psp_rap_initialize(struct psp_context *psp) in psp_rap_initialize() argument
1900 if (amdgpu_sriov_vf(psp->adev)) in psp_rap_initialize()
1903 if (!psp->rap.size_bytes || in psp_rap_initialize()
1904 !psp->rap.start_addr) { in psp_rap_initialize()
1905 dev_info(psp->adev->dev, "RAP: optional rap ta ucode is not available\n"); in psp_rap_initialize()
1909 if (!psp->rap_context.context.initialized) { in psp_rap_initialize()
1910 ret = psp_rap_init_shared_buf(psp); in psp_rap_initialize()
1915 ret = psp_rap_load(psp); in psp_rap_initialize()
1919 ret = psp_rap_invoke(psp, TA_CMD_RAP__INITIALIZE, &status); in psp_rap_initialize()
1921 psp_rap_unload(psp); in psp_rap_initialize()
1923 psp_ta_free_shared_buf(&psp->rap_context.context.mem_context); in psp_rap_initialize()
1925 psp->rap_context.context.initialized = false; in psp_rap_initialize()
1927 dev_warn(psp->adev->dev, "RAP TA initialize fail (%d) status %d.\n", in psp_rap_initialize()
1936 static int psp_rap_terminate(struct psp_context *psp) in psp_rap_terminate() argument
1940 if (!psp->rap_context.context.initialized) in psp_rap_terminate()
1943 ret = psp_rap_unload(psp); in psp_rap_terminate()
1945 psp->rap_context.context.initialized = false; in psp_rap_terminate()
1948 psp_ta_free_shared_buf(&psp->rap_context.context.mem_context); in psp_rap_terminate()
1953 int psp_rap_invoke(struct psp_context *psp, uint32_t ta_cmd_id, enum ta_rap_status *status) in psp_rap_invoke() argument
1958 if (!psp->rap_context.context.initialized) in psp_rap_invoke()
1965 mutex_lock(&psp->rap_context.mutex); in psp_rap_invoke()
1968 psp->rap_context.context.mem_context.shared_buf; in psp_rap_invoke()
1974 ret = psp_ta_invoke(psp, rap_cmd->cmd_id, psp->rap_context.context.session_id); in psp_rap_invoke()
1982 mutex_unlock(&psp->rap_context.mutex); in psp_rap_invoke()
1989 static int psp_securedisplay_init_shared_buf(struct psp_context *psp) in psp_securedisplay_init_shared_buf() argument
1992 psp, &psp->securedisplay_context.context.mem_context, in psp_securedisplay_init_shared_buf()
1996 static int psp_securedisplay_load(struct psp_context *psp) in psp_securedisplay_load() argument
1999 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_securedisplay_load()
2001 memset(psp->fw_pri_buf, 0, PSP_1_MEG); in psp_securedisplay_load()
2002 memcpy(psp->fw_pri_buf, psp->securedisplay.start_addr, psp->securedisplay.size_bytes); in psp_securedisplay_load()
2005 psp->fw_pri_mc_addr, in psp_securedisplay_load()
2006 psp->securedisplay.size_bytes, in psp_securedisplay_load()
2007 psp->securedisplay_context.context.mem_context.shared_mc_addr, in psp_securedisplay_load()
2010 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_securedisplay_load()
2013 psp->securedisplay_context.context.initialized = true; in psp_securedisplay_load()
2014 psp->securedisplay_context.context.session_id = cmd->resp.session_id; in psp_securedisplay_load()
2015 mutex_init(&psp->securedisplay_context.mutex); in psp_securedisplay_load()
2018 release_psp_cmd_buf(psp); in psp_securedisplay_load()
2023 static int psp_securedisplay_unload(struct psp_context *psp) in psp_securedisplay_unload() argument
2026 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_securedisplay_unload()
2028 psp_prep_ta_unload_cmd_buf(cmd, psp->securedisplay_context.context.session_id); in psp_securedisplay_unload()
2030 ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr); in psp_securedisplay_unload()
2032 release_psp_cmd_buf(psp); in psp_securedisplay_unload()
2037 static int psp_securedisplay_initialize(struct psp_context *psp) in psp_securedisplay_initialize() argument
2045 if (amdgpu_sriov_vf(psp->adev)) in psp_securedisplay_initialize()
2048 if (!psp->securedisplay.size_bytes || in psp_securedisplay_initialize()
2049 !psp->securedisplay.start_addr) { in psp_securedisplay_initialize()
2050 dev_info(psp->adev->dev, "SECUREDISPLAY: securedisplay ta ucode is not available\n"); in psp_securedisplay_initialize()
2054 if (!psp->securedisplay_context.context.initialized) { in psp_securedisplay_initialize()
2055 ret = psp_securedisplay_init_shared_buf(psp); in psp_securedisplay_initialize()
2060 ret = psp_securedisplay_load(psp); in psp_securedisplay_initialize()
2064 psp_prep_securedisplay_cmd_buf(psp, &securedisplay_cmd, in psp_securedisplay_initialize()
2067 ret = psp_securedisplay_invoke(psp, TA_SECUREDISPLAY_COMMAND__QUERY_TA); in psp_securedisplay_initialize()
2069 psp_securedisplay_unload(psp); in psp_securedisplay_initialize()
2071 psp_ta_free_shared_buf(&psp->securedisplay_context.context.mem_context); in psp_securedisplay_initialize()
2073 psp->securedisplay_context.context.initialized = false; in psp_securedisplay_initialize()
2075 dev_err(psp->adev->dev, "SECUREDISPLAY TA initialize fail.\n"); in psp_securedisplay_initialize()
2080 psp_securedisplay_parse_resp_status(psp, securedisplay_cmd->status); in psp_securedisplay_initialize()
2081 dev_err(psp->adev->dev, "SECUREDISPLAY: query securedisplay TA failed. ret 0x%x\n", in psp_securedisplay_initialize()
2088 static int psp_securedisplay_terminate(struct psp_context *psp) in psp_securedisplay_terminate() argument
2095 if (amdgpu_sriov_vf(psp->adev)) in psp_securedisplay_terminate()
2098 if (!psp->securedisplay_context.context.initialized) in psp_securedisplay_terminate()
2101 ret = psp_securedisplay_unload(psp); in psp_securedisplay_terminate()
2105 psp->securedisplay_context.context.initialized = false; in psp_securedisplay_terminate()
2108 psp_ta_free_shared_buf(&psp->securedisplay_context.context.mem_context); in psp_securedisplay_terminate()
2113 int psp_securedisplay_invoke(struct psp_context *psp, uint32_t ta_cmd_id) in psp_securedisplay_invoke() argument
2117 if (!psp->securedisplay_context.context.initialized) in psp_securedisplay_invoke()
2124 mutex_lock(&psp->securedisplay_context.mutex); in psp_securedisplay_invoke()
2126 ret = psp_ta_invoke(psp, ta_cmd_id, psp->securedisplay_context.context.session_id); in psp_securedisplay_invoke()
2128 mutex_unlock(&psp->securedisplay_context.mutex); in psp_securedisplay_invoke()
2134 static int psp_hw_start(struct psp_context *psp) in psp_hw_start() argument
2136 struct amdgpu_device *adev = psp->adev; in psp_hw_start()
2140 if ((is_psp_fw_valid(psp->kdb)) && in psp_hw_start()
2141 (psp->funcs->bootloader_load_kdb != NULL)) { in psp_hw_start()
2142 ret = psp_bootloader_load_kdb(psp); in psp_hw_start()
2149 if ((is_psp_fw_valid(psp->spl)) && in psp_hw_start()
2150 (psp->funcs->bootloader_load_spl != NULL)) { in psp_hw_start()
2151 ret = psp_bootloader_load_spl(psp); in psp_hw_start()
2158 if ((is_psp_fw_valid(psp->sys)) && in psp_hw_start()
2159 (psp->funcs->bootloader_load_sysdrv != NULL)) { in psp_hw_start()
2160 ret = psp_bootloader_load_sysdrv(psp); in psp_hw_start()
2167 if ((is_psp_fw_valid(psp->soc_drv)) && in psp_hw_start()
2168 (psp->funcs->bootloader_load_soc_drv != NULL)) { in psp_hw_start()
2169 ret = psp_bootloader_load_soc_drv(psp); in psp_hw_start()
2176 if ((is_psp_fw_valid(psp->intf_drv)) && in psp_hw_start()
2177 (psp->funcs->bootloader_load_intf_drv != NULL)) { in psp_hw_start()
2178 ret = psp_bootloader_load_intf_drv(psp); in psp_hw_start()
2185 if ((is_psp_fw_valid(psp->dbg_drv)) && in psp_hw_start()
2186 (psp->funcs->bootloader_load_dbg_drv != NULL)) { in psp_hw_start()
2187 ret = psp_bootloader_load_dbg_drv(psp); in psp_hw_start()
2194 if ((is_psp_fw_valid(psp->sos)) && in psp_hw_start()
2195 (psp->funcs->bootloader_load_sos != NULL)) { in psp_hw_start()
2196 ret = psp_bootloader_load_sos(psp); in psp_hw_start()
2204 ret = psp_ring_create(psp, PSP_RING_TYPE__KM); in psp_hw_start()
2210 ret = psp_tmr_init(psp); in psp_hw_start()
2221 if (psp->pmfw_centralized_cstate_management) { in psp_hw_start()
2222 ret = psp_load_smu_fw(psp); in psp_hw_start()
2227 ret = psp_tmr_load(psp); in psp_hw_start()
2350 static void psp_print_fw_hdr(struct psp_context *psp, in psp_print_fw_hdr() argument
2353 struct amdgpu_device *adev = psp->adev; in psp_print_fw_hdr()
2416 static int psp_execute_non_psp_fw_load(struct psp_context *psp, in psp_execute_non_psp_fw_load() argument
2420 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_execute_non_psp_fw_load()
2424 ret = psp_cmd_submit_buf(psp, ucode, cmd, in psp_execute_non_psp_fw_load()
2425 psp->fence_buf_mc_addr); in psp_execute_non_psp_fw_load()
2428 release_psp_cmd_buf(psp); in psp_execute_non_psp_fw_load()
2433 static int psp_load_smu_fw(struct psp_context *psp) in psp_load_smu_fw() argument
2436 struct amdgpu_device *adev = psp->adev; in psp_load_smu_fw()
2439 struct amdgpu_ras *ras = psp->ras_context.ras; in psp_load_smu_fw()
2441 if (!ucode->fw || amdgpu_sriov_vf(psp->adev)) in psp_load_smu_fw()
2454 ret = psp_execute_non_psp_fw_load(psp, ucode); in psp_load_smu_fw()
2462 static bool fw_load_skip_check(struct psp_context *psp, in fw_load_skip_check() argument
2469 (psp_smu_reload_quirk(psp) || in fw_load_skip_check()
2470 psp->autoload_supported || in fw_load_skip_check()
2471 psp->pmfw_centralized_cstate_management)) in fw_load_skip_check()
2474 if (amdgpu_sriov_vf(psp->adev) && in fw_load_skip_check()
2491 if (psp->autoload_supported && in fw_load_skip_check()
2500 int psp_load_fw_list(struct psp_context *psp, in psp_load_fw_list() argument
2508 psp_print_fw_hdr(psp, ucode); in psp_load_fw_list()
2509 ret = psp_execute_non_psp_fw_load(psp, ucode); in psp_load_fw_list()
2516 static int psp_load_non_psp_fw(struct psp_context *psp) in psp_load_non_psp_fw() argument
2520 struct amdgpu_device *adev = psp->adev; in psp_load_non_psp_fw()
2522 if (psp->autoload_supported && in psp_load_non_psp_fw()
2523 !psp->pmfw_centralized_cstate_management) { in psp_load_non_psp_fw()
2524 ret = psp_load_smu_fw(psp); in psp_load_non_psp_fw()
2533 !fw_load_skip_check(psp, ucode)) { in psp_load_non_psp_fw()
2534 ret = psp_load_smu_fw(psp); in psp_load_non_psp_fw()
2540 if (fw_load_skip_check(psp, ucode)) in psp_load_non_psp_fw()
2543 if (psp->autoload_supported && in psp_load_non_psp_fw()
2553 psp_print_fw_hdr(psp, ucode); in psp_load_non_psp_fw()
2555 ret = psp_execute_non_psp_fw_load(psp, ucode); in psp_load_non_psp_fw()
2560 if (psp->autoload_supported && ucode->ucode_id == (amdgpu_sriov_vf(adev) ? in psp_load_non_psp_fw()
2562 ret = psp_rlc_autoload_start(psp); in psp_load_non_psp_fw()
2576 struct psp_context *psp = &adev->psp; in psp_load_fw() local
2579 psp_ring_stop(psp, PSP_RING_TYPE__KM); /* should not destroy ring, only stop */ in psp_load_fw()
2586 &psp->fw_pri_bo, in psp_load_fw()
2587 &psp->fw_pri_mc_addr, in psp_load_fw()
2588 &psp->fw_pri_buf); in psp_load_fw()
2592 &psp->fw_pri_bo, in psp_load_fw()
2593 &psp->fw_pri_mc_addr, in psp_load_fw()
2594 &psp->fw_pri_buf); in psp_load_fw()
2602 &psp->fence_buf_bo, in psp_load_fw()
2603 &psp->fence_buf_mc_addr, in psp_load_fw()
2604 &psp->fence_buf); in psp_load_fw()
2610 &psp->cmd_buf_bo, &psp->cmd_buf_mc_addr, in psp_load_fw()
2611 (void **)&psp->cmd_buf_mem); in psp_load_fw()
2615 memset(psp->fence_buf, 0, PSP_FENCE_BUFFER_SIZE); in psp_load_fw()
2617 ret = psp_ring_init(psp, PSP_RING_TYPE__KM); in psp_load_fw()
2624 ret = psp_hw_start(psp); in psp_load_fw()
2628 ret = psp_load_non_psp_fw(psp); in psp_load_fw()
2632 ret = psp_asd_load(psp); in psp_load_fw()
2644 if (psp->ta_fw) { in psp_load_fw()
2645 ret = psp_ras_initialize(psp); in psp_load_fw()
2647 dev_err(psp->adev->dev, in psp_load_fw()
2650 ret = psp_hdcp_initialize(psp); in psp_load_fw()
2652 dev_err(psp->adev->dev, in psp_load_fw()
2655 ret = psp_dtm_initialize(psp); in psp_load_fw()
2657 dev_err(psp->adev->dev, in psp_load_fw()
2660 ret = psp_rap_initialize(psp); in psp_load_fw()
2662 dev_err(psp->adev->dev, in psp_load_fw()
2665 ret = psp_securedisplay_initialize(psp); in psp_load_fw()
2667 dev_err(psp->adev->dev, in psp_load_fw()
2714 struct psp_context *psp = &adev->psp; in psp_hw_fini() local
2716 if (psp->ta_fw) { in psp_hw_fini()
2717 psp_ras_terminate(psp); in psp_hw_fini()
2718 psp_securedisplay_terminate(psp); in psp_hw_fini()
2719 psp_rap_terminate(psp); in psp_hw_fini()
2720 psp_dtm_terminate(psp); in psp_hw_fini()
2721 psp_hdcp_terminate(psp); in psp_hw_fini()
2724 psp_asd_unload(psp); in psp_hw_fini()
2726 psp_tmr_terminate(psp); in psp_hw_fini()
2727 psp_ring_destroy(psp, PSP_RING_TYPE__KM); in psp_hw_fini()
2729 amdgpu_bo_free_kernel(&psp->fw_pri_bo, in psp_hw_fini()
2730 &psp->fw_pri_mc_addr, &psp->fw_pri_buf); in psp_hw_fini()
2731 amdgpu_bo_free_kernel(&psp->fence_buf_bo, in psp_hw_fini()
2732 &psp->fence_buf_mc_addr, &psp->fence_buf); in psp_hw_fini()
2733 amdgpu_bo_free_kernel(&psp->cmd_buf_bo, &psp->cmd_buf_mc_addr, in psp_hw_fini()
2734 (void **)&psp->cmd_buf_mem); in psp_hw_fini()
2743 struct psp_context *psp = &adev->psp; in psp_suspend() local
2746 psp->xgmi_context.context.initialized) { in psp_suspend()
2747 ret = psp_xgmi_terminate(psp); in psp_suspend()
2754 if (psp->ta_fw) { in psp_suspend()
2755 ret = psp_ras_terminate(psp); in psp_suspend()
2760 ret = psp_hdcp_terminate(psp); in psp_suspend()
2765 ret = psp_dtm_terminate(psp); in psp_suspend()
2770 ret = psp_rap_terminate(psp); in psp_suspend()
2775 ret = psp_securedisplay_terminate(psp); in psp_suspend()
2782 ret = psp_asd_unload(psp); in psp_suspend()
2788 ret = psp_tmr_terminate(psp); in psp_suspend()
2794 ret = psp_ring_stop(psp, PSP_RING_TYPE__KM); in psp_suspend()
2807 struct psp_context *psp = &adev->psp; in psp_resume() local
2811 if (psp->mem_train_ctx.enable_mem_training) { in psp_resume()
2812 ret = psp_mem_training(psp, PSP_MEM_TRAIN_RESUME); in psp_resume()
2821 ret = psp_hw_start(psp); in psp_resume()
2825 ret = psp_load_non_psp_fw(psp); in psp_resume()
2829 ret = psp_asd_load(psp); in psp_resume()
2836 ret = psp_xgmi_initialize(psp, false, true); in psp_resume()
2841 dev_err(psp->adev->dev, in psp_resume()
2845 if (psp->ta_fw) { in psp_resume()
2846 ret = psp_ras_initialize(psp); in psp_resume()
2848 dev_err(psp->adev->dev, in psp_resume()
2851 ret = psp_hdcp_initialize(psp); in psp_resume()
2853 dev_err(psp->adev->dev, in psp_resume()
2856 ret = psp_dtm_initialize(psp); in psp_resume()
2858 dev_err(psp->adev->dev, in psp_resume()
2861 ret = psp_rap_initialize(psp); in psp_resume()
2863 dev_err(psp->adev->dev, in psp_resume()
2866 ret = psp_securedisplay_initialize(psp); in psp_resume()
2868 dev_err(psp->adev->dev, in psp_resume()
2889 mutex_lock(&adev->psp.mutex); in psp_gpu_reset()
2890 ret = psp_mode1_reset(&adev->psp); in psp_gpu_reset()
2891 mutex_unlock(&adev->psp.mutex); in psp_gpu_reset()
2896 int psp_rlc_autoload_start(struct psp_context *psp) in psp_rlc_autoload_start() argument
2899 struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp); in psp_rlc_autoload_start()
2903 ret = psp_cmd_submit_buf(psp, NULL, cmd, in psp_rlc_autoload_start()
2904 psp->fence_buf_mc_addr); in psp_rlc_autoload_start()
2906 release_psp_cmd_buf(psp); in psp_rlc_autoload_start()
2921 return psp_execute_non_psp_fw_load(&adev->psp, &ucode); in psp_update_vcn_sram()
2924 int psp_ring_cmd_submit(struct psp_context *psp, in psp_ring_cmd_submit() argument
2931 struct psp_ring *ring = &psp->km_ring; in psp_ring_cmd_submit()
2935 struct amdgpu_device *adev = psp->adev; in psp_ring_cmd_submit()
2940 psp_write_ptr_reg = psp_ring_get_wptr(psp); in psp_ring_cmd_submit()
2970 psp_ring_set_wptr(psp, psp_write_ptr_reg); in psp_ring_cmd_submit()
2974 int psp_init_asd_microcode(struct psp_context *psp, in psp_init_asd_microcode() argument
2977 struct amdgpu_device *adev = psp->adev; in psp_init_asd_microcode()
2988 err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); in psp_init_asd_microcode()
2992 err = amdgpu_ucode_validate(adev->psp.asd_fw); in psp_init_asd_microcode()
2996 asd_hdr = (const struct psp_firmware_header_v1_0 *)adev->psp.asd_fw->data; in psp_init_asd_microcode()
2997 adev->psp.asd.fw_version = le32_to_cpu(asd_hdr->header.ucode_version); in psp_init_asd_microcode()
2998 adev->psp.asd.feature_version = le32_to_cpu(asd_hdr->sos.fw_version); in psp_init_asd_microcode()
2999 adev->psp.asd.size_bytes = le32_to_cpu(asd_hdr->header.ucode_size_bytes); in psp_init_asd_microcode()
3000 adev->psp.asd.start_addr = (uint8_t *)asd_hdr + in psp_init_asd_microcode()
3005 release_firmware(adev->psp.asd_fw); in psp_init_asd_microcode()
3006 adev->psp.asd_fw = NULL; in psp_init_asd_microcode()
3010 int psp_init_toc_microcode(struct psp_context *psp, in psp_init_toc_microcode() argument
3013 struct amdgpu_device *adev = psp->adev; in psp_init_toc_microcode()
3024 err = request_firmware(&adev->psp.toc_fw, fw_name, adev->dev); in psp_init_toc_microcode()
3028 err = amdgpu_ucode_validate(adev->psp.toc_fw); in psp_init_toc_microcode()
3032 toc_hdr = (const struct psp_firmware_header_v1_0 *)adev->psp.toc_fw->data; in psp_init_toc_microcode()
3033 adev->psp.toc.fw_version = le32_to_cpu(toc_hdr->header.ucode_version); in psp_init_toc_microcode()
3034 adev->psp.toc.feature_version = le32_to_cpu(toc_hdr->sos.fw_version); in psp_init_toc_microcode()
3035 adev->psp.toc.size_bytes = le32_to_cpu(toc_hdr->header.ucode_size_bytes); in psp_init_toc_microcode()
3036 adev->psp.toc.start_addr = (uint8_t *)toc_hdr + in psp_init_toc_microcode()
3041 release_firmware(adev->psp.toc_fw); in psp_init_toc_microcode()
3042 adev->psp.toc_fw = NULL; in psp_init_toc_microcode()
3046 static int parse_sos_bin_descriptor(struct psp_context *psp, in parse_sos_bin_descriptor() argument
3052 if (!psp || !desc || !sos_hdr) in parse_sos_bin_descriptor()
3061 psp->sos.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3062 psp->sos.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3063 psp->sos.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3064 psp->sos.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3067 psp->sys.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3068 psp->sys.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3069 psp->sys.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3070 psp->sys.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3073 psp->kdb.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3074 psp->kdb.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3075 psp->kdb.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3076 psp->kdb.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3079 psp->toc.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3080 psp->toc.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3081 psp->toc.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3082 psp->toc.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3085 psp->spl.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3086 psp->spl.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3087 psp->spl.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3088 psp->spl.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3091 psp->rl.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3092 psp->rl.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3093 psp->rl.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3094 psp->rl.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3097 psp->soc_drv.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3098 psp->soc_drv.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3099 psp->soc_drv.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3100 psp->soc_drv.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3103 psp->intf_drv.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3104 psp->intf_drv.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3105 psp->intf_drv.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3106 psp->intf_drv.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3109 psp->dbg_drv.fw_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3110 psp->dbg_drv.feature_version = le32_to_cpu(desc->fw_version); in parse_sos_bin_descriptor()
3111 psp->dbg_drv.size_bytes = le32_to_cpu(desc->size_bytes); in parse_sos_bin_descriptor()
3112 psp->dbg_drv.start_addr = ucode_start_addr; in parse_sos_bin_descriptor()
3115 dev_warn(psp->adev->dev, "Unsupported PSP FW type: %d\n", desc->fw_type); in parse_sos_bin_descriptor()
3128 sos_hdr = (const struct psp_firmware_header_v1_0 *)adev->psp.sos_fw->data; in psp_init_sos_base_fw()
3133 adev->psp.sos.fw_version = le32_to_cpu(sos_hdr->header.ucode_version); in psp_init_sos_base_fw()
3134 adev->psp.sos.feature_version = le32_to_cpu(sos_hdr->sos.fw_version); in psp_init_sos_base_fw()
3136 adev->psp.sys.size_bytes = le32_to_cpu(sos_hdr->sos.offset_bytes); in psp_init_sos_base_fw()
3137 adev->psp.sys.start_addr = ucode_array_start_addr; in psp_init_sos_base_fw()
3139 adev->psp.sos.size_bytes = le32_to_cpu(sos_hdr->sos.size_bytes); in psp_init_sos_base_fw()
3140 adev->psp.sos.start_addr = ucode_array_start_addr + in psp_init_sos_base_fw()
3142 adev->psp.xgmi_context.supports_extended_data = false; in psp_init_sos_base_fw()
3145 sos_hdr_v1_3 = (const struct psp_firmware_header_v1_3 *)adev->psp.sos_fw->data; in psp_init_sos_base_fw()
3147 adev->psp.sos.fw_version = le32_to_cpu(sos_hdr_v1_3->sos_aux.fw_version); in psp_init_sos_base_fw()
3148 adev->psp.sos.feature_version = le32_to_cpu(sos_hdr_v1_3->sos_aux.fw_version); in psp_init_sos_base_fw()
3150 adev->psp.sys.size_bytes = le32_to_cpu(sos_hdr_v1_3->sys_drv_aux.size_bytes); in psp_init_sos_base_fw()
3151 adev->psp.sys.start_addr = ucode_array_start_addr + in psp_init_sos_base_fw()
3154 adev->psp.sos.size_bytes = le32_to_cpu(sos_hdr_v1_3->sos_aux.size_bytes); in psp_init_sos_base_fw()
3155 adev->psp.sos.start_addr = ucode_array_start_addr + in psp_init_sos_base_fw()
3157 adev->psp.xgmi_context.supports_extended_data = true; in psp_init_sos_base_fw()
3160 if ((adev->psp.sys.size_bytes == 0) || (adev->psp.sos.size_bytes == 0)) { in psp_init_sos_base_fw()
3168 int psp_init_sos_microcode(struct psp_context *psp, in psp_init_sos_microcode() argument
3171 struct amdgpu_device *adev = psp->adev; in psp_init_sos_microcode()
3188 err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); in psp_init_sos_microcode()
3192 err = amdgpu_ucode_validate(adev->psp.sos_fw); in psp_init_sos_microcode()
3196 sos_hdr = (const struct psp_firmware_header_v1_0 *)adev->psp.sos_fw->data; in psp_init_sos_microcode()
3208 sos_hdr_v1_1 = (const struct psp_firmware_header_v1_1 *)adev->psp.sos_fw->data; in psp_init_sos_microcode()
3209 adev->psp.toc.size_bytes = le32_to_cpu(sos_hdr_v1_1->toc.size_bytes); in psp_init_sos_microcode()
3210 adev->psp.toc.start_addr = (uint8_t *)adev->psp.sys.start_addr + in psp_init_sos_microcode()
3212 adev->psp.kdb.size_bytes = le32_to_cpu(sos_hdr_v1_1->kdb.size_bytes); in psp_init_sos_microcode()
3213 adev->psp.kdb.start_addr = (uint8_t *)adev->psp.sys.start_addr + in psp_init_sos_microcode()
3217 sos_hdr_v1_2 = (const struct psp_firmware_header_v1_2 *)adev->psp.sos_fw->data; in psp_init_sos_microcode()
3218 adev->psp.kdb.size_bytes = le32_to_cpu(sos_hdr_v1_2->kdb.size_bytes); in psp_init_sos_microcode()
3219 adev->psp.kdb.start_addr = (uint8_t *)adev->psp.sys.start_addr + in psp_init_sos_microcode()
3223 sos_hdr_v1_3 = (const struct psp_firmware_header_v1_3 *)adev->psp.sos_fw->data; in psp_init_sos_microcode()
3224 adev->psp.toc.size_bytes = le32_to_cpu(sos_hdr_v1_3->v1_1.toc.size_bytes); in psp_init_sos_microcode()
3225 adev->psp.toc.start_addr = ucode_array_start_addr + in psp_init_sos_microcode()
3227 adev->psp.kdb.size_bytes = le32_to_cpu(sos_hdr_v1_3->v1_1.kdb.size_bytes); in psp_init_sos_microcode()
3228 adev->psp.kdb.start_addr = ucode_array_start_addr + in psp_init_sos_microcode()
3230 adev->psp.spl.size_bytes = le32_to_cpu(sos_hdr_v1_3->spl.size_bytes); in psp_init_sos_microcode()
3231 adev->psp.spl.start_addr = ucode_array_start_addr + in psp_init_sos_microcode()
3233 adev->psp.rl.size_bytes = le32_to_cpu(sos_hdr_v1_3->rl.size_bytes); in psp_init_sos_microcode()
3234 adev->psp.rl.start_addr = ucode_array_start_addr + in psp_init_sos_microcode()
3239 sos_hdr_v2_0 = (const struct psp_firmware_header_v2_0 *)adev->psp.sos_fw->data; in psp_init_sos_microcode()
3248 err = parse_sos_bin_descriptor(psp, in psp_init_sos_microcode()
3266 release_firmware(adev->psp.sos_fw); in psp_init_sos_microcode()
3267 adev->psp.sos_fw = NULL; in psp_init_sos_microcode()
3272 static int parse_ta_bin_descriptor(struct psp_context *psp, in parse_ta_bin_descriptor() argument
3278 if (!psp || !desc || !ta_hdr) in parse_ta_bin_descriptor()
3287 psp->asd.fw_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3288 psp->asd.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3289 psp->asd.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3290 psp->asd.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3293 psp->xgmi.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3294 psp->xgmi.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3295 psp->xgmi.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3298 psp->ras.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3299 psp->ras.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3300 psp->ras.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3303 psp->hdcp.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3304 psp->hdcp.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3305 psp->hdcp.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3308 psp->dtm.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3309 psp->dtm.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3310 psp->dtm.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3313 psp->rap.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3314 psp->rap.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3315 psp->rap.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3318 psp->securedisplay.feature_version = le32_to_cpu(desc->fw_version); in parse_ta_bin_descriptor()
3319 psp->securedisplay.size_bytes = le32_to_cpu(desc->size_bytes); in parse_ta_bin_descriptor()
3320 psp->securedisplay.start_addr = ucode_start_addr; in parse_ta_bin_descriptor()
3323 dev_warn(psp->adev->dev, "Unsupported TA type: %d\n", desc->fw_type); in parse_ta_bin_descriptor()
3330 int psp_init_ta_microcode(struct psp_context *psp, in psp_init_ta_microcode() argument
3333 struct amdgpu_device *adev = psp->adev; in psp_init_ta_microcode()
3345 err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); in psp_init_ta_microcode()
3349 err = amdgpu_ucode_validate(adev->psp.ta_fw); in psp_init_ta_microcode()
3353 ta_hdr = (const struct ta_firmware_header_v2_0 *)adev->psp.ta_fw->data; in psp_init_ta_microcode()
3368 err = parse_ta_bin_descriptor(psp, in psp_init_ta_microcode()
3378 release_firmware(adev->psp.ta_fw); in psp_init_ta_microcode()
3379 adev->psp.ta_fw = NULL; in psp_init_ta_microcode()
3409 mutex_lock(&adev->psp.mutex); in psp_usbc_pd_fw_sysfs_read()
3410 ret = psp_read_usbc_pd_fw(&adev->psp, &fw_ver); in psp_usbc_pd_fw_sysfs_read()
3411 mutex_unlock(&adev->psp.mutex); in psp_usbc_pd_fw_sysfs_read()
3459 mutex_lock(&adev->psp.mutex); in psp_usbc_pd_fw_sysfs_write()
3460 ret = psp_load_usbc_pd_fw(&adev->psp, fw_pri_mc_addr); in psp_usbc_pd_fw_sysfs_write()
3461 mutex_unlock(&adev->psp.mutex); in psp_usbc_pd_fw_sysfs_write()
3477 void psp_copy_fw(struct psp_context *psp, uint8_t *start_addr, uint32_t bin_size) in psp_copy_fw() argument
3481 if (!drm_dev_enter(&psp->adev->ddev, &idx)) in psp_copy_fw()
3484 memset(psp->fw_pri_buf, 0, PSP_1_MEG); in psp_copy_fw()
3485 memcpy(psp->fw_pri_buf, start_addr, bin_size); in psp_copy_fw()