Skip to content

Commit 68a2afb

Browse files
Lang Yualexdeucher
Lang Yu
authored andcommitted
drm/amdgpu: enable UMSCH 4.0.6
Share same codes with 4.0.5 and enable collaborate mode for VPE. Signed-off-by: Lang Yu <[email protected]> Reviewed-by: Veerabadhran Gopalakrishnan <[email protected]> Acked-by: Alex Deucher <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 6b154c0 commit 68a2afb

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2237,6 +2237,7 @@ static int amdgpu_discovery_set_umsch_mm_ip_blocks(struct amdgpu_device *adev)
22372237
{
22382238
switch (amdgpu_ip_version(adev, VCN_HWIP, 0)) {
22392239
case IP_VERSION(4, 0, 5):
2240+
case IP_VERSION(4, 0, 6):
22402241
if (amdgpu_umsch_mm & 0x1) {
22412242
amdgpu_device_ip_block_add(adev, &umsch_mm_v4_0_ip_block);
22422243
adev->enable_umsch_mm = true;

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,13 @@ static void setup_vpe_queue(struct amdgpu_device *adev,
189189
mqd->rptr_val = 0;
190190
mqd->unmapped = 1;
191191

192+
if (adev->vpe.collaborate_mode)
193+
memcpy(++mqd, test->mqd_data_cpu_addr, sizeof(struct MQD_INFO));
194+
192195
qinfo->mqd_addr = test->mqd_data_gpu_addr;
193196
qinfo->csa_addr = test->ctx_data_gpu_addr +
194197
offsetof(struct umsch_mm_test_ctx_data, vpe_ctx_csa);
195-
qinfo->doorbell_offset_0 = (adev->doorbell_index.vpe_ring + 1) << 1;
198+
qinfo->doorbell_offset_0 = 0;
196199
qinfo->doorbell_offset_1 = 0;
197200
}
198201

@@ -287,7 +290,10 @@ static int submit_vpe_queue(struct amdgpu_device *adev, struct umsch_mm_test *te
287290
ring[5] = 0;
288291

289292
mqd->wptr_val = (6 << 2);
290-
// WDOORBELL32(adev->umsch_mm.agdb_index[CONTEXT_PRIORITY_LEVEL_NORMAL], mqd->wptr_val);
293+
if (adev->vpe.collaborate_mode)
294+
(++mqd)->wptr_val = (6 << 2);
295+
296+
WDOORBELL32(adev->umsch_mm.agdb_index[CONTEXT_PRIORITY_LEVEL_NORMAL], mqd->wptr_val);
291297

292298
for (i = 0; i < adev->usec_timeout; i++) {
293299
if (*fence == test_pattern)
@@ -571,6 +577,7 @@ int amdgpu_umsch_mm_init_microcode(struct amdgpu_umsch_mm *umsch)
571577

572578
switch (amdgpu_ip_version(adev, VCN_HWIP, 0)) {
573579
case IP_VERSION(4, 0, 5):
580+
case IP_VERSION(4, 0, 6):
574581
fw_name = "amdgpu/umsch_mm_4_0_0.bin";
575582
break;
576583
default:
@@ -750,6 +757,7 @@ static int umsch_mm_early_init(void *handle)
750757

751758
switch (amdgpu_ip_version(adev, VCN_HWIP, 0)) {
752759
case IP_VERSION(4, 0, 5):
760+
case IP_VERSION(4, 0, 6):
753761
umsch_mm_v4_0_set_funcs(&adev->umsch_mm);
754762
break;
755763
default:

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static int umsch_mm_v4_0_load_microcode(struct amdgpu_umsch_mm *umsch)
6060

6161
umsch->cmd_buf_curr_ptr = umsch->cmd_buf_ptr;
6262

63-
if (amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(4, 0, 5)) {
63+
if (amdgpu_ip_version(adev, VCN_HWIP, 0) >= IP_VERSION(4, 0, 5)) {
6464
WREG32_SOC15(VCN, 0, regUVD_IPX_DLDO_CONFIG,
6565
1 << UVD_IPX_DLDO_CONFIG__ONO0_PWR_CONFIG__SHIFT);
6666
SOC15_WAIT_ON_RREG(VCN, 0, regUVD_IPX_DLDO_STATUS,
@@ -248,7 +248,7 @@ static int umsch_mm_v4_0_ring_stop(struct amdgpu_umsch_mm *umsch)
248248
data = REG_SET_FIELD(data, VCN_UMSCH_RB_DB_CTRL, EN, 0);
249249
WREG32_SOC15(VCN, 0, regVCN_UMSCH_RB_DB_CTRL, data);
250250

251-
if (amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(4, 0, 5)) {
251+
if (amdgpu_ip_version(adev, VCN_HWIP, 0) >= IP_VERSION(4, 0, 5)) {
252252
WREG32_SOC15(VCN, 0, regUVD_IPX_DLDO_CONFIG,
253253
2 << UVD_IPX_DLDO_CONFIG__ONO0_PWR_CONFIG__SHIFT);
254254
SOC15_WAIT_ON_RREG(VCN, 0, regUVD_IPX_DLDO_STATUS,
@@ -271,6 +271,8 @@ static int umsch_mm_v4_0_set_hw_resources(struct amdgpu_umsch_mm *umsch)
271271

272272
set_hw_resources.vmid_mask_mm_vcn = umsch->vmid_mask_mm_vcn;
273273
set_hw_resources.vmid_mask_mm_vpe = umsch->vmid_mask_mm_vpe;
274+
set_hw_resources.collaboration_mask_vpe =
275+
adev->vpe.collaborate_mode ? 0x3 : 0x0;
274276
set_hw_resources.engine_mask = umsch->engine_mask;
275277

276278
set_hw_resources.vcn0_hqd_mask[0] = umsch->vcn0_hqd_mask;
@@ -346,6 +348,7 @@ static int umsch_mm_v4_0_add_queue(struct amdgpu_umsch_mm *umsch,
346348
add_queue.h_queue = input_ptr->h_queue;
347349
add_queue.vm_context_cntl = input_ptr->vm_context_cntl;
348350
add_queue.is_context_suspended = input_ptr->is_context_suspended;
351+
add_queue.collaboration_mode = adev->vpe.collaborate_mode ? 1 : 0;
349352

350353
add_queue.api_status.api_completion_fence_addr = umsch->ring.fence_drv.gpu_addr;
351354
add_queue.api_status.api_completion_fence_value = ++umsch->ring.fence_drv.sync_seq;

0 commit comments

Comments
 (0)