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.feature_version = le32_to_cpu(ta_hdr->xgmi.fw_version); in psp_v11_0_init_microcode()
155 adev->psp.xgmi.size_bytes = le32_to_cpu(ta_hdr->xgmi.size_bytes); in psp_v11_0_init_microcode()
156 adev->psp.xgmi.start_addr = (uint8_t *)ta_hdr + in psp_v11_0_init_microcode()
158 adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version); in psp_v11_0_init_microcode()
159 adev->psp.ras.feature_version = le32_to_cpu(ta_hdr->ras.fw_version); in psp_v11_0_init_microcode()
160 adev->psp.ras.size_bytes = le32_to_cpu(ta_hdr->ras.size_bytes); in psp_v11_0_init_microcode()
161 adev->psp.ras.start_addr = (uint8_t *)adev->psp.xgmi.start_addr + in psp_v11_0_init_microcode()
168 err = psp_init_sos_microcode(psp, chip_name); in psp_v11_0_init_microcode()
171 err = psp_init_asd_microcode(psp, chip_name); in psp_v11_0_init_microcode()
177 err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); in psp_v11_0_init_microcode()
179 release_firmware(adev->psp.ta_fw); in psp_v11_0_init_microcode()
180 adev->psp.ta_fw = NULL; in psp_v11_0_init_microcode()
184 err = amdgpu_ucode_validate(adev->psp.ta_fw); in psp_v11_0_init_microcode()
188 ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; in psp_v11_0_init_microcode()
189 adev->psp.hdcp.feature_version = le32_to_cpu(ta_hdr->hdcp.fw_version); in psp_v11_0_init_microcode()
190 adev->psp.hdcp.size_bytes = le32_to_cpu(ta_hdr->hdcp.size_bytes); in psp_v11_0_init_microcode()
191 adev->psp.hdcp.start_addr = (uint8_t *)ta_hdr + in psp_v11_0_init_microcode()
194 adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version); in psp_v11_0_init_microcode()
196 adev->psp.dtm.feature_version = le32_to_cpu(ta_hdr->dtm.fw_version); in psp_v11_0_init_microcode()
197 adev->psp.dtm.size_bytes = le32_to_cpu(ta_hdr->dtm.size_bytes); in psp_v11_0_init_microcode()
198 adev->psp.dtm.start_addr = (uint8_t *)adev->psp.hdcp.start_addr + in psp_v11_0_init_microcode()
205 err = psp_init_sos_microcode(psp, chip_name); in psp_v11_0_init_microcode()
208 err = psp_init_ta_microcode(psp, chip_name); in psp_v11_0_init_microcode()
213 err = psp_init_sos_microcode(psp, chip_name); in psp_v11_0_init_microcode()
216 err = psp_init_ta_microcode(psp, chip_name); in psp_v11_0_init_microcode()
221 err = psp_init_asd_microcode(psp, chip_name); in psp_v11_0_init_microcode()
224 err = psp_init_toc_microcode(psp, chip_name); in psp_v11_0_init_microcode()
235 release_firmware(adev->psp.ta_fw); in psp_v11_0_init_microcode()
236 adev->psp.ta_fw = NULL; in psp_v11_0_init_microcode()
240 static int psp_v11_0_wait_for_bootloader(struct psp_context *psp) in psp_v11_0_wait_for_bootloader() argument
242 struct amdgpu_device *adev = psp->adev; in psp_v11_0_wait_for_bootloader()
250 ret = psp_wait_for(psp, in psp_v11_0_wait_for_bootloader()
263 static bool psp_v11_0_is_sos_alive(struct psp_context *psp) in psp_v11_0_is_sos_alive() argument
265 struct amdgpu_device *adev = psp->adev; in psp_v11_0_is_sos_alive()
273 static int psp_v11_0_bootloader_load_kdb(struct psp_context *psp) in psp_v11_0_bootloader_load_kdb() argument
277 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_kdb()
282 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_kdb()
285 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_kdb()
290 psp_copy_fw(psp, psp->kdb.start_addr, psp->kdb.size_bytes); in psp_v11_0_bootloader_load_kdb()
294 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_kdb()
299 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_kdb()
304 static int psp_v11_0_bootloader_load_spl(struct psp_context *psp) in psp_v11_0_bootloader_load_spl() argument
308 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_spl()
313 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_spl()
316 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_spl()
321 psp_copy_fw(psp, psp->spl.start_addr, psp->spl.size_bytes); in psp_v11_0_bootloader_load_spl()
325 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_spl()
330 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_spl()
335 static int psp_v11_0_bootloader_load_sysdrv(struct psp_context *psp) in psp_v11_0_bootloader_load_sysdrv() argument
339 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_sysdrv()
344 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_sysdrv()
347 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_sysdrv()
352 psp_copy_fw(psp, psp->sys.start_addr, psp->sys.size_bytes); in psp_v11_0_bootloader_load_sysdrv()
356 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_sysdrv()
364 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_sysdrv()
369 static int psp_v11_0_bootloader_load_sos(struct psp_context *psp) in psp_v11_0_bootloader_load_sos() argument
373 struct amdgpu_device *adev = psp->adev; in psp_v11_0_bootloader_load_sos()
378 if (psp_v11_0_is_sos_alive(psp)) in psp_v11_0_bootloader_load_sos()
381 ret = psp_v11_0_wait_for_bootloader(psp); in psp_v11_0_bootloader_load_sos()
386 psp_copy_fw(psp, psp->sos.start_addr, psp->sos.size_bytes); in psp_v11_0_bootloader_load_sos()
390 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v11_0_bootloader_load_sos()
397 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_81), in psp_v11_0_bootloader_load_sos()
404 static int psp_v11_0_ring_init(struct psp_context *psp, in psp_v11_0_ring_init() argument
409 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_init()
411 ring = &psp->km_ring; in psp_v11_0_ring_init()
430 static int psp_v11_0_ring_stop(struct psp_context *psp, in psp_v11_0_ring_stop() argument
434 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_stop()
449 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), in psp_v11_0_ring_stop()
452 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_ring_stop()
458 static int psp_v11_0_ring_create(struct psp_context *psp, in psp_v11_0_ring_create() argument
463 struct psp_ring *ring = &psp->km_ring; in psp_v11_0_ring_create()
464 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_create()
468 ret = psp_v11_0_ring_stop(psp, ring_type); in psp_v11_0_ring_create()
489 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101), in psp_v11_0_ring_create()
494 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_ring_create()
519 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64), in psp_v11_0_ring_create()
527 static int psp_v11_0_ring_destroy(struct psp_context *psp, in psp_v11_0_ring_destroy() argument
531 struct psp_ring *ring = &psp->km_ring; in psp_v11_0_ring_destroy()
532 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_destroy()
534 ret = psp_v11_0_ring_stop(psp, ring_type); in psp_v11_0_ring_destroy()
545 static int psp_v11_0_mode1_reset(struct psp_context *psp) in psp_v11_0_mode1_reset() argument
549 struct amdgpu_device *adev = psp->adev; in psp_v11_0_mode1_reset()
553 ret = psp_wait_for(psp, offset, 0x80000000, 0x8000FFFF, false); in psp_v11_0_mode1_reset()
567 ret = psp_wait_for(psp, offset, 0x80000000, 0x80000000, false); in psp_v11_0_mode1_reset()
579 static int psp_v11_0_memory_training_send_msg(struct psp_context *psp, int msg) in psp_v11_0_memory_training_send_msg() argument
585 struct amdgpu_device *adev = psp->adev; in psp_v11_0_memory_training_send_msg()
587 data_32 = (psp->mem_train_ctx.c2p_train_data_offset >> 20); in psp_v11_0_memory_training_send_msg()
593 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v11_0_memory_training_send_msg()
613 static int psp_v11_0_memory_training(struct psp_context *psp, uint32_t ops) in psp_v11_0_memory_training() argument
615 struct psp_memory_training_context *ctx = &psp->mem_train_ctx; in psp_v11_0_memory_training()
617 struct amdgpu_device *adev = psp->adev; in psp_v11_0_memory_training()
631 if (psp_v11_0_is_sos_alive(psp)) { in psp_v11_0_memory_training()
696 ret = psp_v11_0_memory_training_send_msg(psp, PSP_BL__DRAM_LONG_TRAIN); in psp_v11_0_memory_training()
715 …amdgpu_device_vram_access(psp->adev, ctx->p2c_train_data_offset, ctx->sys_cache, ctx->train_data_s… in psp_v11_0_memory_training()
719 …amdgpu_device_vram_access(psp->adev, ctx->c2p_train_data_offset, ctx->sys_cache, ctx->train_data_s… in psp_v11_0_memory_training()
723 ret = psp_v11_0_memory_training_send_msg(psp, (amdgpu_force_long_training > 0) ? in psp_v11_0_memory_training()
734 static uint32_t psp_v11_0_ring_get_wptr(struct psp_context *psp) in psp_v11_0_ring_get_wptr() argument
737 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_get_wptr()
740 data = psp->km_ring.ring_wptr; in psp_v11_0_ring_get_wptr()
747 static void psp_v11_0_ring_set_wptr(struct psp_context *psp, uint32_t value) in psp_v11_0_ring_set_wptr() argument
749 struct amdgpu_device *adev = psp->adev; in psp_v11_0_ring_set_wptr()
754 psp->km_ring.ring_wptr = value; in psp_v11_0_ring_set_wptr()
759 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
761 struct amdgpu_device *adev = psp->adev; in psp_v11_0_load_usbc_pd_fw()
772 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v11_0_load_usbc_pd_fw()
802 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
804 struct amdgpu_device *adev = psp->adev; in psp_v11_0_read_usbc_pd_fw()
809 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), in psp_v11_0_read_usbc_pd_fw()
835 void psp_v11_0_set_psp_funcs(struct psp_context *psp) in psp_v11_0_set_psp_funcs() argument
837 psp->funcs = &psp_v11_0_funcs; in psp_v11_0_set_psp_funcs()