Lines Matching refs:psp
86 static int psp_v11_0_init_microcode(struct psp_context *psp) in psp_v11_0_init_microcode() argument
88 struct amdgpu_device *adev = psp->adev; in psp_v11_0_init_microcode()
135 err = psp_init_sos_microcode(psp, chip_name); in psp_v11_0_init_microcode()
138 err = psp_init_asd_microcode(psp, chip_name); in psp_v11_0_init_microcode()
142 err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); in psp_v11_0_init_microcode()
144 release_firmware(adev->psp.ta_fw); in psp_v11_0_init_microcode()
145 adev->psp.ta_fw = NULL; in psp_v11_0_init_microcode()
149 err = amdgpu_ucode_validate(adev->psp.ta_fw); in psp_v11_0_init_microcode()
153 ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; in psp_v11_0_init_microcode()
154 adev->psp.xgmi_context.context.bin_desc.fw_version = in psp_v11_0_init_microcode()
156 adev->psp.xgmi_context.context.bin_desc.size_bytes = in psp_v11_0_init_microcode()
158 adev->psp.xgmi_context.context.bin_desc.start_addr = in psp_v11_0_init_microcode()
161 adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version); in psp_v11_0_init_microcode()
162 adev->psp.ras_context.context.bin_desc.fw_version = in psp_v11_0_init_microcode()
164 adev->psp.ras_context.context.bin_desc.size_bytes = in psp_v11_0_init_microcode()
166 adev->psp.ras_context.context.bin_desc.start_addr = in psp_v11_0_init_microcode()
167 (uint8_t *)adev->psp.xgmi_context.context.bin_desc.start_addr + in psp_v11_0_init_microcode()
174 err = psp_init_sos_microcode(psp, chip_name); in psp_v11_0_init_microcode()
177 err = psp_init_asd_microcode(psp, chip_name); in psp_v11_0_init_microcode()
183 err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); in psp_v11_0_init_microcode()
185 release_firmware(adev->psp.ta_fw); in psp_v11_0_init_microcode()
186 adev->psp.ta_fw = NULL; in psp_v11_0_init_microcode()
190 err = amdgpu_ucode_validate(adev->psp.ta_fw); in psp_v11_0_init_microcode()
194 ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; in psp_v11_0_init_microcode()
195 adev->psp.hdcp_context.context.bin_desc.fw_version = in psp_v11_0_init_microcode()
197 adev->psp.hdcp_context.context.bin_desc.size_bytes = in psp_v11_0_init_microcode()
199 adev->psp.hdcp_context.context.bin_desc.start_addr = in psp_v11_0_init_microcode()
204 adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version); in psp_v11_0_init_microcode()
206 adev->psp.dtm_context.context.bin_desc.fw_version = in psp_v11_0_init_microcode()
208 adev->psp.dtm_context.context.bin_desc.size_bytes = in psp_v11_0_init_microcode()
210 adev->psp.dtm_context.context.bin_desc.start_addr = in psp_v11_0_init_microcode()
211 (uint8_t *)adev->psp.hdcp_context.context in psp_v11_0_init_microcode()
220 err = psp_init_sos_microcode(psp, chip_name); in psp_v11_0_init_microcode()
223 err = psp_init_ta_microcode(psp, chip_name); in psp_v11_0_init_microcode()
228 err = psp_init_asd_microcode(psp, chip_name); in psp_v11_0_init_microcode()
231 err = psp_init_toc_microcode(psp, chip_name); in psp_v11_0_init_microcode()
242 release_firmware(adev->psp.ta_fw); in psp_v11_0_init_microcode()
243 adev->psp.ta_fw = NULL; in psp_v11_0_init_microcode()
247 static int psp_v11_0_wait_for_bootloader(struct psp_context *psp) in psp_v11_0_wait_for_bootloader() argument
249 struct amdgpu_device *adev = psp->adev; in psp_v11_0_wait_for_bootloader()
257 ret = psp_wait_for(psp, in psp_v11_0_wait_for_bootloader()
270 static bool psp_v11_0_is_sos_alive(struct psp_context *psp) in psp_v11_0_is_sos_alive() argument
272 struct amdgpu_device *adev = psp->adev; in psp_v11_0_is_sos_alive()
280 static int psp_v11_0_bootloader_load_kdb(struct psp_context *psp) in psp_v11_0_bootloader_load_kdb() argument
284 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_kdb()
289 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_kdb()
292 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_kdb()
297 psp_copy_fw(psp, psp->kdb.start_addr, psp->kdb.size_bytes); in psp_v11_0_bootloader_load_kdb()
301 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_kdb()
306 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_kdb()
311 static int psp_v11_0_bootloader_load_spl(struct psp_context *psp) in psp_v11_0_bootloader_load_spl() argument
315 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_spl()
320 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_spl()
323 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_spl()
328 psp_copy_fw(psp, psp->spl.start_addr, psp->spl.size_bytes); in psp_v11_0_bootloader_load_spl()
332 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_spl()
337 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_spl()
342 static int psp_v11_0_bootloader_load_sysdrv(struct psp_context *psp) in psp_v11_0_bootloader_load_sysdrv() argument
346 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_sysdrv()
351 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_sysdrv()
354 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_sysdrv()
359 psp_copy_fw(psp, psp->sys.start_addr, psp->sys.size_bytes); in psp_v11_0_bootloader_load_sysdrv()
363 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_sysdrv()
371 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_sysdrv()
376 static int psp_v11_0_bootloader_load_sos(struct psp_context *psp) in psp_v11_0_bootloader_load_sos() argument
380 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_sos()
385 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_sos()
388 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_sos()
393 psp_copy_fw(psp, psp->sos.start_addr, psp->sos.size_bytes); in psp_v11_0_bootloader_load_sos()
397 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_sos()
404 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_81), in psp_v11_0_bootloader_load_sos()
411 static int psp_v11_0_ring_init(struct psp_context *psp, in psp_v11_0_ring_init() argument
416 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_init()
418 ring = &psp->km_ring; in psp_v11_0_ring_init()
437 static int psp_v11_0_ring_stop(struct psp_context *psp, in psp_v11_0_ring_stop() argument
441 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_stop()
456 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), in psp_v11_0_ring_stop()
459 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_ring_stop()
465 static int psp_v11_0_ring_create(struct psp_context *psp, in psp_v11_0_ring_create() argument
470 struct psp_ring *ring = &psp->km_ring; in psp_v11_0_ring_create()
471 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_create()
475 ret = psp_v11_0_ring_stop(psp, ring_type); in psp_v11_0_ring_create()
496 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), in psp_v11_0_ring_create()
501 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_ring_create()
526 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_ring_create()
534 static int psp_v11_0_ring_destroy(struct psp_context *psp, in psp_v11_0_ring_destroy() argument
538 struct psp_ring *ring = &psp->km_ring; in psp_v11_0_ring_destroy()
539 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_destroy()
541 ret = psp_v11_0_ring_stop(psp, ring_type); in psp_v11_0_ring_destroy()
552 static int psp_v11_0_mode1_reset(struct psp_context *psp) in psp_v11_0_mode1_reset() argument
556 struct amdgpu_device *adev = psp->adev; in psp_v11_0_mode1_reset()
560 ret = psp_wait_for(psp, offset, 0x80000000, 0x8000FFFF, false); in psp_v11_0_mode1_reset()
574 ret = psp_wait_for(psp, offset, 0x80000000, 0x80000000, false); in psp_v11_0_mode1_reset()
586 static int psp_v11_0_memory_training_send_msg(struct psp_context *psp, int msg) in psp_v11_0_memory_training_send_msg() argument
592 struct amdgpu_device *adev = psp->adev; in psp_v11_0_memory_training_send_msg()
594 data_32 = (psp->mem_train_ctx.c2p_train_data_offset >> 20); in psp_v11_0_memory_training_send_msg()
600 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v11_0_memory_training_send_msg()
620 static int psp_v11_0_memory_training(struct psp_context *psp, uint32_t ops) in psp_v11_0_memory_training() argument
622 struct psp_memory_training_context *ctx = &psp->mem_train_ctx; in psp_v11_0_memory_training()
624 struct amdgpu_device *adev = psp->adev; in psp_v11_0_memory_training()
638 if (psp_v11_0_is_sos_alive(psp)) { in psp_v11_0_memory_training()
703 ret = psp_v11_0_memory_training_send_msg(psp, PSP_BL__DRAM_LONG_TRAIN); in psp_v11_0_memory_training()
722 …amdgpu_device_vram_access(psp->adev, ctx->p2c_train_data_offset, ctx->sys_cache, ctx->train_data_s… in psp_v11_0_memory_training()
726 …amdgpu_device_vram_access(psp->adev, ctx->c2p_train_data_offset, ctx->sys_cache, ctx->train_data_s… in psp_v11_0_memory_training()
730 ret = psp_v11_0_memory_training_send_msg(psp, (amdgpu_force_long_training > 0) ? in psp_v11_0_memory_training()
741 static uint32_t psp_v11_0_ring_get_wptr(struct psp_context *psp) in psp_v11_0_ring_get_wptr() argument
744 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_get_wptr()
747 data = psp->km_ring.ring_wptr; in psp_v11_0_ring_get_wptr()
754 static void psp_v11_0_ring_set_wptr(struct psp_context *psp, uint32_t value) in psp_v11_0_ring_set_wptr() argument
756 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_set_wptr()
761 psp->km_ring.ring_wptr = value; in psp_v11_0_ring_set_wptr()
766 static int psp_v11_0_load_usbc_pd_fw(struct psp_context *psp, uint64_t fw_pri_mc_addr) in psp_v11_0_load_usbc_pd_fw() argument
768 struct amdgpu_device *adev = psp->adev; in psp_v11_0_load_usbc_pd_fw()
779 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v11_0_load_usbc_pd_fw()
809 static int psp_v11_0_read_usbc_pd_fw(struct psp_context *psp, uint32_t *fw_ver) in psp_v11_0_read_usbc_pd_fw() argument
811 struct amdgpu_device *adev = psp->adev; in psp_v11_0_read_usbc_pd_fw()
816 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v11_0_read_usbc_pd_fw()
842 void psp_v11_0_set_psp_funcs(struct psp_context *psp) in psp_v11_0_set_psp_funcs() argument
844 psp->funcs = &psp_v11_0_funcs; in psp_v11_0_set_psp_funcs()