Commit b593ea94 authored by Jocelyn Falempe's avatar Jocelyn Falempe

drm/mgag200: Add an option to disable Write-Combine

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: default avatarJocelyn Falempe <jfalempe@redhat.com>
Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20240517151050.624797-3-jfalempe@redhat.com
parent e7f67d03
...@@ -11,3 +11,13 @@ config DRM_MGAG200 ...@@ -11,3 +11,13 @@ config DRM_MGAG200
MGA G200 desktop chips and the server variants. It requires 0.3.0 MGA G200 desktop chips and the server variants. It requires 0.3.0
of the modesetting userspace driver, and a version of mga driver of the modesetting userspace driver, and a version of mga driver
that will fail on KMS enabled devices. 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
...@@ -146,12 +146,18 @@ int mgag200_device_preinit(struct mga_device *mdev) ...@@ -146,12 +146,18 @@ int mgag200_device_preinit(struct mga_device *mdev)
} }
mdev->vram_res = res; 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)); mdev->vram = devm_ioremap_wc(dev->dev, res->start, resource_size(res));
if (!mdev->vram) if (!mdev->vram)
return -ENOMEM; return -ENOMEM;
/* Don't fail on errors, but performance might be reduced. */ /* Don't fail on errors, but performance might be reduced. */
devm_arch_phys_wc_add(dev->dev, res->start, resource_size(res)); devm_arch_phys_wc_add(dev->dev, res->start, resource_size(res));
#endif
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment