Re: [PATCH v2 2/2] drm/mgag200: Add an option to disable Write-Combine

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

 





On 17/05/2024 17:16, Thomas Zimmermann wrote:
Hi

Am 17.05.24 um 17:09 schrieb Jocelyn Falempe:
Unfortunately, the G200 ioburst workaround doesn't work on some
servers like Dell poweredge XR11, XR5610, or HPE XL260. In this case
completely disabling WC is the only option to achieve low-latency.
So this adds a new Kconfig option to disable WC mapping of the G200.

Signed-off-by: Jocelyn Falempe <jfalempe@xxxxxxxxxx>

Reviewed-by: Thomas Zimmermann <tzimmermann@xxxxxxx>

Thanks a lot for the fix.

Thanks for the review, I just merged it to drm-misc-next.


Best regards
Thomas

---
  drivers/gpu/drm/mgag200/Kconfig       | 10 ++++++++++
  drivers/gpu/drm/mgag200/mgag200_drv.c |  6 ++++++
  2 files changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/mgag200/Kconfig b/drivers/gpu/drm/mgag200/Kconfig
index b28c5e4828f47..3096944a8f0ab 100644
--- a/drivers/gpu/drm/mgag200/Kconfig
+++ b/drivers/gpu/drm/mgag200/Kconfig
@@ -11,3 +11,13 @@ config DRM_MGAG200
       MGA G200 desktop chips and the server variants. It requires 0.3.0
       of the modesetting userspace driver, and a version of mga driver
       that will fail on KMS enabled devices.
+
+config DRM_MGAG200_DISABLE_WRITECOMBINE
+    bool "Disable Write Combine mapping of VRAM"
+    depends on DRM_MGAG200 && PREEMPT_RT
+    help
+      The VRAM of the G200 is mapped with Write-Combine to improve
+      performances. This can interfere with real-time tasks; even if they
+      are running on other CPU cores than the graphics output.
+      Enable this option only if you run realtime tasks on a server with a
+      Matrox G200.
\ No newline at end of file
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
index 3883f25ca4d8b..62080cf0f2da4 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -146,12 +146,18 @@ int mgag200_device_preinit(struct mga_device *mdev)
      }
      mdev->vram_res = res;
+#if defined(CONFIG_DRM_MGAG200_DISABLE_WRITECOMBINE)
+    mdev->vram = devm_ioremap(dev->dev, res->start, resource_size(res));
+    if (!mdev->vram)
+        return -ENOMEM;
+#else
      mdev->vram = devm_ioremap_wc(dev->dev, res->start, resource_size(res));
      if (!mdev->vram)
          return -ENOMEM;
      /* Don't fail on errors, but performance might be reduced. */
      devm_arch_phys_wc_add(dev->dev, res->start, resource_size(res));
+#endif
      return 0;
  }





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux