This is used to store the state of the ring in the job prior to submission. On re-emit after a reset, the state is restored so that the re-emitted jobs from the state at that point in time.
Signed-off-by: Alex Deucher <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 3 +++ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 16 ++++++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h index 72d50602a8e52..c8c9a80bb7c19 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h @@ -109,6 +109,9 @@ struct amdgpu_job { bool cleaner_shader_needed; bool pasid_mapping_needed; bool emit_vm_fence; + unsigned int set_q_mode_offs; + u32 *set_q_mode_ptr; + u64 set_q_mode_token; uint32_t num_ibs; struct amdgpu_ib ibs[]; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index 2a53991eafd7f..0065ac0fb1e52 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c @@ -926,3 +926,19 @@ bool amdgpu_ring_is_reset_type_supported(struct amdgpu_ring *ring, } return false; } + +void amdgpu_ring_save_state(struct amdgpu_ring *ring, + struct amdgpu_job *job) +{ + job->set_q_mode_offs = ring->set_q_mode_offs; + job->set_q_mode_ptr = ring->set_q_mode_ptr; + job->set_q_mode_token = ring->set_q_mode_token; +} + +void amdgpu_ring_restore_state(struct amdgpu_ring *ring, + struct amdgpu_job *job) +{ + ring->set_q_mode_offs = job->set_q_mode_offs; + ring->set_q_mode_ptr = job->set_q_mode_ptr; + ring->set_q_mode_token = job->set_q_mode_token; +} diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 63272425a12f6..340d4f6b87a93 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h @@ -586,4 +586,8 @@ int amdgpu_ring_reset_helper_end(struct amdgpu_ring *ring, struct amdgpu_fence *guilty_fence); bool amdgpu_ring_is_reset_type_supported(struct amdgpu_ring *ring, u32 reset_type); +void amdgpu_ring_save_state(struct amdgpu_ring *ring, + struct amdgpu_job *job); +void amdgpu_ring_restore_state(struct amdgpu_ring *ring, + struct amdgpu_job *job); #endif -- 2.52.0
