Commit 5e1e89ee authored by Leo Liu's avatar Leo Liu Committed by Alex Deucher
Browse files

drm/amdgpu/vcn: remove JPEG related code from idle handler and begin use



For VCN2.0 and above, VCN has been separated from JPEG

Signed-off-by: default avatarLeo Liu <leo.liu@amd.com>
Reviewed-by: default avatarJames Zhu <James.Zhu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d58ed707
Loading
Loading
Loading
Loading
+5 −23
Original line number Diff line number Diff line
@@ -291,6 +291,7 @@ static void amdgpu_vcn_idle_work_handler(struct work_struct *work)
	for (j = 0; j < adev->vcn.num_vcn_inst; ++j) {
		if (adev->vcn.harvest_config & (1 << j))
			continue;

		for (i = 0; i < adev->vcn.num_enc_rings; ++i) {
			fence[j] += amdgpu_fence_count_emitted(&adev->vcn.inst[j].ring_enc[i]);
		}
@@ -303,24 +304,15 @@ static void amdgpu_vcn_idle_work_handler(struct work_struct *work)
			else
				new_state.fw_based = VCN_DPG_STATE__UNPAUSE;

			if (amdgpu_fence_count_emitted(&adev->jpeg.inst[j].ring_dec))
				new_state.jpeg = VCN_DPG_STATE__PAUSE;
			else
				new_state.jpeg = VCN_DPG_STATE__UNPAUSE;

			adev->vcn.pause_dpg_mode(adev, &new_state);
		}

		fence[j] += amdgpu_fence_count_emitted(&adev->jpeg.inst[j].ring_dec);
		fence[j] += amdgpu_fence_count_emitted(&adev->vcn.inst[j].ring_dec);
		fences += fence[j];
	}

	if (fences == 0) {
		amdgpu_gfx_off_ctrl(adev, true);
		if (adev->asic_type < CHIP_ARCTURUS && adev->pm.dpm_enabled)
			amdgpu_dpm_enable_uvd(adev, false);
		else
		amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN,
		       AMD_PG_STATE_GATE);
	} else {
@@ -335,9 +327,6 @@ void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring)

	if (set_clocks) {
		amdgpu_gfx_off_ctrl(adev, false);
		if (adev->asic_type < CHIP_ARCTURUS && adev->pm.dpm_enabled)
			amdgpu_dpm_enable_uvd(adev, true);
		else
		amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN,
		       AMD_PG_STATE_UNGATE);
	}
@@ -355,15 +344,8 @@ void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring)
		else
			new_state.fw_based = VCN_DPG_STATE__UNPAUSE;

		if (amdgpu_fence_count_emitted(&adev->jpeg.inst[ring->me].ring_dec))
			new_state.jpeg = VCN_DPG_STATE__PAUSE;
		else
			new_state.jpeg = VCN_DPG_STATE__UNPAUSE;

		if (ring->funcs->type == AMDGPU_RING_TYPE_VCN_ENC)
			new_state.fw_based = VCN_DPG_STATE__PAUSE;
		else if (ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG)
			new_state.jpeg = VCN_DPG_STATE__PAUSE;

		adev->vcn.pause_dpg_mode(adev, &new_state);
	}