@@ -39,7 +39,6 @@ static int aie2_send_mgmt_msg_wait(struct amdxdna_dev_hdl *ndev,
3939 if (!ndev -> mgmt_chann )
4040 return - ENODEV ;
4141
42- drm_WARN_ON (& xdna -> ddev , xdna -> rpm_on && !mutex_is_locked (& xdna -> dev_lock ));
4342 ret = xdna_send_msg_wait (xdna , ndev -> mgmt_chann , msg );
4443 if (ret == - ETIME ) {
4544 xdna_mailbox_stop_channel (ndev -> mgmt_chann );
@@ -59,8 +58,15 @@ static int aie2_send_mgmt_msg_wait(struct amdxdna_dev_hdl *ndev,
5958int aie2_suspend_fw (struct amdxdna_dev_hdl * ndev )
6059{
6160 DECLARE_AIE2_MSG (suspend , MSG_OP_SUSPEND );
61+ int ret ;
6262
63- return aie2_send_mgmt_msg_wait (ndev , & msg );
63+ ret = aie2_send_mgmt_msg_wait (ndev , & msg );
64+ if (ret ) {
65+ XDNA_ERR (ndev -> xdna , "Failed to suspend fw, ret %d" , ret );
66+ return ret ;
67+ }
68+
69+ return aie2_psp_waitmode_poll (ndev -> psp_hdl );
6470}
6571
6672int aie2_resume_fw (struct amdxdna_dev_hdl * ndev )
@@ -646,6 +652,7 @@ aie2_cmdlist_fill_npu_cf(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t *siz
646652 u32 cmd_len ;
647653 void * cmd ;
648654
655+ memset (npu_slot , 0 , sizeof (* npu_slot ));
649656 cmd = amdxdna_cmd_get_payload (cmd_bo , & cmd_len );
650657 if (* size < sizeof (* npu_slot ) + cmd_len )
651658 return - EINVAL ;
@@ -654,7 +661,6 @@ aie2_cmdlist_fill_npu_cf(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t *siz
654661 if (npu_slot -> cu_idx == INVALID_CU_IDX )
655662 return - EINVAL ;
656663
657- memset (npu_slot , 0 , sizeof (* npu_slot ));
658664 npu_slot -> type = EXEC_NPU_TYPE_NON_ELF ;
659665 npu_slot -> arg_cnt = cmd_len / sizeof (u32 );
660666 memcpy (npu_slot -> args , cmd , cmd_len );
@@ -671,6 +677,7 @@ aie2_cmdlist_fill_npu_dpu(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t *si
671677 u32 cmd_len ;
672678 u32 arg_sz ;
673679
680+ memset (npu_slot , 0 , sizeof (* npu_slot ));
674681 sn = amdxdna_cmd_get_payload (cmd_bo , & cmd_len );
675682 arg_sz = cmd_len - sizeof (* sn );
676683 if (cmd_len < sizeof (* sn ) || arg_sz > MAX_NPU_ARGS_SIZE )
@@ -683,7 +690,6 @@ aie2_cmdlist_fill_npu_dpu(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t *si
683690 if (npu_slot -> cu_idx == INVALID_CU_IDX )
684691 return - EINVAL ;
685692
686- memset (npu_slot , 0 , sizeof (* npu_slot ));
687693 npu_slot -> type = EXEC_NPU_TYPE_PARTIAL_ELF ;
688694 npu_slot -> inst_buf_addr = sn -> buffer ;
689695 npu_slot -> inst_size = sn -> buffer_size ;
@@ -703,6 +709,7 @@ aie2_cmdlist_fill_npu_preempt(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t
703709 u32 cmd_len ;
704710 u32 arg_sz ;
705711
712+ memset (npu_slot , 0 , sizeof (* npu_slot ));
706713 pd = amdxdna_cmd_get_payload (cmd_bo , & cmd_len );
707714 arg_sz = cmd_len - sizeof (* pd );
708715 if (cmd_len < sizeof (* pd ) || arg_sz > MAX_NPU_ARGS_SIZE )
@@ -715,7 +722,6 @@ aie2_cmdlist_fill_npu_preempt(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t
715722 if (npu_slot -> cu_idx == INVALID_CU_IDX )
716723 return - EINVAL ;
717724
718- memset (npu_slot , 0 , sizeof (* npu_slot ));
719725 npu_slot -> type = EXEC_NPU_TYPE_PREEMPT ;
720726 npu_slot -> inst_buf_addr = pd -> inst_buf ;
721727 npu_slot -> save_buf_addr = pd -> save_buf ;
@@ -739,6 +745,7 @@ aie2_cmdlist_fill_npu_elf(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t *si
739745 u32 cmd_len ;
740746 u32 arg_sz ;
741747
748+ memset (npu_slot , 0 , sizeof (* npu_slot ));
742749 pd = amdxdna_cmd_get_payload (cmd_bo , & cmd_len );
743750 arg_sz = cmd_len - sizeof (* pd );
744751 if (cmd_len < sizeof (* pd ) || arg_sz > MAX_NPU_ARGS_SIZE )
@@ -747,7 +754,6 @@ aie2_cmdlist_fill_npu_elf(struct amdxdna_gem_obj *cmd_bo, void *slot, size_t *si
747754 if (* size < sizeof (* npu_slot ) + arg_sz )
748755 return - EINVAL ;
749756
750- memset (npu_slot , 0 , sizeof (* npu_slot ));
751757 npu_slot -> type = EXEC_NPU_TYPE_ELF ;
752758 npu_slot -> inst_buf_addr = pd -> inst_buf ;
753759 npu_slot -> save_buf_addr = pd -> save_buf ;
0 commit comments