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

drm/amdgpu: share scheduler score on VCN3 instances

The VCN3 instances can do both decode as well as encode.

Share the scheduler load balancing score and remove fixing encode to
only the second instance.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-and-Tested-by: Leo Liu <leo.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Christian König and committed by
Alex Deucher
c62dfdbb c107171b

+8 -4
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
··· 212 212 void *saved_bo; 213 213 struct amdgpu_ring ring_dec; 214 214 struct amdgpu_ring ring_enc[AMDGPU_VCN_MAX_ENC_RINGS]; 215 + atomic_t sched_score; 215 216 struct amdgpu_irq_src irq; 216 217 struct amdgpu_vcn_reg external; 217 218 struct amdgpu_bo *dpg_sram_bo;
+7 -4
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
··· 171 171 172 172 for (i = 0; i < adev->vcn.num_vcn_inst; i++) { 173 173 volatile struct amdgpu_fw_shared *fw_shared; 174 + 174 175 if (adev->vcn.harvest_config & (1 << i)) 175 176 continue; 176 177 ··· 199 198 if (r) 200 199 return r; 201 200 201 + atomic_set(&adev->vcn.inst[i].sched_score, 0); 202 + 202 203 ring = &adev->vcn.inst[i].ring_dec; 203 204 ring->use_doorbell = true; 204 205 if (amdgpu_sriov_vf(adev)) { ··· 212 209 ring->no_scheduler = true; 213 210 sprintf(ring->name, "vcn_dec_%d", i); 214 211 r = amdgpu_ring_init(adev, ring, 512, &adev->vcn.inst[i].irq, 0, 215 - AMDGPU_RING_PRIO_DEFAULT, NULL); 212 + AMDGPU_RING_PRIO_DEFAULT, 213 + &adev->vcn.inst[i].sched_score); 216 214 if (r) 217 215 return r; 218 216 ··· 231 227 } else { 232 228 ring->doorbell_index = (adev->doorbell_index.vcn.vcn_ring0_1 << 1) + 2 + j + 8 * i; 233 229 } 234 - if (adev->asic_type == CHIP_SIENNA_CICHLID && i != 1) 235 - ring->no_scheduler = true; 236 230 sprintf(ring->name, "vcn_enc_%d.%d", i, j); 237 231 r = amdgpu_ring_init(adev, ring, 512, &adev->vcn.inst[i].irq, 0, 238 - AMDGPU_RING_PRIO_DEFAULT, NULL); 232 + AMDGPU_RING_PRIO_DEFAULT, 233 + &adev->vcn.inst[i].sched_score); 239 234 if (r) 240 235 return r; 241 236 }