Skip to content

Commit 2da3af5

Browse files
EmilyDeng666alexdeucher
authored andcommitted
drm/amdgpu: set CP_HQD_PQ_DOORBELL_CONTROL.DOORBELL_MODE to 1 for sriov multiple vf.
In sriov multiple vf, Set CP_HQD_PQ_DOORBELL_CONTROL.DOORBELL_MODE to 1 to read WPTR from MQD. Signed-off-by: Emily Deng <Emily.Deng@amd.com> Acked-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 8d5e70b commit 2da3af5

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1821,7 +1821,7 @@ static int gfx_v9_4_3_xcc_mqd_init(struct amdgpu_ring *ring, int xcc_id)
18211821
DOORBELL_SOURCE, 0);
18221822
tmp = REG_SET_FIELD(tmp, CP_HQD_PQ_DOORBELL_CONTROL,
18231823
DOORBELL_HIT, 0);
1824-
if (amdgpu_sriov_vf(adev))
1824+
if (amdgpu_sriov_multi_vf_mode(adev))
18251825
tmp = REG_SET_FIELD(tmp, CP_HQD_PQ_DOORBELL_CONTROL,
18261826
DOORBELL_MODE, 1);
18271827
} else {

drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ static void init_mqd_hiq_v9_4_3(struct mqd_manager *mm, void **mqd,
554554
m->cp_hqd_pq_control |= CP_HQD_PQ_CONTROL__NO_UPDATE_RPTR_MASK |
555555
1 << CP_HQD_PQ_CONTROL__PRIV_STATE__SHIFT |
556556
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))
558558
m->cp_hqd_pq_doorbell_control |= 1 <<
559559
CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_MODE__SHIFT;
560560
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,
667667
get_xcc_mqd(mqd_mem_obj, &xcc_mqd_mem_obj, offset*xcc);
668668

669669
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;
671673
m->cp_mqd_stride_size = offset;
672674

673675
/*
@@ -727,6 +729,9 @@ static void update_mqd_v9_4_3(struct mqd_manager *mm, void *mqd,
727729
m = get_mqd(mqd + size * xcc);
728730
update_mqd(mm, m, q, minfo);
729731

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;
730735
update_cu_mask(mm, m, minfo, xcc);
731736

732737
if (q->format == KFD_QUEUE_FORMAT_AQL) {
@@ -749,6 +754,21 @@ static void update_mqd_v9_4_3(struct mqd_manager *mm, void *mqd,
749754
}
750755
}
751756

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+
}
752772
static int destroy_mqd_v9_4_3(struct mqd_manager *mm, void *mqd,
753773
enum kfd_preempt_type type, unsigned int timeout,
754774
uint32_t pipe_id, uint32_t queue_id)
@@ -883,7 +903,6 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,
883903
mqd->is_occupied = kfd_is_occupied_cp;
884904
mqd->get_checkpoint_info = get_checkpoint_info;
885905
mqd->checkpoint_mqd = checkpoint_mqd;
886-
mqd->restore_mqd = restore_mqd;
887906
mqd->mqd_size = sizeof(struct v9_mqd);
888907
mqd->mqd_stride = mqd_stride_v9;
889908
#if defined(CONFIG_DEBUG_FS)
@@ -895,12 +914,14 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,
895914
mqd->init_mqd = init_mqd_v9_4_3;
896915
mqd->load_mqd = load_mqd_v9_4_3;
897916
mqd->update_mqd = update_mqd_v9_4_3;
917+
mqd->restore_mqd = restore_mqd_v9_4_3;
898918
mqd->destroy_mqd = destroy_mqd_v9_4_3;
899919
mqd->get_wave_state = get_wave_state_v9_4_3;
900920
} else {
901921
mqd->init_mqd = init_mqd;
902922
mqd->load_mqd = load_mqd;
903923
mqd->update_mqd = update_mqd;
924+
mqd->restore_mqd = restore_mqd;
904925
mqd->destroy_mqd = kfd_destroy_mqd_cp;
905926
mqd->get_wave_state = get_wave_state;
906927
}

0 commit comments

Comments
 (0)