Re: [PATCH] drm/amdgpu: Don't flush HDP on A+A

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 31.05.21 um 17:51 schrieb Eric Huang:
With XGMI connection flushing HDP on PCIe is unnecessary,
it is also to optimize memory allocation latency.

Well that's closer to what I had in mind, but not 100% correct.

See the code in amdgpu_ib_schedule() as well:

#ifdef CONFIG_X86_64
        if (!(adev->flags & AMD_IS_APU))
#endif
        {
                if (ring->funcs->emit_hdp_flush)
                        amdgpu_ring_emit_hdp_flush(ring);
                else
                        amdgpu_asic_flush_hdp(adev, ring);
        }

I suggest to unify the code here as well.

And in general stuff like that should be in the common code, so that we can have the same handling independent of the hardware generation.

Christian.


Signed-off-by: Eric Huang <jinhuieric.huang@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.h | 1 +
  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c   | 1 +
  drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c   | 3 +++
  3 files changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.h
index 7ec99d591584..1ca23f2f51d2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.h
@@ -44,6 +44,7 @@ struct amdgpu_hdp {
  	struct ras_common_if			*ras_if;
  	const struct amdgpu_hdp_funcs		*funcs;
  	const struct amdgpu_hdp_ras_funcs	*ras_funcs;
+	bool	no_flush;
  };
int amdgpu_hdp_ras_late_init(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 2749621d5f63..6e1eab615914 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -1223,6 +1223,7 @@ static int gmc_v9_0_early_init(void *handle)
  		adev->gmc.xgmi.supported = true;
  		adev->gmc.xgmi.connected_to_cpu =
  			adev->smuio.funcs->is_host_gpu_xgmi_supported(adev);
+		adev->hdp.no_flush = adev->gmc.xgmi.connected_to_cpu;
  	}
gmc_v9_0_set_gmc_funcs(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c b/drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c
index 74b90cc2bf48..e1b2face8656 100644
--- a/drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c
@@ -40,6 +40,9 @@
  static void hdp_v4_0_flush_hdp(struct amdgpu_device *adev,
  				struct amdgpu_ring *ring)
  {
+	if (adev->hdp.no_flush)
+		return;
+
  	if (!ring || !ring->funcs->emit_wreg)
  		WREG32_NO_KIQ((adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2, 0);
  	else

_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux