They are all the same so use a common implementation.
Signed-off-by: Alex Deucher <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 33 +++++++++++++++++-
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h | 6 +++-
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 46 ++-----------------------
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 46 ++-----------------------
4 files changed, 41 insertions(+), 90 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
index aba21afd2b32a..de8c85dfc4c62 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
@@ -377,7 +377,7 @@ int amdgpu_gfx_kiq_init(struct amdgpu_device *adev,
return 0;
}
-void amdgpu_gfx_mqd_reset_restore(struct amdgpu_ring *ring)
+static void amdgpu_gfx_mqd_reset_restore(struct amdgpu_ring *ring)
{
struct amdgpu_device *adev = ring->adev;
int mqd_idx, mqd_size;
@@ -1970,6 +1970,37 @@ static ssize_t amdgpu_gfx_get_compute_reset_mask(struct
device *dev,
return amdgpu_show_reset_mask(buf, adev->gfx.compute_supported_reset);
}
+int amdgpu_gfx_mes_reset_queue(struct amdgpu_ring *ring,
+ unsigned int vmid,
+ struct amdgpu_fence *timedout_fence,
+ bool use_mmio)
+{
+ struct amdgpu_device *adev = ring->adev;
+ int r;
+
+ amdgpu_ring_reset_helper_begin(ring, timedout_fence);
+
+ r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio, 0);
+ if (r)
+ return r;
+
+ if (use_mmio) {
+ r = amdgpu_mes_unmap_legacy_queue(adev, ring,
+ RESET_QUEUES, 0, 0, 0);
+ if (r)
+ return r;
+ amdgpu_gfx_mqd_reset_restore(ring);
+
+ r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
+ if (r) {
+ dev_err(adev->dev, "failed to remap kgq\n");
+ return r;
+ }
+ }
+
+ return amdgpu_ring_reset_helper_end(ring, timedout_fence);
+}
+
static DEVICE_ATTR(run_cleaner_shader, 0200,
NULL, amdgpu_gfx_set_run_cleaner_shader);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
index 22fb90e229dd4..f9175faa64ab7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
@@ -588,7 +588,6 @@ void amdgpu_gfx_kiq_fini(struct amdgpu_device *adev, int
xcc_id);
int amdgpu_gfx_kiq_init(struct amdgpu_device *adev,
unsigned hpd_size, int xcc_id);
-void amdgpu_gfx_mqd_reset_restore(struct amdgpu_ring *ring);
int amdgpu_gfx_mqd_sw_init(struct amdgpu_device *adev,
unsigned mqd_size, int xcc_id);
void amdgpu_gfx_mqd_sw_fini(struct amdgpu_device *adev, int xcc_id);
@@ -669,6 +668,11 @@ void amdgpu_debugfs_compute_sched_mask_init(struct
amdgpu_device *adev);
int amdgpu_gfx_ring_preempt_ib(struct amdgpu_ring *ring);
+int amdgpu_gfx_mes_reset_queue(struct amdgpu_ring *ring,
+ unsigned int vmid,
+ struct amdgpu_fence *timedout_fence,
+ bool use_mmio);
+
static inline const char *amdgpu_gfx_compute_mode_desc(int mode)
{
switch (mode) {
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
index 50d3990a00c30..1a214c274ad02 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -6784,29 +6784,8 @@ static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
{
struct amdgpu_device *adev = ring->adev;
bool use_mmio = adev->gfx.me.use_mmio_for_reset;
- int r;
-
- amdgpu_ring_reset_helper_begin(ring, timedout_fence);
-
- r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio, 0);
- if (r)
- return r;
-
- if (use_mmio) {
- r = amdgpu_mes_unmap_legacy_queue(adev, ring,
- RESET_QUEUES, 0, 0, 0);
- if (r)
- return r;
- amdgpu_gfx_mqd_reset_restore(ring);
-
- r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
- if (r) {
- dev_err(adev->dev, "failed to remap kgq\n");
- return r;
- }
- }
- return amdgpu_ring_reset_helper_end(ring, timedout_fence);
+ return amdgpu_gfx_mes_reset_queue(ring, vmid, timedout_fence, use_mmio);
}
static int gfx_v11_0_reset_kcq(struct amdgpu_ring *ring,
@@ -6815,29 +6794,8 @@ static int gfx_v11_0_reset_kcq(struct amdgpu_ring *ring,
{
struct amdgpu_device *adev = ring->adev;
bool use_mmio = adev->gfx.mec.use_mmio_for_reset;
- int r = 0;
-
- amdgpu_ring_reset_helper_begin(ring, timedout_fence);
-
- r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio, 0);
- if (r)
- return r;
-
- if (use_mmio) {
- r = amdgpu_mes_unmap_legacy_queue(adev, ring,
- RESET_QUEUES, 0, 0, 0);
- if (r)
- return r;
- amdgpu_gfx_mqd_reset_restore(ring);
-
- r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
- if (r) {
- dev_err(adev->dev, "failed to remap kcq\n");
- return r;
- }
- }
- return amdgpu_ring_reset_helper_end(ring, timedout_fence);
+ return amdgpu_gfx_mes_reset_queue(ring, vmid, timedout_fence, use_mmio);
}
static void gfx_v11_ip_print(struct amdgpu_ip_block *ip_block, struct
drm_printer *p)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
index 03b1fcc046552..5beb0ae980d0b 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
@@ -5220,29 +5220,8 @@ static int gfx_v12_0_reset_kgq(struct amdgpu_ring *ring,
{
struct amdgpu_device *adev = ring->adev;
bool use_mmio = adev->gfx.me.use_mmio_for_reset;
- int r;
-
- amdgpu_ring_reset_helper_begin(ring, timedout_fence);
-
- r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio, 0);
- if (r)
- return r;
-
- if (use_mmio) {
- r = amdgpu_mes_unmap_legacy_queue(adev, ring,
- RESET_QUEUES, 0, 0, 0);
- if (r)
- return r;
- amdgpu_gfx_mqd_reset_restore(ring);
-
- r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
- if (r) {
- dev_err(adev->dev, "failed to remap kgq\n");
- return r;
- }
- }
- return amdgpu_ring_reset_helper_end(ring, timedout_fence);
+ return amdgpu_gfx_mes_reset_queue(ring, vmid, timedout_fence, use_mmio);
}
static int gfx_v12_0_reset_kcq(struct amdgpu_ring *ring,
@@ -5251,29 +5230,8 @@ static int gfx_v12_0_reset_kcq(struct amdgpu_ring *ring,
{
struct amdgpu_device *adev = ring->adev;
bool use_mmio = adev->gfx.mec.use_mmio_for_reset;
- int r;
-
- amdgpu_ring_reset_helper_begin(ring, timedout_fence);
-
- r = amdgpu_mes_reset_legacy_queue(ring->adev, ring, vmid, use_mmio, 0);
- if (r)
- return r;
-
- if (use_mmio) {
- r = amdgpu_mes_unmap_legacy_queue(adev, ring,
- RESET_QUEUES, 0, 0, 0);
- if (r)
- return r;
- amdgpu_gfx_mqd_reset_restore(ring);
-
- r = amdgpu_mes_map_legacy_queue(adev, ring, 0);
- if (r) {
- dev_err(adev->dev, "failed to remap kcq\n");
- return r;
- }
- }
- return amdgpu_ring_reset_helper_end(ring, timedout_fence);
+ return amdgpu_gfx_mes_reset_queue(ring, vmid, timedout_fence, use_mmio);
}
static void gfx_v12_0_ring_begin_use(struct amdgpu_ring *ring)
--
2.54.0