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

Reply via email to