Lines Matching refs:psp
83 static int psp_v13_0_init_microcode(struct psp_context *psp) in psp_v13_0_init_microcode() argument
85 struct amdgpu_device *adev = psp->adev; in psp_v13_0_init_microcode()
93 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode()
98 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode()
111 err = psp_init_toc_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode()
114 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode()
124 err = psp_init_sos_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode()
128 err = psp_init_ta_microcode(psp, ucode_prefix); in psp_v13_0_init_microcode()
139 static bool psp_v13_0_is_sos_alive(struct psp_context *psp) in psp_v13_0_is_sos_alive() argument
141 struct amdgpu_device *adev = psp->adev; in psp_v13_0_is_sos_alive()
149 static void psp_v13_0_bootloader_print_status(struct psp_context *psp, in psp_v13_0_bootloader_print_status() argument
152 struct amdgpu_device *adev = psp->adev; in psp_v13_0_bootloader_print_status()
175 static int psp_v13_0_wait_for_vmbx_ready(struct psp_context *psp) in psp_v13_0_wait_for_vmbx_ready() argument
177 struct amdgpu_device *adev = psp->adev; in psp_v13_0_wait_for_vmbx_ready()
184 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_33), in psp_v13_0_wait_for_vmbx_ready()
197 static int psp_v13_0_wait_for_bootloader(struct psp_context *psp) in psp_v13_0_wait_for_bootloader() argument
199 struct amdgpu_device *adev = psp->adev; in psp_v13_0_wait_for_bootloader()
215 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35), in psp_v13_0_wait_for_bootloader()
222 psp, "Waiting for bootloader completion"); in psp_v13_0_wait_for_bootloader()
228 static int psp_v13_0_wait_for_bootloader_steady_state(struct psp_context *psp) in psp_v13_0_wait_for_bootloader_steady_state() argument
230 struct amdgpu_device *adev = psp->adev; in psp_v13_0_wait_for_bootloader_steady_state()
236 ret = psp_v13_0_wait_for_vmbx_ready(psp); in psp_v13_0_wait_for_bootloader_steady_state()
240 ret = psp_v13_0_wait_for_bootloader(psp); in psp_v13_0_wait_for_bootloader_steady_state()
250 static int psp_v13_0_bootloader_load_component(struct psp_context *psp, in psp_v13_0_bootloader_load_component() argument
256 struct amdgpu_device *adev = psp->adev; in psp_v13_0_bootloader_load_component()
261 if (psp_v13_0_is_sos_alive(psp)) in psp_v13_0_bootloader_load_component()
264 ret = psp_v13_0_wait_for_bootloader(psp); in psp_v13_0_bootloader_load_component()
268 memset(psp->fw_pri_buf, 0, PSP_1_MEG); in psp_v13_0_bootloader_load_component()
271 memcpy(psp->fw_pri_buf, bin_desc->start_addr, bin_desc->size_bytes); in psp_v13_0_bootloader_load_component()
275 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v13_0_bootloader_load_component()
280 ret = psp_v13_0_wait_for_bootloader(psp); in psp_v13_0_bootloader_load_component()
285 static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp) in psp_v13_0_bootloader_load_kdb() argument
287 return psp_v13_0_bootloader_load_component(psp, &psp->kdb, PSP_BL__LOAD_KEY_DATABASE); in psp_v13_0_bootloader_load_kdb()
290 static int psp_v13_0_bootloader_load_spl(struct psp_context *psp) in psp_v13_0_bootloader_load_spl() argument
292 return psp_v13_0_bootloader_load_component(psp, &psp->kdb, PSP_BL__LOAD_TOS_SPL_TABLE); in psp_v13_0_bootloader_load_spl()
295 static int psp_v13_0_bootloader_load_sysdrv(struct psp_context *psp) in psp_v13_0_bootloader_load_sysdrv() argument
297 return psp_v13_0_bootloader_load_component(psp, &psp->sys, PSP_BL__LOAD_SYSDRV); in psp_v13_0_bootloader_load_sysdrv()
300 static int psp_v13_0_bootloader_load_soc_drv(struct psp_context *psp) in psp_v13_0_bootloader_load_soc_drv() argument
302 return psp_v13_0_bootloader_load_component(psp, &psp->soc_drv, PSP_BL__LOAD_SOCDRV); in psp_v13_0_bootloader_load_soc_drv()
305 static int psp_v13_0_bootloader_load_intf_drv(struct psp_context *psp) in psp_v13_0_bootloader_load_intf_drv() argument
307 return psp_v13_0_bootloader_load_component(psp, &psp->intf_drv, PSP_BL__LOAD_INTFDRV); in psp_v13_0_bootloader_load_intf_drv()
310 static int psp_v13_0_bootloader_load_dbg_drv(struct psp_context *psp) in psp_v13_0_bootloader_load_dbg_drv() argument
312 return psp_v13_0_bootloader_load_component(psp, &psp->dbg_drv, PSP_BL__LOAD_DBGDRV); in psp_v13_0_bootloader_load_dbg_drv()
315 static int psp_v13_0_bootloader_load_ras_drv(struct psp_context *psp) in psp_v13_0_bootloader_load_ras_drv() argument
317 return psp_v13_0_bootloader_load_component(psp, &psp->ras_drv, PSP_BL__LOAD_RASDRV); in psp_v13_0_bootloader_load_ras_drv()
320 static int psp_v13_0_bootloader_load_spdm_drv(struct psp_context *psp) in psp_v13_0_bootloader_load_spdm_drv() argument
322 return psp_v13_0_bootloader_load_component(psp, &psp->spdm_drv, PSP_BL__LOAD_SPDMDRV); in psp_v13_0_bootloader_load_spdm_drv()
325 static inline void psp_v13_0_init_sos_version(struct psp_context *psp) in psp_v13_0_init_sos_version() argument
327 struct amdgpu_device *adev = psp->adev; in psp_v13_0_init_sos_version()
329 psp->sos.fw_version = RREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_58); in psp_v13_0_init_sos_version()
332 static int psp_v13_0_bootloader_load_sos(struct psp_context *psp) in psp_v13_0_bootloader_load_sos() argument
336 struct amdgpu_device *adev = psp->adev; in psp_v13_0_bootloader_load_sos()
341 if (psp_v13_0_is_sos_alive(psp)) { in psp_v13_0_bootloader_load_sos()
342 psp_v13_0_init_sos_version(psp); in psp_v13_0_bootloader_load_sos()
346 ret = psp_v13_0_wait_for_bootloader(psp); in psp_v13_0_bootloader_load_sos()
350 memset(psp->fw_pri_buf, 0, PSP_1_MEG); in psp_v13_0_bootloader_load_sos()
353 memcpy(psp->fw_pri_buf, psp->sos.start_addr, psp->sos.size_bytes); in psp_v13_0_bootloader_load_sos()
357 (uint32_t)(psp->fw_pri_mc_addr >> 20)); in psp_v13_0_bootloader_load_sos()
364 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_81), in psp_v13_0_bootloader_load_sos()
369 psp_v13_0_init_sos_version(psp); in psp_v13_0_bootloader_load_sos()
374 static int psp_v13_0_ring_stop(struct psp_context *psp, in psp_v13_0_ring_stop() argument
378 struct amdgpu_device *adev = psp->adev; in psp_v13_0_ring_stop()
388 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101), in psp_v13_0_ring_stop()
398 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64), in psp_v13_0_ring_stop()
405 static int psp_v13_0_ring_create(struct psp_context *psp, in psp_v13_0_ring_create() argument
410 struct psp_ring *ring = &psp->km_ring; in psp_v13_0_ring_create()
411 struct amdgpu_device *adev = psp->adev; in psp_v13_0_ring_create()
414 ret = psp_v13_0_ring_stop(psp, ring_type); in psp_v13_0_ring_create()
436 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101), in psp_v13_0_ring_create()
442 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64), in psp_v13_0_ring_create()
468 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64), in psp_v13_0_ring_create()
475 static int psp_v13_0_ring_destroy(struct psp_context *psp, in psp_v13_0_ring_destroy() argument
479 struct psp_ring *ring = &psp->km_ring; in psp_v13_0_ring_destroy()
480 struct amdgpu_device *adev = psp->adev; in psp_v13_0_ring_destroy()
482 ret = psp_v13_0_ring_stop(psp, ring_type); in psp_v13_0_ring_destroy()
493 static uint32_t psp_v13_0_ring_get_wptr(struct psp_context *psp) in psp_v13_0_ring_get_wptr() argument
496 struct amdgpu_device *adev = psp->adev; in psp_v13_0_ring_get_wptr()
506 static void psp_v13_0_ring_set_wptr(struct psp_context *psp, uint32_t value) in psp_v13_0_ring_set_wptr() argument
508 struct amdgpu_device *adev = psp->adev; in psp_v13_0_ring_set_wptr()
518 static int psp_v13_0_memory_training_send_msg(struct psp_context *psp, int msg) in psp_v13_0_memory_training_send_msg() argument
524 struct amdgpu_device *adev = psp->adev; in psp_v13_0_memory_training_send_msg()
526 data_32 = (psp->mem_train_ctx.c2p_train_data_offset >> 20); in psp_v13_0_memory_training_send_msg()
533 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35), in psp_v13_0_memory_training_send_msg()
551 static int psp_v13_0_memory_training(struct psp_context *psp, uint32_t ops) in psp_v13_0_memory_training() argument
553 struct psp_memory_training_context *ctx = &psp->mem_train_ctx; in psp_v13_0_memory_training()
555 struct amdgpu_device *adev = psp->adev; in psp_v13_0_memory_training()
569 if (psp_v13_0_is_sos_alive(psp)) { in psp_v13_0_memory_training()
634 ret = psp_v13_0_memory_training_send_msg(psp, PSP_BL__DRAM_LONG_TRAIN); in psp_v13_0_memory_training()
653 …amdgpu_device_vram_access(psp->adev, ctx->p2c_train_data_offset, ctx->sys_cache, ctx->train_data_s… in psp_v13_0_memory_training()
657 …amdgpu_device_vram_access(psp->adev, ctx->c2p_train_data_offset, ctx->sys_cache, ctx->train_data_s… in psp_v13_0_memory_training()
661 ret = psp_v13_0_memory_training_send_msg(psp, (amdgpu_force_long_training > 0) ? in psp_v13_0_memory_training()
672 static int psp_v13_0_load_usbc_pd_fw(struct psp_context *psp, uint64_t fw_pri_mc_addr) in psp_v13_0_load_usbc_pd_fw() argument
674 struct amdgpu_device *adev = psp->adev; in psp_v13_0_load_usbc_pd_fw()
685 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35), in psp_v13_0_load_usbc_pd_fw()
715 static int psp_v13_0_read_usbc_pd_fw(struct psp_context *psp, uint32_t *fw_ver) in psp_v13_0_read_usbc_pd_fw() argument
717 struct amdgpu_device *adev = psp->adev; in psp_v13_0_read_usbc_pd_fw()
722 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35), in psp_v13_0_read_usbc_pd_fw()
730 static int psp_v13_0_exec_spi_cmd(struct psp_context *psp, int cmd) in psp_v13_0_exec_spi_cmd() argument
733 struct amdgpu_device *adev = psp->adev; in psp_v13_0_exec_spi_cmd()
745 ret = psp_wait_for_spirom_update(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115), in psp_v13_0_exec_spi_cmd()
749 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115), in psp_v13_0_exec_spi_cmd()
766 static int psp_v13_0_update_spirom(struct psp_context *psp, in psp_v13_0_update_spirom() argument
769 struct amdgpu_device *adev = psp->adev; in psp_v13_0_update_spirom()
773 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115), in psp_v13_0_update_spirom()
782 ret = psp_v13_0_exec_spi_cmd(psp, C2PMSG_CMD_SPI_UPDATE_ROM_IMAGE_ADDR_LO); in psp_v13_0_update_spirom()
788 ret = psp_v13_0_exec_spi_cmd(psp, C2PMSG_CMD_SPI_UPDATE_ROM_IMAGE_ADDR_HI); in psp_v13_0_update_spirom()
792 psp->vbflash_done = true; in psp_v13_0_update_spirom()
794 ret = psp_v13_0_exec_spi_cmd(psp, C2PMSG_CMD_SPI_UPDATE_FLASH_IMAGE); in psp_v13_0_update_spirom()
801 static int psp_v13_0_dump_spirom(struct psp_context *psp, in psp_v13_0_dump_spirom() argument
804 struct amdgpu_device *adev = psp->adev; in psp_v13_0_dump_spirom()
808 ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115), in psp_v13_0_dump_spirom()
817 ret = psp_v13_0_exec_spi_cmd(psp, C2PMSG_CMD_SPI_GET_ROM_IMAGE_ADDR_LO); in psp_v13_0_dump_spirom()
823 ret = psp_v13_0_exec_spi_cmd(psp, C2PMSG_CMD_SPI_GET_ROM_IMAGE_ADDR_HI); in psp_v13_0_dump_spirom()
827 ret = psp_v13_0_exec_spi_cmd(psp, C2PMSG_CMD_SPI_GET_FLASH_IMAGE); in psp_v13_0_dump_spirom()
832 static int psp_v13_0_vbflash_status(struct psp_context *psp) in psp_v13_0_vbflash_status() argument
834 struct amdgpu_device *adev = psp->adev; in psp_v13_0_vbflash_status()
839 static int psp_v13_0_fatal_error_recovery_quirk(struct psp_context *psp) in psp_v13_0_fatal_error_recovery_quirk() argument
841 struct amdgpu_device *adev = psp->adev; in psp_v13_0_fatal_error_recovery_quirk()
860 static bool psp_v13_0_get_ras_capability(struct psp_context *psp) in psp_v13_0_get_ras_capability() argument
862 struct amdgpu_device *adev = psp->adev; in psp_v13_0_get_ras_capability()
886 static bool psp_v13_0_is_aux_sos_load_required(struct psp_context *psp) in psp_v13_0_is_aux_sos_load_required() argument
888 struct amdgpu_device *adev = psp->adev; in psp_v13_0_is_aux_sos_load_required()
900 static bool psp_v13_0_is_reload_needed(struct psp_context *psp) in psp_v13_0_is_reload_needed() argument
904 if (!psp_v13_0_is_sos_alive(psp)) in psp_v13_0_is_reload_needed()
908 switch (amdgpu_ip_version(psp->adev, MP0_HWIP, 0)) { in psp_v13_0_is_reload_needed()
913 ucode_ver = psp->sos.fw_version; in psp_v13_0_is_reload_needed()
915 psp_v13_0_init_sos_version(psp); in psp_v13_0_is_reload_needed()
916 return (ucode_ver != psp->sos.fw_version); in psp_v13_0_is_reload_needed()
924 static int psp_v13_0_reg_program_no_ring(struct psp_context *psp, uint32_t val, in psp_v13_0_reg_program_no_ring() argument
927 struct amdgpu_device *adev = psp->adev; in psp_v13_0_reg_program_no_ring()
937 psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101), in psp_v13_0_reg_program_no_ring()
974 void psp_v13_0_set_psp_funcs(struct psp_context *psp) in psp_v13_0_set_psp_funcs() argument
976 psp->funcs = &psp_v13_0_funcs; in psp_v13_0_set_psp_funcs()