@@ -554,7 +554,7 @@ static void init_mqd_hiq_v9_4_3(struct mqd_manager *mm, void **mqd,
554
554
m -> cp_hqd_pq_control |= CP_HQD_PQ_CONTROL__NO_UPDATE_RPTR_MASK |
555
555
1 << CP_HQD_PQ_CONTROL__PRIV_STATE__SHIFT |
556
556
1 << CP_HQD_PQ_CONTROL__KMD_QUEUE__SHIFT ;
557
- if (amdgpu_sriov_vf (mm -> dev -> adev ))
557
+ if (amdgpu_sriov_multi_vf_mode (mm -> dev -> adev ))
558
558
m -> cp_hqd_pq_doorbell_control |= 1 <<
559
559
CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_MODE__SHIFT ;
560
560
m -> cp_mqd_stride_size = kfd_hiq_mqd_stride (mm -> dev );
@@ -667,7 +667,9 @@ static void init_mqd_v9_4_3(struct mqd_manager *mm, void **mqd,
667
667
get_xcc_mqd (mqd_mem_obj , & xcc_mqd_mem_obj , offset * xcc );
668
668
669
669
init_mqd (mm , (void * * )& m , & xcc_mqd_mem_obj , & xcc_gart_addr , q );
670
-
670
+ if (amdgpu_sriov_multi_vf_mode (mm -> dev -> adev ))
671
+ m -> cp_hqd_pq_doorbell_control |= 1 <<
672
+ CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_MODE__SHIFT ;
671
673
m -> cp_mqd_stride_size = offset ;
672
674
673
675
/*
@@ -727,6 +729,9 @@ static void update_mqd_v9_4_3(struct mqd_manager *mm, void *mqd,
727
729
m = get_mqd (mqd + size * xcc );
728
730
update_mqd (mm , m , q , minfo );
729
731
732
+ if (amdgpu_sriov_multi_vf_mode (mm -> dev -> adev ))
733
+ m -> cp_hqd_pq_doorbell_control |= 1 <<
734
+ CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_MODE__SHIFT ;
730
735
update_cu_mask (mm , m , minfo , xcc );
731
736
732
737
if (q -> format == KFD_QUEUE_FORMAT_AQL ) {
@@ -749,6 +754,21 @@ static void update_mqd_v9_4_3(struct mqd_manager *mm, void *mqd,
749
754
}
750
755
}
751
756
757
+ static void restore_mqd_v9_4_3 (struct mqd_manager * mm , void * * mqd ,
758
+ struct kfd_mem_obj * mqd_mem_obj , uint64_t * gart_addr ,
759
+ struct queue_properties * qp ,
760
+ const void * mqd_src ,
761
+ const void * ctl_stack_src , u32 ctl_stack_size )
762
+ {
763
+ restore_mqd (mm , mqd , mqd_mem_obj , gart_addr , qp , mqd_src , ctl_stack_src , ctl_stack_size );
764
+ if (amdgpu_sriov_multi_vf_mode (mm -> dev -> adev )) {
765
+ struct v9_mqd * m ;
766
+
767
+ m = (struct v9_mqd * ) mqd_mem_obj -> cpu_ptr ;
768
+ m -> cp_hqd_pq_doorbell_control |= 1 <<
769
+ CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_MODE__SHIFT ;
770
+ }
771
+ }
752
772
static int destroy_mqd_v9_4_3 (struct mqd_manager * mm , void * mqd ,
753
773
enum kfd_preempt_type type , unsigned int timeout ,
754
774
uint32_t pipe_id , uint32_t queue_id )
@@ -883,7 +903,6 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,
883
903
mqd -> is_occupied = kfd_is_occupied_cp ;
884
904
mqd -> get_checkpoint_info = get_checkpoint_info ;
885
905
mqd -> checkpoint_mqd = checkpoint_mqd ;
886
- mqd -> restore_mqd = restore_mqd ;
887
906
mqd -> mqd_size = sizeof (struct v9_mqd );
888
907
mqd -> mqd_stride = mqd_stride_v9 ;
889
908
#if defined(CONFIG_DEBUG_FS )
@@ -895,12 +914,14 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,
895
914
mqd -> init_mqd = init_mqd_v9_4_3 ;
896
915
mqd -> load_mqd = load_mqd_v9_4_3 ;
897
916
mqd -> update_mqd = update_mqd_v9_4_3 ;
917
+ mqd -> restore_mqd = restore_mqd_v9_4_3 ;
898
918
mqd -> destroy_mqd = destroy_mqd_v9_4_3 ;
899
919
mqd -> get_wave_state = get_wave_state_v9_4_3 ;
900
920
} else {
901
921
mqd -> init_mqd = init_mqd ;
902
922
mqd -> load_mqd = load_mqd ;
903
923
mqd -> update_mqd = update_mqd ;
924
+ mqd -> restore_mqd = restore_mqd ;
904
925
mqd -> destroy_mqd = kfd_destroy_mqd_cp ;
905
926
mqd -> get_wave_state = get_wave_state ;
906
927
}
0 commit comments