Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu: adjust xcc_id program logic for sdma v7_1

Adjust program logic for sdam v7_1, only use physical xcc_id
when program register to support compute partition.

Signed-off-by: Likun Gao <Likun.Gao@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Likun Gao and committed by
Alex Deucher
05282873 98320bf3

+11 -8
+11 -8
drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c
··· 369 369 u32 rb_cntl, ib_cntl; 370 370 int i; 371 371 372 - for (i = 0; i < NUM_XCC(inst_mask); i++) { 372 + for_each_inst(i, inst_mask) { 373 373 rb_cntl = RREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i, regSDMA0_SDMA_QUEUE0_RB_CNTL)); 374 374 rb_cntl = REG_SET_FIELD(rb_cntl, SDMA0_SDMA_QUEUE0_RB_CNTL, RB_ENABLE, 0); 375 375 WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i, regSDMA0_SDMA_QUEUE0_RB_CNTL), rb_cntl); ··· 436 436 if (amdgpu_sriov_vf(adev)) 437 437 return; 438 438 439 - for (i = 0; i < NUM_XCC(inst_mask); i++) { 439 + for_each_inst(i, inst_mask) { 440 440 mcu_cntl = RREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i, regSDMA0_SDMA_MCU_CNTL)); 441 441 mcu_cntl = REG_SET_FIELD(mcu_cntl, SDMA0_SDMA_MCU_CNTL, HALT, enable ? 0 : 1); 442 442 WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i, regSDMA0_SDMA_MCU_CNTL), mcu_cntl); ··· 617 617 { 618 618 int i, r; 619 619 620 - for (i = 0; i < NUM_XCC(inst_mask); i++) { 620 + for_each_inst(i, inst_mask) { 621 621 r = sdma_v7_1_gfx_resume_instance(adev, i, false); 622 622 if (r) 623 623 return r; ··· 647 647 { 648 648 int i; 649 649 650 - for (i = 0; i < NUM_XCC(inst_mask); i++) { 650 + for_each_inst(i, inst_mask) { 651 651 amdgpu_bo_free_kernel(&adev->sdma.instance[i].sdma_fw_obj, 652 652 &adev->sdma.instance[i].sdma_fw_gpu_addr, 653 653 (void **)&adev->sdma.instance[i].sdma_fw_ptr); ··· 686 686 le32_to_cpu(hdr->ucode_offset_bytes)); 687 687 fw_size = le32_to_cpu(hdr->ucode_size_bytes); 688 688 689 - for (i = 0; i < NUM_XCC(inst_mask); i++) { 689 + for_each_inst(i, inst_mask) { 690 690 r = amdgpu_bo_create_reserved(adev, fw_size, 691 691 PAGE_SIZE, 692 692 AMDGPU_GEM_DOMAIN_VRAM, ··· 744 744 u32 tmp; 745 745 int i; 746 746 747 - inst_mask = adev->sdma.sdma_mask; 747 + inst_mask = GENMASK(NUM_XCC(adev->sdma.sdma_mask) - 1, 0); 748 748 sdma_v7_1_inst_gfx_stop(adev, inst_mask); 749 749 750 - for (i = 0; i < NUM_XCC(inst_mask); i++) { 750 + for_each_inst(i, inst_mask) { 751 751 //tmp = RREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i, regSDMA0_SDMA_FREEZE)); 752 752 //tmp |= SDMA0_SDMA_FREEZE__FREEZE_MASK; 753 753 //WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i, regSDMA0_SDMA_FREEZE), tmp); ··· 1357 1357 static int sdma_v7_1_hw_init(struct amdgpu_ip_block *ip_block) 1358 1358 { 1359 1359 struct amdgpu_device *adev = ip_block->adev; 1360 + uint32_t inst_mask; 1360 1361 1361 - return sdma_v7_1_inst_start(adev, adev->sdma.sdma_mask); 1362 + inst_mask = GENMASK(adev->sdma.num_instances - 1, 0); 1363 + 1364 + return sdma_v7_1_inst_start(adev, inst_mask); 1362 1365 } 1363 1366 1364 1367 static int sdma_v7_1_hw_fini(struct amdgpu_ip_block *ip_block)